From: Stas Sergeev The attached patch fixes the CD-ROM autoclose. It is broken in recent kernels for CD-ROMs that do not properly report that the tray is opened. Now on such a drives the kernel will do one close attempt and check for the disc again. This is how it used to work in the past. Acked-by: Alexander Kern Signed-off-by: Stas Sergeev Signed-off-by: Andrew Morton --- 25-akpm/drivers/cdrom/cdrom.c | 2 ++ 25-akpm/drivers/ide/ide-cd.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff -puN drivers/cdrom/cdrom.c~fix-cdrom-autoclose drivers/cdrom/cdrom.c --- 25/drivers/cdrom/cdrom.c~fix-cdrom-autoclose 2005-01-05 16:15:56.169312928 -0800 +++ 25-akpm/drivers/cdrom/cdrom.c 2005-01-05 16:15:56.177311712 -0800 @@ -1076,6 +1076,8 @@ int open_for_data(struct cdrom_device_in } cdinfo(CD_OPEN, "the tray is now closed.\n"); } + /* the door should be closed now, check for the disc */ + ret = cdo->drive_status(cdi, CDSL_CURRENT); if (ret!=CDS_DISC_OK) { ret = -ENOMEDIUM; goto clean_up_and_return; diff -puN drivers/ide/ide-cd.c~fix-cdrom-autoclose drivers/ide/ide-cd.c --- 25/drivers/ide/ide-cd.c~fix-cdrom-autoclose 2005-01-05 16:15:56.171312624 -0800 +++ 25-akpm/drivers/ide/ide-cd.c 2005-01-05 16:15:56.179311408 -0800 @@ -2744,9 +2744,9 @@ int ide_cdrom_drive_status (struct cdrom */ if (sense.sense_key == NOT_READY) { if (sense.asc == 0x3a) { - if (sense.ascq == 0 || sense.ascq == 1) + if (sense.ascq == 1) return CDS_NO_DISC; - else if (sense.ascq == 2) + else if (sense.ascq == 0 || sense.ascq == 2) return CDS_TRAY_OPEN; } } _