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

[PATCH] growisofs failing on some iso files



Hi all,

not only in Fedora [1] but also in Ubuntu [2] there is an issue when burning DVDs using growisofs (a utility from dvd+rw-tools). The error occurs when burning only some iso files, basically files that have different size than a multiple of 32kB. The error looks like this:

:-[ WRITE@LBA=350h failed with SK=0h/ASC=00h/ACQ=03h]: Input/output error :-(
write failed: Input/output error

I've found out, that when burning DVD media in DAO mode, reserved blocks count wasn't align to multiple of 16 (which means space of 32kB). However, only 32kB blocks of data were being written to the media, so I suppose the error was triggered by the drive complaining that we were writing the last block outside the reserved area boundaries.

The attached patch is a proposed fix, which align blocks count to multiple of 16 also when burning in DAO mode. The patch works for my iso files and no error messages are printed any more.

Any comments on the patch are welcome and feel free to use the patch if there is still any development in dvd+rw-tools.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=810483
[2] https://bugs.launchpad.net/ubuntu/+source/cdrkit/+bug/15424?comments=all
diff -up dvd+rw-tools-7.1/growisofs_mmc.cpp.blocks dvd+rw-tools-7.1/growisofs_mmc.cpp
--- dvd+rw-tools-7.1/growisofs_mmc.cpp.blocks	2012-04-06 12:31:49.336132465 +0200
+++ dvd+rw-tools-7.1/growisofs_mmc.cpp	2012-04-06 12:32:15.131645600 +0200
@@ -1588,8 +1588,8 @@ static int minus_r_reserve_track (Scsi_C
   unsigned int blocks;
 
     blocks = (unsigned int)(size/2048);
+    blocks += 15, blocks &= ~15;
     if (is_dao)	dao_blocks = blocks;
-    else	blocks += 15, blocks &= ~15;
 
     fprintf (stderr,"%s: reserving %u blocks",ioctl_device,blocks);
     if (is_dao && blocks<380000)

Reply to: