scsi: sg: Enable runtime power management
[ Upstream commit4045de893f] In 2010, runtime power management support was implemented in the SCSI core. The description of patch "[SCSI] implement runtime Power Management" mentions that the sg driver is skipped but not why. This patch enables runtime power management even if an instance of the sg driver is held open. Enabling runtime PM for the sg driver is safe because all interactions of the sg driver with the SCSI device pass through the block layer (blk_execute_rq_nowait()) and the block layer already supports runtime PM. Cc: Alan Stern <stern@rowland.harvard.edu> Cc: Douglas Gilbert <dgilbert@interlog.com> Fixes:bc4f24014d("[SCSI] implement runtime Power Management") Signed-off-by: Bart Van Assche <bvanassche@acm.org> Link: https://lore.kernel.org/r/20241030220310.1373569-1-bvanassche@acm.org Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
20b775cf27
commit
7182f411ee
+1
-8
@@ -307,10 +307,6 @@ sg_open(struct inode *inode, struct file *filp)
|
||||
if (retval)
|
||||
goto sg_put;
|
||||
|
||||
retval = scsi_autopm_get_device(device);
|
||||
if (retval)
|
||||
goto sdp_put;
|
||||
|
||||
/* scsi_block_when_processing_errors() may block so bypass
|
||||
* check if O_NONBLOCK. Permits SCSI commands to be issued
|
||||
* during error recovery. Tread carefully. */
|
||||
@@ -318,7 +314,7 @@ sg_open(struct inode *inode, struct file *filp)
|
||||
scsi_block_when_processing_errors(device))) {
|
||||
retval = -ENXIO;
|
||||
/* we are in error recovery for this device */
|
||||
goto error_out;
|
||||
goto sdp_put;
|
||||
}
|
||||
|
||||
mutex_lock(&sdp->open_rel_lock);
|
||||
@@ -371,8 +367,6 @@ out_undo:
|
||||
}
|
||||
error_mutex_locked:
|
||||
mutex_unlock(&sdp->open_rel_lock);
|
||||
error_out:
|
||||
scsi_autopm_put_device(device);
|
||||
sdp_put:
|
||||
kref_put(&sdp->d_ref, sg_device_destroy);
|
||||
scsi_device_put(device);
|
||||
@@ -392,7 +386,6 @@ sg_release(struct inode *inode, struct file *filp)
|
||||
SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, "sg_release\n"));
|
||||
|
||||
mutex_lock(&sdp->open_rel_lock);
|
||||
scsi_autopm_put_device(sdp->device);
|
||||
kref_put(&sfp->f_ref, sg_remove_sfp);
|
||||
sdp->open_cnt--;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user