summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChuck Lever <cel@kernel.org>2026-09-16 12:28:34 -0400
committerChuck Lever <cel@kernel.org>2026-10-11 23:12:14 -0400
commitffbf5434ee57fb93f400705ea2674897ac7dc5f9 (patch)
tree76fe3c61eff1456fbfcda4ff731600a10228011b
parentf49b703d853ea9d92efe3a95a6818579a254a070 (diff)
downloadlinux-ffbf5434ee57fb93f400705ea2674897ac7dc5f9.tar.gz
linux-ffbf5434ee57fb93f400705ea2674897ac7dc5f9.zip
NFSD: Use xdrgen-generated NFSv2 protocol definitions
Switch the server's NFSv2 implementation to use the machine- generated protocol definitions. Acked-by: Jeff Layton <jlayton@kernel.org> Link: https://patch.msgid.link/20260916162859.2051-6-cel@kernel.org Signed-off-by: Chuck Lever <cel@kernel.org>
-rw-r--r--fs/nfs_common/common.c5
-rw-r--r--fs/nfsd/nfsd.h2
-rw-r--r--fs/nfsd/nfserr.h2
-rw-r--r--fs/nfsd/nfsproc.c2
-rw-r--r--fs/nfsd/nfsxdr.c9
-rw-r--r--include/linux/nfs_common.h4
6 files changed, 16 insertions, 8 deletions
diff --git a/fs/nfs_common/common.c b/fs/nfs_common/common.c
index 0778743ae2c2..a05f2ace31ec 100644
--- a/fs/nfs_common/common.c
+++ b/fs/nfs_common/common.c
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
#include <linux/module.h>
+#include <uapi/linux/nfs.h>
#include <linux/nfs_common.h>
#include <linux/nfs4.h>
@@ -53,12 +54,12 @@ static const struct {
* Returns a local errno value, or -EIO if the NFS status code is
* not recognized. This function is used jointly by NFSv2 and NFSv3.
*/
-int nfs_stat_to_errno(enum nfs_stat status)
+int nfs_stat_to_errno(int status)
{
int i;
for (i = 0; i < ARRAY_SIZE(nfs_errtbl); i++) {
- if (nfs_errtbl[i].stat == (int)status)
+ if (nfs_errtbl[i].stat == status)
return nfs_errtbl[i].errno;
}
return -EIO;
diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
index 69e3e92b3ec1..d1e413d21e76 100644
--- a/fs/nfsd/nfsd.h
+++ b/fs/nfsd/nfsd.h
@@ -12,8 +12,6 @@
#include <linux/types.h>
#include <linux/mount.h>
-#include <linux/nfs.h>
-#include <linux/nfs2.h>
#include <linux/sunrpc/svc.h>
#include <linux/sunrpc/svc_xprt.h>
diff --git a/fs/nfsd/nfserr.h b/fs/nfsd/nfserr.h
index d1c434b834b2..35debf1141a3 100644
--- a/fs/nfsd/nfserr.h
+++ b/fs/nfsd/nfserr.h
@@ -10,7 +10,7 @@
#ifndef LINUX_NFSD_NFSERR_H
#define LINUX_NFSD_NFSERR_H
-#include <linux/nfs.h>
+#include <linux/sunrpc/xdrgen/nfs2.h>
#include <linux/nfs3.h>
#include <linux/nfs4.h>
diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c
index 09d360839825..1ce75779312b 100644
--- a/fs/nfsd/nfsproc.c
+++ b/fs/nfsd/nfsproc.c
@@ -6,7 +6,9 @@
*/
#include <linux/namei.h>
+#include <linux/sunrpc/svc.h>
+#include "nfs2xdr_gen.h"
#include "cache.h"
#include "xdr.h"
#include "vfs.h"
diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c
index 0961c13d6ab1..d55e7d6414a0 100644
--- a/fs/nfsd/nfsxdr.c
+++ b/fs/nfsd/nfsxdr.c
@@ -23,6 +23,13 @@
#define NFS2_SATTR_SET_TO_SERVER_TIME (1000000)
/*
+ * Linux-internal ftype values for socket and unknown inodes, not
+ * in RFC 1094's wire enum; values match enum nfs_ftype.
+ */
+#define NFBAD (7)
+#define NFSOCK (6)
+
+/*
* Mapping of S_IF* types to NFS file types
*/
static const u32 nfs_ftypes[] = {
@@ -599,7 +606,7 @@ svcxdr_encode_entry_common(struct nfsd_readdirres *resp, const char *name,
if (xdr_stream_encode_u32(xdr, (u32)ino) < 0)
return false;
/* name */
- if (xdr_stream_encode_opaque(xdr, name, min(namlen, NFS2_MAXNAMLEN)) < 0)
+ if (xdr_stream_encode_opaque(xdr, name, min(namlen, NFS_MAXNAMLEN)) < 0)
return false;
/* cookie */
resp->cookie_offset = dirlist->len;
diff --git a/include/linux/nfs_common.h b/include/linux/nfs_common.h
index a541c3a02887..88dccd8564cf 100644
--- a/include/linux/nfs_common.h
+++ b/include/linux/nfs_common.h
@@ -6,11 +6,11 @@
#define _LINUX_NFS_COMMON_H
#include <linux/errno.h>
-#include <uapi/linux/nfs.h>
+#include <linux/types.h>
/* Mapping from NFS error code to "errno" error code. */
-int nfs_stat_to_errno(enum nfs_stat status);
+int nfs_stat_to_errno(int status);
int nfs4_stat_to_errno(int stat);
__u32 nfs_localio_errno_to_nfs4_stat(int errno);