On 2013-09-27 17:39, J. Bruce Fields wrote: > On Thu, Sep 26, 2013 at 02:40:15PM -0400, Benny Halevy wrote: >> From: Benny Halevy <bhalevy@xxxxxxxxxxx> >> >> struct pnfs_export_operations defines the VFS level API for pNFS, >> not including callbacks. A pnfs-exportable filesystem sets >> a pointer to its pnfs export vector in its struct super_block.s_pnfs_op. >> >> The file system provides the per-superblock layout_type method that >> determines if it supports pnfs for the filesystem identified by >> the superblock, and if so, with which layout type (only one per-sb is >> supported). >> >> Device ops: >> get_device_iter is used to fill-in the device list for GETDEVICELIST >> and get_device_info is used to encode the device info for GETDEVICEINFO. >> >> Layout ops: >> layout_get, layout_commit, and layout_return implement the file system- and >> layout type- specific parts of their respective protocol operations: LAYOUTGET, >> LAYOUTCOMMIT, and LAYOUTRETURN. >> >> The following methods are mandatory to be implemented: >> layout_type, get_device_info, and layout_get. >> >> Note: define pnfs export operations in a stub form in this patch. >> Actual operations are defined along with their usage. > > Patches touching the superblock or the new pnfs export operations should > probably all be cc'd to linux-fsdevel. Absolutely. I'll add linux-fsdevel in the next iteration. Benny > > --b. > >> >> [pnfsd: provide default no-op operations] >> Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxx> >> [pnfsd: compile fixes for pnfsd branch] >> Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxxxxxx> >> [gfs2: set pnfs_dlm_export_ops only for CONFIG_PNFSD] >> [pnfsd: handle s_pnfs_op==NULL] >> Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxx> >> Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxxxxxx> >> --- >> fs/nfsd/export.c | 2 +- >> include/linux/fs.h | 2 ++ >> include/linux/nfsd/nfsd4_pnfs.h | 14 ++++++++++++++ >> 3 files changed, 17 insertions(+), 1 deletion(-) >> >> diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c >> index 5f38ea3..f26b0b9 100644 >> --- a/fs/nfsd/export.c >> +++ b/fs/nfsd/export.c >> @@ -16,7 +16,7 @@ >> #include <linux/module.h> >> #include <linux/exportfs.h> >> #include <linux/sunrpc/svc_xprt.h> >> - >> +#include <linux/nfsd/nfsd4_pnfs.h> >> #include <net/ipv6.h> >> >> #include "nfsd.h" >> diff --git a/include/linux/fs.h b/include/linux/fs.h >> index 3f40547..d9186a4 100644 >> --- a/include/linux/fs.h >> +++ b/include/linux/fs.h >> @@ -34,6 +34,7 @@ >> #include <uapi/linux/fs.h> >> >> struct export_operations; >> +struct pnfs_export_operations; >> struct hd_geometry; >> struct iovec; >> struct nameidata; >> @@ -1251,6 +1252,7 @@ struct super_block { >> const struct dquot_operations *dq_op; >> const struct quotactl_ops *s_qcop; >> const struct export_operations *s_export_op; >> + const struct pnfs_export_operations *s_pnfs_op; >> unsigned long s_flags; >> unsigned long s_magic; >> struct dentry *s_root; >> diff --git a/include/linux/nfsd/nfsd4_pnfs.h b/include/linux/nfsd/nfsd4_pnfs.h >> index 9e7d95e..ff6613e 100644 >> --- a/include/linux/nfsd/nfsd4_pnfs.h >> +++ b/include/linux/nfsd/nfsd4_pnfs.h >> @@ -34,4 +34,18 @@ >> #ifndef _LINUX_NFSD_NFSD4_PNFS_H >> #define _LINUX_NFSD_NFSD4_PNFS_H >> >> +/* >> + * pNFS export operations vector. >> + * >> + * The filesystem must implement the following methods: >> + * layout_type >> + * get_device_info >> + * layout_get >> + * >> + * All other methods are optional and can be set to NULL if not implemented. >> + */ >> +struct pnfs_export_operations { >> + /* stub */ >> +}; >> + >> #endif /* _LINUX_NFSD_NFSD4_PNFS_H */ >> -- >> 1.8.3.1 >> -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html