Maxim Levitsky
2020-Jul-29 19:48 UTC
[PATCH 0/1] virtio-scsi: fix missing unplug events when all LUNs are unplugged at the same time
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
Maxim Levitsky
2020-Jul-29 19:48 UTC
[PATCH 1/1] scsi: virtio-scsi: handle correctly case when all LUNs were unplugged
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 at 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
Paolo Bonzini
2020-Jul-29 22:10 UTC
[PATCH 1/1] scsi: virtio-scsi: handle correctly case when all LUNs were unplugged
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 at 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 at redhat.com>
Martin K. Petersen
2020-Jul-30 02:24 UTC
[PATCH 0/1] virtio-scsi: fix missing unplug events when all LUNs are unplugged at the same time
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