Commit 81c39329 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by J. Bruce Fields

nfsd: add a new config option for the block layout driver

Split the config symbols into a generic pNFS one, which is invisible
and gets selected by the layout drivers, and one for the block layout
driver.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent d9186c03
...@@ -84,12 +84,17 @@ config NFSD_V4 ...@@ -84,12 +84,17 @@ config NFSD_V4
If unsure, say N. If unsure, say N.
config NFSD_PNFS config NFSD_PNFS
bool "NFSv4.1 server support for Parallel NFS (pNFS)" bool
config NFSD_BLOCKLAYOUT
bool "NFSv4.1 server support for pNFS block layouts"
depends on NFSD_V4 depends on NFSD_V4
select NFSD_PNFS
help help
This option enables support for the parallel NFS features of the This option enables support for the exporting pNFS block layouts
minor version 1 of the NFSv4 protocol (RFC5661) in the kernel's NFS in the kernel's NFS server. The pNFS block layout enables NFS
server. clients to directly perform I/O to block devices accesible to both
the server and the clients. See RFC 5663 for more details.
If unsure, say N. If unsure, say N.
......
...@@ -17,4 +17,5 @@ nfsd-$(CONFIG_NFSD_V3) += nfs3proc.o nfs3xdr.o ...@@ -17,4 +17,5 @@ nfsd-$(CONFIG_NFSD_V3) += nfs3proc.o nfs3xdr.o
nfsd-$(CONFIG_NFSD_V3_ACL) += nfs3acl.o nfsd-$(CONFIG_NFSD_V3_ACL) += nfs3acl.o
nfsd-$(CONFIG_NFSD_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4idmap.o \ nfsd-$(CONFIG_NFSD_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4idmap.o \
nfs4acl.o nfs4callback.o nfs4recover.o nfs4acl.o nfs4callback.o nfs4recover.o
nfsd-$(CONFIG_NFSD_PNFS) += nfs4layouts.o blocklayout.o blocklayoutxdr.o nfsd-$(CONFIG_NFSD_PNFS) += nfs4layouts.o
nfsd-$(CONFIG_NFSD_BLOCKLAYOUT) += blocklayout.o blocklayoutxdr.o
...@@ -26,7 +26,9 @@ static const struct nfsd4_callback_ops nfsd4_cb_layout_ops; ...@@ -26,7 +26,9 @@ static const struct nfsd4_callback_ops nfsd4_cb_layout_ops;
static const struct lock_manager_operations nfsd4_layouts_lm_ops; static const struct lock_manager_operations nfsd4_layouts_lm_ops;
const struct nfsd4_layout_ops *nfsd4_layout_ops[LAYOUT_TYPE_MAX] = { const struct nfsd4_layout_ops *nfsd4_layout_ops[LAYOUT_TYPE_MAX] = {
#ifdef CONFIG_NFSD_BLOCKLAYOUT
[LAYOUT_BLOCK_VOLUME] = &bl_layout_ops, [LAYOUT_BLOCK_VOLUME] = &bl_layout_ops,
#endif
}; };
/* pNFS device ID to export fsid mapping */ /* pNFS device ID to export fsid mapping */
...@@ -121,10 +123,12 @@ void nfsd4_setup_layout_type(struct svc_export *exp) ...@@ -121,10 +123,12 @@ void nfsd4_setup_layout_type(struct svc_export *exp)
if (!(exp->ex_flags & NFSEXP_PNFS)) if (!(exp->ex_flags & NFSEXP_PNFS))
return; return;
#ifdef CONFIG_NFSD_BLOCKLAYOUT
if (sb->s_export_op->get_uuid && if (sb->s_export_op->get_uuid &&
sb->s_export_op->map_blocks && sb->s_export_op->map_blocks &&
sb->s_export_op->commit_blocks) sb->s_export_op->commit_blocks)
exp->ex_layout_type = LAYOUT_BLOCK_VOLUME; exp->ex_layout_type = LAYOUT_BLOCK_VOLUME;
#endif
} }
static void static void
......
...@@ -35,7 +35,9 @@ struct nfsd4_layout_ops { ...@@ -35,7 +35,9 @@ struct nfsd4_layout_ops {
}; };
extern const struct nfsd4_layout_ops *nfsd4_layout_ops[]; extern const struct nfsd4_layout_ops *nfsd4_layout_ops[];
#ifdef CONFIG_NFSD_BLOCKLAYOUT
extern const struct nfsd4_layout_ops bl_layout_ops; extern const struct nfsd4_layout_ops bl_layout_ops;
#endif
__be32 nfsd4_preprocess_layout_stateid(struct svc_rqst *rqstp, __be32 nfsd4_preprocess_layout_stateid(struct svc_rqst *rqstp,
struct nfsd4_compound_state *cstate, stateid_t *stateid, struct nfsd4_compound_state *cstate, stateid_t *stateid,
......
...@@ -121,4 +121,4 @@ xfs-$(CONFIG_XFS_RT) += xfs_rtalloc.o ...@@ -121,4 +121,4 @@ xfs-$(CONFIG_XFS_RT) += xfs_rtalloc.o
xfs-$(CONFIG_XFS_POSIX_ACL) += xfs_acl.o xfs-$(CONFIG_XFS_POSIX_ACL) += xfs_acl.o
xfs-$(CONFIG_SYSCTL) += xfs_sysctl.o xfs-$(CONFIG_SYSCTL) += xfs_sysctl.o
xfs-$(CONFIG_COMPAT) += xfs_ioctl32.o xfs-$(CONFIG_COMPAT) += xfs_ioctl32.o
xfs-$(CONFIG_NFSD_PNFS) += xfs_pnfs.o xfs-$(CONFIG_NFSD_BLOCKLAYOUT) += xfs_pnfs.o
...@@ -246,7 +246,7 @@ const struct export_operations xfs_export_operations = { ...@@ -246,7 +246,7 @@ const struct export_operations xfs_export_operations = {
.fh_to_parent = xfs_fs_fh_to_parent, .fh_to_parent = xfs_fs_fh_to_parent,
.get_parent = xfs_fs_get_parent, .get_parent = xfs_fs_get_parent,
.commit_metadata = xfs_fs_nfs_commit_metadata, .commit_metadata = xfs_fs_nfs_commit_metadata,
#ifdef CONFIG_NFSD_PNFS #ifdef CONFIG_NFSD_BLOCKLAYOUT
.get_uuid = xfs_fs_get_uuid, .get_uuid = xfs_fs_get_uuid,
.map_blocks = xfs_fs_map_blocks, .map_blocks = xfs_fs_map_blocks,
.commit_blocks = xfs_fs_commit_blocks, .commit_blocks = xfs_fs_commit_blocks,
......
#ifndef _XFS_PNFS_H #ifndef _XFS_PNFS_H
#define _XFS_PNFS_H 1 #define _XFS_PNFS_H 1
#ifdef CONFIG_NFSD_PNFS #ifdef CONFIG_NFSD_BLOCKLAYOUT
int xfs_fs_get_uuid(struct super_block *sb, u8 *buf, u32 *len, u64 *offset); int xfs_fs_get_uuid(struct super_block *sb, u8 *buf, u32 *len, u64 *offset);
int xfs_fs_map_blocks(struct inode *inode, loff_t offset, u64 length, int xfs_fs_map_blocks(struct inode *inode, loff_t offset, u64 length,
struct iomap *iomap, bool write, u32 *device_generation); struct iomap *iomap, bool write, u32 *device_generation);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment