bin/160979: 9.0 burncd error caused by change to cd0 from acd0

Garrett Cooper yanegomi at gmail.com
Tue Sep 27 03:56:55 UTC 2011


On Mon, 26 Sep 2011, Craig Rodrigues wrote:

> On Mon, Sep 26, 2011 at 6:58 PM, Doug Barton <dougb at freebsd.org> wrote:
>>>
>>> I have used burncd on many releases of FreeBSD, on many machines
>>> without problem.  I can see the fact that burncd suddenly failing to
>>> work on ATAPI hardware could annoy and confused end-users.
>>
>> It doesn't fail to work on ATAPI hardware. It fails to work on cd0 which
>> is a SCSI device. The fact that it's emulated doesn't matter.
>
> True, but the subtlety of that distinction will be lost on a lot of end-users
> not familiar with the implementation of the FreeBSD storage implementation.
> To them "burncd just doesn't work, when it used to".
>
>
>>> Can we modify burncd to somehow detect if ATAPI-CAM is enabled, and print out
>>> a more useful error message?
>>
>> Sure, as soon as someone volunteers to create that patch. No one is
>> *trying* to annoy users, but things change around here because people
>> are interested in changing them.
>
>
> I am not familiar enough with the ATA_CAM work.  Is there a a sysctl or ioctl
> that can be queried from userspace to detect if ATA_CAM is configured
> in the kernel?
>
> I would suggest something like:

...

 	Please fix it and move on.
Thanks,
-Garrett

$ usr.sbin/burncd/burncd -f /dev/cd0 blank
burncd: device provided not an acd(4) device: /dev/cd0.

Please verify that your kernel is built with acd(4) and the beforementioned device is supported by acd(4).
-------------- next part --------------
Index: usr.sbin/burncd/burncd.c
===================================================================
--- usr.sbin/burncd/burncd.c	(revision 225704)
+++ usr.sbin/burncd/burncd.c	(working copy)
@@ -159,8 +159,16 @@
 	if ((fd = open(dev, O_RDWR, 0)) < 0)
 		err(EX_NOINPUT, "open(%s)", dev);
 
-	if (ioctl(fd, CDRIOCGETBLOCKSIZE, &saved_block_size) < 0)
-		err(EX_IOERR, "ioctl(CDRIOCGETBLOCKSIZE)");
+	if (ioctl(fd, CDRIOCGETBLOCKSIZE, &saved_block_size) < 0) {
+		if (errno == ENOTTY)
+			errx(EX_IOERR,
+			    "device provided not an acd(4) device: %s.\n\n"
+			    "Please verify that your kernel is built with "
+			    "acd(4) and the beforementioned device is "
+			    "supported by acd(4).", dev);
+		else
+			err(EX_IOERR, "ioctl(CDRIOCGETBLOCKSIZE)");
+	}
 
 	if (ioctl(fd, CDRIOCWRITESPEED, &speed) < 0)
 		err(EX_IOERR, "ioctl(CDRIOCWRITESPEED)");


More information about the freebsd-questions mailing list