|
@@ -165,8 +165,9 @@ static int
|
|
rpcrdma_sendcq_poll(struct ib_cq *cq, struct rpcrdma_ep *ep)
|
|
rpcrdma_sendcq_poll(struct ib_cq *cq, struct rpcrdma_ep *ep)
|
|
{
|
|
{
|
|
struct ib_wc *wcs;
|
|
struct ib_wc *wcs;
|
|
- int count, rc;
|
|
|
|
|
|
+ int budget, count, rc;
|
|
|
|
|
|
|
|
+ budget = RPCRDMA_WC_BUDGET / RPCRDMA_POLLSIZE;
|
|
do {
|
|
do {
|
|
wcs = ep->rep_send_wcs;
|
|
wcs = ep->rep_send_wcs;
|
|
|
|
|
|
@@ -177,7 +178,7 @@ rpcrdma_sendcq_poll(struct ib_cq *cq, struct rpcrdma_ep *ep)
|
|
count = rc;
|
|
count = rc;
|
|
while (count-- > 0)
|
|
while (count-- > 0)
|
|
rpcrdma_sendcq_process_wc(wcs++);
|
|
rpcrdma_sendcq_process_wc(wcs++);
|
|
- } while (rc == RPCRDMA_POLLSIZE);
|
|
|
|
|
|
+ } while (rc == RPCRDMA_POLLSIZE && --budget);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -254,8 +255,9 @@ static int
|
|
rpcrdma_recvcq_poll(struct ib_cq *cq, struct rpcrdma_ep *ep)
|
|
rpcrdma_recvcq_poll(struct ib_cq *cq, struct rpcrdma_ep *ep)
|
|
{
|
|
{
|
|
struct ib_wc *wcs;
|
|
struct ib_wc *wcs;
|
|
- int count, rc;
|
|
|
|
|
|
+ int budget, count, rc;
|
|
|
|
|
|
|
|
+ budget = RPCRDMA_WC_BUDGET / RPCRDMA_POLLSIZE;
|
|
do {
|
|
do {
|
|
wcs = ep->rep_recv_wcs;
|
|
wcs = ep->rep_recv_wcs;
|
|
|
|
|
|
@@ -266,7 +268,7 @@ rpcrdma_recvcq_poll(struct ib_cq *cq, struct rpcrdma_ep *ep)
|
|
count = rc;
|
|
count = rc;
|
|
while (count-- > 0)
|
|
while (count-- > 0)
|
|
rpcrdma_recvcq_process_wc(wcs++);
|
|
rpcrdma_recvcq_process_wc(wcs++);
|
|
- } while (rc == RPCRDMA_POLLSIZE);
|
|
|
|
|
|
+ } while (rc == RPCRDMA_POLLSIZE && --budget);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|