fts: introduce FTS_NOATIME
authorEric Blake <eblake@redhat.com>
Thu, 7 Jul 2011 17:37:37 +0000 (11:37 -0600)
committerEric Blake <eblake@redhat.com>
Fri, 8 Jul 2011 17:15:45 +0000 (11:15 -0600)
commitda4d6974013c822af1498941e32db774b2031765
treea7d0f7908032a7edb03db34cacefa9a0fa838865
parent23a17dd5f7f94937da914926725bf3ddab83291f
fts: introduce FTS_NOATIME

This gives clients the option to try a non-invasive traversal,
where merely visiting a directory does not update its timestamp,
where such is supported by the kernel.

Note that this is best-effort.  FTS_NOATIME is silently ignored
on systems that lack O_NOATIME support - it is up to the caller
to decide whether to issue an error when the gnulib replacement
<fcntl.h> defined O_NOATIME to 0, and/or detect older Linux
kernels where O_NOATIME is defined to non-zero but has no effect.

Note that whiteout support and O_NOATIME support are currently
orthogonal: there is no way to get O_NOATIME behavior when using
__opendir2 to visit whiteouts on BSD systems.  So far, I don't
know of any system with both __opendir2 and O_NOATIME; if such
a system exists, then fts_build() needs a tweak (then again,
such a system would probably add DTF_NOATIME for __opendir2).

* lib/fts_.h (FTS_NOATIME): New bit flag.
(FTS_OPTIONMASK): Adjust.
* lib/fts.c (diropen, fts_open, fts_build): Honor it.
(fd_ring_check): Debug code unconditionally uses O_NOATIME.
Needed for findutils bug http://savannah.gnu.org/bugs/?33724

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
lib/fts.c
lib/fts_.h