]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
NFSD: Replace READ* macros in nfsd4_decode_test_stateid()
authorChuck Lever <chuck.lever@oracle.com>
Tue, 3 Nov 2020 19:57:44 +0000 (14:57 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Jun 2024 12:52:43 +0000 (14:52 +0200)
[ Upstream commit b7a0c8f6e741bf9dee0d24e69d3ce51fa4ccce78 ]

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfsd/nfs4xdr.c

index 3fe0d0228c4acfd5c1b7d01cd04a366fbff50c1a..9642de15504316021db63c882075dd6451c2121a 100644 (file)
@@ -1738,42 +1738,6 @@ nfsd4_decode_free_stateid(struct nfsd4_compoundargs *argp,
        return nfsd4_decode_stateid4(argp, &free_stateid->fr_stateid);
 }
 
-static __be32
-nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_test_stateid *test_stateid)
-{
-       int i;
-       __be32 *p, status;
-       struct nfsd4_test_stateid_id *stateid;
-
-       READ_BUF(4);
-       test_stateid->ts_num_ids = ntohl(*p++);
-
-       INIT_LIST_HEAD(&test_stateid->ts_stateid_list);
-
-       for (i = 0; i < test_stateid->ts_num_ids; i++) {
-               stateid = svcxdr_tmpalloc(argp, sizeof(*stateid));
-               if (!stateid) {
-                       status = nfserrno(-ENOMEM);
-                       goto out;
-               }
-
-               INIT_LIST_HEAD(&stateid->ts_id_list);
-               list_add_tail(&stateid->ts_id_list, &test_stateid->ts_stateid_list);
-
-               status = nfsd4_decode_stateid(argp, &stateid->ts_id_stateid);
-               if (status)
-                       goto out;
-       }
-
-       status = 0;
-out:
-       return status;
-xdr_error:
-       dprintk("NFSD: xdr error (%s:%d)\n", __FILE__, __LINE__);
-       status = nfserr_bad_xdr;
-       goto out;
-}
-
 static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, struct nfsd4_destroy_clientid *dc)
 {
        DECODE_HEAD;
@@ -1919,6 +1883,31 @@ nfsd4_decode_sequence(struct nfsd4_compoundargs *argp,
        return nfs_ok;
 }
 
+static __be32
+nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_test_stateid *test_stateid)
+{
+       struct nfsd4_test_stateid_id *stateid;
+       __be32 status;
+       u32 i;
+
+       if (xdr_stream_decode_u32(argp->xdr, &test_stateid->ts_num_ids) < 0)
+               return nfserr_bad_xdr;
+
+       INIT_LIST_HEAD(&test_stateid->ts_stateid_list);
+       for (i = 0; i < test_stateid->ts_num_ids; i++) {
+               stateid = svcxdr_tmpalloc(argp, sizeof(*stateid));
+               if (!stateid)
+                       return nfserrno(-ENOMEM);       /* XXX: not jukebox? */
+               INIT_LIST_HEAD(&stateid->ts_id_list);
+               list_add_tail(&stateid->ts_id_list, &test_stateid->ts_stateid_list);
+               status = nfsd4_decode_stateid4(argp, &stateid->ts_id_stateid);
+               if (status)
+                       return status;
+       }
+
+       return nfs_ok;
+}
+
 static __be32
 nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp,
                       struct nfsd4_fallocate *fallocate)