linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 20/38] vfs: Convert nfsctl to fs_context
       [not found] <155257972443.13720.11743171471060355965.stgit@warthog.procyon.org.uk>
@ 2019-03-14 16:11 ` David Howells
  2019-03-14 17:29   ` J. Bruce Fields
  2019-03-14 16:11 ` [PATCH 21/38] vfs: Convert rpc_pipefs " David Howells
  1 sibling, 1 reply; 3+ messages in thread
From: David Howells @ 2019-03-14 16:11 UTC (permalink / raw)
  To: viro
  Cc: J. Bruce Fields, Jeff Layton, linux-nfs, dhowells, linux-fsdevel,
	linux-kernel

Signed-off-by: David Howells <dhowells@redhat.com>
cc: "J. Bruce Fields" <bfields@fieldses.org>
cc: Jeff Layton <jlayton@kernel.org>
cc: linux-nfs@vger.kernel.org
---

 fs/nfsd/nfsctl.c |   33 ++++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)

diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index f2feb2d11bae..d4eb4f34a94c 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -7,6 +7,7 @@
 #include <linux/slab.h>
 #include <linux/namei.h>
 #include <linux/ctype.h>
+#include <linux/fs_context.h>
 
 #include <linux/sunrpc/svcsock.h>
 #include <linux/lockd/lockd.h>
@@ -1146,7 +1147,7 @@ static ssize_t write_v4_end_grace(struct file *file, char *buf, size_t size)
  *	populating the filesystem.
  */
 
-static int nfsd_fill_super(struct super_block * sb, void * data, int silent)
+static int nfsd_fill_super(struct super_block *sb, struct fs_context *fc)
 {
 	static const struct tree_descr nfsd_files[] = {
 		[NFSD_List] = {"exports", &exports_nfsd_operations, S_IRUGO},
@@ -1176,15 +1177,33 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent)
 #endif
 		/* last one */ {""}
 	};
-	get_net(sb->s_fs_info);
+
 	return simple_fill_super(sb, 0x6e667364, nfsd_files);
 }
 
-static struct dentry *nfsd_mount(struct file_system_type *fs_type,
-	int flags, const char *dev_name, void *data)
+static int nfsd_fs_get_tree(struct fs_context *fc)
+{
+	fc->s_fs_info = get_net(fc->net_ns);
+	return vfs_get_super(fc, vfs_get_keyed_super, nfsd_fill_super);
+}
+
+static void nfsd_fs_free_fc(struct fs_context *fc)
+{
+	if (fc->s_fs_info)
+		put_net(fc->s_fs_info);
+}
+
+static const struct fs_context_operations nfsd_fs_context_ops = {
+	.free		= nfsd_fs_free_fc,
+	.get_tree	= nfsd_fs_get_tree,
+};
+
+static int nfsd_init_fs_context(struct fs_context *fc)
 {
-	struct net *net = current->nsproxy->net_ns;
-	return mount_ns(fs_type, flags, data, net, net->user_ns, nfsd_fill_super);
+	put_user_ns(fc->user_ns);
+	fc->user_ns = get_user_ns(fc->net_ns->user_ns);
+	fc->ops = &nfsd_fs_context_ops;
+	return 0;
 }
 
 static void nfsd_umount(struct super_block *sb)
@@ -1198,7 +1217,7 @@ static void nfsd_umount(struct super_block *sb)
 static struct file_system_type nfsd_fs_type = {
 	.owner		= THIS_MODULE,
 	.name		= "nfsd",
-	.mount		= nfsd_mount,
+	.init_fs_context = nfsd_init_fs_context,
 	.kill_sb	= nfsd_umount,
 };
 MODULE_ALIAS_FS("nfsd");


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

* [PATCH 21/38] vfs: Convert rpc_pipefs to fs_context
       [not found] <155257972443.13720.11743171471060355965.stgit@warthog.procyon.org.uk>
  2019-03-14 16:11 ` [PATCH 20/38] vfs: Convert nfsctl to fs_context David Howells
@ 2019-03-14 16:11 ` David Howells
  1 sibling, 0 replies; 3+ messages in thread
From: David Howells @ 2019-03-14 16:11 UTC (permalink / raw)
  To: viro
  Cc: Trond Myklebust, Anna Schumaker, J. Bruce Fields, Jeff Layton,
	linux-nfs, dhowells, linux-fsdevel, linux-kernel

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Trond Myklebust <trond.myklebust@hammerspace.com>
cc: Anna Schumaker <anna.schumaker@netapp.com>
cc: "J. Bruce Fields" <bfields@fieldses.org>
cc: Jeff Layton <jlayton@kernel.org>
cc: linux-nfs@vger.kernel.org
---

 net/sunrpc/rpc_pipe.c |   34 ++++++++++++++++++++++++++--------
 1 file changed, 26 insertions(+), 8 deletions(-)

diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
index 69663681bf9d..2d697861d49a 100644
--- a/net/sunrpc/rpc_pipe.c
+++ b/net/sunrpc/rpc_pipe.c
@@ -13,6 +13,7 @@
 #include <linux/string.h>
 #include <linux/pagemap.h>
 #include <linux/mount.h>
+#include <linux/fs_context.h>
 #include <linux/namei.h>
 #include <linux/fsnotify.h>
 #include <linux/kernel.h>
@@ -1354,11 +1355,11 @@ rpc_gssd_dummy_depopulate(struct dentry *pipe_dentry)
 }
 
 static int
-rpc_fill_super(struct super_block *sb, void *data, int silent)
+rpc_fill_super(struct super_block *sb, struct fs_context *fc)
 {
 	struct inode *inode;
 	struct dentry *root, *gssd_dentry;
-	struct net *net = get_net(sb->s_fs_info);
+	struct net *net = sb->s_fs_info;
 	struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
 	int err;
 
@@ -1415,12 +1416,29 @@ gssd_running(struct net *net)
 }
 EXPORT_SYMBOL_GPL(gssd_running);
 
-static struct dentry *
-rpc_mount(struct file_system_type *fs_type,
-		int flags, const char *dev_name, void *data)
+static int rpc_fs_get_tree(struct fs_context *fc)
+{
+	fc->s_fs_info = get_net(fc->net_ns);
+	return vfs_get_super(fc, vfs_get_keyed_super, rpc_fill_super);
+}
+
+static void rpc_fs_free_fc(struct fs_context *fc)
 {
-	struct net *net = current->nsproxy->net_ns;
-	return mount_ns(fs_type, flags, data, net, net->user_ns, rpc_fill_super);
+	if (fc->s_fs_info)
+		put_net(fc->s_fs_info);
+}
+
+static const struct fs_context_operations rpc_fs_context_ops = {
+	.free		= rpc_fs_free_fc,
+	.get_tree	= rpc_fs_get_tree,
+};
+
+static int rpc_init_fs_context(struct fs_context *fc)
+{
+	put_user_ns(fc->user_ns);
+	fc->user_ns = get_user_ns(fc->net_ns->user_ns);
+	fc->ops = &rpc_fs_context_ops;
+	return 0;
 }
 
 static void rpc_kill_sb(struct super_block *sb)
@@ -1448,7 +1466,7 @@ static void rpc_kill_sb(struct super_block *sb)
 static struct file_system_type rpc_pipe_fs_type = {
 	.owner		= THIS_MODULE,
 	.name		= "rpc_pipefs",
-	.mount		= rpc_mount,
+	.init_fs_context = rpc_init_fs_context,
 	.kill_sb	= rpc_kill_sb,
 };
 MODULE_ALIAS_FS("rpc_pipefs");


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

* Re: [PATCH 20/38] vfs: Convert nfsctl to fs_context
  2019-03-14 16:11 ` [PATCH 20/38] vfs: Convert nfsctl to fs_context David Howells
@ 2019-03-14 17:29   ` J. Bruce Fields
  0 siblings, 0 replies; 3+ messages in thread
From: J. Bruce Fields @ 2019-03-14 17:29 UTC (permalink / raw)
  To: David Howells; +Cc: viro, Jeff Layton, linux-nfs, linux-fsdevel, linux-kernel

Fine by me.

(Are these for 5.1 or 5.2?  Just wondering what to do with some other
ongoing work in the same area.  Any conflicts are probably trivial,
though, so no big deal either way.)

--b.

On Thu, Mar 14, 2019 at 04:11:34PM +0000, David Howells wrote:
> Signed-off-by: David Howells <dhowells@redhat.com>
> cc: "J. Bruce Fields" <bfields@fieldses.org>
> cc: Jeff Layton <jlayton@kernel.org>
> cc: linux-nfs@vger.kernel.org
> ---
> 
>  fs/nfsd/nfsctl.c |   33 ++++++++++++++++++++++++++-------
>  1 file changed, 26 insertions(+), 7 deletions(-)
> 
> diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
> index f2feb2d11bae..d4eb4f34a94c 100644
> --- a/fs/nfsd/nfsctl.c
> +++ b/fs/nfsd/nfsctl.c
> @@ -7,6 +7,7 @@
>  #include <linux/slab.h>
>  #include <linux/namei.h>
>  #include <linux/ctype.h>
> +#include <linux/fs_context.h>
>  
>  #include <linux/sunrpc/svcsock.h>
>  #include <linux/lockd/lockd.h>
> @@ -1146,7 +1147,7 @@ static ssize_t write_v4_end_grace(struct file *file, char *buf, size_t size)
>   *	populating the filesystem.
>   */
>  
> -static int nfsd_fill_super(struct super_block * sb, void * data, int silent)
> +static int nfsd_fill_super(struct super_block *sb, struct fs_context *fc)
>  {
>  	static const struct tree_descr nfsd_files[] = {
>  		[NFSD_List] = {"exports", &exports_nfsd_operations, S_IRUGO},
> @@ -1176,15 +1177,33 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent)
>  #endif
>  		/* last one */ {""}
>  	};
> -	get_net(sb->s_fs_info);
> +
>  	return simple_fill_super(sb, 0x6e667364, nfsd_files);
>  }
>  
> -static struct dentry *nfsd_mount(struct file_system_type *fs_type,
> -	int flags, const char *dev_name, void *data)
> +static int nfsd_fs_get_tree(struct fs_context *fc)
> +{
> +	fc->s_fs_info = get_net(fc->net_ns);
> +	return vfs_get_super(fc, vfs_get_keyed_super, nfsd_fill_super);
> +}
> +
> +static void nfsd_fs_free_fc(struct fs_context *fc)
> +{
> +	if (fc->s_fs_info)
> +		put_net(fc->s_fs_info);
> +}
> +
> +static const struct fs_context_operations nfsd_fs_context_ops = {
> +	.free		= nfsd_fs_free_fc,
> +	.get_tree	= nfsd_fs_get_tree,
> +};
> +
> +static int nfsd_init_fs_context(struct fs_context *fc)
>  {
> -	struct net *net = current->nsproxy->net_ns;
> -	return mount_ns(fs_type, flags, data, net, net->user_ns, nfsd_fill_super);
> +	put_user_ns(fc->user_ns);
> +	fc->user_ns = get_user_ns(fc->net_ns->user_ns);
> +	fc->ops = &nfsd_fs_context_ops;
> +	return 0;
>  }
>  
>  static void nfsd_umount(struct super_block *sb)
> @@ -1198,7 +1217,7 @@ static void nfsd_umount(struct super_block *sb)
>  static struct file_system_type nfsd_fs_type = {
>  	.owner		= THIS_MODULE,
>  	.name		= "nfsd",
> -	.mount		= nfsd_mount,
> +	.init_fs_context = nfsd_init_fs_context,
>  	.kill_sb	= nfsd_umount,
>  };
>  MODULE_ALIAS_FS("nfsd");

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

end of thread, other threads:[~2019-03-14 17:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <155257972443.13720.11743171471060355965.stgit@warthog.procyon.org.uk>
2019-03-14 16:11 ` [PATCH 20/38] vfs: Convert nfsctl to fs_context David Howells
2019-03-14 17:29   ` J. Bruce Fields
2019-03-14 16:11 ` [PATCH 21/38] vfs: Convert rpc_pipefs " David Howells

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).