Skip to content

Commit

Permalink
IB/rxe: optimize the function duplicate_request
Browse files Browse the repository at this point in the history
In the function duplicate_request, the reference of skb can be increased
to replace the function skb_clone.

This will make rxe performace better and save memory.

CC: Srinivas Eeda <srinivas.eeda@oracle.com>
CC: Junxiao Bi <junxiao.bi@oracle.com>
Signed-off-by: Zhu Yanjun <yanjun.zhu@oracle.com>
Reviewed-by: Bart Van Assche <bart.vanassche@wdc.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
  • Loading branch information
Zhu Yanjun authored and Doug Ledford committed Apr 19, 2018
1 parent 8f1a72c commit 2e47350
Showing 1 changed file with 3 additions and 14 deletions.
17 changes: 3 additions & 14 deletions drivers/infiniband/sw/rxe/rxe_resp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1124,24 +1124,13 @@ static enum resp_states duplicate_request(struct rxe_qp *qp,
/* Find the operation in our list of responder resources. */
res = find_resource(qp, pkt->psn);
if (res) {
struct sk_buff *skb_copy;

skb_copy = skb_clone(res->atomic.skb, GFP_ATOMIC);
if (skb_copy) {
rxe_add_ref(qp); /* for the new SKB */
} else {
pr_warn("Couldn't clone atomic resp\n");
rc = RESPST_CLEANUP;
goto out;
}

skb_get(res->atomic.skb);
/* Resend the result. */
rc = rxe_xmit_packet(to_rdev(qp->ibqp.device), qp,
pkt, skb_copy);
pkt, res->atomic.skb);
if (rc) {
pr_err("Failed resending result. This flow is not handled - skb ignored\n");
rxe_drop_ref(qp);
kfree_skb(skb_copy);
kfree_skb(res->atomic.skb);
rc = RESPST_CLEANUP;
goto out;
}
Expand Down

0 comments on commit 2e47350

Please sign in to comment.