Commit aaebd377 authored by Max Gurtovoy's avatar Max Gurtovoy Committed by Doug Ledford

IB/core: postpone WR initialization during queue drain

No need to initialize completion and WR in case we fail
during QP modification.
Signed-off-by: default avatarMax Gurtovoy <maxg@mellanox.com>
Acked-by: default avatarSagi Grimberg <sagi@grimberg.me>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent bb3ffb7a
...@@ -2191,16 +2191,16 @@ static void __ib_drain_sq(struct ib_qp *qp) ...@@ -2191,16 +2191,16 @@ static void __ib_drain_sq(struct ib_qp *qp)
struct ib_send_wr swr = {}, *bad_swr; struct ib_send_wr swr = {}, *bad_swr;
int ret; int ret;
swr.wr_cqe = &sdrain.cqe;
sdrain.cqe.done = ib_drain_qp_done;
init_completion(&sdrain.done);
ret = ib_modify_qp(qp, &attr, IB_QP_STATE); ret = ib_modify_qp(qp, &attr, IB_QP_STATE);
if (ret) { if (ret) {
WARN_ONCE(ret, "failed to drain send queue: %d\n", ret); WARN_ONCE(ret, "failed to drain send queue: %d\n", ret);
return; return;
} }
swr.wr_cqe = &sdrain.cqe;
sdrain.cqe.done = ib_drain_qp_done;
init_completion(&sdrain.done);
ret = ib_post_send(qp, &swr, &bad_swr); ret = ib_post_send(qp, &swr, &bad_swr);
if (ret) { if (ret) {
WARN_ONCE(ret, "failed to drain send queue: %d\n", ret); WARN_ONCE(ret, "failed to drain send queue: %d\n", ret);
...@@ -2225,16 +2225,16 @@ static void __ib_drain_rq(struct ib_qp *qp) ...@@ -2225,16 +2225,16 @@ static void __ib_drain_rq(struct ib_qp *qp)
struct ib_recv_wr rwr = {}, *bad_rwr; struct ib_recv_wr rwr = {}, *bad_rwr;
int ret; int ret;
rwr.wr_cqe = &rdrain.cqe;
rdrain.cqe.done = ib_drain_qp_done;
init_completion(&rdrain.done);
ret = ib_modify_qp(qp, &attr, IB_QP_STATE); ret = ib_modify_qp(qp, &attr, IB_QP_STATE);
if (ret) { if (ret) {
WARN_ONCE(ret, "failed to drain recv queue: %d\n", ret); WARN_ONCE(ret, "failed to drain recv queue: %d\n", ret);
return; return;
} }
rwr.wr_cqe = &rdrain.cqe;
rdrain.cqe.done = ib_drain_qp_done;
init_completion(&rdrain.done);
ret = ib_post_recv(qp, &rwr, &bad_rwr); ret = ib_post_recv(qp, &rwr, &bad_rwr);
if (ret) { if (ret) {
WARN_ONCE(ret, "failed to drain recv queue: %d\n", ret); WARN_ONCE(ret, "failed to drain recv queue: %d\n", ret);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment