Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -2191,16 +2191,16 @@ static void __ib_drain_sq(struct ib_qp *qp)
	struct ib_send_wr swr = {}, *bad_swr;
	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);
	if (ret) {
		WARN_ONCE(ret, "failed to drain send queue: %d\n", ret);
		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);
	if (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)
	struct ib_recv_wr rwr = {}, *bad_rwr;
	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);
	if (ret) {
		WARN_ONCE(ret, "failed to drain recv queue: %d\n", ret);
		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);
	if (ret) {
		WARN_ONCE(ret, "failed to drain recv queue: %d\n", ret);