linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/1] virtio-scsi: fix missing unplug events when all LUNs are unplugged at the same time
@ 2020-07-29 19:48 Maxim Levitsky
  2020-07-29 19:48 ` [PATCH 1/1] scsi: virtio-scsi: handle correctly case when all LUNs were unplugged Maxim Levitsky
  2020-07-30  2:24 ` [PATCH 0/1] virtio-scsi: fix missing unplug events when all LUNs are unplugged at the same time Martin K. Petersen
  0 siblings, 2 replies; 4+ messages in thread
From: Maxim Levitsky @ 2020-07-29 19:48 UTC (permalink / raw)
  To: linux-kernel
  Cc: Paolo Bonzini, open list:SCSI SUBSYSTEM,
	open list:VIRTIO BLOCK AND SCSI DRIVERS, Stefan Hajnoczi,
	Michael S. Tsirkin, Martin K. Petersen, James E.J. Bottomley,
	Jason Wang, Maxim Levitsky

virtio-scsi currently has limit of 8 outstanding notifications so when more that
8 LUNs are unplugged, some are missed.

Commit 5ff843721467 ("scsi: virtio_scsi: unplug LUNs when events missed")
Fixed this by checking the 'event overflow' bit and manually scanned the bus
to see which LUNs are still there.

However there is a corner case when all LUNs are unplugged.
In this case (which is not fully scsi confirmant IMHO), all scsi
commands to such device respond with INVALID TARGET.

This patch proposes to detect this and remove the LUN in this case
as well.

Maxim Levitsky (1):
  scsi: virtio-scsi: handle correctly case when all LUNs were unplugged

 drivers/scsi/virtio_scsi.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

-- 
2.26.2



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

* [PATCH 1/1] scsi: virtio-scsi: handle correctly case when all LUNs were unplugged
  2020-07-29 19:48 [PATCH 0/1] virtio-scsi: fix missing unplug events when all LUNs are unplugged at the same time Maxim Levitsky
@ 2020-07-29 19:48 ` Maxim Levitsky
  2020-07-29 22:10   ` Paolo Bonzini
  2020-07-30  2:24 ` [PATCH 0/1] virtio-scsi: fix missing unplug events when all LUNs are unplugged at the same time Martin K. Petersen
  1 sibling, 1 reply; 4+ messages in thread
From: Maxim Levitsky @ 2020-07-29 19:48 UTC (permalink / raw)
  To: linux-kernel
  Cc: Paolo Bonzini, open list:SCSI SUBSYSTEM,
	open list:VIRTIO BLOCK AND SCSI DRIVERS, Stefan Hajnoczi,
	Michael S. Tsirkin, Martin K. Petersen, James E.J. Bottomley,
	Jason Wang, Maxim Levitsky

Commit 5ff843721467 ("scsi: virtio_scsi: unplug LUNs when events missed"),
almost fixed the case of mass unpluging of LUNs, but it missed a
corner case in which all the LUNs are unplugged at the same time.

In this case INQUIRY ends with DID_BAD_TARGET.
Detect this and unplug the LUN.

Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
---
 drivers/scsi/virtio_scsi.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index 0e0910c5b9424..c7f0c22b6f11d 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -351,6 +351,16 @@ static void virtscsi_rescan_hotunplug(struct virtio_scsi *vscsi)
 			/* PQ indicates the LUN is not attached */
 			scsi_remove_device(sdev);
 		}
+
+		else if (host_byte(result) == DID_BAD_TARGET) {
+			/*
+			 * if all LUNs of a virtio-scsi device are unplugged,
+			 * it will respond with BAD TARGET on any INQUIRY
+			 * command.
+			 * Remove the device in this case as well
+			 */
+			scsi_remove_device(sdev);
+		}
 	}
 
 	kfree(inq_result);
-- 
2.26.2


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

* Re: [PATCH 1/1] scsi: virtio-scsi: handle correctly case when all LUNs were unplugged
  2020-07-29 19:48 ` [PATCH 1/1] scsi: virtio-scsi: handle correctly case when all LUNs were unplugged Maxim Levitsky
@ 2020-07-29 22:10   ` Paolo Bonzini
  0 siblings, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2020-07-29 22:10 UTC (permalink / raw)
  To: Maxim Levitsky, linux-kernel
  Cc: open list:SCSI SUBSYSTEM,
	open list:VIRTIO BLOCK AND SCSI DRIVERS, Stefan Hajnoczi,
	Michael S. Tsirkin, Martin K. Petersen, James E.J. Bottomley,
	Jason Wang

On 29/07/20 21:48, Maxim Levitsky wrote:
> Commit 5ff843721467 ("scsi: virtio_scsi: unplug LUNs when events missed"),
> almost fixed the case of mass unpluging of LUNs, but it missed a
> corner case in which all the LUNs are unplugged at the same time.
> 
> In this case INQUIRY ends with DID_BAD_TARGET.
> Detect this and unplug the LUN.
> 
> Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
> ---
>  drivers/scsi/virtio_scsi.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
> index 0e0910c5b9424..c7f0c22b6f11d 100644
> --- a/drivers/scsi/virtio_scsi.c
> +++ b/drivers/scsi/virtio_scsi.c
> @@ -351,6 +351,16 @@ static void virtscsi_rescan_hotunplug(struct virtio_scsi *vscsi)
>  			/* PQ indicates the LUN is not attached */
>  			scsi_remove_device(sdev);
>  		}
> +
> +		else if (host_byte(result) == DID_BAD_TARGET) {
> +			/*
> +			 * if all LUNs of a virtio-scsi device are unplugged,
> +			 * it will respond with BAD TARGET on any INQUIRY
> +			 * command.
> +			 * Remove the device in this case as well
> +			 */
> +			scsi_remove_device(sdev);
> +		}
>  	}
>  
>  	kfree(inq_result);
> 

Acked-by: Paolo Bonzini <pbonzini@redhat.com>


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

* Re: [PATCH 0/1] virtio-scsi: fix missing unplug events when all LUNs are unplugged at the same time
  2020-07-29 19:48 [PATCH 0/1] virtio-scsi: fix missing unplug events when all LUNs are unplugged at the same time Maxim Levitsky
  2020-07-29 19:48 ` [PATCH 1/1] scsi: virtio-scsi: handle correctly case when all LUNs were unplugged Maxim Levitsky
@ 2020-07-30  2:24 ` Martin K. Petersen
  1 sibling, 0 replies; 4+ messages in thread
From: Martin K. Petersen @ 2020-07-30  2:24 UTC (permalink / raw)
  To: linux-kernel, Maxim Levitsky
  Cc: Martin K . Petersen, Michael S. Tsirkin,
	open list:SCSI SUBSYSTEM, Stefan Hajnoczi,
	open list:VIRTIO BLOCK AND SCSI DRIVERS, Paolo Bonzini,
	Jason Wang, James E.J. Bottomley

On Wed, 29 Jul 2020 22:48:05 +0300, Maxim Levitsky wrote:

> virtio-scsi currently has limit of 8 outstanding notifications so when more that
> 8 LUNs are unplugged, some are missed.
> 
> Commit 5ff843721467 ("scsi: virtio_scsi: unplug LUNs when events missed")
> Fixed this by checking the 'event overflow' bit and manually scanned the bus
> to see which LUNs are still there.
> 
> [...]

Applied to 5.9/scsi-queue, thanks!

[1/1] scsi: virtio-scsi: Correctly handle the case where all LUNs are unplugged
      https://git.kernel.org/mkp/scsi/c/b12149f2698c

-- 
Martin K. Petersen	Oracle Linux Engineering

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

end of thread, other threads:[~2020-07-30  2:24 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-29 19:48 [PATCH 0/1] virtio-scsi: fix missing unplug events when all LUNs are unplugged at the same time Maxim Levitsky
2020-07-29 19:48 ` [PATCH 1/1] scsi: virtio-scsi: handle correctly case when all LUNs were unplugged Maxim Levitsky
2020-07-29 22:10   ` Paolo Bonzini
2020-07-30  2:24 ` [PATCH 0/1] virtio-scsi: fix missing unplug events when all LUNs are unplugged at the same time Martin K. Petersen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).