Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03ff8821 authored by Chuck Lever's avatar Chuck Lever Committed by Anna Schumaker
Browse files

xprtrdma: Remove BOUNCEBUFFERS memory registration mode



Clean up: This memory registration mode is slow and was never
meant for use in production environments. Remove it to reduce
implementation complexity.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Tested-by: default avatarSteve Wise <swise@opengridcomputing.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 254f91e2
Loading
Loading
Loading
Loading
+0 −11
Original line number Original line Diff line number Diff line
@@ -77,9 +77,6 @@ static const char transfertypes[][12] = {
 * Prepare the passed-in xdr_buf into representation as RPC/RDMA chunk
 * Prepare the passed-in xdr_buf into representation as RPC/RDMA chunk
 * elements. Segments are then coalesced when registered, if possible
 * elements. Segments are then coalesced when registered, if possible
 * within the selected memreg mode.
 * within the selected memreg mode.
 *
 * Note, this routine is never called if the connection's memory
 * registration strategy is 0 (bounce buffers).
 */
 */


static int
static int
@@ -439,14 +436,6 @@ rpcrdma_marshal_req(struct rpc_rqst *rqst)
		wtype = rpcrdma_noch;
		wtype = rpcrdma_noch;
	BUG_ON(rtype != rpcrdma_noch && wtype != rpcrdma_noch);
	BUG_ON(rtype != rpcrdma_noch && wtype != rpcrdma_noch);


	if (r_xprt->rx_ia.ri_memreg_strategy == RPCRDMA_BOUNCEBUFFERS &&
	    (rtype != rpcrdma_noch || wtype != rpcrdma_noch)) {
		/* forced to "pure inline"? */
		dprintk("RPC:       %s: too much data (%d/%d) for inline\n",
			__func__, rqst->rq_rcv_buf.len, rqst->rq_snd_buf.len);
		return -1;
	}

	hdrlen = 28; /*sizeof *headerp;*/
	hdrlen = 28; /*sizeof *headerp;*/
	padlen = 0;
	padlen = 0;


+0 −13
Original line number Original line Diff line number Diff line
@@ -503,18 +503,6 @@ xprt_rdma_allocate(struct rpc_task *task, size_t size)
		 * If the allocation or registration fails, the RPC framework
		 * If the allocation or registration fails, the RPC framework
		 * will (doggedly) retry.
		 * will (doggedly) retry.
		 */
		 */
		if (rpcx_to_rdmax(xprt)->rx_ia.ri_memreg_strategy ==
				RPCRDMA_BOUNCEBUFFERS) {
			/* forced to "pure inline" */
			dprintk("RPC:       %s: too much data (%zd) for inline "
					"(r/w max %d/%d)\n", __func__, size,
					rpcx_to_rdmad(xprt).inline_rsize,
					rpcx_to_rdmad(xprt).inline_wsize);
			size = req->rl_size;
			rpc_exit(task, -EIO);		/* fail the operation */
			rpcx_to_rdmax(xprt)->rx_stats.failed_marshal_count++;
			goto out;
		}
		if (task->tk_flags & RPC_TASK_SWAPPER)
		if (task->tk_flags & RPC_TASK_SWAPPER)
			nreq = kmalloc(sizeof *req + size, GFP_ATOMIC);
			nreq = kmalloc(sizeof *req + size, GFP_ATOMIC);
		else
		else
@@ -543,7 +531,6 @@ xprt_rdma_allocate(struct rpc_task *task, size_t size)
		req = nreq;
		req = nreq;
	}
	}
	dprintk("RPC:       %s: size %zd, request 0x%p\n", __func__, size, req);
	dprintk("RPC:       %s: size %zd, request 0x%p\n", __func__, size, req);
out:
	req->rl_connect_cookie = 0;	/* our reserved value */
	req->rl_connect_cookie = 0;	/* our reserved value */
	return req->rl_xdr_buf;
	return req->rl_xdr_buf;


+1 −4
Original line number Original line Diff line number Diff line
@@ -557,7 +557,6 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
	 * adapter.
	 * adapter.
	 */
	 */
	switch (memreg) {
	switch (memreg) {
	case RPCRDMA_BOUNCEBUFFERS:
	case RPCRDMA_REGISTER:
	case RPCRDMA_REGISTER:
	case RPCRDMA_FRMR:
	case RPCRDMA_FRMR:
		break;
		break;
@@ -778,9 +777,7 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,


	/* Client offers RDMA Read but does not initiate */
	/* Client offers RDMA Read but does not initiate */
	ep->rep_remote_cma.initiator_depth = 0;
	ep->rep_remote_cma.initiator_depth = 0;
	if (ia->ri_memreg_strategy == RPCRDMA_BOUNCEBUFFERS)
	if (devattr.max_qp_rd_atom > 32)	/* arbitrary but <= 255 */
		ep->rep_remote_cma.responder_resources = 0;
	else if (devattr.max_qp_rd_atom > 32)	/* arbitrary but <= 255 */
		ep->rep_remote_cma.responder_resources = 32;
		ep->rep_remote_cma.responder_resources = 32;
	else
	else
		ep->rep_remote_cma.responder_resources = devattr.max_qp_rd_atom;
		ep->rep_remote_cma.responder_resources = devattr.max_qp_rd_atom;