mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
nfs: split up block layout and SCSI layout support
Add two new config options PNFS_BLOCK_LAYOUT and PNFS_SCSI_LAYOUT so that SCSI layouts can be enabled without requiring block layouts. Since block layouts are considered deprecated, PNFS_BLOCK_LAYOUT is off by default. The original PNFS_BLOCK config is now invisible and gets selected when either of PNFS_BLOCK_LAYOUT or PNFS_SCSI_LAYOUT are enabled. Also added a dependency on BLOCK to the Kconfig to fix undefined symbol warnings from the kernel test robot. Signed-off-by: Scott Mayhew <smayhew@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Anna Schumaker <anna.schumaker@hammerspace.com>
This commit is contained in:
parent
9ba13ef0e3
commit
65a83a613c
|
|
@ -123,8 +123,23 @@ config PNFS_FILE_LAYOUT
|
|||
|
||||
config PNFS_BLOCK
|
||||
tristate
|
||||
depends on NFS_V4 && BLK_DEV_DM
|
||||
|
||||
config PNFS_BLOCK_LAYOUT
|
||||
bool "NFS client support for pNFS block layouts"
|
||||
depends on NFS_V4 && BLOCK && BLK_DEV_DM
|
||||
select PNFS_BLOCK
|
||||
help
|
||||
Enable support for the pNFS block-volume layout type (RFC 5663).
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config PNFS_SCSI_LAYOUT
|
||||
bool "NFS client support for pNFS SCSI layouts"
|
||||
depends on NFS_V4 && BLOCK
|
||||
default NFS_V4
|
||||
select PNFS_BLOCK
|
||||
help
|
||||
Enable suport for the pNFS SCSI layout type (RFC 8154).
|
||||
|
||||
config PNFS_FLEXFILE_LAYOUT
|
||||
tristate
|
||||
|
|
|
|||
|
|
@ -4,4 +4,5 @@
|
|||
#
|
||||
obj-$(CONFIG_PNFS_BLOCK) += blocklayoutdriver.o
|
||||
|
||||
blocklayoutdriver-y += blocklayout.o dev.o extent_tree.o rpc_pipefs.o
|
||||
blocklayoutdriver-y += blocklayout.o dev.o extent_tree.o
|
||||
blocklayoutdriver-$(CONFIG_PNFS_BLOCK_LAYOUT) += rpc_pipefs.o
|
||||
|
|
|
|||
|
|
@ -470,18 +470,6 @@ static struct pnfs_layout_hdr *__bl_alloc_layout_hdr(struct inode *inode,
|
|||
return &bl->bl_layout;
|
||||
}
|
||||
|
||||
static struct pnfs_layout_hdr *bl_alloc_layout_hdr(struct inode *inode,
|
||||
gfp_t gfp_flags)
|
||||
{
|
||||
return __bl_alloc_layout_hdr(inode, gfp_flags, false);
|
||||
}
|
||||
|
||||
static struct pnfs_layout_hdr *sl_alloc_layout_hdr(struct inode *inode,
|
||||
gfp_t gfp_flags)
|
||||
{
|
||||
return __bl_alloc_layout_hdr(inode, gfp_flags, true);
|
||||
}
|
||||
|
||||
static void bl_free_lseg(struct pnfs_layout_segment *lseg)
|
||||
{
|
||||
dprintk("%s enter\n", __func__);
|
||||
|
|
@ -956,6 +944,13 @@ static const struct nfs_pageio_ops bl_pg_write_ops = {
|
|||
.pg_cleanup = pnfs_generic_pg_cleanup,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PNFS_BLOCK_LAYOUT
|
||||
static struct pnfs_layout_hdr *bl_alloc_layout_hdr(struct inode *inode,
|
||||
gfp_t gfp_flags)
|
||||
{
|
||||
return __bl_alloc_layout_hdr(inode, gfp_flags, false);
|
||||
}
|
||||
|
||||
static struct pnfs_layoutdriver_type blocklayout_type = {
|
||||
.id = LAYOUT_BLOCK_VOLUME,
|
||||
.name = "LAYOUT_BLOCK_VOLUME",
|
||||
|
|
@ -980,6 +975,48 @@ static struct pnfs_layoutdriver_type blocklayout_type = {
|
|||
.sync = pnfs_generic_sync,
|
||||
};
|
||||
|
||||
static int __init pnfs_register_blocklayout(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bl_init_pipefs();
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = pnfs_register_layoutdriver(&blocklayout_type);
|
||||
if (ret) {
|
||||
bl_cleanup_pipefs();
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit pnfs_unregister_blocklayout(void)
|
||||
{
|
||||
pnfs_unregister_layoutdriver(&blocklayout_type);
|
||||
bl_cleanup_pipefs();
|
||||
}
|
||||
|
||||
MODULE_ALIAS("nfs-layouttype4-3");
|
||||
#else
|
||||
static int __init pnfs_register_blocklayout(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit pnfs_unregister_blocklayout(void)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_PNFS_BLOCK_LAYOUT */
|
||||
|
||||
#ifdef CONFIG_PNFS_SCSI_LAYOUT
|
||||
static struct pnfs_layout_hdr *sl_alloc_layout_hdr(struct inode *inode,
|
||||
gfp_t gfp_flags)
|
||||
{
|
||||
return __bl_alloc_layout_hdr(inode, gfp_flags, true);
|
||||
}
|
||||
|
||||
static struct pnfs_layoutdriver_type scsilayout_type = {
|
||||
.id = LAYOUT_SCSI,
|
||||
.name = "LAYOUT_SCSI",
|
||||
|
|
@ -1004,6 +1041,28 @@ static struct pnfs_layoutdriver_type scsilayout_type = {
|
|||
.sync = pnfs_generic_sync,
|
||||
};
|
||||
|
||||
static int __init pnfs_register_scsilayout(void)
|
||||
{
|
||||
return pnfs_register_layoutdriver(&scsilayout_type);
|
||||
}
|
||||
|
||||
static void __exit pnfs_unregister_scsilayout(void)
|
||||
{
|
||||
pnfs_unregister_layoutdriver(&scsilayout_type);
|
||||
}
|
||||
|
||||
MODULE_ALIAS("nfs-layouttype4-5");
|
||||
#else
|
||||
static int __init pnfs_register_scsilayout(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit pnfs_unregister_scsilayout(void)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_PNFS_SCSI_LAYOUT */
|
||||
|
||||
|
||||
static int __init nfs4blocklayout_init(void)
|
||||
{
|
||||
|
|
@ -1011,25 +1070,17 @@ static int __init nfs4blocklayout_init(void)
|
|||
|
||||
dprintk("%s: NFSv4 Block Layout Driver Registering...\n", __func__);
|
||||
|
||||
ret = bl_init_pipefs();
|
||||
ret = pnfs_register_blocklayout();
|
||||
if (ret)
|
||||
goto out;
|
||||
return ret;
|
||||
|
||||
ret = pnfs_register_layoutdriver(&blocklayout_type);
|
||||
if (ret)
|
||||
goto out_cleanup_pipe;
|
||||
ret = pnfs_register_scsilayout();
|
||||
if (ret) {
|
||||
pnfs_unregister_blocklayout();
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = pnfs_register_layoutdriver(&scsilayout_type);
|
||||
if (ret)
|
||||
goto out_unregister_block;
|
||||
return 0;
|
||||
|
||||
out_unregister_block:
|
||||
pnfs_unregister_layoutdriver(&blocklayout_type);
|
||||
out_cleanup_pipe:
|
||||
bl_cleanup_pipefs();
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __exit nfs4blocklayout_exit(void)
|
||||
|
|
@ -1037,13 +1088,9 @@ static void __exit nfs4blocklayout_exit(void)
|
|||
dprintk("%s: NFSv4 Block Layout Driver Unregistering...\n",
|
||||
__func__);
|
||||
|
||||
pnfs_unregister_layoutdriver(&scsilayout_type);
|
||||
pnfs_unregister_layoutdriver(&blocklayout_type);
|
||||
bl_cleanup_pipefs();
|
||||
pnfs_unregister_scsilayout();
|
||||
pnfs_unregister_blocklayout();
|
||||
}
|
||||
|
||||
MODULE_ALIAS("nfs-layouttype4-3");
|
||||
MODULE_ALIAS("nfs-layouttype4-5");
|
||||
|
||||
module_init(nfs4blocklayout_init);
|
||||
module_exit(nfs4blocklayout_exit);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#define NFSDBG_FACILITY NFSDBG_PNFS_LD
|
||||
|
||||
#ifdef CONFIG_PNFS_SCSI_LAYOUT
|
||||
static void bl_unregister_scsi(struct pnfs_block_dev *dev)
|
||||
{
|
||||
struct block_device *bdev = file_bdev(dev->bdev_file);
|
||||
|
|
@ -45,6 +46,16 @@ static bool bl_register_scsi(struct pnfs_block_dev *dev)
|
|||
trace_bl_pr_key_reg(bdev, dev->pr_key);
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
static void bl_unregister_scsi(struct pnfs_block_dev *dev)
|
||||
{
|
||||
}
|
||||
|
||||
static bool bl_register_scsi(struct pnfs_block_dev *dev)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif /* CONFIG_PNFS_SCSI_LAYOUT */
|
||||
|
||||
static void bl_unregister_dev(struct pnfs_block_dev *dev)
|
||||
{
|
||||
|
|
@ -292,7 +303,7 @@ static int
|
|||
bl_parse_deviceid(struct nfs_server *server, struct pnfs_block_dev *d,
|
||||
struct pnfs_block_volume *volumes, int idx, gfp_t gfp_mask);
|
||||
|
||||
|
||||
#ifdef CONFIG_PNFS_BLOCK_LAYOUT
|
||||
static int
|
||||
bl_parse_simple(struct nfs_server *server, struct pnfs_block_dev *d,
|
||||
struct pnfs_block_volume *volumes, int idx, gfp_t gfp_mask)
|
||||
|
|
@ -320,7 +331,17 @@ bl_parse_simple(struct nfs_server *server, struct pnfs_block_dev *d,
|
|||
file_bdev(bdev_file)->bd_disk->disk_name);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static int
|
||||
bl_parse_simple(struct nfs_server *server, struct pnfs_block_dev *d,
|
||||
struct pnfs_block_volume *volumes, int idx, gfp_t gfp_mask)
|
||||
{
|
||||
dprintk("unsupported volume type: %d\n", PNFS_BLOCK_VOLUME_SIMPLE);
|
||||
return -EIO;
|
||||
}
|
||||
#endif /* CONFIG_PNFS_BLOCK_LAYOUT */
|
||||
|
||||
#ifdef CONFIG_PNFS_SCSI_LAYOUT
|
||||
static bool
|
||||
bl_validate_designator(struct pnfs_block_volume *v)
|
||||
{
|
||||
|
|
@ -449,6 +470,15 @@ bl_parse_scsi(struct nfs_server *server, struct pnfs_block_dev *d,
|
|||
d->bdev_file = NULL;
|
||||
return error;
|
||||
}
|
||||
#else
|
||||
static int
|
||||
bl_parse_scsi(struct nfs_server *server, struct pnfs_block_dev *d,
|
||||
struct pnfs_block_volume *volumes, int idx, gfp_t gfp_mask)
|
||||
{
|
||||
dprintk("unsupported volume type: %d\n", PNFS_BLOCK_VOLUME_SCSI);
|
||||
return -EIO;
|
||||
}
|
||||
#endif /* CONFIG_PNFS_SCSI_LAYOUT */
|
||||
|
||||
static int
|
||||
bl_parse_slice(struct nfs_server *server, struct pnfs_block_dev *d,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user