@@ -564,7 +564,7 @@ bl_free_layout(void *p)
}
static void *
-bl_alloc_layout(struct pnfs_mount_type *mtype, struct inode *inode)
+bl_alloc_layout(struct inode *inode)
{
struct pnfs_block_layout *bl;
@@ -688,7 +688,7 @@ static void free_blk_mountid(struct block_mount_id *mid)
* It seems much of this should be at the generic pnfs level.
*/
static struct pnfs_block_dev *
-nfs4_blk_get_deviceinfo(struct super_block *sb, struct nfs_fh *fh,
+nfs4_blk_get_deviceinfo(struct nfs_server *server, const struct nfs_fh *fh,
struct pnfs_deviceid *d_id,
struct list_head *sdlist)
{
@@ -698,7 +698,6 @@ nfs4_blk_get_deviceinfo(struct super_block *sb, struct nfs_fh *fh,
int max_pages;
struct page **pages = NULL;
int i, rc;
- struct nfs_server *server = NFS_SB(sb);
/*
* Use the session max response size as the basis for setting
@@ -739,12 +738,12 @@ nfs4_blk_get_deviceinfo(struct super_block *sb, struct nfs_fh *fh,
dev->pglen = PAGE_SIZE * max_pages;
dev->mincount = 0;
- rc = pnfs_block_callback_ops->nfs_getdeviceinfo(sb, dev);
+ rc = pnfs_block_callback_ops->nfs_getdeviceinfo(server, dev);
dprintk("%s getdevice info returns %d\n", __func__, rc);
if (rc)
goto out_free;
- rv = nfs4_blk_decode_device(sb, dev, sdlist);
+ rv = nfs4_blk_decode_device(server, dev, sdlist);
out_free:
if (dev->area != NULL)
vunmap(dev->area);
@@ -759,8 +758,8 @@ nfs4_blk_get_deviceinfo(struct super_block *sb, struct nfs_fh *fh,
/*
* Retrieve the list of available devices for the mountpoint.
*/
-static struct pnfs_mount_type *
-bl_initialize_mountpoint(struct super_block *sb, struct nfs_fh *fh)
+static int
+bl_initialize_mountpoint(struct nfs_server *server, const struct nfs_fh *fh)
{
struct block_mount_id *b_mt_id = NULL;
struct pnfs_mount_type *mtype = NULL;
@@ -771,21 +770,18 @@ bl_initialize_mountpoint(struct super_block *sb, struct nfs_fh *fh)
dprintk("%s enter\n", __func__);
- if (NFS_SB(sb)->pnfs_blksize == 0) {
+ if (server->pnfs_blksize == 0) {
dprintk("%s Server did not return blksize\n", __func__);
- return NULL;
+ return -EINVAL;
}
b_mt_id = kzalloc(sizeof(struct block_mount_id), GFP_KERNEL);
- if (!b_mt_id)
+ if (!b_mt_id) {
+ status = -ENOMEM;
goto out_error;
+ }
/* Initialize nfs4 block layout mount id */
- b_mt_id->bm_sb = sb; /* back pointer to retrieve nfs_server struct */
spin_lock_init(&b_mt_id->bm_lock);
INIT_LIST_HEAD(&b_mt_id->bm_devlist);
- mtype = kzalloc(sizeof(struct pnfs_mount_type), GFP_KERNEL);
- if (!mtype)
- goto out_error;
- mtype->mountid = (void *)b_mt_id;
/* Construct a list of all visible scsi disks that have not been
* claimed.
@@ -799,7 +795,8 @@ bl_initialize_mountpoint(struct super_block *sb, struct nfs_fh *fh)
goto out_error;
dlist->eof = 0;
while (!dlist->eof) {
- status = pnfs_block_callback_ops->nfs_getdevicelist(sb, fh, dlist);
+ status = pnfs_block_callback_ops->nfs_getdevicelist(
+ server, fh, dlist);
if (status)
goto out_error;
dprintk("%s GETDEVICELIST numdevs=%i, eof=%i\n",
@@ -811,7 +808,7 @@ bl_initialize_mountpoint(struct super_block *sb, struct nfs_fh *fh)
* Construct an LVM meta device from the flat volume topology.
*/
for (i = 0; i < dlist->num_devs; i++) {
- bdev = nfs4_blk_get_deviceinfo(sb, fh,
+ bdev = nfs4_blk_get_deviceinfo(server, fh,
&dlist->dev_id[i],
&scsi_disklist);
if (!bdev)
@@ -822,30 +819,26 @@ bl_initialize_mountpoint(struct super_block *sb, struct nfs_fh *fh)
}
}
dprintk("%s SUCCESS\n", __func__);
-
+ server->pnfs_ld_data = b_mt_id;
+ status = 0;
out_return:
kfree(dlist);
nfs4_blk_destroy_disk_list(&scsi_disklist);
- return mtype;
+ return status;
out_error:
free_blk_mountid(b_mt_id);
kfree(mtype);
- mtype = NULL;
goto out_return;
}
static int
-bl_uninitialize_mountpoint(struct pnfs_mount_type *mtype)
+bl_uninitialize_mountpoint(struct nfs_server *server)
{
- struct block_mount_id *b_mt_id = NULL;
+ struct block_mount_id *b_mt_id = server->pnfs_ld_data;
dprintk("%s enter\n", __func__);
- if (!mtype)
- return 0;
- b_mt_id = (struct block_mount_id *)mtype->mountid;
free_blk_mountid(b_mt_id);
- kfree(mtype);
dprintk("%s RETURNS\n", __func__);
return 0;
}
@@ -51,7 +51,6 @@ extern int dm_do_resume(struct dm_ioctl *param);
extern int dm_table_load(struct dm_ioctl *param, size_t param_size);
struct block_mount_id {
- struct super_block *bm_sb; /* back pointer */
spinlock_t bm_lock; /* protects list */
struct list_head bm_devlist; /* holds pnfs_block_dev */
};
@@ -194,7 +193,7 @@ struct bl_layoutupdate_data {
struct list_head ranges;
};
-#define BLK_ID(lo) ((struct block_mount_id *)(PNFS_MOUNTID(lo)->mountid))
+#define BLK_ID(lo) ((struct block_mount_id *)(PNFS_NFS_SERVER(lo)->pnfs_ld_data))
#define BLK_LSEG2EXT(lseg) ((struct pnfs_block_layout *)lseg->layout->ld_data)
#define BLK_LO2EXT(lo) ((struct pnfs_block_layout *)lo->ld_data)
@@ -246,7 +245,7 @@ uint32_t *blk_overflow(uint32_t *p, uint32_t *end, size_t nbytes);
/* blocklayoutdev.c */
struct block_device *nfs4_blkdev_get(dev_t dev);
int nfs4_blkdev_put(struct block_device *bdev);
-struct pnfs_block_dev *nfs4_blk_decode_device(struct super_block *sb,
+struct pnfs_block_dev *nfs4_blk_decode_device(struct nfs_server *server,
struct pnfs_device *dev,
struct list_head *sdlist);
int nfs4_blk_process_layoutget(struct pnfs_layout_type *lo,
@@ -254,7 +253,7 @@ int nfs4_blk_process_layoutget(struct pnfs_layout_type *lo,
int nfs4_blk_create_scsi_disk_list(struct list_head *);
void nfs4_blk_destroy_disk_list(struct list_head *);
/* blocklayoutdm.c */
-struct pnfs_block_dev *nfs4_blk_init_metadev(struct super_block *sb,
+struct pnfs_block_dev *nfs4_blk_init_metadev(struct nfs_server *server,
struct pnfs_device *dev);
int nfs4_blk_flatten(struct pnfs_blk_volume *, int, struct pnfs_block_dev *);
void free_block_dev(struct pnfs_block_dev *bdev);
@@ -489,9 +489,9 @@ static int decode_blk_volume(uint32_t **pp, uint32_t *end,
* in dev->dev_addr_buf.
*/
struct pnfs_block_dev *
-nfs4_blk_decode_device(struct super_block *sb,
- struct pnfs_device *dev,
- struct list_head *sdlist)
+nfs4_blk_decode_device(struct nfs_server *server,
+ struct pnfs_device *dev,
+ struct list_head *sdlist)
{
int num_vols, i, status, count;
struct pnfs_blk_volume *vols, **arrays, **arrays_ptr;
@@ -540,7 +540,7 @@ nfs4_blk_decode_device(struct super_block *sb,
}
/* Now use info in vols to create the meta device */
- rv = nfs4_blk_init_metadev(sb, dev);
+ rv = nfs4_blk_init_metadev(server, dev);
if (!rv)
goto out;
status = nfs4_blk_flatten(vols, num_vols, rv);
@@ -129,7 +129,7 @@ void free_block_dev(struct pnfs_block_dev *bdev)
/*
* Create meta device. Keep it open to use for I/O.
*/
-struct pnfs_block_dev *nfs4_blk_init_metadev(struct super_block *sb,
+struct pnfs_block_dev *nfs4_blk_init_metadev(struct nfs_server *server,
struct pnfs_device *dev)
{
static uint64_t dev_count; /* STUB used for device names */
@@ -151,7 +151,7 @@ struct pnfs_block_dev *nfs4_blk_init_metadev(struct super_block *sb,
bd = nfs4_blkdev_get(meta_dev);
if (!bd)
goto out_err;
- if (bd_claim(bd, sb)) {
+ if (bd_claim(bd, server)) {
dprintk("%s: failed to claim device %d:%d\n",
__func__,
MAJOR(meta_dev),