diff mbox

[RFC,v0,06/49] pnfsd: define pnfs_export_operations

Message ID 1380220815-12955-1-git-send-email-bhalevy@primarydata.com (mailing list archive)
State New, archived
Headers show

Commit Message

Benny Halevy Sept. 26, 2013, 6:40 p.m. UTC
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.

[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(-)

Comments

Bruce Fields Sept. 27, 2013, 2:39 p.m. UTC | #1
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
Benny Halevy Sept. 29, 2013, 10:53 a.m. UTC | #2
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
Christoph Hellwig Sept. 29, 2013, 12:14 p.m. UTC | #3
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 mbox

Patch

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 */