Merge tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[linux-2.6-microblaze.git] / drivers / scsi / sr.c
index 0cf25d7..3f3cb72 100644 (file)
@@ -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;
 }