[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: