The following reply was made to PR misc/155925; it has been noted by GNATS.
From: Alexander Best <[email protected]> To: Jaakko Heinonen <[email protected]> Cc: [email protected], [email protected] Subject: Re: misc/155925: CD tray is not locked even if using /dev/adc0. Date: Sat, 26 Mar 2011 18:27:02 +0000 On Sat Mar 26 11, Jaakko Heinonen wrote: > On 2011-03-25, Alexander Best wrote: > > this issue is not limited to acd. using cdcontrol -f /dev/cd gives the > > same > > behavior. > > I think this is because cdcontrol(1) first issues the CDIOCALLOW ioctl > to unlock the tray. Does this patch fix your problem? > > http://www.saunalahti.fi/~jh3/patches/cdcontrol-no-CDIOCALLOW.diff > > I am inclined to think that the behavior is intentional. i think the actual issue is not cdcontrol(1) so much, as CDIOCALLOW itself. looking at this PR: http://www.freebsd.org/cgi/query-pr.cgi?pr=125139 shouldn't CDIOCALLOW and CDIOCPREVENT have the same busy checks like CDIOCEJECT (as pointed out in the PR)? i haven't tested your patch, but i think it works. CDIOCEJECT checks the ref count. without the CDIOCALLOW and a ref count >= 1 the cd won't be ejected. i'm not sure whether CDIOCALLOW and CDIOCPREVENT should stay the way they are or not. making them dependent on the ref count won't allow ejecting a CD at all. this might cause problems if or some reason the ref count cannot be set to 0. e. g. unmounting a broken CD/DVD might fail. i'm not sure if umount -f will always suceeded, so we might not be able to reduce the ref count to 0 in certain situations. if in fact CDIOCALLOW/CDIOCPREVENT should work regardless of the ref count i think your patch is good to go. here are the other places CDIOCALLOW is being used: otaku% grep -r CDIOCALLOW * share/man/man4/cd.4:.It Dv CDIOCALLOW sys/cam/scsi/scsi_cd.c: case CDIOCALLOW: sys/dev/ata/atapi-cd.c: case CDIOCALLOW: sys/dev/mcd/mcd.c: case CDIOCALLOW: sys/dev/scd/scd.c: case CDIOCALLOW: sys/sys/cdio.h:#define CDIOCALLOW _IO('c',26) usr.sbin/cdcontrol/cdcontrol.c: (void) ioctl (fd, CDIOCALLOW); usr.sbin/cdcontrol/cdcontrol.c: (void) ioctl (fd, CDIOCALLOW); usr.sbin/cdcontrol/cdcontrol.c: (void) ioctl (fd, CDIOCALLOW); usr.sbin/sysinstall/cdrom.c: ioctl(fd, CDIOCALLOW); cheers. alex > > -- > Jaakko -- a13x _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "[email protected]"
