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

Commit c81e55e0 authored by James Smart's avatar James Smart Committed by Sagi Grimberg
Browse files

nvmet_fc: correct logic in disconnect queue LS handling



Correct logic in disconnect queue LS handling.
Rework so that queue searching and error reporting is above the
section to send back a ls rjt

Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
parent d61b7f97
Loading
Loading
Loading
Loading
+22 −14
Original line number Diff line number Diff line
@@ -1314,7 +1314,7 @@ nvmet_fc_ls_disconnect(struct nvmet_fc_tgtport *tgtport,
			(struct fcnvme_ls_disconnect_rqst *)iod->rqstbuf;
	struct fcnvme_ls_disconnect_acc *acc =
			(struct fcnvme_ls_disconnect_acc *)iod->rspbuf;
	struct nvmet_fc_tgt_queue *queue;
	struct nvmet_fc_tgt_queue *queue = NULL;
	struct nvmet_fc_tgt_assoc *assoc;
	int ret = 0;
	bool del_assoc = false;
@@ -1348,7 +1348,18 @@ nvmet_fc_ls_disconnect(struct nvmet_fc_tgtport *tgtport,
		assoc = nvmet_fc_find_target_assoc(tgtport,
				be64_to_cpu(rqst->associd.association_id));
		iod->assoc = assoc;
		if (!assoc)
		if (assoc) {
			if (rqst->discon_cmd.scope ==
					FCNVME_DISCONN_CONNECTION) {
				queue = nvmet_fc_find_target_queue(tgtport,
						be64_to_cpu(
							rqst->discon_cmd.id));
				if (!queue) {
					nvmet_fc_tgt_a_put(assoc);
					ret = VERR_NO_CONN;
				}
			}
		} else
			ret = VERR_NO_ASSOC;
	}

@@ -1373,9 +1384,7 @@ nvmet_fc_ls_disconnect(struct nvmet_fc_tgtport *tgtport,
			FCNVME_LS_DISCONNECT);


	if (rqst->discon_cmd.scope == FCNVME_DISCONN_CONNECTION) {
		queue = nvmet_fc_find_target_queue(tgtport,
					be64_to_cpu(rqst->discon_cmd.id));
	/* are we to delete a Connection ID (queue) */
	if (queue) {
		int qid = queue->qid;

@@ -1388,7 +1397,6 @@ nvmet_fc_ls_disconnect(struct nvmet_fc_tgtport *tgtport,
		if (!qid)
			del_assoc = true;
	}
	}

	/* release get taken in nvmet_fc_find_target_assoc */
	nvmet_fc_tgt_a_put(iod->assoc);