@@ -18,8 +18,6 @@
#include "netns.h"
#include "filecache.h"
#include "cache.h"
-#include "xdr3.h"
-#include "xdr4.h"
#define NFSDDBG_FACILITY NFSDDBG_FH
@@ -262,48 +260,39 @@ static __be32 nfsd_proc_null(struct svc_rqst *rqstp)
return rpc_success;
}
+struct nfsd_getuuidres {
+ uuid_t uuid;
+};
+
static __be32 nfsd_proc_getuuid(struct svc_rqst *rqstp)
{
struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
struct nfsd_getuuidres *resp = rqstp->rq_resp;
uuid_copy(&resp->uuid, &nn->nfsd_uuid.uuid);
- resp->status = nfs_ok;
return rpc_success;
}
-#define NFS_getuuid_sz XDR_QUADLEN(UUID_SIZE)
-
static inline void encode_opaque_fixed(struct xdr_stream *xdr, const void *buf, size_t len)
{
WARN_ON_ONCE(xdr_stream_encode_opaque_fixed(xdr, buf, len) < 0);
}
-static void encode_uuid(struct xdr_stream *xdr, uuid_t *src_uuid)
+static bool nfslocalio_encode_getuuidres(struct svc_rqst *rqstp,
+ struct xdr_stream *xdr)
{
+ struct nfsd_getuuidres *resp = rqstp->rq_resp;
u8 uuid[UUID_SIZE];
- export_uuid(uuid, src_uuid);
+ export_uuid(uuid, &resp->uuid);
encode_opaque_fixed(xdr, uuid, UUID_SIZE);
dprintk("%s: uuid=%pU\n", __func__, uuid);
-}
-
-#if defined(CONFIG_NFSD_V3_LOCALIO)
-static bool nfs3svc_encode_getuuidres(struct svc_rqst *rqstp,
- struct xdr_stream *xdr)
-{
- struct nfsd_getuuidres *resp = rqstp->rq_resp;
-
- if (!svcxdr_encode_nfsstat3(xdr, resp->status))
- return false;
- if (resp->status == nfs_ok)
- encode_uuid(xdr, &resp->uuid);
return true;
}
-static const struct svc_procedure nfsd_localio_procedures3[2] = {
+static const struct svc_procedure nfsd_localio_procedures[2] = {
[LOCALIOPROC_NULL] = {
.pc_func = nfsd_proc_null,
.pc_decode = nfssvc_decode_voidarg,
@@ -311,86 +300,29 @@ static const struct svc_procedure nfsd_localio_procedures3[2] = {
.pc_argsize = sizeof(struct nfsd_voidargs),
.pc_ressize = sizeof(struct nfsd_voidres),
.pc_cachetype = RC_NOCACHE,
- .pc_xdrressize = 1,
+ .pc_xdrressize = 0,
.pc_name = "NULL",
},
[LOCALIOPROC_GETUUID] = {
.pc_func = nfsd_proc_getuuid,
.pc_decode = nfssvc_decode_voidarg,
- .pc_encode = nfs3svc_encode_getuuidres,
+ .pc_encode = nfslocalio_encode_getuuidres,
.pc_argsize = sizeof(struct nfsd_voidargs),
.pc_ressize = sizeof(struct nfsd_getuuidres),
.pc_cachetype = RC_NOCACHE,
- .pc_xdrressize = 1+NFS_getuuid_sz,
+ .pc_xdrressize = XDR_QUADLEN(UUID_SIZE),
.pc_name = "GETUUID",
},
};
static DEFINE_PER_CPU_ALIGNED(unsigned long,
- nfsd_localio_count3[ARRAY_SIZE(nfsd_localio_procedures3)]);
-const struct svc_version nfsd_localio_version3 = {
- .vs_vers = 3,
+ nfsd_localio_count[ARRAY_SIZE(nfsd_localio_procedures)]);
+const struct svc_version nfsd_localio_version1 = {
+ .vs_vers = 1,
.vs_nproc = 2,
- .vs_proc = nfsd_localio_procedures3,
+ .vs_proc = nfsd_localio_procedures,
.vs_dispatch = nfsd_dispatch,
- .vs_count = nfsd_localio_count3,
- .vs_xdrsize = NFS3_SVC_XDRSIZE,
-};
-#endif /* CONFIG_NFSD_V3_LOCALIO */
-
-#if defined(CONFIG_NFSD_V4_LOCALIO)
-static bool nfs4svc_encode_getuuidres(struct svc_rqst *rqstp,
- struct xdr_stream *xdr)
-{
- struct nfsd_getuuidres *resp = rqstp->rq_resp;
- __be32 *p;
-
- p = xdr_reserve_space(xdr, 8);
- if (!p)
- return 0;
- *p++ = cpu_to_be32(LOCALIOPROC_GETUUID);
- *p++ = resp->status;
-
- if (resp->status == nfs_ok)
- encode_uuid(xdr, &resp->uuid);
-
- return 1;
-}
-
-static const struct svc_procedure nfsd_localio_procedures4[2] = {
- [LOCALIOPROC_NULL] = {
- .pc_func = nfsd_proc_null,
- .pc_decode = nfssvc_decode_voidarg,
- .pc_encode = nfssvc_encode_voidres,
- .pc_argsize = sizeof(struct nfsd_voidargs),
- .pc_ressize = sizeof(struct nfsd_voidres),
- .pc_cachetype = RC_NOCACHE,
- .pc_xdrressize = 1,
- .pc_name = "NULL",
- },
- [LOCALIOPROC_GETUUID] = {
- .pc_func = nfsd_proc_getuuid,
- .pc_decode = nfssvc_decode_voidarg,
- .pc_encode = nfs4svc_encode_getuuidres,
- .pc_argsize = sizeof(struct nfsd_voidargs),
- .pc_ressize = sizeof(struct nfsd_getuuidres),
- .pc_cachetype = RC_NOCACHE,
- .pc_xdrressize = 2+NFS_getuuid_sz,
- .pc_name = "GETUUID",
- },
-};
-
-static DEFINE_PER_CPU_ALIGNED(unsigned long,
- nfsd_localio_count4[ARRAY_SIZE(nfsd_localio_procedures4)]);
-const struct svc_version nfsd_localio_version4 = {
- .vs_vers = 4,
- .vs_nproc = 2,
- .vs_proc = nfsd_localio_procedures4,
- .vs_dispatch = nfsd_dispatch,
- .vs_count = nfsd_localio_count4,
- .vs_xdrsize = NFS4_SVC_XDRSIZE,
- .vs_rpcb_optnl = true,
- .vs_need_cong_ctrl = true,
-
+ .vs_count = nfsd_localio_count,
+ .vs_xdrsize = XDR_QUADLEN(UUID_SIZE),
+ .vs_hidden = true,
};
-#endif /* CONFIG_NFSD_V4_LOCALIO */
@@ -143,17 +143,6 @@ extern const struct svc_version nfsd_acl_version3;
#endif
#endif
-#if defined(CONFIG_NFSD_V3_LOCALIO)
-extern const struct svc_version nfsd_localio_version3;
-#else
-#define nfsd_localio_version3 NULL
-#endif
-#if defined(CONFIG_NFSD_V4_LOCALIO)
-extern const struct svc_version nfsd_localio_version4;
-#else
-#define nfsd_localio_version4 NULL
-#endif
-
struct nfsd_net;
enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL };
@@ -38,16 +38,6 @@
atomic_t nfsd_th_cnt = ATOMIC_INIT(0);
extern struct svc_program nfsd_program;
static int nfsd(void *vrqstp);
-#if IS_ENABLED(CONFIG_NFSD_LOCALIO)
-static int nfsd_localio_rpcbind_set(struct net *,
- const struct svc_program *,
- u32, int,
- unsigned short,
- unsigned short);
-static __be32 nfsd_localio_init_request(struct svc_rqst *,
- const struct svc_program *,
- struct svc_process_info *);
-#endif /* CONFIG_NFSD_LOCALIO */
#if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
static int nfsd_acl_rpcbind_set(struct net *,
const struct svc_program *,
@@ -92,16 +82,11 @@ unsigned long nfsd_drc_max_mem;
unsigned long nfsd_drc_mem_used;
#if IS_ENABLED(CONFIG_NFSD_LOCALIO)
+extern const struct svc_version nfsd_localio_version1;
static const struct svc_version *nfsd_localio_version[] = {
-#if defined(CONFIG_NFSD_V3_LOCALIO)
- [3] = &nfsd_localio_version3,
-#endif
-#if defined(CONFIG_NFSD_V4_LOCALIO)
- [4] = &nfsd_localio_version4,
-#endif
+ [1] = &nfsd_localio_version1,
};
-#define NFSD_LOCALIO_MINVERS 3
#define NFSD_LOCALIO_NRVERS ARRAY_SIZE(nfsd_localio_version)
static struct svc_program nfsd_localio_program = {
@@ -111,8 +96,8 @@ static struct svc_program nfsd_localio_program = {
.pg_name = "nfslocalio",
.pg_class = "nfsd",
.pg_authenticate = &svc_set_client,
- .pg_init_request = nfsd_localio_init_request,
- .pg_rpcbind_set = nfsd_localio_rpcbind_set,
+ .pg_init_request = svc_generic_init_request,
+ .pg_rpcbind_set = svc_generic_rpcbind_set,
};
#endif /* CONFIG_NFSD_LOCALIO */
@@ -875,42 +860,6 @@ nfsd_svc(int n, int *nthreads, struct net *net, const struct cred *cred, const c
return error;
}
-#if IS_ENABLED(CONFIG_NFSD_LOCALIO)
-static bool
-nfsd_support_localio_version(int vers)
-{
- if (vers >= NFSD_LOCALIO_MINVERS && vers < NFSD_LOCALIO_NRVERS)
- return nfsd_localio_version[vers] != NULL;
- return false;
-}
-
-static int
-nfsd_localio_rpcbind_set(struct net *net, const struct svc_program *progp,
- u32 version, int family, unsigned short proto,
- unsigned short port)
-{
- if (!nfsd_support_localio_version(version) ||
- !nfsd_vers(net_generic(net, nfsd_net_id), version, NFSD_TEST))
- return 0;
- return svc_generic_rpcbind_set(net, progp, version, family,
- proto, port);
-}
-
-static __be32
-nfsd_localio_init_request(struct svc_rqst *rqstp,
- const struct svc_program *progp,
- struct svc_process_info *ret)
-{
- struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
-
- if (likely(nfsd_support_localio_version(rqstp->rq_vers) &&
- nfsd_vers(nn, rqstp->rq_vers, NFSD_TEST)))
- return svc_generic_init_request(rqstp, progp, ret);
-
- return rpc_prog_unavail;
-}
-#endif /* CONFIG_NFSD_LOCALIO */
-
#if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
static bool
nfsd_support_acl_version(int vers)
@@ -5,7 +5,6 @@
#define LINUX_NFSD_H
#include <linux/vfs.h>
-#include <linux/uuid.h>
#include "nfsd.h"
#include "nfsfh.h"
@@ -124,11 +123,6 @@ struct nfsd_statfsres {
struct kstatfs stats;
};
-struct nfsd_getuuidres {
- __be32 status;
- uuid_t uuid;
-};
-
/*
* Storage requirements for XDR arguments and results.
*/