On 04/05/2018 05:44 AM, Kamil Dudka wrote:
Does this change (intentionally?) enable leaf optimization for CIFS?

No, I wasn't thinking about CIFS when I wrote that. Thanks for reporting it. I installed the attached to try to fix this. I have not tested it with CIFS.

>From 900451bc165c6747a827c1458b8763f61775f2e6 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Thu, 5 Apr 2018 08:48:01 -0700
Subject: [PATCH] fts: treat CIFS like NFS

Problem reported by Kamil Dudka in:
https://lists.gnu.org/r/bug-gnulib/2018-04/msg00015.html
* lib/fts.c (S_MAGIC_CIFS): New macro.
(dirent_inode_sort_may_be_useful, leaf_optimization):
Treat CIFS like NFS.
---
 ChangeLog | 9 +++++++++
 lib/fts.c | 8 +++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 769fa380d..6d8670803 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2018-04-05  Paul Eggert  <egg...@cs.ucla.edu>
+
+	fts: treat CIFS like NFS
+	Problem reported by Kamil Dudka in:
+	https://lists.gnu.org/r/bug-gnulib/2018-04/msg00015.html
+	* lib/fts.c (S_MAGIC_CIFS): New macro.
+	(dirent_inode_sort_may_be_useful, leaf_optimization):
+	Treat CIFS like NFS.
+
 2018-03-28  Bruno Haible  <br...@clisp.org>
 
 	c-stack: Fix possible build failure on some platforms.
diff --git a/lib/fts.c b/lib/fts.c
index bfa73e31e..3814e58fc 100644
--- a/lib/fts.c
+++ b/lib/fts.c
@@ -685,6 +685,7 @@ enum leaf_optimization
 
 /* Linux-specific constants from coreutils' src/fs.h */
 # define S_MAGIC_AFS 0x5346414F
+# define S_MAGIC_CIFS 0xFF534D42
 # define S_MAGIC_NFS 0x6969
 # define S_MAGIC_PROC 0x9FA0
 # define S_MAGIC_REISERFS 0x52654973
@@ -792,8 +793,9 @@ dirent_inode_sort_may_be_useful (FTSENT const *p)
 
   switch (filesystem_type (p))
     {
-    case S_MAGIC_TMPFS:
+    case S_MAGIC_CIFS:
     case S_MAGIC_NFS:
+    case S_MAGIC_TMPFS:
       /* On a file system of any of these types, sorting
          is unnecessary, and hence wasteful.  */
       return false;
@@ -827,6 +829,10 @@ leaf_optimization (FTSENT const *p)
       /* Although AFS mount points are not counted in st_nlink, they
          act like directories.  See <https://bugs.debian.org/143111>.  */
       FALLTHROUGH;
+    case S_MAGIC_CIFS:
+      /* Leaf optimization causes 'find' to abort.  See
+         <https://lists.gnu.org/r/bug-gnulib/2018-04/msg00015.html>.  */
+      FALLTHROUGH;
     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>
-- 
2.14.3

Reply via email to