]> Savannah Git Hosting - gnulib.git/commitdiff
fts: don't unconditionally use leaf optimization for NFS
authorPádraig Brady <P@draigBrady.com>
Mon, 18 Jan 2016 17:29:28 +0000 (17:29 +0000)
committerPádraig Brady <P@draigBrady.com>
Mon, 18 Jan 2016 17:32:43 +0000 (17:32 +0000)
NFS st_nlink are not accurate on all implementations,
leading to aborts() if that assumption is made.
See <https://bugzilla.redhat.com/1299169>
* lib/fts.c (leaf_optimization_applies): Remove NFS from
the white list, and document the issue.

ChangeLog
lib/fts.c

index 80d496e38c2b91ab161c8e0c1b096bb24357fde6..fac13e6b74ca0c079385642fe71621ed86a943f5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2016-01-18  Pádraig Brady  <P@draigBrady.com>
+
+       fts: don't unconditionally use leaf optimization for NFS
+       NFS st_nlink are not accurate on all implementations,
+       leading to aborts() if that assumption is made.
+       See <https://bugzilla.redhat.com/1299169>
+       * lib/fts.c (leaf_optimization_applies): Remove NFS from
+       the white list, and document the issue.
+
 2016-01-15  Paul Eggert  <eggert@cs.ucla.edu>
             KO Myung-Hun  <komh@chollian.net>
 
index 7e9aca647bae27a1cfbe716b763d887d4d9c85bb..2c9df2fb88792ba824befcc51d8996236e2021a5 100644 (file)
--- a/lib/fts.c
+++ b/lib/fts.c
@@ -718,22 +718,23 @@ leaf_optimization_applies (int dir_fd)
 
   switch (fs_buf.f_type)
     {
-    case S_MAGIC_NFS:
-      /* NFS provides usable dirent.d_type but not necessarily for all entries
-         of large directories.  See <https://bugzilla.redhat.com/1252549>.  */
-      return true;
-
       /* List here the file system types that lack usable dirent.d_type
          info, yet for which the optimization does apply.  */
     case S_MAGIC_REISERFS:
     case S_MAGIC_XFS:
       return true;
 
+      /* Explicitly list here any other file system type for which the
+         optimization is not applicable, but need documentation.  */
+    case S_MAGIC_NFS:
+      /* NFS provides usable dirent.d_type but not necessarily for all entries
+         of large directories, so as per <https://bugzilla.redhat.com/1252549>
+         NFS should return true.  However st_nlink values are not accurate on
+         all implementations as per <https://bugzilla.redhat.com/1299169>.  */
+      /* fall through */
     case S_MAGIC_PROC:
-      /* Explicitly listing this or any other file system type for which
-         the optimization is not applicable is not necessary, but we leave
-         it here to document the risk.  Per http://bugs.debian.org/143111,
-         /proc may have bogus stat.st_nlink values.  */
+      /* Per <http://bugs.debian.org/143111> /proc may have
+         bogus stat.st_nlink values.  */
       /* fall through */
     default:
       return false;