diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index 54b80911f3e286804edbd8cb5da54b42070ce5d0..ba2dafce0037e9234776c9daf5696a1debf52e83 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c @@ -651,9 +651,6 @@ void unregister_cdrom(struct cdrom_device_info *cdi) list_del(&cdi->list); mutex_unlock(&cdrom_mutex); - if (cdi->exit) - cdi->exit(cdi); - cd_dbg(CD_REG_UNREG, "drive \"/dev/%s\" unregistered\n", cdi->name); } EXPORT_SYMBOL(unregister_cdrom); @@ -1265,6 +1262,9 @@ void cdrom_release(struct cdrom_device_info *cdi) cdi->name); cdrom_dvd_rw_close_write(cdi); + if (cdi->exit) + cdi->exit(cdi); + if ((cdo->capability & CDC_LOCK) && !cdi->keeplocked) { cd_dbg(CD_CLOSE, "Unlocking door!\n"); cdo->lock_door(cdi, 0); diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 43eff1107038a6fe397d88c6063075048d1ed5af..e1873f5e3a5cd70c4df8dbf45faa56cc689c3acf 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -384,6 +384,9 @@ int scsi_block_when_processing_errors(struct scsi_device *sdev) { int online; + if (!sdev || !sdev->host) + return 0; + wait_event(sdev->host->host_wait, !scsi_host_in_recovery(sdev->host)); online = scsi_device_online(sdev);