svcrdma: Clean up read chunk counting
The byte_count argument is not used, and the function is called only from one place. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Reviewed-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
83f2bedfc6
commit
2397aa8b51
3 changed files with 12 additions and 21 deletions
|
@ -178,8 +178,6 @@ struct svcxprt_rdma {
|
||||||
#define RPCRDMA_MAX_REQ_SIZE 4096
|
#define RPCRDMA_MAX_REQ_SIZE 4096
|
||||||
|
|
||||||
/* svc_rdma_marshal.c */
|
/* svc_rdma_marshal.c */
|
||||||
extern void svc_rdma_rcl_chunk_counts(struct rpcrdma_read_chunk *,
|
|
||||||
int *, int *);
|
|
||||||
extern int svc_rdma_xdr_decode_req(struct rpcrdma_msg **, struct svc_rqst *);
|
extern int svc_rdma_xdr_decode_req(struct rpcrdma_msg **, struct svc_rqst *);
|
||||||
extern int svc_rdma_xdr_decode_deferred_req(struct svc_rqst *);
|
extern int svc_rdma_xdr_decode_deferred_req(struct svc_rqst *);
|
||||||
extern int svc_rdma_xdr_encode_error(struct svcxprt_rdma *,
|
extern int svc_rdma_xdr_encode_error(struct svcxprt_rdma *,
|
||||||
|
|
|
@ -70,22 +70,6 @@ static u32 *decode_read_list(u32 *va, u32 *vaend)
|
||||||
return (u32 *)&ch->rc_position;
|
return (u32 *)&ch->rc_position;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Determine number of chunks and total bytes in chunk list. The chunk
|
|
||||||
* list has already been verified to fit within the RPCRDMA header.
|
|
||||||
*/
|
|
||||||
void svc_rdma_rcl_chunk_counts(struct rpcrdma_read_chunk *ch,
|
|
||||||
int *ch_count, int *byte_count)
|
|
||||||
{
|
|
||||||
/* compute the number of bytes represented by read chunks */
|
|
||||||
*byte_count = 0;
|
|
||||||
*ch_count = 0;
|
|
||||||
for (; ch->rc_discrim != 0; ch++) {
|
|
||||||
*byte_count = *byte_count + ntohl(ch->rc_target.rs_length);
|
|
||||||
*ch_count = *ch_count + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Decodes a write chunk list. The expected format is as follows:
|
* Decodes a write chunk list. The expected format is as follows:
|
||||||
* descrim : xdr_one
|
* descrim : xdr_one
|
||||||
|
|
|
@ -365,12 +365,22 @@ static int rdma_read_chunk_frmr(struct svcxprt_rdma *xprt,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned int
|
||||||
|
rdma_rcl_chunk_count(struct rpcrdma_read_chunk *ch)
|
||||||
|
{
|
||||||
|
unsigned int count;
|
||||||
|
|
||||||
|
for (count = 0; ch->rc_discrim != xdr_zero; ch++)
|
||||||
|
count++;
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
static int rdma_read_chunks(struct svcxprt_rdma *xprt,
|
static int rdma_read_chunks(struct svcxprt_rdma *xprt,
|
||||||
struct rpcrdma_msg *rmsgp,
|
struct rpcrdma_msg *rmsgp,
|
||||||
struct svc_rqst *rqstp,
|
struct svc_rqst *rqstp,
|
||||||
struct svc_rdma_op_ctxt *head)
|
struct svc_rdma_op_ctxt *head)
|
||||||
{
|
{
|
||||||
int page_no, ch_count, ret;
|
int page_no, ret;
|
||||||
struct rpcrdma_read_chunk *ch;
|
struct rpcrdma_read_chunk *ch;
|
||||||
u32 page_offset, byte_count;
|
u32 page_offset, byte_count;
|
||||||
u64 rs_offset;
|
u64 rs_offset;
|
||||||
|
@ -381,8 +391,7 @@ static int rdma_read_chunks(struct svcxprt_rdma *xprt,
|
||||||
if (!ch)
|
if (!ch)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
svc_rdma_rcl_chunk_counts(ch, &ch_count, &byte_count);
|
if (rdma_rcl_chunk_count(ch) > RPCSVC_MAXPAGES)
|
||||||
if (ch_count > RPCSVC_MAXPAGES)
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/* The request is completed when the RDMA_READs complete. The
|
/* The request is completed when the RDMA_READs complete. The
|
||||||
|
|
Loading…
Add table
Reference in a new issue