diff options
Diffstat (limited to 'drivers/scsi/sd.c')
| -rw-r--r-- | drivers/scsi/sd.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 09e3df42a40..5ba5c2a9e8e 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -664,7 +664,7 @@ static void sd_unprep_fn(struct request_queue *q, struct request *rq)  }  /** - *	sd_init_command - build a scsi (read or write) command from + *	sd_prep_fn - build a scsi (read or write) command from   *	information in the request structure.   *	@SCpnt: pointer to mid-level's per scsi command structure that   *	contains request and into which the scsi command is written @@ -711,7 +711,7 @@ static int sd_prep_fn(struct request_queue *q, struct request *rq)  	ret = BLKPREP_KILL;  	SCSI_LOG_HLQUEUE(1, scmd_printk(KERN_INFO, SCpnt, -					"sd_init_command: block=%llu, " +					"sd_prep_fn: block=%llu, "  					"count=%d\n",  					(unsigned long long)block,  					this_count)); @@ -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 */ @@ -2644,8 +2649,8 @@ static void sd_probe_async(void *data, async_cookie_t cookie)   *	(e.g. /dev/sda). More precisely it is the block device major    *	and minor number that is chosen here.   * - *	Assume sd_attach is not re-entrant (for time being) - *	Also think about sd_attach() and sd_remove() running coincidentally. + *	Assume sd_probe is not re-entrant (for time being) + *	Also think about sd_probe() and sd_remove() running coincidentally.   **/  static int sd_probe(struct device *dev)  { @@ -2660,7 +2665,7 @@ static int sd_probe(struct device *dev)  		goto out;  	SCSI_LOG_HLQUEUE(3, sdev_printk(KERN_INFO, sdp, -					"sd_attach\n")); +					"sd_probe\n"));  	error = -ENOMEM;  	sdkp = kzalloc(sizeof(*sdkp), GFP_KERNEL);  |