From d38a9a915bb45ccf7a82c6c514f13de7cacd4692 Mon Sep 17 00:00:00 2001 From: Ming Wang Date: Fri, 6 Mar 2026 10:19:30 +0800 Subject: [PATCH] anolis: cdrom: scsi: fix kernel panic on USB optical drive removal ANBZ: #34039 Fix kernel panic on USB optical drive removal by moving cdi->exit() to cdrom_release() and adding NULL checks for sdev/sdev->host in scsi_block_when_processing_errors(). Maintains kABI compatibility. Note: Unlike the upstream commit 5ec9d26b78c4 ("cdrom: Call cdrom_mrw_exit Signed-off-by: Ming Wang Signed-off-by: Juxin Gao --- drivers/cdrom/cdrom.c | 6 +++--- drivers/scsi/scsi_error.c | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index 54b80911f3e2..ba2dafce0037 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 43eff1107038..e1873f5e3a5c 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); -- Gitee