Commit a4b3f37d authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Luis Henriques

scsi: only re-lock door after EH on devices that were reset

commit 48379270 upstream.

Setups that use the blk-mq I/O path can lock up if a host with a single
device that has its door locked enters EH.  Make sure to only send the
command to re-lock the door to devices that actually were reset and thus
might have lost their state.  Otherwise the EH code might be get blocked
on blk_get_request as all requests for non-reset devices might be in use.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reported-by: default avatarMeelis Roos <meelis.roos@ut.ee>
Tested-by: default avatarMeelis Roos <meelis.roos@ut.ee>
Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
parent a30d2ed6
...@@ -1989,8 +1989,10 @@ static void scsi_restart_operations(struct Scsi_Host *shost) ...@@ -1989,8 +1989,10 @@ static void scsi_restart_operations(struct Scsi_Host *shost)
* is no point trying to lock the door of an off-line device. * is no point trying to lock the door of an off-line device.
*/ */
shost_for_each_device(sdev, shost) { shost_for_each_device(sdev, shost) {
if (scsi_device_online(sdev) && sdev->locked) if (scsi_device_online(sdev) && sdev->was_reset && sdev->locked) {
scsi_eh_lock_door(sdev); scsi_eh_lock_door(sdev);
sdev->was_reset = 0;
}
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment