svcrdma: Clean up svc_rdma_encode_reply_chunk()
authorChuck Lever <chuck.lever@oracle.com>
Fri, 13 Mar 2020 14:42:10 +0000 (10:42 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 30 Nov 2020 18:00:22 +0000 (13:00 -0500)
Refactor: Match the control flow of svc_rdma_encode_write_list().

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
net/sunrpc/xprtrdma/svc_rdma_rw.c
net/sunrpc/xprtrdma/svc_rdma_sendto.c

index f2ed1bf5025157a7fd4ce7a7a7dca86edd9f8a45..e6050230b49fe7d39a4f286a79cfab65717c72c5 100644 (file)
@@ -635,6 +635,9 @@ int svc_rdma_send_reply_chunk(struct svcxprt_rdma *rdma,
        struct svc_rdma_write_info *info;
        int consumed, ret;
 
+       if (!rctxt->rc_reply_chunk)
+               return 0;
+
        info = svc_rdma_write_info_alloc(rdma, rctxt->rc_reply_chunk);
        if (!info)
                return -ENOMEM;
index e8b0d030e1e6085f68c841c59dfe36f2fe747d19..922dbe57357049158fc5f8a7b90fd3f94b77652e 100644 (file)
@@ -504,6 +504,9 @@ svc_rdma_encode_reply_chunk(const struct svc_rdma_recv_ctxt *rctxt,
                            struct svc_rdma_send_ctxt *sctxt,
                            unsigned int length)
 {
+       if (!rctxt->rc_reply_chunk)
+               return xdr_stream_encode_item_absent(&sctxt->sc_stream);
+
        return svc_rdma_encode_write_chunk(rctxt->rc_reply_chunk, sctxt,
                                           length);
 }
@@ -898,7 +901,6 @@ int svc_rdma_sendto(struct svc_rqst *rqstp)
                container_of(xprt, struct svcxprt_rdma, sc_xprt);
        struct svc_rdma_recv_ctxt *rctxt = rqstp->rq_xprt_ctxt;
        __be32 *rdma_argp = rctxt->rc_recv_buf;
-       __be32 *rp_ch = rctxt->rc_reply_chunk;
        struct svc_rdma_send_ctxt *sctxt;
        __be32 *p;
        int ret;
@@ -916,25 +918,22 @@ int svc_rdma_sendto(struct svc_rqst *rqstp)
                              rpcrdma_fixed_maxsz * sizeof(*p));
        if (!p)
                goto err0;
+
+       ret = svc_rdma_send_reply_chunk(rdma, rctxt, &rqstp->rq_res);
+       if (ret < 0)
+               goto err2;
+
        *p++ = *rdma_argp;
        *p++ = *(rdma_argp + 1);
        *p++ = rdma->sc_fc_credits;
-       *p   = rp_ch ? rdma_nomsg : rdma_msg;
+       *p = rctxt->rc_reply_chunk ? rdma_nomsg : rdma_msg;
 
        if (svc_rdma_encode_read_list(sctxt) < 0)
                goto err0;
        if (svc_rdma_encode_write_list(rctxt, sctxt) < 0)
                goto err0;
-       if (rp_ch) {
-               ret = svc_rdma_send_reply_chunk(rdma, rctxt, &rqstp->rq_res);
-               if (ret < 0)
-                       goto err2;
-               if (svc_rdma_encode_reply_chunk(rctxt, sctxt, ret) < 0)
-                       goto err0;
-       } else {
-               if (xdr_stream_encode_item_absent(&sctxt->sc_stream) < 0)
-                       goto err0;
-       }
+       if (svc_rdma_encode_reply_chunk(rctxt, sctxt, ret) < 0)
+               goto err0;
 
        ret = svc_rdma_send_reply_msg(rdma, sctxt, rctxt, rqstp);
        if (ret < 0)