diff options
author | Tejun Heo <tj@kernel.org> | 2010-12-08 14:57:40 -0500 |
---|---|---|
committer | Jens Axboe <jaxboe@fusionio.com> | 2010-12-16 11:53:39 -0500 |
commit | 9f8a2c23c6c1140f515f601265c4dff7522110b7 (patch) | |
tree | 6defb41e4b129c3772e0c6d40b5e8e9a29bea7f0 /drivers/scsi/sr.c | |
parent | 638428ece619495edc9579b1e21493eb00f9687c (diff) |
scsi: replace sr_test_unit_ready() with scsi_test_unit_ready()
The usage of TUR has been confusing involving several different
commits updating different parts over time. Currently, the only
differences between scsi_test_unit_ready() and sr_test_unit_ready()
are,
* scsi_test_unit_ready() also sets sdev->changed on NOT_READY.
* scsi_test_unit_ready() returns 0 if TUR ended with UNIT_ATTENTION or
NOT_READY.
Due to the above two differences, sr is using its own
sr_test_unit_ready(), but sd - the sole user of the above extra
handling - doesn't even need them.
Where scsi_test_unit_ready() is used in sd_media_changed(), the code
is looking for device ready w/ media present state which is true iff
TUR succeeds w/o sense data or UA, and when the device is not ready
for whatever reason sd_media_changed() explicitly marks media as
missing so there's no reason to set sdev->changed automatically from
scsi_test_unit_ready() on NOT_READY.
Drop both special handlings from scsi_test_unit_ready(), which makes
it equivalant to sr_test_unit_ready(), and replace
sr_test_unit_ready() with scsi_test_unit_ready(). Also, drop the
unnecessary explicit NOT_READY check from sd_media_changed().
Checking return value is enough for testing device readiness.
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'drivers/scsi/sr.c')
-rw-r--r-- | drivers/scsi/sr.c | 31 |
1 files changed, 3 insertions, 28 deletions
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index c7e29bdec2cd..310b3fac6313 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c | |||
@@ -165,32 +165,6 @@ static void scsi_cd_put(struct scsi_cd *cd) | |||
165 | mutex_unlock(&sr_ref_mutex); | 165 | mutex_unlock(&sr_ref_mutex); |
166 | } | 166 | } |
167 | 167 | ||
168 | /* identical to scsi_test_unit_ready except that it doesn't | ||
169 | * eat the NOT_READY returns for removable media */ | ||
170 | int sr_test_unit_ready(struct scsi_device *sdev, struct scsi_sense_hdr *sshdr) | ||
171 | { | ||
172 | int retries = MAX_RETRIES; | ||
173 | int the_result; | ||
174 | u8 cmd[] = {TEST_UNIT_READY, 0, 0, 0, 0, 0 }; | ||
175 | |||
176 | /* issue TEST_UNIT_READY until the initial startup UNIT_ATTENTION | ||
177 | * conditions are gone, or a timeout happens | ||
178 | */ | ||
179 | do { | ||
180 | the_result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, | ||
181 | 0, sshdr, SR_TIMEOUT, | ||
182 | retries--, NULL); | ||
183 | if (scsi_sense_valid(sshdr) && | ||
184 | sshdr->sense_key == UNIT_ATTENTION) | ||
185 | sdev->changed = 1; | ||
186 | |||
187 | } while (retries > 0 && | ||
188 | (!scsi_status_is_good(the_result) || | ||
189 | (scsi_sense_valid(sshdr) && | ||
190 | sshdr->sense_key == UNIT_ATTENTION))); | ||
191 | return the_result; | ||
192 | } | ||
193 | |||
194 | /* | 168 | /* |
195 | * This function checks to see if the media has been changed in the | 169 | * This function checks to see if the media has been changed in the |
196 | * CDROM drive. It is possible that we have already sensed a change, | 170 | * CDROM drive. It is possible that we have already sensed a change, |
@@ -213,7 +187,8 @@ static int sr_media_change(struct cdrom_device_info *cdi, int slot) | |||
213 | } | 187 | } |
214 | 188 | ||
215 | sshdr = kzalloc(sizeof(*sshdr), GFP_KERNEL); | 189 | sshdr = kzalloc(sizeof(*sshdr), GFP_KERNEL); |
216 | retval = sr_test_unit_ready(cd->device, sshdr); | 190 | retval = scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, |
191 | sshdr); | ||
217 | /* | 192 | /* |
218 | * Media is considered to be present if TUR succeeds or fails with | 193 | * Media is considered to be present if TUR succeeds or fails with |
219 | * sense data indicating something other than media-not-present | 194 | * sense data indicating something other than media-not-present |
@@ -784,7 +759,7 @@ static void get_capabilities(struct scsi_cd *cd) | |||
784 | } | 759 | } |
785 | 760 | ||
786 | /* eat unit attentions */ | 761 | /* eat unit attentions */ |
787 | sr_test_unit_ready(cd->device, &sshdr); | 762 | scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr); |
788 | 763 | ||
789 | /* ask for mode page 0x2a */ | 764 | /* ask for mode page 0x2a */ |
790 | rc = scsi_mode_sense(cd->device, 0, 0x2a, buffer, 128, | 765 | rc = scsi_mode_sense(cd->device, 0, 0x2a, buffer, 128, |