Skip to contentSkip to conversation

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

PATCH Christoph Hellwig 2 participants 2 messages Nov 3, 2014 – Nov 5, 2014 SCSI

lore
Share & tools
lore
#0 lore raw

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.

drivers/scsi/scsi_error.c +3 -1
index fa7b5ec..7af43cb 100644
@@ -2016,8 +2016,10 @@ static void scsi_restart_operations(struct Scsi_Host *shost)
 	 * is no point trying to lock the door of an off-line device.
 	 */
 	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);
+			sdev->was_reset = 0;
+		}
 	}
 
 	/*
Reviewed-by
#1 lore raw
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Christoph" == Christoph Hellwig <[email protected]> writes:

Christoph> Setups that use the blk-mq I/O path can lock up if a host Christoph> with a single device that has its door locked enters EH. Christoph> Make sure to only send the command to re-lock the door to Christoph> devices that actually were reset and thus might have lost Christoph> their state. Otherwise the EH code might be get blocked on Christoph> blk_get_request as all requests for non-reset devices might Christoph> be in use.

Signature · 1 line
Martin K. Petersen	Oracle Linux Engineering