All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] namei: add follow_up_bind()
@ 2018-04-05 10:45 Christian Brauner
  2018-04-05 10:45 ` [PATCH 1/3] " Christian Brauner
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Christian Brauner @ 2018-04-05 10:45 UTC (permalink / raw)
  To: ebiederm, torvalds, viro, linux-kernel; +Cc: Christian Brauner

Hi everyone,

Back when we fixed TIOCGPTPEER again in

commit a319b01d9095 ("devpts: resolve devpts bind-mounts")

we discovered [1] that the code for bind-mount resolution we needed to add
in devpts_mtnget() was already duplicated in nfsd code. So we briefly
discussed [2] adding a helper to namei.{c,h} that would resolve
bind-mounts. The bind-mount resolution code is replicated in at least two
places:
- fs/nfsd/vfs.c:follow_to_parent()
- fs/devpts/inode.c:devpts_mntget()

This series adds:
- follow_up_bind() to namei.{c,h}
- switches fs/nfsd/vfs.c:follow_to_parent() to use follow_up_bind()
- switches fs/devpts/inode.c:devpts_mntget() to use follow_up_bind()

I just wanted to wait until the devpts patches I sent would make it into
mainline. Seems to me that this helper might be worth having around. Not
just because it avoids (granted rather trivial) code duplication but also
because it makes the concept of resolving a bind-mount up to the origin
mountpoint of the vfs's mount obvious (which at least to me wasn't
obivous before).

[1]: https://lkml.org/lkml/2018/3/11/219
[2]: https://lkml.org/lkml/2018/3/12/486

Thanks!
Christian

Christian Brauner (3):
  namei: add follow_up_bind()
  devpts: use follow_up_bind() helper
  nfsd: use follow_up_bind() helper

 fs/devpts/inode.c     |  4 +---
 fs/namei.c            | 10 ++++++++++
 fs/nfsd/vfs.c         |  4 ++--
 include/linux/namei.h |  1 +
 4 files changed, 14 insertions(+), 5 deletions(-)

-- 
2.15.1

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/3] namei: add follow_up_bind()
  2018-04-05 10:45 [PATCH 0/3] namei: add follow_up_bind() Christian Brauner
@ 2018-04-05 10:45 ` Christian Brauner
  2018-04-05 10:45 ` [PATCH 2/3] devpts: use follow_up_bind() helper Christian Brauner
  2018-04-05 10:45 ` [PATCH 3/3] nfsd: " Christian Brauner
  2 siblings, 0 replies; 4+ messages in thread
From: Christian Brauner @ 2018-04-05 10:45 UTC (permalink / raw)
  To: ebiederm, torvalds, viro, linux-kernel; +Cc: Christian Brauner

This adds a new helper for resolving bind-mounts.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
---
 fs/namei.c            | 10 ++++++++++
 include/linux/namei.h |  1 +
 2 files changed, 11 insertions(+)

diff --git a/fs/namei.c b/fs/namei.c
index a09419379f5d..4fa56ec78f63 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1085,6 +1085,16 @@ int follow_up(struct path *path)
 }
 EXPORT_SYMBOL(follow_up);
 
+/*
+ * follow_up_bind - Resolve bind-mounts to mountpoint of path's vfsmount
+ */
+inline void follow_up_bind(struct path *path)
+{
+	while (path->mnt->mnt_root == path->dentry && follow_up(path))
+		;
+}
+EXPORT_SYMBOL(follow_up_bind);
+
 /*
  * Perform an automount
  * - return -EISDIR to tell follow_managed() to stop and return the path we
diff --git a/include/linux/namei.h b/include/linux/namei.h
index a982bb7cd480..ea93127be26c 100644
--- a/include/linux/namei.h
+++ b/include/linux/namei.h
@@ -87,6 +87,7 @@ extern struct dentry *lookup_one_len_unlocked(const char *, struct dentry *, int
 extern int follow_down_one(struct path *);
 extern int follow_down(struct path *);
 extern int follow_up(struct path *);
+extern void follow_up_bind(struct path *path);
 
 extern struct dentry *lock_rename(struct dentry *, struct dentry *);
 extern void unlock_rename(struct dentry *, struct dentry *);
-- 
2.15.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/3] devpts: use follow_up_bind() helper
  2018-04-05 10:45 [PATCH 0/3] namei: add follow_up_bind() Christian Brauner
  2018-04-05 10:45 ` [PATCH 1/3] " Christian Brauner
@ 2018-04-05 10:45 ` Christian Brauner
  2018-04-05 10:45 ` [PATCH 3/3] nfsd: " Christian Brauner
  2 siblings, 0 replies; 4+ messages in thread
From: Christian Brauner @ 2018-04-05 10:45 UTC (permalink / raw)
  To: ebiederm, torvalds, viro, linux-kernel; +Cc: Christian Brauner

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
---
 fs/devpts/inode.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c
index e072e955ce33..5e516846074e 100644
--- a/fs/devpts/inode.c
+++ b/fs/devpts/inode.c
@@ -181,9 +181,7 @@ struct vfsmount *devpts_mntget(struct file *filp, struct pts_fs_info *fsi)
 	/* Walk upward while the start point is a bind mount of
 	 * a single file.
 	 */
-	while (path.mnt->mnt_root == path.dentry)
-		if (follow_up(&path) == 0)
-			break;
+	follow_up_bind(&path);
 
 	/* devpts_ptmx_path() finds a devpts fs or returns an error. */
 	if ((path.mnt->mnt_sb->s_magic != DEVPTS_SUPER_MAGIC) ||
-- 
2.15.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 3/3] nfsd: use follow_up_bind() helper
  2018-04-05 10:45 [PATCH 0/3] namei: add follow_up_bind() Christian Brauner
  2018-04-05 10:45 ` [PATCH 1/3] " Christian Brauner
  2018-04-05 10:45 ` [PATCH 2/3] devpts: use follow_up_bind() helper Christian Brauner
@ 2018-04-05 10:45 ` Christian Brauner
  2 siblings, 0 replies; 4+ messages in thread
From: Christian Brauner @ 2018-04-05 10:45 UTC (permalink / raw)
  To: ebiederm, torvalds, viro, linux-kernel; +Cc: Christian Brauner

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
---
 fs/nfsd/vfs.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index a3c9bfa77def..52e64036d2bd 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -141,8 +141,8 @@ static void follow_to_parent(struct path *path)
 {
 	struct dentry *dp;
 
-	while (path->dentry == path->mnt->mnt_root && follow_up(path))
-		;
+	follow_up_bind(path);
+
 	dp = dget_parent(path->dentry);
 	dput(path->dentry);
 	path->dentry = dp;
-- 
2.15.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-04-05 10:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-05 10:45 [PATCH 0/3] namei: add follow_up_bind() Christian Brauner
2018-04-05 10:45 ` [PATCH 1/3] " Christian Brauner
2018-04-05 10:45 ` [PATCH 2/3] devpts: use follow_up_bind() helper Christian Brauner
2018-04-05 10:45 ` [PATCH 3/3] nfsd: " Christian Brauner

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.