All of lore.kernel.org
 help / color / mirror / Atom feed
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.

  reply	other threads:[~2016-09-14  6:14 UTC|newest]

Thread overview: 52+ 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
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:09       ` Ian Kent
2016-09-15  0:32       ` Omar Sandoval
2016-09-15  2:08       ` Eric W. Biederman
2016-09-15  2:08         ` Eric W. Biederman
2016-09-15  4:12         ` Ian Kent
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  0:47             ` Eric W. Biederman
2016-09-16  2:58             ` Ian Kent
2016-09-19  0:58               ` Ian Kent
2016-09-19  0:58                 ` Ian Kent
2016-09-20 16:09                 ` Eric W. Biederman
2016-09-20 16:09                   ` Eric W. Biederman
2016-09-15  1:03     ` Ian Kent
2016-09-15  1:03       ` Ian Kent
2016-09-16 21:14   ` Omar Sandoval
2016-09-16 21:14     ` Omar Sandoval
2016-09-17 20:10   ` Mateusz Guzik
2016-09-17 20:10     ` Mateusz Guzik
2016-09-19  1:36     ` Ian Kent
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-20 23:00             ` Ian Kent
2016-09-22  1:33             ` 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  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  1:52                               ` Ian Kent
2016-09-27 13:14                               ` Eric W. Biederman
2016-09-27 13:14                                 ` Eric W. Biederman
2016-09-28  0:19                                 ` Ian Kent
2016-09-28  0:19                                   ` Ian Kent
2016-09-14  6:14 ` [PATCH 4/4] fs - remove unused have_submounts() function Ian Kent
2016-09-14  6:14   ` 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.