NFSD: Clean up nfsd4_encode_layoutcommit()
authorChuck Lever <chuck.lever@oracle.com>
Mon, 25 Sep 2023 13:28:04 +0000 (09:28 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 16 Oct 2023 16:44:29 +0000 (12:44 -0400)
Adopt the use of conventional XDR utility functions. Restructure
the encoder to better align with the XDR definition of the result.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4xdr.c
fs/nfsd/xdr4.h

index d7e88c7beba32e02c738e53384abf018ea756429..60262fd27b15147284936734322e5da275c3a957 100644 (file)
@@ -2357,10 +2357,10 @@ nfsd4_layoutcommit(struct svc_rqst *rqstp,
        mutex_unlock(&ls->ls_mutex);
 
        if (new_size > i_size_read(inode)) {
-               lcp->lc_size_chg = 1;
+               lcp->lc_size_chg = true;
                lcp->lc_newsize = new_size;
        } else {
-               lcp->lc_size_chg = 0;
+               lcp->lc_size_chg = false;
        }
 
        nfserr = ops->proc_layoutcommit(inode, lcp);
index 8839788b268d28ab5f97915f9afc6e0e6e363a54..0f8f1f7d584006e88aa660347523caf1a319191a 100644 (file)
@@ -4914,20 +4914,15 @@ nfsd4_encode_layoutcommit(struct nfsd4_compoundres *resp, __be32 nfserr,
 {
        struct nfsd4_layoutcommit *lcp = &u->layoutcommit;
        struct xdr_stream *xdr = resp->xdr;
-       __be32 *p;
-
-       p = xdr_reserve_space(xdr, 4);
-       if (!p)
-               return nfserr_resource;
-       *p++ = cpu_to_be32(lcp->lc_size_chg);
-       if (lcp->lc_size_chg) {
-               p = xdr_reserve_space(xdr, 8);
-               if (!p)
-                       return nfserr_resource;
-               p = xdr_encode_hyper(p, lcp->lc_newsize);
-       }
 
-       return 0;
+       /* ns_sizechanged */
+       nfserr = nfsd4_encode_bool(xdr, lcp->lc_size_chg);
+       if (nfserr != nfs_ok)
+               return nfserr;
+       if (lcp->lc_size_chg)
+               /* ns_size */
+               return nfsd4_encode_length4(xdr, lcp->lc_newsize);
+       return nfs_ok;
 }
 
 static __be32
index 1a99db22b25ced860f362f9f379a3e1b14070762..1b393f1734e4de6facf56b4fb9c0f5f61e81819e 100644 (file)
@@ -618,7 +618,7 @@ struct nfsd4_layoutcommit {
        u32                     lc_layout_type; /* request */
        u32                     lc_up_len;      /* layout length */
        void                    *lc_up_layout;  /* decoded by callback */
-       u32                     lc_size_chg;    /* boolean for response */
+       bool                    lc_size_chg;    /* response */
        u64                     lc_newsize;     /* response */
 };