|
@@ -587,18 +587,28 @@ out:
|
|
|
static unsigned int sr_block_check_events(struct gendisk *disk,
|
|
|
unsigned int clearing)
|
|
|
{
|
|
|
- struct scsi_cd *cd = scsi_cd(disk);
|
|
|
+ unsigned int ret = 0;
|
|
|
+ struct scsi_cd *cd;
|
|
|
|
|
|
- if (atomic_read(&cd->device->disk_events_disable_depth))
|
|
|
+ cd = scsi_cd_get(disk);
|
|
|
+ if (!cd)
|
|
|
return 0;
|
|
|
|
|
|
- return cdrom_check_events(&cd->cdi, clearing);
|
|
|
+ if (!atomic_read(&cd->device->disk_events_disable_depth))
|
|
|
+ ret = cdrom_check_events(&cd->cdi, clearing);
|
|
|
+
|
|
|
+ scsi_cd_put(cd);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int sr_block_revalidate_disk(struct gendisk *disk)
|
|
|
{
|
|
|
- struct scsi_cd *cd = scsi_cd(disk);
|
|
|
struct scsi_sense_hdr sshdr;
|
|
|
+ struct scsi_cd *cd;
|
|
|
+
|
|
|
+ cd = scsi_cd_get(disk);
|
|
|
+ if (!cd)
|
|
|
+ return -ENXIO;
|
|
|
|
|
|
/* if the unit is not ready, nothing more to do */
|
|
|
if (scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr))
|
|
@@ -607,6 +617,7 @@ static int sr_block_revalidate_disk(struct gendisk *disk)
|
|
|
sr_cd_check(&cd->cdi);
|
|
|
get_sectorsize(cd);
|
|
|
out:
|
|
|
+ scsi_cd_put(cd);
|
|
|
return 0;
|
|
|
}
|
|
|
|