RDMA, core and ULPs: Declare ib_post_send() and ib_post_recv() arguments const
Since neither ib_post_send() nor ib_post_recv() modify the data structure their second argument points at, declare that argument const. This change makes it necessary to declare the 'bad_wr' argument const too and also to modify all ULPs that call ib_post_send(), ib_post_recv() or ib_post_srq_recv(). This patch does not change any functionality but makes it possible for the compiler to verify whether the ib_post_(send|recv|srq_recv) really do not modify the posted work request. To make this possible, only one cast had to be introduce that casts away constness, namely in rpcrdma_post_recvs(). The only way I can think of to avoid that cast is to introduce an additional loop in that function or to change the data type of bad_wr from struct ib_recv_wr ** into int (an index that refers to an element in the work request list). However, both approaches would require even more extensive changes than this patch. Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> Reviewed-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:

committed by
Jason Gunthorpe

parent
7bb1fafc2f
commit
d34ac5cd3a
@@ -2373,8 +2373,8 @@ struct ib_device {
|
||||
struct ib_srq_attr *srq_attr);
|
||||
int (*destroy_srq)(struct ib_srq *srq);
|
||||
int (*post_srq_recv)(struct ib_srq *srq,
|
||||
struct ib_recv_wr *recv_wr,
|
||||
struct ib_recv_wr **bad_recv_wr);
|
||||
const struct ib_recv_wr *recv_wr,
|
||||
const struct ib_recv_wr **bad_recv_wr);
|
||||
struct ib_qp * (*create_qp)(struct ib_pd *pd,
|
||||
struct ib_qp_init_attr *qp_init_attr,
|
||||
struct ib_udata *udata);
|
||||
@@ -2388,11 +2388,11 @@ struct ib_device {
|
||||
struct ib_qp_init_attr *qp_init_attr);
|
||||
int (*destroy_qp)(struct ib_qp *qp);
|
||||
int (*post_send)(struct ib_qp *qp,
|
||||
struct ib_send_wr *send_wr,
|
||||
struct ib_send_wr **bad_send_wr);
|
||||
const struct ib_send_wr *send_wr,
|
||||
const struct ib_send_wr **bad_send_wr);
|
||||
int (*post_recv)(struct ib_qp *qp,
|
||||
struct ib_recv_wr *recv_wr,
|
||||
struct ib_recv_wr **bad_recv_wr);
|
||||
const struct ib_recv_wr *recv_wr,
|
||||
const struct ib_recv_wr **bad_recv_wr);
|
||||
struct ib_cq * (*create_cq)(struct ib_device *device,
|
||||
const struct ib_cq_init_attr *attr,
|
||||
struct ib_ucontext *context,
|
||||
@@ -3281,10 +3281,10 @@ int ib_destroy_srq(struct ib_srq *srq);
|
||||
* the work request that failed to be posted on the QP.
|
||||
*/
|
||||
static inline int ib_post_srq_recv(struct ib_srq *srq,
|
||||
struct ib_recv_wr *recv_wr,
|
||||
struct ib_recv_wr **bad_recv_wr)
|
||||
const struct ib_recv_wr *recv_wr,
|
||||
const struct ib_recv_wr **bad_recv_wr)
|
||||
{
|
||||
struct ib_recv_wr *dummy;
|
||||
const struct ib_recv_wr *dummy;
|
||||
|
||||
return srq->device->post_srq_recv(srq, recv_wr, bad_recv_wr ? : &dummy);
|
||||
}
|
||||
@@ -3384,10 +3384,10 @@ int ib_close_qp(struct ib_qp *qp);
|
||||
* earlier work requests in the list.
|
||||
*/
|
||||
static inline int ib_post_send(struct ib_qp *qp,
|
||||
struct ib_send_wr *send_wr,
|
||||
struct ib_send_wr **bad_send_wr)
|
||||
const struct ib_send_wr *send_wr,
|
||||
const struct ib_send_wr **bad_send_wr)
|
||||
{
|
||||
struct ib_send_wr *dummy;
|
||||
const struct ib_send_wr *dummy;
|
||||
|
||||
return qp->device->post_send(qp, send_wr, bad_send_wr ? : &dummy);
|
||||
}
|
||||
@@ -3401,10 +3401,10 @@ static inline int ib_post_send(struct ib_qp *qp,
|
||||
* the work request that failed to be posted on the QP.
|
||||
*/
|
||||
static inline int ib_post_recv(struct ib_qp *qp,
|
||||
struct ib_recv_wr *recv_wr,
|
||||
struct ib_recv_wr **bad_recv_wr)
|
||||
const struct ib_recv_wr *recv_wr,
|
||||
const struct ib_recv_wr **bad_recv_wr)
|
||||
{
|
||||
struct ib_recv_wr *dummy;
|
||||
const struct ib_recv_wr *dummy;
|
||||
|
||||
return qp->device->post_recv(qp, recv_wr, bad_recv_wr ? : &dummy);
|
||||
}
|
||||
|
Reference in New Issue
Block a user