From: Ian Kent <raven@themaw.net>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: autofs mailing list <autofs@vger.kernel.org>,
Kernel Mailing List <linux-kernel@vger.kernel.org>,
Al Viro <viro@ZenIV.linux.org.uk>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
Omar Sandoval <osandov@osandov.com>,
"Eric W. Biederman" <ebiederm@xmission.com>
Subject: [PATCH 2/4] fs - add have_local_submounts()
Date: Wed, 14 Sep 2016 14:14:40 +0800 [thread overview]
Message-ID: <20160914061440.24714.82139.stgit@pluto.themaw.net> (raw)
In-Reply-To: <20160914061434.24714.490.stgit@pluto.themaw.net>
The have_submounts() function checks if a dentry is a mountpoint
in any namespace but autofs needs to know if the dentry is a
mountpoint within the current namespace.
Add have_local_submounts() to to do this.
Signed-off-by: Ian Kent <raven@themaw.net>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Omar Sandoval <osandov@osandov.com>
---
fs/dcache.c | 34 ++++++++++++++++++++++++++++++++++
include/linux/dcache.h | 1 +
2 files changed, 35 insertions(+)
diff --git a/fs/dcache.c b/fs/dcache.c
index 5c7cc95..218166b 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1307,6 +1307,40 @@ int have_submounts(struct dentry *parent)
EXPORT_SYMBOL(have_submounts);
/*
+ * Search for at least 1 mount point in the dentry's subdirs.
+ * We descend to the next level whenever the d_subdirs
+ * list is non-empty and continue searching.
+ */
+
+static enum d_walk_ret check_local_mount(void *data, struct dentry *dentry)
+{
+ int *ret = data;
+ if (is_local_mountpoint(dentry)) {
+ *ret = 1;
+ return D_WALK_QUIT;
+ }
+ return D_WALK_CONTINUE;
+}
+
+/**
+ * have_local_submounts - check for mounts over a dentry
+ * in the current namespace
+ * @parent: dentry to check.
+ *
+ * Return true if the parent or its subdirectories contain
+ * a mount point
+ */
+int have_local_submounts(struct dentry *parent)
+{
+ int ret = 0;
+
+ d_walk(parent, &ret, check_local_mount, NULL);
+
+ return ret;
+}
+EXPORT_SYMBOL(have_local_submounts);
+
+/*
* Called by mount code to set a mountpoint and check if the mountpoint is
* reachable (e.g. NFS can unhash a directory dentry and then the complete
* subtree can become unreachable).
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index 5ff3e9a..796b358 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -255,6 +255,7 @@ extern void d_prune_aliases(struct inode *);
/* test whether we have any submounts in a subdir tree */
extern int have_submounts(struct dentry *);
+extern int have_local_submounts(struct dentry *);
/*
* This adds the entry to the hash queues.
next prev parent reply other threads:[~2016-09-14 6:14 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-14 6:14 [PATCH 1/4] fs - make is_local_mountpoint() usable by others Ian Kent
2016-09-14 6:14 ` Ian Kent [this message]
2016-09-14 6:14 ` [PATCH 3/4] autofs - make mountpoint checks namespace aware Ian Kent
2016-09-14 17:28 ` Eric W. Biederman
2016-09-15 0:09 ` Ian Kent
2016-09-15 0:32 ` Omar Sandoval
2016-09-15 2:08 ` Eric W. Biederman
2016-09-15 4:12 ` Ian Kent
2016-09-15 8:19 ` Ian Kent
2016-09-16 0:47 ` Eric W. Biederman
2016-09-16 2:58 ` Ian Kent
2016-09-19 0:58 ` Ian Kent
2016-09-20 16:09 ` Eric W. Biederman
2016-09-15 1:03 ` Ian Kent
2016-09-16 21:14 ` Omar Sandoval
2016-09-17 20:10 ` Mateusz Guzik
2016-09-19 1:36 ` Ian Kent
2016-09-20 16:50 ` Eric W. Biederman
2016-09-20 22:44 ` Ian Kent
2016-09-20 23:00 ` Ian Kent
2016-09-22 1:33 ` Ian Kent
2016-09-22 15:43 ` Eric W. Biederman
2016-09-23 0:55 ` Ian Kent
2016-09-23 1:37 ` Eric W. Biederman
2016-09-23 4:26 ` Ian Kent
2016-09-23 12:00 ` Ian Kent
2016-09-28 10:18 ` Ian Kent
2016-09-23 19:15 ` Eric W. Biederman
2016-09-24 0:11 ` Ian Kent
2016-09-26 16:05 ` Eric W. Biederman
2016-09-27 1:52 ` Ian Kent
2016-09-27 13:14 ` Eric W. Biederman
2016-09-28 0:19 ` Ian Kent
2016-09-14 6:14 ` [PATCH 4/4] fs - remove unused have_submounts() function Ian Kent
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160914061440.24714.82139.stgit@pluto.themaw.net \
--to=raven@themaw.net \
--cc=akpm@linux-foundation.org \
--cc=autofs@vger.kernel.org \
--cc=ebiederm@xmission.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=osandov@osandov.com \
--cc=viro@ZenIV.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).