Commit 48379270 authored by Christoph Hellwig's avatar Christoph Hellwig

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

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.

Cc: stable@vger.kernel.org
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>
parent 206c5f60
...@@ -2001,8 +2001,10 @@ static void scsi_restart_operations(struct Scsi_Host *shost) ...@@ -2001,8 +2001,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