]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
NFSD: Shrink size of struct nfsd4_copy_notify
authorChuck Lever <chuck.lever@oracle.com>
Wed, 27 Jul 2022 18:40:16 +0000 (14:40 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Apr 2024 14:19:12 +0000 (16:19 +0200)
[ Upstream commit 09426ef2a64ee189ca1e3298f1e874842dbf35ea ]

struct nfsd4_copy_notify is part of struct nfsd4_op, which resides
in an 8-element array.

sizeof(struct nfsd4_op):
Before: /* size: 2208, cachelines: 35, members: 5 */
After:  /* size: 1696, cachelines: 27, members: 5 */

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4xdr.c
fs/nfsd/xdr4.h

index 5dce18fe990856725254ea77bf6da8a27db69423..80ec51a89d5b53e0acc16192210014063bb88f30 100644 (file)
@@ -1947,9 +1947,9 @@ nfsd4_copy_notify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
        /* For now, only return one server address in cpn_src, the
         * address used by the client to connect to this server.
         */
-       cn->cpn_src.nl4_type = NL4_NETADDR;
+       cn->cpn_src->nl4_type = NL4_NETADDR;
        status = nfsd4_set_netaddr((struct sockaddr *)&rqstp->rq_daddr,
-                                &cn->cpn_src.u.nl4_addr);
+                                &cn->cpn_src->u.nl4_addr);
        WARN_ON_ONCE(status);
        if (status) {
                nfs4_put_cpntf_state(nn, cps);
index fb891249694c3f6b097ed586a870c685108e6627..515edc1b662e1b1d819c46a75fdbec8a9af137c6 100644 (file)
@@ -1952,10 +1952,17 @@ nfsd4_decode_copy_notify(struct nfsd4_compoundargs *argp,
 {
        __be32 status;
 
+       cn->cpn_src = svcxdr_tmpalloc(argp, sizeof(*cn->cpn_src));
+       if (cn->cpn_src == NULL)
+               return nfserr_jukebox;
+       cn->cpn_dst = svcxdr_tmpalloc(argp, sizeof(*cn->cpn_dst));
+       if (cn->cpn_dst == NULL)
+               return nfserr_jukebox;
+
        status = nfsd4_decode_stateid4(argp, &cn->cpn_src_stateid);
        if (status)
                return status;
-       return nfsd4_decode_nl4_server(argp, &cn->cpn_dst);
+       return nfsd4_decode_nl4_server(argp, cn->cpn_dst);
 }
 
 static __be32
@@ -4903,7 +4910,8 @@ nfsd4_encode_copy_notify(struct nfsd4_compoundres *resp, __be32 nfserr,
 
        *p++ = cpu_to_be32(1);
 
-       return nfsd42_encode_nl4_server(resp, &cn->cpn_src);
+       nfserr = nfsd42_encode_nl4_server(resp, cn->cpn_src);
+       return nfserr;
 }
 
 static __be32
index 0737f81c1004e80e8228bbfb84e5cfdf5eb4c33d..6673c2980c77e9990bc0941a62acbc3f4fbd795a 100644 (file)
@@ -595,13 +595,13 @@ struct nfsd4_offload_status {
 struct nfsd4_copy_notify {
        /* request */
        stateid_t               cpn_src_stateid;
-       struct nl4_server       cpn_dst;
+       struct nl4_server       *cpn_dst;
 
        /* response */
        stateid_t               cpn_cnr_stateid;
        u64                     cpn_sec;
        u32                     cpn_nsec;
-       struct nl4_server       cpn_src;
+       struct nl4_server       *cpn_src;
 };
 
 struct nfsd4_op {