[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #54913] find: "-type"-test wrong on bind-mounted char device

From: Bernhard Voelker
Subject: [bug #54913] find: "-type"-test wrong on bind-mounted char device
Date: Thu, 1 Nov 2018 15:01:07 -0400 (EDT)
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0

Follow-up Comment #4, bug #54913 (project findutils):

What a pity: that code - to use the D_TYPE returned from gnulib's FTS - has
been added to avoid an extra stat() when getdents() already returns it:

[adding Jim as the patch author]

The fix would be to undo this:

--- a/find/ftsfind.c
+++ b/find/ftsfind.c
@@ -579,8 +579,9 @@ find (char *arg)
          state.already_issued_stat_error_msg = false;
          state.have_stat = false;
-         state.have_type = !!ent->fts_statp->st_mode;
-         state.type = state.have_type ? ent->fts_statp->st_mode : 0;
+         state.have_type = false;
+         state.type = 0;
          consider_visiting (p, ent);
       /* fts_read returned NULL; distinguish between "finished" and "error".

... but to the cost of performance again, because FTS usually returns
FTS_NSOK for all non-directory files (see "find -D search").
E.g. on NFS, that extra stat() would be quite slow ... and only needed
for that quite special and therefore seldom case of bind-mounts.

The only alternative I can currently think of is to check the mountlist
for the given ent->fts_path before not taking over the FTS information.

Any other idea to avoid the performance punishment?


Reply to this item at:


  Message sent via Savannah

reply via email to

[Prev in Thread] Current Thread [Next in Thread]