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

Commit 2b27b3f8 authored by Martin Wilck's avatar Martin Wilck Committed by Greg Kroah-Hartman
Browse files

scsi: scsi_transport_srp: Don't block target in failfast state

[ Upstream commit 72eeb7c7151302ef007f1acd018cbf6f30e50321 ]

If the port is in SRP_RPORT_FAIL_FAST state when srp_reconnect_rport() is
entered, a transition to SDEV_BLOCK would be illegal, and a kernel WARNING
would be triggered. Skip scsi_target_block() in this case.

Link: https://lore.kernel.org/r/20210111142541.21534-1-mwilck@suse.com


Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarMartin Wilck <mwilck@suse.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 3b9aacf2
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -555,6 +555,13 @@ int srp_reconnect_rport(struct srp_rport *rport)
	res = mutex_lock_interruptible(&rport->mutex);
	if (res)
		goto out;
	if (rport->state != SRP_RPORT_FAIL_FAST)
		/*
		 * sdev state must be SDEV_TRANSPORT_OFFLINE, transition
		 * to SDEV_BLOCK is illegal. Calling scsi_target_unblock()
		 * later is ok though, scsi_internal_device_unblock_nowait()
		 * treats SDEV_TRANSPORT_OFFLINE like SDEV_BLOCK.
		 */
		scsi_target_block(&shost->shost_gendev);
	res = rport->state != SRP_RPORT_LOST ? i->f->reconnect(rport) : -ENODEV;
	pr_debug("%s (state %d): transport.reconnect() returned %d\n",