[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#12730: bug #12730: patch attached
From: |
Jim Meyering |
Subject: |
bug#12730: bug #12730: patch attached |
Date: |
Mon, 05 Nov 2012 02:01:53 +0100 |
Andrew Warshall wrote:
>> If we went that route, we'd change how me_dummy is set so that it
>> takes account of your case. For example, we might add a boolean
>> "is_bind_mount" parameter to ME_DUMMY macro, so that when me_type is
>> "none" and is_bind_mount is true, ME_DUMMY would evaluate to false,
>> rather than to true. The only tricky part would be robustly
>> determining whether "bind" is in mnt->mnt_opts.
>>
>> Care to write the patch?
>
> I've attached (an attempt at) the suggested patch. It should work on
> Linux/glibc, but should be tested on other platforms.
Thanks for the patch.
However, I'd rather not duplicate all of that logic solely
to change the part that deals with type-"none" entries.
Instead, I'll leave the other 5 types in a separate, new macro,
and use that from the new ME_DUMMY macro.
I've also removed the outer "#ifndef ME_DUMMY" and added
a comment and a ChangeLog entry for you. But now,
you have to proofread that and ACK before I push it.
I've tested only on a system with MOUNTED_GETMNTENT1.
Finally, it's small enough that you don't have to fill
out copyright paperwork (hence the "tiny change"
and Copyright-paperwork-exempt notes), but if you think
you may contribute something else, please start the process now,
so the lack of an assignment does not delay things.
Let me know off-list and I'll send you the forms.
>From 613bcb6205cf2b64d835c19074c5a7e7c6cb99eb Mon Sep 17 00:00:00 2001
From: Andrew Warshall <address@hidden>
Date: Sun, 4 Nov 2012 16:41:15 -0800
Subject: [PATCH] mountlist: do not classify a bind-mounted dir entry as
"dummy"
* lib/mountlist.c (ME_DUMMY_0): Rename from ME_DUMMY, but omit
the "none"-testing clause.
(ME_DUMMY) [MOUNTED_GETMNTENT1]: New macro to encapsulate the
exception for bind-mounted directories.
Copyright-paperwork-exempt: Yes
---
ChangeLog | 8 ++++++++
lib/mountlist.c | 31 +++++++++++++++++++++----------
2 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 720b7a2..2173fb2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-11-04 Andrew Warshall <address@hidden> (tiny change)
+
+ mountlist: do not classify a bind-mounted dir entry as "dummy"
+ * lib/mountlist.c (ME_DUMMY_0): Rename from ME_DUMMY, but omit
+ the "none"-testing clause.
+ (ME_DUMMY) [MOUNTED_GETMNTENT1]: New macro to encapsulate the
+ exception for bind-mounted directories.
+
2012-11-01 Akim Demaille <address@hidden>
quote: provide a means to escape strings with nul characters
diff --git a/lib/mountlist.c b/lib/mountlist.c
index 67154b8..a9a9f2c 100644
--- a/lib/mountlist.c
+++ b/lib/mountlist.c
@@ -149,16 +149,27 @@
#undef opendir
#undef closedir
-#ifndef ME_DUMMY
-# define ME_DUMMY(Fs_name, Fs_type) \
- (strcmp (Fs_type, "autofs") == 0 \
- || strcmp (Fs_type, "none") == 0 \
- || strcmp (Fs_type, "proc") == 0 \
- || strcmp (Fs_type, "subfs") == 0 \
- /* for NetBSD 3.0 */ \
- || strcmp (Fs_type, "kernfs") == 0 \
- /* for Irix 6.5 */ \
- || strcmp (Fs_type, "ignore") == 0)
+#define ME_DUMMY_0(Fs_name, Fs_type) \
+ (strcmp (Fs_type, "autofs") == 0 \
+ || strcmp (Fs_type, "proc") == 0 \
+ || strcmp (Fs_type, "subfs") == 0 \
+ /* for NetBSD 3.0 */ \
+ || strcmp (Fs_type, "kernfs") == 0 \
+ /* for Irix 6.5 */ \
+ || strcmp (Fs_type, "ignore") == 0)
+
+/* Historically, we have marked as "dummy" any file system of type "none",
+ but now that programs like du need to know about bind-mounted directories,
+ we grant an exception to any with "bind" in its list of mount options.
+ I.e., those are *not* dummy entries. */
+#ifdef MOUNTED_GETMNTENT1
+# define ME_DUMMY(Fs_name, Fs_type, Fs_ent) \
+ (ME_DUMMY_0 (Fs_name, Fs_type) \
+ || (strcmp (Fs_type, "none") == 0 \
+ && !hasmntopt (Fs_ent, "bind")))
+#else
+# define ME_DUMMY(Fs_name, Fs_type) \
+ (ME_DUMMY_0 (Fs_name, Fs_type) || strcmp (Fs_type, "none") == 0)
#endif
#ifdef __CYGWIN__
--
1.8.0