The max_payload computation is generalized to ensure that the payload maximum is the lesser of RPC_MAX_DATA_SEGS and the number of data segments that can be transmitted in an inline buffer. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Reviewed-by: Sagi Grimberg <sagig@mellanox.com> Tested-by: Devesh Sharma <Devesh.Sharma@Emulex.Com> Tested-by: Meghana Cheripady <Meghana.Cheripady@Emulex.Com> Tested-by: Veeresh U. Kokatnur <veereshuk@chelsio.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
36 lines
1.0 KiB
C
36 lines
1.0 KiB
C
/*
|
|
* Copyright (c) 2015 Oracle. All rights reserved.
|
|
* Copyright (c) 2003-2007 Network Appliance, Inc. All rights reserved.
|
|
*/
|
|
|
|
/* Lightweight memory registration using Fast Registration Work
|
|
* Requests (FRWR). Also referred to sometimes as FRMR mode.
|
|
*
|
|
* FRWR features ordered asynchronous registration and deregistration
|
|
* of arbitrarily sized memory regions. This is the fastest and safest
|
|
* but most complex memory registration mode.
|
|
*/
|
|
|
|
#include "xprt_rdma.h"
|
|
|
|
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
|
|
# define RPCDBG_FACILITY RPCDBG_TRANS
|
|
#endif
|
|
|
|
/* FRWR mode conveys a list of pages per chunk segment. The
|
|
* maximum length of that list is the FRWR page list depth.
|
|
*/
|
|
static size_t
|
|
frwr_op_maxpages(struct rpcrdma_xprt *r_xprt)
|
|
{
|
|
struct rpcrdma_ia *ia = &r_xprt->rx_ia;
|
|
|
|
return min_t(unsigned int, RPCRDMA_MAX_DATA_SEGS,
|
|
rpcrdma_max_segments(r_xprt) * ia->ri_max_frmr_depth);
|
|
}
|
|
|
|
const struct rpcrdma_memreg_ops rpcrdma_frwr_memreg_ops = {
|
|
.ro_maxpages = frwr_op_maxpages,
|
|
.ro_displayname = "frwr",
|
|
};
|