Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e2247b2 authored by Lan Tianyu's avatar Lan Tianyu Committed by James Bottomley
Browse files

[SCSI] sd: Add runtime pm in the sd_check_events()



The sd_check_event() will be called periodly even when the device is in the
suspended status to check media event. The scsi_test_unit_ready() in the
sd_check_event() will issue scsi cmd request. Issuing scsi request when the
device is in the suspeneded status will cause problem. For example, when a usb
flash disk in the suspended status, scsi_test_unit_ready() issues a scsi
request. The request will be returned as failed because the usb device is not
active. The patch adds scsi_autopm_get_device() and scsi_autopm_put_device()
around scsi_test_unit_ready() in the sd_check_event() to resolve such problem.

Signed-off-by: default avatarLan Tianyu <tianyu.lan@intel.com>
Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent cd8df932
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1212,9 +1212,14 @@ static unsigned int sd_check_events(struct gendisk *disk, unsigned int clearing)
	retval = -ENODEV;

	if (scsi_block_when_processing_errors(sdp)) {
		retval = scsi_autopm_get_device(sdp);
		if (retval)
			goto out;

		sshdr  = kzalloc(sizeof(*sshdr), GFP_KERNEL);
		retval = scsi_test_unit_ready(sdp, SD_TIMEOUT, SD_MAX_RETRIES,
					      sshdr);
		scsi_autopm_put_device(sdp);
	}

	/* failed to execute TUR, assume media not present */