NFS: blocklayout pipe creation per network namespace context introduced
This patch implements blocklayout pipe creation and registration per each existent network namespace. This was achived by registering NFS per-net operations, responsible for blocklayout pipe allocation/register and unregister/destruction instead of initialization and destruction of static "bl_device_pipe" pipe (this one was removed). Note, than pointer to network blocklayout pipe is stored in per-net "nfs_net" structure, because allocating of one more per-net structure for blocklayout module looks redundant. This patch also changes dev_remove() function prototype (and all it's callers, where it' requied) by adding network namespace pointer parameter, which is used to discover proper blocklayout pipe for rpc_queue_upcall() call. Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
committed by
Trond Myklebust
parent
332dfab6f4
commit
9e2e74dba6
@@ -120,6 +120,8 @@ nfs4_blk_decode_device(struct nfs_server *server,
|
||||
DECLARE_WAITQUEUE(wq, current);
|
||||
struct bl_dev_msg *reply = &bl_mount_reply;
|
||||
int offset, len, i, rc;
|
||||
struct net *net = server->nfs_client->net;
|
||||
struct nfs_net *nn = net_generic(net, nfs_net_id);
|
||||
|
||||
dprintk("%s CREATING PIPEFS MESSAGE\n", __func__);
|
||||
dprintk("%s: deviceid: %s, mincount: %d\n", __func__, dev->dev_id.data,
|
||||
@@ -146,7 +148,7 @@ nfs4_blk_decode_device(struct nfs_server *server,
|
||||
|
||||
dprintk("%s CALLING USERSPACE DAEMON\n", __func__);
|
||||
add_wait_queue(&bl_wq, &wq);
|
||||
rc = rpc_queue_upcall(bl_device_pipe, &msg);
|
||||
rc = rpc_queue_upcall(nn->bl_device_pipe, &msg);
|
||||
if (rc < 0) {
|
||||
remove_wait_queue(&bl_wq, &wq);
|
||||
rv = ERR_PTR(rc);
|
||||
@@ -181,6 +183,7 @@ nfs4_blk_decode_device(struct nfs_server *server,
|
||||
|
||||
rv->bm_mdev = bd;
|
||||
memcpy(&rv->bm_mdevid, &dev->dev_id, sizeof(struct nfs4_deviceid));
|
||||
rv->net = net;
|
||||
dprintk("%s Created device %s with bd_block_size %u\n",
|
||||
__func__,
|
||||
bd->bd_disk->disk_name,
|
||||
|
||||
Reference in New Issue
Block a user