Re: Write error - SATA link reset with growisofs and tracksize not multiple of 32kB
>>> Executing 'builtin_dd if=test2.iso of=/dev/scd0 obs=32k seek=0'
>>> /dev/scd0: FEATURE 21h is not on, engaging DAO...
>>> /dev/scd0: reserving 286877 block, warning for short DAO recording
>>
>> Does it fail in same way if recording is larger than 750MB, preferably
>> ~1GB?
>
> Maybe a bad example. But I tried it explicitely with 0.5GB, 1GB and
> 1.5GB. Every time the same. In further testing I focused on the 0.5GB
> because it's faster ;-).
> So the "short DAO recording" is definitely not the problem.
Understood.
>>> :-[ WRITE@LBA=46090h failed with SK=0h/ASC=00h/ACQ=03h]: Input/output error
>>> :-( write failed: Input/output error
>>> ----------------------
>>>
>>> at the same time, kernel logs:
>>> ---------------------
>>> [ 6030.669547] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
>>> [ 6030.669568] ata2.00: cmd a0/01:00:00:00:80/00:00:00:00:00/a0 tag 0 dma 32768 out
>>> [ 6030.669570] cdb 2a 00 00 01 db 40 00 00 0e 00 00 00 00 00 00 00
>>> [ 6030.669573] res 40/00:03:00:00:80/00:00:00:00:00/a0 Emask 0x4 (timeout)
>>
>> It apparently times out, which is basically why I thought of "Short DAO
>> recordings."
Could you test following. Open growisofs_mmc.cpp in text editor, locate
line that reads
cmd.timeout(dao_toggle?180:60);
Modify it as
cmd.timeout(180);
Recompile and retry recording. If it still times out, try to increase to
say 300.
> For your question about the kernel-Log in later mail:
> As far as I remember, the kernel output belongs to this recording, but
> I'm not 100% sure. If you think it's important, I will test it again.
Well, I'd bet the values are from different recordings, because
discrepancy is simply insane. It's as important as to maintain sanity:-)
> As long as I'm the only one with this problem, an official patch or
> commandline option would be overstated.
> I was thinking about patching the code for myself (maybe buying a new
> drive would be less effort ;-) ): Just round "tracksize" up to the next
> 32k-Block in adding something like
> tracksize=(tracksize+DVD_BLOCK-1)/DVD_BLOCK * DVD_BLOCK to the lines:
> tracksize = dao_size ? (dao_size*CD_BLOCK) : sb.st_size;
> and
> tracksize=from_733(descr->volume_space_size)*CD_BLOCK;
>
> Do you think, that's too crude, even for a "personal" patch?
Too complicated:-) Open growisofs_mmc.cpp in text editor and locate
function named minus_r_reserve_track. In the beginning it reads
if (is_dao) dao_blocks = blocks;
Replace this line with
if (0) dao_blocks = blocks;
A.
Reply to: