aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/sg.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/sg.c')
-rw-r--r--drivers/scsi/sg.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index d4549092400c..2968c6b83ddb 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -245,6 +245,10 @@ sg_open(struct inode *inode, struct file *filp)
245 if (retval) 245 if (retval)
246 goto sg_put; 246 goto sg_put;
247 247
248 retval = scsi_autopm_get_device(sdp->device);
249 if (retval)
250 goto sdp_put;
251
248 if (!((flags & O_NONBLOCK) || 252 if (!((flags & O_NONBLOCK) ||
249 scsi_block_when_processing_errors(sdp->device))) { 253 scsi_block_when_processing_errors(sdp->device))) {
250 retval = -ENXIO; 254 retval = -ENXIO;
@@ -302,8 +306,11 @@ sg_open(struct inode *inode, struct file *filp)
302 } 306 }
303 retval = 0; 307 retval = 0;
304error_out: 308error_out:
305 if (retval) 309 if (retval) {
310 scsi_autopm_put_device(sdp->device);
311sdp_put:
306 scsi_device_put(sdp->device); 312 scsi_device_put(sdp->device);
313 }
307sg_put: 314sg_put:
308 if (sdp) 315 if (sdp)
309 sg_put_dev(sdp); 316 sg_put_dev(sdp);
@@ -327,6 +334,7 @@ sg_release(struct inode *inode, struct file *filp)
327 sdp->exclude = 0; 334 sdp->exclude = 0;
328 wake_up_interruptible(&sdp->o_excl_wait); 335 wake_up_interruptible(&sdp->o_excl_wait);
329 336
337 scsi_autopm_put_device(sdp->device);
330 kref_put(&sfp->f_ref, sg_remove_sfp); 338 kref_put(&sfp->f_ref, sg_remove_sfp);
331 return 0; 339 return 0;
332} 340}