Re: Changes to ide-cd for 2.4.1 are broken?

John Fremlin
2001-06-10T17:39:15Z

[-- Attachment #1: Type: text/plain, Size: 1095 bytes --]

Hi all, this is an old thread. It was started because the return value
from cd info was changed in 2.4.1 in the case when the tray might be
open or there simply be no disc in the drive for an IDE
CD-ROM.

John Fremlin <chief@bandits.org> writes:

> "Michael Johnson" <johnsom@home.com> writes:

[...]

> > >Right, old ATAPI has 3a/02 as the only possible condition, so we
> > >can't really tell between no disc and tray open. I guess the safest
> > >is to just keep the old behaviour for !ascq and report open.
>
> > I don't understand why the current(2.4.1) behavior is a problem...

Unfortunately changing the return code means that the generic cdrom.c
code is broekn, in particular wrt to having the cdrom drive open
automatically when umounted, and to close when attempted to be
mounted.

(You can set this mode with "cdd auto" if you have my asm-toys installed
http://ape.n3.net/programs/linux/asm-toys
)

The following patch fixes that. I also attempted to fix up similar
problems (where checking CDS_TRAY_OPEN is used to see if the tray is
open, which is obviously broekn).

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: linux-2.4.4-cd-ret-fixup.patch --]
[-- Type: text/x-patch, Size: 1001 bytes --]

--- linux-2.4.4-orig/drivers/cdrom/cdrom.c Tue May 1 14:32:05 2001
+++ linux-2.4.4/drivers/cdrom/cdrom.c Sun Jun 10 15:32:48 2001
@@ -515,8 +515,8 @@ int open_for_data(struct cdrom_device_in
if (cdo->drive_status != NULL) {
ret = cdo->drive_status(cdi, CDSL_CURRENT);
cdinfo(CD_OPEN, "drive_status=%d\n", ret);
- if (ret == CDS_TRAY_OPEN) {
- cdinfo(CD_OPEN, "the tray is open...\n");
+ if (ret == CDS_TRAY_OPEN || ret == CDS_NO_DISC) {
+ cdinfo(CD_OPEN, "the tray might be open...\n");
/* can/may i close it? */
if (CDROM_CAN(CDC_CLOSE_TRAY) &&
cdi->options & CDO_AUTO_CLOSE) {
@@ -622,7 +622,7 @@ int check_for_audio_disc(struct cdrom_de
if (cdo->drive_status != NULL) {
ret = cdo->drive_status(cdi, CDSL_CURRENT);
cdinfo(CD_OPEN, "drive_status=%d\n", ret);
- if (ret == CDS_TRAY_OPEN) {
+ if (ret == CDS_TRAY_OPEN || ret == CDS_NO_DISC) {
cdinfo(CD_OPEN, "the tray is open...\n");
/* can/may i close it? */
if (CDROM_CAN(CDC_CLOSE_TRAY) &&

[-- Attachment #3: Type: text/plain, Size: 25 bytes --]

--