All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stanislav Kinsbursky <skinsbursky@parallels.com>
To: Trond.Myklebust@netapp.com
Cc: linux-nfs@vger.kernel.org, xemul@parallels.com, neilb@suse.de,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	jbottomley@parallels.com, bfields@fieldses.org,
	davem@davemloft.net, devel@openvz.org
Subject: [PATCH 1/5] NFS: handle blocklayout pipe PipeFS dentry by network namespace aware routines
Date: Tue, 29 Nov 2011 13:10:12 +0300	[thread overview]
Message-ID: <20111129091012.20730.83741.stgit@localhost6.localdomain6> (raw)
In-Reply-To: <20111129090754.20730.64567.stgit@localhost6.localdomain6>

This patch makes blocklayout pipe dentry allocated and destroyed in network
namespace context by PipeFS network namespace aware routines.
Network namespace context is obtained from nfs_client structure.

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>

---
 fs/nfs/blocklayout/blocklayout.c |   60 +++++++++++++++++++++++++++++++-------
 1 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
index c26633e..50d5183 100644
--- a/fs/nfs/blocklayout/blocklayout.c
+++ b/fs/nfs/blocklayout/blocklayout.c
@@ -965,10 +965,55 @@ static const struct rpc_pipe_ops bl_upcall_ops = {
 	.destroy_msg	= bl_pipe_destroy_msg,
 };
 
+static struct dentry *nfs4blocklayout_register_sb(struct super_block *sb,
+					    struct rpc_pipe *pipe)
+{
+	struct dentry *dir, *dentry;
+
+	dir = rpc_d_lookup_sb(sb, NFS_PIPE_DIRNAME);
+	if (dir == NULL)
+		return ERR_PTR(-ENOENT);
+	dentry = rpc_mkpipe_dentry(dir, "blocklayout", NULL, pipe);
+	dput(dir);
+	return dentry;
+}
+
+static void nfs4blocklayout_unregister_sb(struct super_block *sb,
+					  struct rpc_pipe *pipe)
+{
+	if (pipe->dentry)
+		rpc_unlink(pipe->dentry);
+}
+
+static struct dentry *nfs4blocklayout_register_net(struct net *net,
+						   struct rpc_pipe *pipe)
+{
+	struct super_block *pipefs_sb;
+	struct dentry *dentry;
+
+	pipefs_sb = rpc_get_sb_net(net);
+	if (!pipefs_sb)
+		return ERR_PTR(-ENOENT);
+	dentry = nfs4blocklayout_register_sb(pipefs_sb, pipe);
+	rpc_put_sb_net(net);
+	return dentry;
+}
+
+static void nfs4blocklayout_unregister_net(struct net *net,
+					   struct rpc_pipe *pipe)
+{
+	struct super_block *pipefs_sb;
+
+	pipefs_sb = rpc_get_sb_net(net);
+	if (pipefs_sb) {
+		nfs4blocklayout_unregister_sb(pipefs_sb, pipe);
+		rpc_put_sb_net(net);
+	}
+}
+
 static int __init nfs4blocklayout_init(void)
 {
 	struct vfsmount *mnt;
-	struct path path;
 	int ret;
 
 	dprintk("%s: NFSv4 Block Layout Driver Registering...\n", __func__);
@@ -984,20 +1029,13 @@ static int __init nfs4blocklayout_init(void)
 		ret = PTR_ERR(mnt);
 		goto out_remove;
 	}
-
-	ret = vfs_path_lookup(mnt->mnt_root,
-			      mnt,
-			      NFS_PIPE_DIRNAME, 0, &path);
-	if (ret)
-		goto out_remove;
-
 	bl_device_pipe = rpc_mkpipe_data(&bl_upcall_ops, 0);
 	if (IS_ERR(bl_device_pipe)) {
 		ret = PTR_ERR(bl_device_pipe);
 		goto out_remove;
 	}
-	bl_device_pipe->dentry = rpc_mkpipe_dentry(path.dentry, "blocklayout",
-						   NULL, bl_device_pipe);
+	bl_device_pipe->dentry = nfs4blocklayout_register_net(&init_net,
+							      bl_device_pipe);
 	if (IS_ERR(bl_device_pipe->dentry)) {
 		ret = PTR_ERR(bl_device_pipe->dentry);
 		goto out_destroy_pipe;
@@ -1018,7 +1056,7 @@ static void __exit nfs4blocklayout_exit(void)
 	       __func__);
 
 	pnfs_unregister_layoutdriver(&blocklayout_type);
-	rpc_unlink(bl_device_pipe->dentry);
+	nfs4blocklayout_unregister_net(&init_net, bl_device_pipe);
 	rpc_destroy_pipe_data(bl_device_pipe);
 }
 


  parent reply	other threads:[~2011-11-29  9:12 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-29 10:10 [PATCH 0/5] NFS: create blocklayout pipe per network namesapce context Stanislav Kinsbursky
2011-11-29  9:17 ` Stanislav Kinsbursky
2011-11-29 10:10 ` Stanislav Kinsbursky [this message]
2011-11-29 10:10 ` [PATCH 2/5] NFS: blocklayout pipe creation per network namespace context introduced Stanislav Kinsbursky
2011-11-29 10:10 ` [PATCH 3/5] NFS: blocklayout PipeFS notifier introduced Stanislav Kinsbursky
2011-11-29 10:10   ` Stanislav Kinsbursky
2011-11-29 10:10 ` [PATCH 4/5] NFS: remove RPC PipeFS mount point reference from blocklayout routines Stanislav Kinsbursky
2011-11-29 12:00   ` tao.peng
2011-11-29 12:00     ` tao.peng-mb1K0bWo544
2011-11-29 12:00     ` tao.peng
2011-11-29 12:19     ` Stanislav Kinsbursky
2011-11-29 12:40       ` tao.peng
2011-11-29 12:40         ` tao.peng-mb1K0bWo544
2011-11-29 12:40         ` tao.peng
2011-11-29 13:13         ` Stanislav Kinsbursky
2011-11-29 15:05           ` Peng Tao
2011-11-29 15:05             ` Peng Tao
2011-11-29 13:35         ` Myklebust, Trond
2011-11-29 13:35           ` Myklebust, Trond
2011-11-29 13:35           ` Myklebust, Trond
2011-11-29 15:10           ` Peng Tao
2011-11-29 15:10             ` Peng Tao
2011-11-29 15:18             ` Trond Myklebust
2011-11-29 15:30               ` Peng Tao
2011-11-29 16:40                 ` Trond Myklebust
2011-11-29 16:42                   ` J. Bruce Fields
2011-11-29 16:42                     ` J. Bruce Fields
2011-11-29 17:19                     ` Trond Myklebust
2011-11-29 17:19                       ` Trond Myklebust
2011-11-29 17:27                       ` J. Bruce Fields
2011-11-29 17:27                         ` J. Bruce Fields
2011-11-29 17:30                       ` Peng Tao
2011-11-29 17:30                         ` Peng Tao
2012-05-28 11:43                         ` Boaz Harrosh
2012-05-28 11:43                           ` Boaz Harrosh
2011-11-29 10:10 ` [PATCH 5/5] SUNRPC: kernel PipeFS mount point creation routines removed Stanislav Kinsbursky
2011-12-30 22:55 ` [PATCH 0/5] NFS: create blocklayout pipe per network namesapce context Trond Myklebust
2011-12-30 22:55   ` Trond Myklebust
2012-01-05 20:58   ` Trond Myklebust
2012-01-10 12:58     ` Stanislav Kinsbursky
2012-01-11 16:23       ` Trond Myklebust
2012-01-11 16:23         ` Trond Myklebust
2012-01-11 17:23         ` Stanislav Kinsbursky
2012-01-11 17:46           ` Trond Myklebust
2012-01-11 17:46             ` Trond Myklebust
2012-01-11 18:03             ` Stanislav Kinsbursky
2012-01-10 10:50   ` Stanislav Kinsbursky

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=20111129091012.20730.83741.stgit@localhost6.localdomain6 \
    --to=skinsbursky@parallels.com \
    --cc=Trond.Myklebust@netapp.com \
    --cc=bfields@fieldses.org \
    --cc=davem@davemloft.net \
    --cc=devel@openvz.org \
    --cc=jbottomley@parallels.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=neilb@suse.de \
    --cc=netdev@vger.kernel.org \
    --cc=xemul@parallels.com \
    /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.