* [PATCH 1/2] NFSv4.2: Added NFS v4.2 support to the NFS client
2013-02-22 8:47 [PATCH 0/2] NFS v4.2 support to both the server and client (take 2) Steve Dickson
@ 2013-02-22 8:47 ` Steve Dickson
2013-02-22 13:11 ` Jim Rees
2013-02-22 8:47 ` [PATCH 2/2] NFSDv4.2: Added NFS v4.2 support to the NFS server Steve Dickson
2013-02-22 15:39 ` [PATCH 0/2] NFS v4.2 support to both the server and client (take 2) J. Bruce Fields
2 siblings, 1 reply; 6+ messages in thread
From: Steve Dickson @ 2013-02-22 8:47 UTC (permalink / raw)
To: Trond Myklebust, J. Bruce Fields; +Cc: Linux NFS Mailing list
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 <steved@redhat.com>
---
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
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 2/2] NFSDv4.2: Added NFS v4.2 support to the NFS server
2013-02-22 8:47 [PATCH 0/2] NFS v4.2 support to both the server and client (take 2) Steve Dickson
2013-02-22 8:47 ` [PATCH 1/2] NFSv4.2: Added NFS v4.2 support to the NFS client Steve Dickson
@ 2013-02-22 8:47 ` Steve Dickson
2013-02-22 15:39 ` [PATCH 0/2] NFS v4.2 support to both the server and client (take 2) J. Bruce Fields
2 siblings, 0 replies; 6+ messages in thread
From: Steve Dickson @ 2013-02-22 8:47 UTC (permalink / raw)
To: Trond Myklebust, J. Bruce Fields; +Cc: Linux NFS Mailing list
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 <steved@redhat.com>
---
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
^ permalink raw reply related [flat|nested] 6+ messages in thread