Skip to content

Commit

Permalink
NFS: replace global bl_mount_reply with per-net one
Browse files Browse the repository at this point in the history
This global variable is used for blocklayout downcall and thus can be corrupted
if case of existence of multiple networks namespaces.

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
  • Loading branch information
Stanislav Kinsbursky authored and Trond Myklebust committed Mar 11, 2012
1 parent d6d6dc7 commit cb9c1c4
Showing 3 changed files with 11 additions and 9 deletions.
5 changes: 0 additions & 5 deletions fs/nfs/blocklayout/blocklayout.h
Original file line number Diff line number Diff line change
@@ -153,11 +153,6 @@ BLK_LSEG2EXT(struct pnfs_layout_segment *lseg)
return BLK_LO2EXT(lseg->pls_layout);
}

struct bl_dev_msg {
int32_t status;
uint32_t major, minor;
};

struct bl_msg_hdr {
u8 type;
u16 totallen; /* length of entire message, including hdr itself */
9 changes: 5 additions & 4 deletions fs/nfs/blocklayout/blocklayoutdev.c
Original file line number Diff line number Diff line change
@@ -79,15 +79,16 @@ int nfs4_blkdev_put(struct block_device *bdev)
return blkdev_put(bdev, FMODE_READ);
}

static struct bl_dev_msg bl_mount_reply;

ssize_t bl_pipe_downcall(struct file *filp, const char __user *src,
size_t mlen)
{
struct nfs_net *nn = net_generic(filp->f_dentry->d_sb->s_fs_info,
nfs_net_id);

if (mlen != sizeof (struct bl_dev_msg))
return -EINVAL;

if (copy_from_user(&bl_mount_reply, src, mlen) != 0)
if (copy_from_user(&nn->bl_mount_reply, src, mlen) != 0)
return -EFAULT;

wake_up(&bl_wq);
@@ -118,10 +119,10 @@ nfs4_blk_decode_device(struct nfs_server *server,
};
uint8_t *dataptr;
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);
struct bl_dev_msg *reply = &nn->bl_mount_reply;

dprintk("%s CREATING PIPEFS MESSAGE\n", __func__);
dprintk("%s: deviceid: %s, mincount: %d\n", __func__, dev->dev_id.data,
6 changes: 6 additions & 0 deletions fs/nfs/netns.h
Original file line number Diff line number Diff line change
@@ -4,9 +4,15 @@
#include <net/net_namespace.h>
#include <net/netns/generic.h>

struct bl_dev_msg {
int32_t status;
uint32_t major, minor;
};

struct nfs_net {
struct cache_detail *nfs_dns_resolve;
struct rpc_pipe *bl_device_pipe;
struct bl_dev_msg bl_mount_reply;
struct list_head nfs_client_list;
struct list_head nfs_volume_list;
#ifdef CONFIG_NFS_V4

0 comments on commit cb9c1c4

Please sign in to comment.