Skip to content

Commit

Permalink
nfsd: add a new config option for the block layout driver
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Christoph Hellwig authored and J. Bruce Fields committed Mar 18, 2016
1 parent d9186c0 commit 81c3932
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 8 deletions.
13 changes: 9 additions & 4 deletions fs/nfsd/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,17 @@ config NFSD_V4
If unsure, say N.

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
select NFSD_PNFS
help
This option enables support for the parallel NFS features of the
minor version 1 of the NFSv4 protocol (RFC5661) in the kernel's NFS
server.
This option enables support for the exporting pNFS block layouts
in the kernel's NFS server. The pNFS block layout enables NFS
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.

Expand Down
3 changes: 2 additions & 1 deletion fs/nfsd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ nfsd-$(CONFIG_NFSD_V3) += nfs3proc.o nfs3xdr.o
nfsd-$(CONFIG_NFSD_V3_ACL) += nfs3acl.o
nfsd-$(CONFIG_NFSD_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4idmap.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
4 changes: 4 additions & 0 deletions fs/nfsd/nfs4layouts.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ static const struct nfsd4_callback_ops nfsd4_cb_layout_ops;
static const struct lock_manager_operations nfsd4_layouts_lm_ops;

const struct nfsd4_layout_ops *nfsd4_layout_ops[LAYOUT_TYPE_MAX] = {
#ifdef CONFIG_NFSD_BLOCKLAYOUT
[LAYOUT_BLOCK_VOLUME] = &bl_layout_ops,
#endif
};

/* pNFS device ID to export fsid mapping */
Expand Down Expand Up @@ -121,10 +123,12 @@ void nfsd4_setup_layout_type(struct svc_export *exp)
if (!(exp->ex_flags & NFSEXP_PNFS))
return;

#ifdef CONFIG_NFSD_BLOCKLAYOUT
if (sb->s_export_op->get_uuid &&
sb->s_export_op->map_blocks &&
sb->s_export_op->commit_blocks)
exp->ex_layout_type = LAYOUT_BLOCK_VOLUME;
#endif
}

static void
Expand Down
2 changes: 2 additions & 0 deletions fs/nfsd/pnfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ struct 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;
#endif

__be32 nfsd4_preprocess_layout_stateid(struct svc_rqst *rqstp,
struct nfsd4_compound_state *cstate, stateid_t *stateid,
Expand Down
2 changes: 1 addition & 1 deletion fs/xfs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,4 @@ xfs-$(CONFIG_XFS_RT) += xfs_rtalloc.o
xfs-$(CONFIG_XFS_POSIX_ACL) += xfs_acl.o
xfs-$(CONFIG_SYSCTL) += xfs_sysctl.o
xfs-$(CONFIG_COMPAT) += xfs_ioctl32.o
xfs-$(CONFIG_NFSD_PNFS) += xfs_pnfs.o
xfs-$(CONFIG_NFSD_BLOCKLAYOUT) += xfs_pnfs.o
2 changes: 1 addition & 1 deletion fs/xfs/xfs_export.c
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ const struct export_operations xfs_export_operations = {
.fh_to_parent = xfs_fs_fh_to_parent,
.get_parent = xfs_fs_get_parent,
.commit_metadata = xfs_fs_nfs_commit_metadata,
#ifdef CONFIG_NFSD_PNFS
#ifdef CONFIG_NFSD_BLOCKLAYOUT
.get_uuid = xfs_fs_get_uuid,
.map_blocks = xfs_fs_map_blocks,
.commit_blocks = xfs_fs_commit_blocks,
Expand Down
2 changes: 1 addition & 1 deletion fs/xfs/xfs_pnfs.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef _XFS_PNFS_H
#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_map_blocks(struct inode *inode, loff_t offset, u64 length,
struct iomap *iomap, bool write, u32 *device_generation);
Expand Down

0 comments on commit 81c3932

Please sign in to comment.