mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-12 22:56:48 +07:00
xprtrdma: Shrink send SGEs array
We no longer need to accommodate an xdr_buf whose pages start at an offset and cross extra page boundaries. If there are more partial or whole pages to send than there are available SGEs, the marshaling logic is now smart enough to use a Read chunk instead of failing. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
16f906d66c
commit
c6f5b47f9f
@ -305,16 +305,19 @@ struct rpcrdma_mr_seg { /* chunk descriptors */
|
||||
char *mr_offset; /* kva if no page, else offset */
|
||||
};
|
||||
|
||||
/* Reserve enough Send SGEs to send a maximum size inline request:
|
||||
/* The Send SGE array is provisioned to send a maximum size
|
||||
* inline request:
|
||||
* - RPC-over-RDMA header
|
||||
* - xdr_buf head iovec
|
||||
* - RPCRDMA_MAX_INLINE bytes, possibly unaligned, in pages
|
||||
* - RPCRDMA_MAX_INLINE bytes, in pages
|
||||
* - xdr_buf tail iovec
|
||||
*
|
||||
* The actual number of array elements consumed by each RPC
|
||||
* depends on the device's max_sge limit.
|
||||
*/
|
||||
enum {
|
||||
RPCRDMA_MIN_SEND_SGES = 3,
|
||||
RPCRDMA_MAX_SEND_PAGES = PAGE_SIZE + RPCRDMA_MAX_INLINE - 1,
|
||||
RPCRDMA_MAX_PAGE_SGES = (RPCRDMA_MAX_SEND_PAGES >> PAGE_SHIFT) + 1,
|
||||
RPCRDMA_MAX_PAGE_SGES = RPCRDMA_MAX_INLINE >> PAGE_SHIFT,
|
||||
RPCRDMA_MAX_SEND_SGES = 1 + 1 + RPCRDMA_MAX_PAGE_SGES + 1,
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user