svcrdma: Make svc_rdma_send_error_msg() a global function
authorChuck Lever <chuck.lever@oracle.com>
Wed, 25 Mar 2020 18:41:46 +0000 (14:41 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 13 Jul 2020 21:28:24 +0000 (17:28 -0400)
Prepare for svc_rdma_send_error_msg() to be invoked from another
source file.

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

index 7ed82625dc0beea9d4a5a0012f48f79a6a134e2c..1579f7a14ab4bdb7e026979db04a45c87a128cb4 100644 (file)
@@ -195,6 +195,10 @@ extern int svc_rdma_map_reply_msg(struct svcxprt_rdma *rdma,
                                  struct svc_rdma_send_ctxt *sctxt,
                                  const struct svc_rdma_recv_ctxt *rctxt,
                                  struct xdr_buf *xdr);
+extern void svc_rdma_send_error_msg(struct svcxprt_rdma *rdma,
+                                   struct svc_rdma_send_ctxt *sctxt,
+                                   struct svc_rdma_recv_ctxt *rctxt,
+                                   int status);
 extern int svc_rdma_sendto(struct svc_rqst *);
 extern int svc_rdma_read_payload(struct svc_rqst *rqstp, unsigned int offset,
                                 unsigned int length);
index fb548b548c4b969d18ca69a863ba54aa2118bbde..57041298fe4f4c8b4911981c8a26302136eb99c6 100644 (file)
@@ -804,16 +804,25 @@ static int svc_rdma_send_reply_msg(struct svcxprt_rdma *rdma,
        return svc_rdma_send(rdma, &sctxt->sc_send_wr);
 }
 
-/* Given the client-provided Write and Reply chunks, the server was not
- * able to form a complete reply. Return an RDMA_ERROR message so the
- * client can retire this RPC transaction.
- *
- * Remote Invalidation is skipped for simplicity.
+/**
+ * svc_rdma_send_error_msg - Send an RPC/RDMA v1 error response
+ * @rdma: controlling transport context
+ * @sctxt: Send context for the response
+ * @rctxt: Receive context for incoming bad message
+ * @status: negative errno indicating error that occurred
+ *
+ * Given the client-provided Read, Write, and Reply chunks, the
+ * server was not able to parse the Call or form a complete Reply.
+ * Return an RDMA_ERROR message so the client can retire the RPC
+ * transaction.
+ *
+ * The caller does not have to release @sctxt. It is released by
+ * Send completion, or by this function on error.
  */
-static void svc_rdma_send_error_msg(struct svcxprt_rdma *rdma,
-                                   struct svc_rdma_send_ctxt *sctxt,
-                                   struct svc_rdma_recv_ctxt *rctxt,
-                                   int status)
+void svc_rdma_send_error_msg(struct svcxprt_rdma *rdma,
+                            struct svc_rdma_send_ctxt *sctxt,
+                            struct svc_rdma_recv_ctxt *rctxt,
+                            int status)
 {
        __be32 *rdma_argp = rctxt->rc_recv_buf;
        __be32 *p;
@@ -852,6 +861,7 @@ static void svc_rdma_send_error_msg(struct svcxprt_rdma *rdma,
                trace_svcrdma_err_chunk(*rdma_argp);
        }
 
+       /* Remote Invalidation is skipped for simplicity. */
        sctxt->sc_send_wr.num_sge = 1;
        sctxt->sc_send_wr.opcode = IB_WR_SEND;
        sctxt->sc_sges[0].length = sctxt->sc_hdrbuf.len;