NFSD: Update the NFSv2 stat encoder to use struct xdr_stream
authorChuck Lever <chuck.lever@oracle.com>
Fri, 23 Oct 2020 15:08:02 +0000 (11:08 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 22 Mar 2021 14:18:57 +0000 (10:18 -0400)
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfsproc.c
fs/nfsd/nfsxdr.c
fs/nfsd/xdr.h

index a8d5449dd0e922d9a8a5b55ec1cdcbdb37dc76e3..59080e6793b926fc99c2b9acb49f350f33451cf6 100644 (file)
@@ -736,7 +736,7 @@ static const struct svc_procedure nfsd_procedures2[18] = {
        [NFSPROC_REMOVE] = {
                .pc_func = nfsd_proc_remove,
                .pc_decode = nfssvc_decode_diropargs,
-               .pc_encode = nfssvc_encode_stat,
+               .pc_encode = nfssvc_encode_statres,
                .pc_argsize = sizeof(struct nfsd_diropargs),
                .pc_ressize = sizeof(struct nfsd_stat),
                .pc_cachetype = RC_REPLSTAT,
@@ -746,7 +746,7 @@ static const struct svc_procedure nfsd_procedures2[18] = {
        [NFSPROC_RENAME] = {
                .pc_func = nfsd_proc_rename,
                .pc_decode = nfssvc_decode_renameargs,
-               .pc_encode = nfssvc_encode_stat,
+               .pc_encode = nfssvc_encode_statres,
                .pc_argsize = sizeof(struct nfsd_renameargs),
                .pc_ressize = sizeof(struct nfsd_stat),
                .pc_cachetype = RC_REPLSTAT,
@@ -756,7 +756,7 @@ static const struct svc_procedure nfsd_procedures2[18] = {
        [NFSPROC_LINK] = {
                .pc_func = nfsd_proc_link,
                .pc_decode = nfssvc_decode_linkargs,
-               .pc_encode = nfssvc_encode_stat,
+               .pc_encode = nfssvc_encode_statres,
                .pc_argsize = sizeof(struct nfsd_linkargs),
                .pc_ressize = sizeof(struct nfsd_stat),
                .pc_cachetype = RC_REPLSTAT,
@@ -766,7 +766,7 @@ static const struct svc_procedure nfsd_procedures2[18] = {
        [NFSPROC_SYMLINK] = {
                .pc_func = nfsd_proc_symlink,
                .pc_decode = nfssvc_decode_symlinkargs,
-               .pc_encode = nfssvc_encode_stat,
+               .pc_encode = nfssvc_encode_statres,
                .pc_argsize = sizeof(struct nfsd_symlinkargs),
                .pc_ressize = sizeof(struct nfsd_stat),
                .pc_cachetype = RC_REPLSTAT,
@@ -787,7 +787,7 @@ static const struct svc_procedure nfsd_procedures2[18] = {
        [NFSPROC_RMDIR] = {
                .pc_func = nfsd_proc_rmdir,
                .pc_decode = nfssvc_decode_diropargs,
-               .pc_encode = nfssvc_encode_stat,
+               .pc_encode = nfssvc_encode_statres,
                .pc_argsize = sizeof(struct nfsd_diropargs),
                .pc_ressize = sizeof(struct nfsd_stat),
                .pc_cachetype = RC_REPLSTAT,
index 5d79ef6a0c7fc216431f97be166fdd1a95c72ef3..10cd120044b30149b73065aed790b32ae05db1b0 100644 (file)
@@ -26,6 +26,19 @@ static u32   nfs_ftypes[] = {
  * Basic NFSv2 data types (RFC 1094 Section 2.3)
  */
 
+static bool
+svcxdr_encode_stat(struct xdr_stream *xdr, __be32 status)
+{
+       __be32 *p;
+
+       p = xdr_reserve_space(xdr, sizeof(status));
+       if (!p)
+               return false;
+       *p = status;
+
+       return true;
+}
+
 /**
  * svcxdr_decode_fhandle - Decode an NFSv2 file handle
  * @xdr: XDR stream positioned at an encoded NFSv2 FH
@@ -390,12 +403,12 @@ nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p)
  */
 
 int
-nfssvc_encode_stat(struct svc_rqst *rqstp, __be32 *p)
+nfssvc_encode_statres(struct svc_rqst *rqstp, __be32 *p)
 {
+       struct xdr_stream *xdr = &rqstp->rq_res_stream;
        struct nfsd_stat *resp = rqstp->rq_resp;
 
-       *p++ = resp->status;
-       return xdr_ressize_check(rqstp, p);
+       return svcxdr_encode_stat(xdr, resp->status);
 }
 
 int
index 3018b52b6d5edf39609c96a36cf0214af37b16c1..a74ffcf8b9c67a3ad7f676d55409b33846cb6257 100644 (file)
@@ -147,7 +147,7 @@ int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *);
 int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *);
 int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *);
 int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *);
-int nfssvc_encode_stat(struct svc_rqst *, __be32 *);
+int nfssvc_encode_statres(struct svc_rqst *, __be32 *);
 int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *);
 int nfssvc_encode_diropres(struct svc_rqst *, __be32 *);
 int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *);