Message ID | 1380220815-12955-1-git-send-email-bhalevy@primarydata.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Sep 26, 2013 at 02:40:15PM -0400, Benny Halevy wrote: > From: Benny Halevy <bhalevy@panasas.com> > > 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. --b. > > [pnfsd: provide default no-op operations] > Signed-off-by: Benny Halevy <bhalevy@panasas.com> > [pnfsd: compile fixes for pnfsd branch] > Signed-off-by: Fred Isaman <iisaman@citi.umich.edu> > [gfs2: set pnfs_dlm_export_ops only for CONFIG_PNFSD] > [pnfsd: handle s_pnfs_op==NULL] > Signed-off-by: Benny Halevy <bhalevy@panasas.com> > Signed-off-by: Benny Halevy <bhalevy@primarydata.com> > --- > 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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@panasas.com> >> >> 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@panasas.com> >> [pnfsd: compile fixes for pnfsd branch] >> Signed-off-by: Fred Isaman <iisaman@citi.umich.edu> >> [gfs2: set pnfs_dlm_export_ops only for CONFIG_PNFSD] >> [pnfsd: handle s_pnfs_op==NULL] >> Signed-off-by: Benny Halevy <bhalevy@panasas.com> >> Signed-off-by: Benny Halevy <bhalevy@primarydata.com> >> --- >> 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
I can't see any reason why you'd want to split this from the normal export_operations. -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 */