All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] scsi: scsi_transport_srp: don't block target in failfast state
@ 2021-01-11 14:25 mwilck
  2021-01-12  4:38 ` Bart Van Assche
  2021-01-13  5:48 ` Martin K. Petersen
  0 siblings, 2 replies; 3+ messages in thread
From: mwilck @ 2021-01-11 14:25 UTC (permalink / raw)
  To: Martin K. Petersen, Hannes Reinecke
  Cc: Bart Van Assche, linux-scsi, James Bottomley, Martin Wilck

From: Martin Wilck <mwilck@suse.com>

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.

Signed-off-by: Martin Wilck <mwilck@suse.com>
---
 drivers/scsi/scsi_transport_srp.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/scsi_transport_srp.c b/drivers/scsi/scsi_transport_srp.c
index cba1cf6a1c12..1e939a2a387f 100644
--- a/drivers/scsi/scsi_transport_srp.c
+++ b/drivers/scsi/scsi_transport_srp.c
@@ -541,7 +541,14 @@ int srp_reconnect_rport(struct srp_rport *rport)
 	res = mutex_lock_interruptible(&rport->mutex);
 	if (res)
 		goto out;
-	scsi_target_block(&shost->shost_gendev);
+	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",
 		 dev_name(&shost->shost_gendev), rport->state, res);
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] scsi: scsi_transport_srp: don't block target in failfast state
  2021-01-11 14:25 [PATCH] scsi: scsi_transport_srp: don't block target in failfast state mwilck
@ 2021-01-12  4:38 ` Bart Van Assche
  2021-01-13  5:48 ` Martin K. Petersen
  1 sibling, 0 replies; 3+ messages in thread
From: Bart Van Assche @ 2021-01-12  4:38 UTC (permalink / raw)
  To: mwilck, Martin K. Petersen, Hannes Reinecke; +Cc: linux-scsi, James Bottomley

On 1/11/21 6:25 AM, mwilck@suse.com wrote:
> From: Martin Wilck <mwilck@suse.com>
> 
> 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.
> 
> Signed-off-by: Martin Wilck <mwilck@suse.com>
> ---
>  drivers/scsi/scsi_transport_srp.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/scsi_transport_srp.c b/drivers/scsi/scsi_transport_srp.c
> index cba1cf6a1c12..1e939a2a387f 100644
> --- a/drivers/scsi/scsi_transport_srp.c
> +++ b/drivers/scsi/scsi_transport_srp.c
> @@ -541,7 +541,14 @@ int srp_reconnect_rport(struct srp_rport *rport)
>  	res = mutex_lock_interruptible(&rport->mutex);
>  	if (res)
>  		goto out;
> -	scsi_target_block(&shost->shost_gendev);
> +	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",
>  		 dev_name(&shost->shost_gendev), rport->state, res);

Reviewed-by: Bart Van Assche <bvanassche@acm.org>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] scsi: scsi_transport_srp: don't block target in failfast state
  2021-01-11 14:25 [PATCH] scsi: scsi_transport_srp: don't block target in failfast state mwilck
  2021-01-12  4:38 ` Bart Van Assche
@ 2021-01-13  5:48 ` Martin K. Petersen
  1 sibling, 0 replies; 3+ messages in thread
From: Martin K. Petersen @ 2021-01-13  5:48 UTC (permalink / raw)
  To: mwilck, Hannes Reinecke
  Cc: Martin K . Petersen, linux-scsi, Bart Van Assche, James Bottomley

On Mon, 11 Jan 2021 15:25:41 +0100, mwilck@suse.com wrote:

> 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.

Applied to 5.11/scsi-fixes, thanks!

[1/1] scsi: scsi_transport_srp: don't block target in failfast state
      https://git.kernel.org/mkp/scsi/c/72eeb7c71513

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-01-13  5:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-11 14:25 [PATCH] scsi: scsi_transport_srp: don't block target in failfast state mwilck
2021-01-12  4:38 ` Bart Van Assche
2021-01-13  5:48 ` Martin K. Petersen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.