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: Christoph Hellwig <hch@lst.de> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
Родитель
d9186c0397
Коммит
81c3932901
|
@ -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
|
||||||
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;
|
||||||
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)
|
||||||
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 {
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
||||||
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 = {
|
||||||
.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,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче