Commit 0e34bd96 authored by Daniel Wagner's avatar Daniel Wagner Committed by Keith Busch
Browse files

nvme: do not retry authentication failures



When the key is invalid there is no point in retrying. Because the auth
code returns kernel error codes only, we can't test on the DNR bit.

Signed-off-by: default avatarDaniel Wagner <dwagner@suse.de>
Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
parent adfde7ed
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -730,7 +730,7 @@ static void nvme_queue_auth_work(struct work_struct *work)
					 NVME_AUTH_DHCHAP_MESSAGE_CHALLENGE);
	if (ret) {
		chap->status = ret;
		chap->error = -ECONNREFUSED;
		chap->error = -EKEYREJECTED;
		return;
	}

@@ -797,7 +797,7 @@ static void nvme_queue_auth_work(struct work_struct *work)
					 NVME_AUTH_DHCHAP_MESSAGE_SUCCESS1);
	if (ret) {
		chap->status = ret;
		chap->error = -ECONNREFUSED;
		chap->error = -EKEYREJECTED;
		return;
	}

@@ -818,7 +818,7 @@ static void nvme_queue_auth_work(struct work_struct *work)
	ret = nvme_auth_process_dhchap_success1(ctrl, chap);
	if (ret) {
		/* Controller authentication failed */
		chap->error = -ECONNREFUSED;
		chap->error = -EKEYREJECTED;
		goto fail2;
	}

+6 −0
Original line number Diff line number Diff line
@@ -567,12 +567,18 @@ EXPORT_SYMBOL_GPL(nvmf_connect_io_queue);
 *
 * - the DNR bit is set and the specification states no further connect
 *   attempts with the same set of paramenters should be attempted.
 *
 * - when the authentication attempt fails, because the key was invalid.
 *   This error code is set on the host side.
 */
bool nvmf_should_reconnect(struct nvme_ctrl *ctrl, int status)
{
	if (status > 0 && (status & NVME_SC_DNR))
		return false;

	if (status == -EKEYREJECTED)
		return false;

	if (ctrl->opts->max_reconnects == -1 ||
	    ctrl->nr_reconnects < ctrl->opts->max_reconnects)
		return true;