(timeout) error during cd fixation
Alexander Best
alexbestms at math.uni-muenster.de
Sun Dec 14 14:40:30 UTC 2008
hi there,
i am getting the following error when using burncd to burn a regular data-iso:
burncd: ioctl(CDRIOCFIXATE): Input/output error
this is how i usually run burncd:
burncd -s max -e -f /dev/acd0 data xyz.iso fixate
however i'm able to mount the cd although fixation fails. running dd
if=/dev/acd0 of=check.iso bs=2048 gives me this warning:
dd: /dev/acd0: Input/output error
doing a diff between xyz.iso and check.iso reveals no differences. so the only
problem is the fixation of the cd. i believe this is a timeout problem,
because if i run burncd with speed set to 1 the cd gets fixated just fine (no
ioctl(CDRIOCFIXATE) error anymore). however the the dd-warning still comes up.
i don't really know why the dd-warning doesn't dissapear. maybe this is a
completly different issue? no idea.
as far as i remember this issue (ioctl(CDRIOCFIXATE): Input/output error) has
always been present in burncd (since RELENG4 oder RELENG5).
i found a PR in feedback state dealing with this problem
(http://www.freebsd.org/cgi/query-pr.cgi?pr=95979&cat=bin). the PR includes a
patch which i applied. however that didn't solve the issue.
the problem seems to be the timeout variable used in acd_fixate() in
sys/dev/ata/atapi-cd.c. it get's set to:
int timeout = 5*60*2;
changing timeout to a higher value doesn't make much of a difference though,
because it gets altered a bit further down in the src. that's the reason the
patch didn't fix the issue for me. this is the code where timout gets altered
again:
/* some drives just return ready, wait for the expected fixate time */
if ((error = acd_test_ready(dev)) != EBUSY) {
timeout = timeout / (cdp->cap.cur_write_speed / 177);
pause("acdfix", timeout * hz / 2);
return acd_test_ready(dev);
}
it seems my drive doesn't return EBUSY, although it's still busy. that's why
burncd runs this delay block. the problem seems to be that timeout gets set
to:
timeout / (cdp->cap.cur_write_speed / 177)
which in my case is too low.
maybe somebody can take a brief look an growisofs to see which timeout values
during fixation are being used.
unfortunately running burncd in test mode doesn't perform a fixation-check. so
to test any new timeout setting one has to actually burn a cd.
maybe somebody else is having the same problem and wants to try setting
timeout = timeout / (cdp->cap.cur_write_speed / 177);
to
timeout = timeout / ((cdp->cap.cur_write_speed / 177) / 2);
or some other vlaue.
cheers.
alex
More information about the freebsd-current
mailing list