linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/3] nfsd: ignore requests to disable unsupported versions
@ 2022-10-18 11:47 Jeff Layton
  2022-10-18 11:47 ` [PATCH v3 2/3] nfsd: move nfserrno() to vfs.c Jeff Layton
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Jeff Layton @ 2022-10-18 11:47 UTC (permalink / raw)
  To: chuck.lever; +Cc: tom, linux-nfs

The kernel currently errors out if you attempt to enable or disable a
version that it doesn't recognize. Change it to ignore attempts to
disable an unrecognized version. If we don't support it, then there is
no harm in doing so.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
 fs/nfsd/nfsctl.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index dc74a947a440..68ed42fd29fc 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -601,7 +601,9 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
 				}
 				break;
 			default:
-				return -EINVAL;
+				/* Ignore requests to disable non-existent versions */
+				if (cmd == NFSD_SET)
+					return -EINVAL;
 			}
 			vers += len + 1;
 		} while ((len = qword_get(&mesg, vers, size)) > 0);
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v3 2/3] nfsd: move nfserrno() to vfs.c
  2022-10-18 11:47 [PATCH v3 1/3] nfsd: ignore requests to disable unsupported versions Jeff Layton
@ 2022-10-18 11:47 ` Jeff Layton
  2022-10-18 11:47 ` [PATCH v3 3/3] nfsd: allow disabling NFSv2 at compile time Jeff Layton
  2022-10-19 14:58 ` [PATCH v3 1/3] nfsd: ignore requests to disable unsupported versions Tom Talpey
  2 siblings, 0 replies; 6+ messages in thread
From: Jeff Layton @ 2022-10-18 11:47 UTC (permalink / raw)
  To: chuck.lever; +Cc: tom, linux-nfs

nfserrno() is common to all nfs versions, but nfsproc.c is specifically
for NFSv2. Move it to vfs.c, and the prototype to vfs.h.

While we're in here, remove the #ifdef EDQUOT check in this function.
It's apparently a holdover from the initial merge of the nfsd code in
1997. No other place in the kernel checks that that symbol is defined
before using it, so I think we can dispense with it here.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
 fs/nfsd/blocklayout.c    |  1 +
 fs/nfsd/blocklayoutxdr.c |  1 +
 fs/nfsd/export.h         |  1 -
 fs/nfsd/flexfilelayout.c |  1 +
 fs/nfsd/nfs4idmap.c      |  1 +
 fs/nfsd/nfsproc.c        | 62 ---------------------------------------
 fs/nfsd/vfs.c            | 63 ++++++++++++++++++++++++++++++++++++++++
 fs/nfsd/vfs.h            |  1 +
 8 files changed, 68 insertions(+), 63 deletions(-)

diff --git a/fs/nfsd/blocklayout.c b/fs/nfsd/blocklayout.c
index b6d01d51a746..04697f8dc37d 100644
--- a/fs/nfsd/blocklayout.c
+++ b/fs/nfsd/blocklayout.c
@@ -12,6 +12,7 @@
 #include "blocklayoutxdr.h"
 #include "pnfs.h"
 #include "filecache.h"
+#include "vfs.h"
 
 #define NFSDDBG_FACILITY	NFSDDBG_PNFS
 
diff --git a/fs/nfsd/blocklayoutxdr.c b/fs/nfsd/blocklayoutxdr.c
index 442543304930..8e9c1a0f8d38 100644
--- a/fs/nfsd/blocklayoutxdr.c
+++ b/fs/nfsd/blocklayoutxdr.c
@@ -9,6 +9,7 @@
 
 #include "nfsd.h"
 #include "blocklayoutxdr.h"
+#include "vfs.h"
 
 #define NFSDDBG_FACILITY	NFSDDBG_PNFS
 
diff --git a/fs/nfsd/export.h b/fs/nfsd/export.h
index ee0e3aba4a6e..d03f7f6a8642 100644
--- a/fs/nfsd/export.h
+++ b/fs/nfsd/export.h
@@ -115,7 +115,6 @@ struct svc_export *	rqst_find_fsidzero_export(struct svc_rqst *);
 int			exp_rootfh(struct net *, struct auth_domain *,
 					char *path, struct knfsd_fh *, int maxsize);
 __be32			exp_pseudoroot(struct svc_rqst *, struct svc_fh *);
-__be32			nfserrno(int errno);
 
 static inline void exp_put(struct svc_export *exp)
 {
diff --git a/fs/nfsd/flexfilelayout.c b/fs/nfsd/flexfilelayout.c
index 070f90ed09b6..3ca5304440ff 100644
--- a/fs/nfsd/flexfilelayout.c
+++ b/fs/nfsd/flexfilelayout.c
@@ -15,6 +15,7 @@
 
 #include "flexfilelayoutxdr.h"
 #include "pnfs.h"
+#include "vfs.h"
 
 #define NFSDDBG_FACILITY	NFSDDBG_PNFS
 
diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c
index e70a1a2999b7..5e9809aff37e 100644
--- a/fs/nfsd/nfs4idmap.c
+++ b/fs/nfsd/nfs4idmap.c
@@ -41,6 +41,7 @@
 #include "idmap.h"
 #include "nfsd.h"
 #include "netns.h"
+#include "vfs.h"
 
 /*
  * Turn off idmapping when using AUTH_SYS.
diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c
index 82b3ddeacc33..52fc222c34f2 100644
--- a/fs/nfsd/nfsproc.c
+++ b/fs/nfsd/nfsproc.c
@@ -848,65 +848,3 @@ const struct svc_version nfsd_version2 = {
 	.vs_dispatch	= nfsd_dispatch,
 	.vs_xdrsize	= NFS2_SVC_XDRSIZE,
 };
-
-/*
- * Map errnos to NFS errnos.
- */
-__be32
-nfserrno (int errno)
-{
-	static struct {
-		__be32	nfserr;
-		int	syserr;
-	} nfs_errtbl[] = {
-		{ nfs_ok, 0 },
-		{ nfserr_perm, -EPERM },
-		{ nfserr_noent, -ENOENT },
-		{ nfserr_io, -EIO },
-		{ nfserr_nxio, -ENXIO },
-		{ nfserr_fbig, -E2BIG },
-		{ nfserr_stale, -EBADF },
-		{ nfserr_acces, -EACCES },
-		{ nfserr_exist, -EEXIST },
-		{ nfserr_xdev, -EXDEV },
-		{ nfserr_mlink, -EMLINK },
-		{ nfserr_nodev, -ENODEV },
-		{ nfserr_notdir, -ENOTDIR },
-		{ nfserr_isdir, -EISDIR },
-		{ nfserr_inval, -EINVAL },
-		{ nfserr_fbig, -EFBIG },
-		{ nfserr_nospc, -ENOSPC },
-		{ nfserr_rofs, -EROFS },
-		{ nfserr_mlink, -EMLINK },
-		{ nfserr_nametoolong, -ENAMETOOLONG },
-		{ nfserr_notempty, -ENOTEMPTY },
-#ifdef EDQUOT
-		{ nfserr_dquot, -EDQUOT },
-#endif
-		{ nfserr_stale, -ESTALE },
-		{ nfserr_jukebox, -ETIMEDOUT },
-		{ nfserr_jukebox, -ERESTARTSYS },
-		{ nfserr_jukebox, -EAGAIN },
-		{ nfserr_jukebox, -EWOULDBLOCK },
-		{ nfserr_jukebox, -ENOMEM },
-		{ nfserr_io, -ETXTBSY },
-		{ nfserr_notsupp, -EOPNOTSUPP },
-		{ nfserr_toosmall, -ETOOSMALL },
-		{ nfserr_serverfault, -ESERVERFAULT },
-		{ nfserr_serverfault, -ENFILE },
-		{ nfserr_io, -EREMOTEIO },
-		{ nfserr_stale, -EOPENSTALE },
-		{ nfserr_io, -EUCLEAN },
-		{ nfserr_perm, -ENOKEY },
-		{ nfserr_no_grace, -ENOGRACE},
-	};
-	int	i;
-
-	for (i = 0; i < ARRAY_SIZE(nfs_errtbl); i++) {
-		if (nfs_errtbl[i].syserr == errno)
-			return nfs_errtbl[i].nfserr;
-	}
-	WARN_ONCE(1, "nfsd: non-standard errno: %d\n", errno);
-	return nfserr_io;
-}
-
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index 83be89905cbf..bee6f4a32f3b 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -49,6 +49,69 @@
 
 #define NFSDDBG_FACILITY		NFSDDBG_FILEOP
 
+/**
+ * nfserrno - Map Linux errnos to NFS errnos
+ * @errno: POSIX(-ish) error code to be mapped
+ *
+ * Returns the appropriate (net-endian) nfserr_* (or nfs_ok if errno is 0). If
+ * it's an error we don't expect, log it once and return nfserr_io.
+ */
+__be32
+nfserrno (int errno)
+{
+	static struct {
+		__be32	nfserr;
+		int	syserr;
+	} nfs_errtbl[] = {
+		{ nfs_ok, 0 },
+		{ nfserr_perm, -EPERM },
+		{ nfserr_noent, -ENOENT },
+		{ nfserr_io, -EIO },
+		{ nfserr_nxio, -ENXIO },
+		{ nfserr_fbig, -E2BIG },
+		{ nfserr_stale, -EBADF },
+		{ nfserr_acces, -EACCES },
+		{ nfserr_exist, -EEXIST },
+		{ nfserr_xdev, -EXDEV },
+		{ nfserr_mlink, -EMLINK },
+		{ nfserr_nodev, -ENODEV },
+		{ nfserr_notdir, -ENOTDIR },
+		{ nfserr_isdir, -EISDIR },
+		{ nfserr_inval, -EINVAL },
+		{ nfserr_fbig, -EFBIG },
+		{ nfserr_nospc, -ENOSPC },
+		{ nfserr_rofs, -EROFS },
+		{ nfserr_mlink, -EMLINK },
+		{ nfserr_nametoolong, -ENAMETOOLONG },
+		{ nfserr_notempty, -ENOTEMPTY },
+		{ nfserr_dquot, -EDQUOT },
+		{ nfserr_stale, -ESTALE },
+		{ nfserr_jukebox, -ETIMEDOUT },
+		{ nfserr_jukebox, -ERESTARTSYS },
+		{ nfserr_jukebox, -EAGAIN },
+		{ nfserr_jukebox, -EWOULDBLOCK },
+		{ nfserr_jukebox, -ENOMEM },
+		{ nfserr_io, -ETXTBSY },
+		{ nfserr_notsupp, -EOPNOTSUPP },
+		{ nfserr_toosmall, -ETOOSMALL },
+		{ nfserr_serverfault, -ESERVERFAULT },
+		{ nfserr_serverfault, -ENFILE },
+		{ nfserr_io, -EREMOTEIO },
+		{ nfserr_stale, -EOPENSTALE },
+		{ nfserr_io, -EUCLEAN },
+		{ nfserr_perm, -ENOKEY },
+		{ nfserr_no_grace, -ENOGRACE},
+	};
+	int	i;
+
+	for (i = 0; i < ARRAY_SIZE(nfs_errtbl); i++) {
+		if (nfs_errtbl[i].syserr == errno)
+			return nfs_errtbl[i].nfserr;
+	}
+	WARN_ONCE(1, "nfsd: non-standard errno: %d\n", errno);
+	return nfserr_io;
+}
+
 /* 
  * Called from nfsd_lookup and encode_dirent. Check if we have crossed 
  * a mount point.
diff --git a/fs/nfsd/vfs.h b/fs/nfsd/vfs.h
index c98e13ec37b2..b556e9307d37 100644
--- a/fs/nfsd/vfs.h
+++ b/fs/nfsd/vfs.h
@@ -60,6 +60,7 @@ static inline void nfsd_attrs_free(struct nfsd_attrs *attrs)
 	posix_acl_release(attrs->na_dpacl);
 }
 
+__be32		nfserrno (int errno);
 int		nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp,
 		                struct svc_export **expp);
 __be32		nfsd_lookup(struct svc_rqst *, struct svc_fh *,
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v3 3/3] nfsd: allow disabling NFSv2 at compile time
  2022-10-18 11:47 [PATCH v3 1/3] nfsd: ignore requests to disable unsupported versions Jeff Layton
  2022-10-18 11:47 ` [PATCH v3 2/3] nfsd: move nfserrno() to vfs.c Jeff Layton
@ 2022-10-18 11:47 ` Jeff Layton
  2022-10-19 15:09   ` Tom Talpey
  2022-10-19 14:58 ` [PATCH v3 1/3] nfsd: ignore requests to disable unsupported versions Tom Talpey
  2 siblings, 1 reply; 6+ messages in thread
From: Jeff Layton @ 2022-10-18 11:47 UTC (permalink / raw)
  To: chuck.lever; +Cc: tom, linux-nfs

rpc.nfsd stopped supporting NFSv2 a year ago. Take the next logical
step toward deprecating it and allow NFSv2 support to be compiled out.

Add a new CONFIG_NFSD_V2 option that can be turned off and rework the
CONFIG_NFSD_V?_ACL option dependencies. Add a description that
discourages enabling it.

Also, change the description of CONFIG_NFSD to state that the always-on
version is now 3 instead of 2.

Finally, add an #ifdef around "case 2:" in __write_versions. When NFSv2
is disabled at compile time, this should make the kernel ignore attempts
to disable it at runtime, but still error out when trying to enable it.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
 fs/nfsd/Kconfig  | 19 +++++++++++++++----
 fs/nfsd/Makefile |  5 +++--
 fs/nfsd/nfsctl.c |  2 ++
 fs/nfsd/nfsd.h   |  3 +--
 fs/nfsd/nfssvc.c |  6 ++++++
 5 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig
index f6a2fd3015e7..7c441f2bd444 100644
--- a/fs/nfsd/Kconfig
+++ b/fs/nfsd/Kconfig
@@ -8,6 +8,7 @@ config NFSD
 	select SUNRPC
 	select EXPORTFS
 	select NFS_ACL_SUPPORT if NFSD_V2_ACL
+	select NFS_ACL_SUPPORT if NFSD_V3_ACL
 	depends on MULTIUSER
 	help
 	  Choose Y here if you want to allow other computers to access
@@ -26,19 +27,29 @@ config NFSD
 
 	  Below you can choose which versions of the NFS protocol are
 	  available to clients mounting the NFS server on this system.
-	  Support for NFS version 2 (RFC 1094) is always available when
+	  Support for NFS version 3 (RFC 1813) is always available when
 	  CONFIG_NFSD is selected.
 
 	  If unsure, say N.
 
-config NFSD_V2_ACL
-	bool
+config NFSD_V2
+	bool "NFS server support for NFS version 2 (DEPRECATED)"
 	depends on NFSD
+	default n
+	help
+	  NFSv2 (RFC 1094) was the first publicly-released version of NFS.
+	  Unless you are hosting ancient (1990's era) NFS clients, you don't
+	  need this.
+
+	  If unsure, say N.
+
+config NFSD_V2_ACL
+	bool "NFS server support for the NFSv2 ACL protocol extension"
+	depends on NFSD_V2
 
 config NFSD_V3_ACL
 	bool "NFS server support for the NFSv3 ACL protocol extension"
 	depends on NFSD
-	select NFSD_V2_ACL
 	help
 	  Solaris NFS servers support an auxiliary NFSv3 ACL protocol that
 	  never became an official part of the NFS version 3 protocol.
diff --git a/fs/nfsd/Makefile b/fs/nfsd/Makefile
index 805c06d5f1b4..6fffc8f03f74 100644
--- a/fs/nfsd/Makefile
+++ b/fs/nfsd/Makefile
@@ -10,9 +10,10 @@ obj-$(CONFIG_NFSD)	+= nfsd.o
 # this one should be compiled first, as the tracing macros can easily blow up
 nfsd-y			+= trace.o
 
-nfsd-y 			+= nfssvc.o nfsctl.o nfsproc.o nfsfh.o vfs.o \
-			   export.o auth.o lockd.o nfscache.o nfsxdr.o \
+nfsd-y 			+= nfssvc.o nfsctl.o nfsfh.o vfs.o \
+			   export.o auth.o lockd.o nfscache.o \
 			   stats.o filecache.o nfs3proc.o nfs3xdr.o
+nfsd-$(CONFIG_NFSD_V2) += nfsproc.o nfsxdr.o
 nfsd-$(CONFIG_NFSD_V2_ACL) += nfs2acl.o
 nfsd-$(CONFIG_NFSD_V3_ACL) += nfs3acl.o
 nfsd-$(CONFIG_NFSD_V4)	+= nfs4proc.o nfs4xdr.o nfs4state.o nfs4idmap.o \
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index 68ed42fd29fc..d1e581a60480 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -581,7 +581,9 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
 
 			cmd = sign == '-' ? NFSD_CLEAR : NFSD_SET;
 			switch(num) {
+#ifdef CONFIG_NFSD_V2
 			case 2:
+#endif
 			case 3:
 				nfsd_vers(nn, num, cmd);
 				break;
diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
index 09726c5b9a31..93b42ef9ed91 100644
--- a/fs/nfsd/nfsd.h
+++ b/fs/nfsd/nfsd.h
@@ -64,8 +64,7 @@ struct readdir_cd {
 
 
 extern struct svc_program	nfsd_program;
-extern const struct svc_version	nfsd_version2, nfsd_version3,
-				nfsd_version4;
+extern const struct svc_version	nfsd_version2, nfsd_version3, nfsd_version4;
 extern struct mutex		nfsd_mutex;
 extern spinlock_t		nfsd_drc_lock;
 extern unsigned long		nfsd_drc_max_mem;
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index bfbd9f672f59..62e473b0ca52 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -91,8 +91,12 @@ unsigned long	nfsd_drc_mem_used;
 #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
 static struct svc_stat	nfsd_acl_svcstats;
 static const struct svc_version *nfsd_acl_version[] = {
+# if defined(CONFIG_NFSD_V2_ACL)
 	[2] = &nfsd_acl_version2,
+# endif
+# if defined(CONFIG_NFSD_V3_ACL)
 	[3] = &nfsd_acl_version3,
+# endif
 };
 
 #define NFSD_ACL_MINVERS            2
@@ -116,7 +120,9 @@ static struct svc_stat	nfsd_acl_svcstats = {
 #endif /* defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) */
 
 static const struct svc_version *nfsd_version[] = {
+#if defined(CONFIG_NFSD_V2)
 	[2] = &nfsd_version2,
+#endif
 	[3] = &nfsd_version3,
 #if defined(CONFIG_NFSD_V4)
 	[4] = &nfsd_version4,
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 1/3] nfsd: ignore requests to disable unsupported versions
  2022-10-18 11:47 [PATCH v3 1/3] nfsd: ignore requests to disable unsupported versions Jeff Layton
  2022-10-18 11:47 ` [PATCH v3 2/3] nfsd: move nfserrno() to vfs.c Jeff Layton
  2022-10-18 11:47 ` [PATCH v3 3/3] nfsd: allow disabling NFSv2 at compile time Jeff Layton
@ 2022-10-19 14:58 ` Tom Talpey
  2 siblings, 0 replies; 6+ messages in thread
From: Tom Talpey @ 2022-10-19 14:58 UTC (permalink / raw)
  To: Jeff Layton, chuck.lever; +Cc: linux-nfs

Stylistically, I think this needs a "break;", but otherwise

Reviewed-by: Tom Talpey <tom@talpey.com>

On 10/18/2022 7:47 AM, Jeff Layton wrote:
> The kernel currently errors out if you attempt to enable or disable a
> version that it doesn't recognize. Change it to ignore attempts to
> disable an unrecognized version. If we don't support it, then there is
> no harm in doing so.
> 
> Signed-off-by: Jeff Layton <jlayton@kernel.org>
> ---
>   fs/nfsd/nfsctl.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
> index dc74a947a440..68ed42fd29fc 100644
> --- a/fs/nfsd/nfsctl.c
> +++ b/fs/nfsd/nfsctl.c
> @@ -601,7 +601,9 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
>   				}
>   				break;
>   			default:
> -				return -EINVAL;
> +				/* Ignore requests to disable non-existent versions */
> +				if (cmd == NFSD_SET)
> +					return -EINVAL;
>   			}
>   			vers += len + 1;
>   		} while ((len = qword_get(&mesg, vers, size)) > 0);

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 3/3] nfsd: allow disabling NFSv2 at compile time
  2022-10-18 11:47 ` [PATCH v3 3/3] nfsd: allow disabling NFSv2 at compile time Jeff Layton
@ 2022-10-19 15:09   ` Tom Talpey
  2022-10-19 16:23     ` Jeff Layton
  0 siblings, 1 reply; 6+ messages in thread
From: Tom Talpey @ 2022-10-19 15:09 UTC (permalink / raw)
  To: Jeff Layton, chuck.lever; +Cc: linux-nfs

LGTM

Reviewed-by: Tom Talpey <tom@talpey.com>

Next, to make it a module!

On 10/18/2022 7:47 AM, Jeff Layton wrote:
> rpc.nfsd stopped supporting NFSv2 a year ago. Take the next logical
> step toward deprecating it and allow NFSv2 support to be compiled out.
> 
> Add a new CONFIG_NFSD_V2 option that can be turned off and rework the
> CONFIG_NFSD_V?_ACL option dependencies. Add a description that
> discourages enabling it.
> 
> Also, change the description of CONFIG_NFSD to state that the always-on
> version is now 3 instead of 2.
> 
> Finally, add an #ifdef around "case 2:" in __write_versions. When NFSv2
> is disabled at compile time, this should make the kernel ignore attempts
> to disable it at runtime, but still error out when trying to enable it.
> 
> Signed-off-by: Jeff Layton <jlayton@kernel.org>
> ---
>   fs/nfsd/Kconfig  | 19 +++++++++++++++----
>   fs/nfsd/Makefile |  5 +++--
>   fs/nfsd/nfsctl.c |  2 ++
>   fs/nfsd/nfsd.h   |  3 +--
>   fs/nfsd/nfssvc.c |  6 ++++++
>   5 files changed, 27 insertions(+), 8 deletions(-)
> 
> diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig
> index f6a2fd3015e7..7c441f2bd444 100644
> --- a/fs/nfsd/Kconfig
> +++ b/fs/nfsd/Kconfig
> @@ -8,6 +8,7 @@ config NFSD
>   	select SUNRPC
>   	select EXPORTFS
>   	select NFS_ACL_SUPPORT if NFSD_V2_ACL
> +	select NFS_ACL_SUPPORT if NFSD_V3_ACL
>   	depends on MULTIUSER
>   	help
>   	  Choose Y here if you want to allow other computers to access
> @@ -26,19 +27,29 @@ config NFSD
>   
>   	  Below you can choose which versions of the NFS protocol are
>   	  available to clients mounting the NFS server on this system.
> -	  Support for NFS version 2 (RFC 1094) is always available when
> +	  Support for NFS version 3 (RFC 1813) is always available when
>   	  CONFIG_NFSD is selected.
>   
>   	  If unsure, say N.
>   
> -config NFSD_V2_ACL
> -	bool
> +config NFSD_V2
> +	bool "NFS server support for NFS version 2 (DEPRECATED)"
>   	depends on NFSD
> +	default n
> +	help
> +	  NFSv2 (RFC 1094) was the first publicly-released version of NFS.
> +	  Unless you are hosting ancient (1990's era) NFS clients, you don't
> +	  need this.
> +
> +	  If unsure, say N.
> +
> +config NFSD_V2_ACL
> +	bool "NFS server support for the NFSv2 ACL protocol extension"
> +	depends on NFSD_V2
>   
>   config NFSD_V3_ACL
>   	bool "NFS server support for the NFSv3 ACL protocol extension"
>   	depends on NFSD
> -	select NFSD_V2_ACL
>   	help
>   	  Solaris NFS servers support an auxiliary NFSv3 ACL protocol that
>   	  never became an official part of the NFS version 3 protocol.
> diff --git a/fs/nfsd/Makefile b/fs/nfsd/Makefile
> index 805c06d5f1b4..6fffc8f03f74 100644
> --- a/fs/nfsd/Makefile
> +++ b/fs/nfsd/Makefile
> @@ -10,9 +10,10 @@ obj-$(CONFIG_NFSD)	+= nfsd.o
>   # this one should be compiled first, as the tracing macros can easily blow up
>   nfsd-y			+= trace.o
>   
> -nfsd-y 			+= nfssvc.o nfsctl.o nfsproc.o nfsfh.o vfs.o \
> -			   export.o auth.o lockd.o nfscache.o nfsxdr.o \
> +nfsd-y 			+= nfssvc.o nfsctl.o nfsfh.o vfs.o \
> +			   export.o auth.o lockd.o nfscache.o \
>   			   stats.o filecache.o nfs3proc.o nfs3xdr.o
> +nfsd-$(CONFIG_NFSD_V2) += nfsproc.o nfsxdr.o
>   nfsd-$(CONFIG_NFSD_V2_ACL) += nfs2acl.o
>   nfsd-$(CONFIG_NFSD_V3_ACL) += nfs3acl.o
>   nfsd-$(CONFIG_NFSD_V4)	+= nfs4proc.o nfs4xdr.o nfs4state.o nfs4idmap.o \
> diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
> index 68ed42fd29fc..d1e581a60480 100644
> --- a/fs/nfsd/nfsctl.c
> +++ b/fs/nfsd/nfsctl.c
> @@ -581,7 +581,9 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
>   
>   			cmd = sign == '-' ? NFSD_CLEAR : NFSD_SET;
>   			switch(num) {
> +#ifdef CONFIG_NFSD_V2
>   			case 2:
> +#endif
>   			case 3:
>   				nfsd_vers(nn, num, cmd);
>   				break;
> diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
> index 09726c5b9a31..93b42ef9ed91 100644
> --- a/fs/nfsd/nfsd.h
> +++ b/fs/nfsd/nfsd.h
> @@ -64,8 +64,7 @@ struct readdir_cd {
>   
>   
>   extern struct svc_program	nfsd_program;
> -extern const struct svc_version	nfsd_version2, nfsd_version3,
> -				nfsd_version4;
> +extern const struct svc_version	nfsd_version2, nfsd_version3, nfsd_version4;
>   extern struct mutex		nfsd_mutex;
>   extern spinlock_t		nfsd_drc_lock;
>   extern unsigned long		nfsd_drc_max_mem;
> diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
> index bfbd9f672f59..62e473b0ca52 100644
> --- a/fs/nfsd/nfssvc.c
> +++ b/fs/nfsd/nfssvc.c
> @@ -91,8 +91,12 @@ unsigned long	nfsd_drc_mem_used;
>   #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
>   static struct svc_stat	nfsd_acl_svcstats;
>   static const struct svc_version *nfsd_acl_version[] = {
> +# if defined(CONFIG_NFSD_V2_ACL)
>   	[2] = &nfsd_acl_version2,
> +# endif
> +# if defined(CONFIG_NFSD_V3_ACL)
>   	[3] = &nfsd_acl_version3,
> +# endif
>   };
>   
>   #define NFSD_ACL_MINVERS            2
> @@ -116,7 +120,9 @@ static struct svc_stat	nfsd_acl_svcstats = {
>   #endif /* defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) */
>   
>   static const struct svc_version *nfsd_version[] = {
> +#if defined(CONFIG_NFSD_V2)
>   	[2] = &nfsd_version2,
> +#endif
>   	[3] = &nfsd_version3,
>   #if defined(CONFIG_NFSD_V4)
>   	[4] = &nfsd_version4,

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 3/3] nfsd: allow disabling NFSv2 at compile time
  2022-10-19 15:09   ` Tom Talpey
@ 2022-10-19 16:23     ` Jeff Layton
  0 siblings, 0 replies; 6+ messages in thread
From: Jeff Layton @ 2022-10-19 16:23 UTC (permalink / raw)
  To: Tom Talpey, chuck.lever; +Cc: linux-nfs

On Wed, 2022-10-19 at 11:09 -0400, Tom Talpey wrote:
> LGTM
> 
> Reviewed-by: Tom Talpey <tom@talpey.com>
> 
> Next, to make it a module!
> 

We could, but I'm not sure it's worthwhile. We'd need to export about 15
symbols from nfsd.ko. Personally I'd rather see it just go away
eventually.

> On 10/18/2022 7:47 AM, Jeff Layton wrote:
> > rpc.nfsd stopped supporting NFSv2 a year ago. Take the next logical
> > step toward deprecating it and allow NFSv2 support to be compiled out.
> > 
> > Add a new CONFIG_NFSD_V2 option that can be turned off and rework the
> > CONFIG_NFSD_V?_ACL option dependencies. Add a description that
> > discourages enabling it.
> > 
> > Also, change the description of CONFIG_NFSD to state that the always-on
> > version is now 3 instead of 2.
> > 
> > Finally, add an #ifdef around "case 2:" in __write_versions. When NFSv2
> > is disabled at compile time, this should make the kernel ignore attempts
> > to disable it at runtime, but still error out when trying to enable it.
> > 
> > Signed-off-by: Jeff Layton <jlayton@kernel.org>
> > ---
> >   fs/nfsd/Kconfig  | 19 +++++++++++++++----
> >   fs/nfsd/Makefile |  5 +++--
> >   fs/nfsd/nfsctl.c |  2 ++
> >   fs/nfsd/nfsd.h   |  3 +--
> >   fs/nfsd/nfssvc.c |  6 ++++++
> >   5 files changed, 27 insertions(+), 8 deletions(-)
> > 
> > diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig
> > index f6a2fd3015e7..7c441f2bd444 100644
> > --- a/fs/nfsd/Kconfig
> > +++ b/fs/nfsd/Kconfig
> > @@ -8,6 +8,7 @@ config NFSD
> >   	select SUNRPC
> >   	select EXPORTFS
> >   	select NFS_ACL_SUPPORT if NFSD_V2_ACL
> > +	select NFS_ACL_SUPPORT if NFSD_V3_ACL
> >   	depends on MULTIUSER
> >   	help
> >   	  Choose Y here if you want to allow other computers to access
> > @@ -26,19 +27,29 @@ config NFSD
> >   
> >   	  Below you can choose which versions of the NFS protocol are
> >   	  available to clients mounting the NFS server on this system.
> > -	  Support for NFS version 2 (RFC 1094) is always available when
> > +	  Support for NFS version 3 (RFC 1813) is always available when
> >   	  CONFIG_NFSD is selected.
> >   
> >   	  If unsure, say N.
> >   
> > -config NFSD_V2_ACL
> > -	bool
> > +config NFSD_V2
> > +	bool "NFS server support for NFS version 2 (DEPRECATED)"
> >   	depends on NFSD
> > +	default n
> > +	help
> > +	  NFSv2 (RFC 1094) was the first publicly-released version of NFS.
> > +	  Unless you are hosting ancient (1990's era) NFS clients, you don't
> > +	  need this.
> > +
> > +	  If unsure, say N.
> > +
> > +config NFSD_V2_ACL
> > +	bool "NFS server support for the NFSv2 ACL protocol extension"
> > +	depends on NFSD_V2
> >   
> >   config NFSD_V3_ACL
> >   	bool "NFS server support for the NFSv3 ACL protocol extension"
> >   	depends on NFSD
> > -	select NFSD_V2_ACL
> >   	help
> >   	  Solaris NFS servers support an auxiliary NFSv3 ACL protocol that
> >   	  never became an official part of the NFS version 3 protocol.
> > diff --git a/fs/nfsd/Makefile b/fs/nfsd/Makefile
> > index 805c06d5f1b4..6fffc8f03f74 100644
> > --- a/fs/nfsd/Makefile
> > +++ b/fs/nfsd/Makefile
> > @@ -10,9 +10,10 @@ obj-$(CONFIG_NFSD)	+= nfsd.o
> >   # this one should be compiled first, as the tracing macros can easily blow up
> >   nfsd-y			+= trace.o
> >   
> > -nfsd-y 			+= nfssvc.o nfsctl.o nfsproc.o nfsfh.o vfs.o \
> > -			   export.o auth.o lockd.o nfscache.o nfsxdr.o \
> > +nfsd-y 			+= nfssvc.o nfsctl.o nfsfh.o vfs.o \
> > +			   export.o auth.o lockd.o nfscache.o \
> >   			   stats.o filecache.o nfs3proc.o nfs3xdr.o
> > +nfsd-$(CONFIG_NFSD_V2) += nfsproc.o nfsxdr.o
> >   nfsd-$(CONFIG_NFSD_V2_ACL) += nfs2acl.o
> >   nfsd-$(CONFIG_NFSD_V3_ACL) += nfs3acl.o
> >   nfsd-$(CONFIG_NFSD_V4)	+= nfs4proc.o nfs4xdr.o nfs4state.o nfs4idmap.o \
> > diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
> > index 68ed42fd29fc..d1e581a60480 100644
> > --- a/fs/nfsd/nfsctl.c
> > +++ b/fs/nfsd/nfsctl.c
> > @@ -581,7 +581,9 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
> >   
> >   			cmd = sign == '-' ? NFSD_CLEAR : NFSD_SET;
> >   			switch(num) {
> > +#ifdef CONFIG_NFSD_V2
> >   			case 2:
> > +#endif
> >   			case 3:
> >   				nfsd_vers(nn, num, cmd);
> >   				break;
> > diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
> > index 09726c5b9a31..93b42ef9ed91 100644
> > --- a/fs/nfsd/nfsd.h
> > +++ b/fs/nfsd/nfsd.h
> > @@ -64,8 +64,7 @@ struct readdir_cd {
> >   
> >   
> >   extern struct svc_program	nfsd_program;
> > -extern const struct svc_version	nfsd_version2, nfsd_version3,
> > -				nfsd_version4;
> > +extern const struct svc_version	nfsd_version2, nfsd_version3, nfsd_version4;
> >   extern struct mutex		nfsd_mutex;
> >   extern spinlock_t		nfsd_drc_lock;
> >   extern unsigned long		nfsd_drc_max_mem;
> > diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
> > index bfbd9f672f59..62e473b0ca52 100644
> > --- a/fs/nfsd/nfssvc.c
> > +++ b/fs/nfsd/nfssvc.c
> > @@ -91,8 +91,12 @@ unsigned long	nfsd_drc_mem_used;
> >   #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
> >   static struct svc_stat	nfsd_acl_svcstats;
> >   static const struct svc_version *nfsd_acl_version[] = {
> > +# if defined(CONFIG_NFSD_V2_ACL)
> >   	[2] = &nfsd_acl_version2,
> > +# endif
> > +# if defined(CONFIG_NFSD_V3_ACL)
> >   	[3] = &nfsd_acl_version3,
> > +# endif
> >   };
> >   
> >   #define NFSD_ACL_MINVERS            2
> > @@ -116,7 +120,9 @@ static struct svc_stat	nfsd_acl_svcstats = {
> >   #endif /* defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) */
> >   
> >   static const struct svc_version *nfsd_version[] = {
> > +#if defined(CONFIG_NFSD_V2)
> >   	[2] = &nfsd_version2,
> > +#endif
> >   	[3] = &nfsd_version3,
> >   #if defined(CONFIG_NFSD_V4)
> >   	[4] = &nfsd_version4,

-- 
Jeff Layton <jlayton@kernel.org>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-10-19 16:23 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-18 11:47 [PATCH v3 1/3] nfsd: ignore requests to disable unsupported versions Jeff Layton
2022-10-18 11:47 ` [PATCH v3 2/3] nfsd: move nfserrno() to vfs.c Jeff Layton
2022-10-18 11:47 ` [PATCH v3 3/3] nfsd: allow disabling NFSv2 at compile time Jeff Layton
2022-10-19 15:09   ` Tom Talpey
2022-10-19 16:23     ` Jeff Layton
2022-10-19 14:58 ` [PATCH v3 1/3] nfsd: ignore requests to disable unsupported versions Tom Talpey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).