2013-02-22 08:47:17

by Steve Dickson

[permalink] [raw]
Subject: [PATCH 0/2] NFS v4.2 support to both the server and client (take 2)

These patche added v4.2 support to both the server and client.
Basically the v4.1 code is reused, but the minor version is
needed to enable features like label NFS.

Note, these patch apply on top of the lNFS: 3.8-rc3 release
patches. Although the only conflict if applied without those patches
would be in the Kconfig files

Steve Dickson (2):
NFSv4.2: Added NFS v4.2 support to the NFS client
NFSDv4.2: Added NFS v4.2 support to the NFS server

fs/nfs/Kconfig | 12 +++++++++++-
fs/nfs/callback.c | 3 +++
fs/nfs/nfs4client.c | 5 +++++
fs/nfs/nfs4proc.c | 3 +++
fs/nfs/super.c | 7 ++++++-
fs/nfsd/nfs4xdr.c | 1 +
fs/nfsd/nfsd.h | 2 +-
include/linux/nfs4.h | 4 ++++
8 files changed, 34 insertions(+), 3 deletions(-)

--
1.8.1.2



2013-02-22 13:11:13

by Jim Rees

[permalink] [raw]
Subject: Re: [PATCH 1/2] NFSv4.2: Added NFS v4.2 support to the NFS client

Steve Dickson wrote:

+config NFS_V4_2
+ bool "NFS client support for NFSv4.2"
+ depends on NFS_V4_1
+ select NFS_V4_SECURITY_LABEL
+ help
+ This option enables support for minor version 1 of the NFSv4 protocol
+ in the kernel's NFS client.
+
+ If unsure, say N.
+

Shouldn't that be "enables support for minor version 2..."?

2013-02-22 15:39:16

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 0/2] NFS v4.2 support to both the server and client (take 2)

On Fri, Feb 22, 2013 at 03:47:10AM -0500, Steve Dickson wrote:
> These patche added v4.2 support to both the server and client.
> Basically the v4.1 code is reused, but the minor version is
> needed to enable features like label NFS.

Same comments as on previous patches.

(Sorry didn't notice there was another posting!)

--b.

>
> Note, these patch apply on top of the lNFS: 3.8-rc3 release
> patches. Although the only conflict if applied without those patches
> would be in the Kconfig files
>
> Steve Dickson (2):
> NFSv4.2: Added NFS v4.2 support to the NFS client
> NFSDv4.2: Added NFS v4.2 support to the NFS server
>
> fs/nfs/Kconfig | 12 +++++++++++-
> fs/nfs/callback.c | 3 +++
> fs/nfs/nfs4client.c | 5 +++++
> fs/nfs/nfs4proc.c | 3 +++
> fs/nfs/super.c | 7 ++++++-
> fs/nfsd/nfs4xdr.c | 1 +
> fs/nfsd/nfsd.h | 2 +-
> include/linux/nfs4.h | 4 ++++
> 8 files changed, 34 insertions(+), 3 deletions(-)
>
> --
> 1.8.1.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

2013-02-22 13:55:49

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH 1/2] NFSv4.2: Added NFS v4.2 support to the NFS client



On 22/02/13 08:11, Jim Rees wrote:
> Steve Dickson wrote:
>
> +config NFS_V4_2
> + bool "NFS client support for NFSv4.2"
> + depends on NFS_V4_1
> + select NFS_V4_SECURITY_LABEL
> + help
> + This option enables support for minor version 1 of the NFSv4 protocol
> + in the kernel's NFS client.
> +
> + If unsure, say N.
> +
>
> Shouldn't that be "enables support for minor version 2..."?
>
Yes it should be... thanks!

steved.

2013-02-22 08:47:18

by Steve Dickson

[permalink] [raw]
Subject: [PATCH 1/2] NFSv4.2: Added NFS v4.2 support to the NFS client

This enable NFSv4.2 support. To enable this code the
CONFIG_NFS_V4_2 Kconfig define needs to be set and
the -o v4.2 mount option need to be used.

Signed-off-by: Steve Dickson <[email protected]>
---
fs/nfs/Kconfig | 12 +++++++++++-
fs/nfs/callback.c | 3 +++
fs/nfs/nfs4client.c | 5 +++++
fs/nfs/nfs4proc.c | 3 +++
fs/nfs/super.c | 7 ++++++-
include/linux/nfs4.h | 4 ++++
6 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
index 3861a1f..b80754b 100644
--- a/fs/nfs/Kconfig
+++ b/fs/nfs/Kconfig
@@ -104,6 +104,16 @@ config NFS_V4_1

If unsure, say N.

+config NFS_V4_2
+ bool "NFS client support for NFSv4.2"
+ depends on NFS_V4_1
+ select NFS_V4_SECURITY_LABEL
+ help
+ This option enables support for minor version 1 of the NFSv4 protocol
+ in the kernel's NFS client.
+
+ If unsure, say N.
+
config PNFS_FILE_LAYOUT
tristate
depends on NFS_V4_1
@@ -133,7 +143,7 @@ config NFS_V4_1_IMPLEMENTATION_ID_DOMAIN

config NFS_V4_SECURITY_LABEL
bool "Provide Security Label support for NFSv4 client"
- depends on NFS_V4 && SECURITY
+ depends on NFS_V4_2 && SECURITY
help

Say Y here if you want enable fine-grained security label attribute
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
index 5088b57..4058ec8 100644
--- a/fs/nfs/callback.c
+++ b/fs/nfs/callback.c
@@ -281,6 +281,9 @@ static int nfs_callback_up_net(int minorversion, struct svc_serv *serv, struct n
case 1:
ret = nfs41_callback_up_net(serv, net);
break;
+ case 2:
+ ret = nfs41_callback_up_net(serv, net);
+ break;
default:
printk(KERN_ERR "NFS: unknown callback version: %d\n",
minorversion);
diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
index 2e9779b..2987fd6 100644
--- a/fs/nfs/nfs4client.c
+++ b/fs/nfs/nfs4client.c
@@ -66,6 +66,11 @@ struct nfs_client *nfs4_alloc_client(const struct nfs_client_initdata *cl_init)
if (err)
goto error;

+ if (cl_init->minorversion > NFS4_MAX_MINOR_VERSION) {
+ err = -EINVAL;
+ goto error;
+ }
+
spin_lock_init(&clp->cl_lock);
INIT_DELAYED_WORK(&clp->cl_renewd, nfs4_renew_state);
rpc_init_wait_queue(&clp->cl_rpcwaitq, "NFS client");
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 30b3e44..2384f91 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -7136,6 +7136,9 @@ const struct nfs4_minor_version_ops *nfs_v4_minor_ops[] = {
#if defined(CONFIG_NFS_V4_1)
[1] = &nfs_v4_1_minor_ops,
#endif
+#if defined(CONFIG_NFS_V4_2)
+ [2] = &nfs_v4_1_minor_ops,
+#endif
};

const struct inode_operations nfs4_dir_inode_operations = {
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 4e78f93..d35582c 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -269,7 +269,7 @@ static match_table_t nfs_local_lock_tokens = {

enum {
Opt_vers_2, Opt_vers_3, Opt_vers_4, Opt_vers_4_0,
- Opt_vers_4_1,
+ Opt_vers_4_1, Opt_vers_4_2,

Opt_vers_err
};
@@ -280,6 +280,7 @@ static match_table_t nfs_vers_tokens = {
{ Opt_vers_4, "4" },
{ Opt_vers_4_0, "4.0" },
{ Opt_vers_4_1, "4.1" },
+ { Opt_vers_4_2, "4.2" },

{ Opt_vers_err, NULL }
};
@@ -1143,6 +1144,10 @@ static int nfs_parse_version_string(char *string,
mnt->version = 4;
mnt->minorversion = 1;
break;
+ case Opt_vers_4_2:
+ mnt->version = 4;
+ mnt->minorversion = 2;
+ break;
default:
return 0;
}
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h
index aab8bd8..e9c040a 100644
--- a/include/linux/nfs4.h
+++ b/include/linux/nfs4.h
@@ -394,11 +394,15 @@ enum lock_type4 {
#define NFS4_VERSION 4
#define NFS4_MINOR_VERSION 0

+#if defined(CONFIG_NFS_V4_2)
+#define NFS4_MAX_MINOR_VERSION 2
+#else
#if defined(CONFIG_NFS_V4_1)
#define NFS4_MAX_MINOR_VERSION 1
#else
#define NFS4_MAX_MINOR_VERSION 0
#endif /* CONFIG_NFS_V4_1 */
+#endif /* CONFIG_NFS_V4_2 */

#define NFS4_DEBUG 1

--
1.8.1.2


2013-02-22 08:47:17

by Steve Dickson

[permalink] [raw]
Subject: [PATCH 2/2] NFSDv4.2: Added NFS v4.2 support to the NFS server

This enable NFSv4.2 support for the server. To enable this
code do the following:
echo "+4.2" >/proc/fs/nfsd/versions

after the nfsd kernel module is loaded.

Signed-off-by: Steve Dickson <[email protected]>
---
fs/nfsd/nfs4xdr.c | 1 +
fs/nfsd/nfsd.h | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index d2ae8db..86be853 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -1621,6 +1621,7 @@ struct nfsd4_minorversion_ops {
static struct nfsd4_minorversion_ops nfsd4_minorversion[] = {
[0] = { nfsd4_dec_ops, ARRAY_SIZE(nfsd4_dec_ops) },
[1] = { nfsd41_dec_ops, ARRAY_SIZE(nfsd41_dec_ops) },
+ [2] = { nfsd41_dec_ops, ARRAY_SIZE(nfsd41_dec_ops) },
};

static __be32
diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
index 26a457b..0e3ccd1 100644
--- a/fs/nfsd/nfsd.h
+++ b/fs/nfsd/nfsd.h
@@ -24,7 +24,7 @@
/*
* nfsd version
*/
-#define NFSD_SUPPORTED_MINOR_VERSION 1
+#define NFSD_SUPPORTED_MINOR_VERSION 2
/*
* Maximum blocksizes supported by daemon under various circumstances.
*/
--
1.8.1.2