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

Re: growisofs + pipebuf2 = trouble



Andreas Klauer <Andreas.Klauer@metamorpher.de> writes:

> I'm trying to get growisofs to work together with pipebuf2 [1]
> and could use some help here, since I'm experiencing problems.
> 
> The command line I use is:
> cat DVD.iso | pipebuf2 -b 32 | growisofs -dvd-compat -Z /dev/sr0=/dev/fd/0
> 
> The writing process seems to work, as no errors are reported, however the
> result is always partially corrupt when using this method. Wrong data is
> spread all over the disk. However, if I redirect the pipebuf2 output into
> a regular file instead of piping to growisofs, the result is valid. So if
> it's a bug in pipebuf2, it only occurs under special circumstances...
...
> Additional information about my system:
>     Athlon XP 2000+, Gentoo, Kernel 2.6.2

It is a bug in pipebuf2 that is triggered by the smarter handling of
pipes in the 2.6 kernel. I've uploaded a fixed version:

        http://w1.894.telia.com/~u89404340/pipebuf2.c

The bug fix looks like this:

--- pipebuf2.c~	2004-01-06 14:00:27.000000000 +0100
+++ pipebuf2.c	2004-02-23 20:53:57.000000000 +0100
@@ -117,7 +117,7 @@
 	if (ret > 0) {
 	    if (FD_ISSET(STDIN_FILENO, &readfds)) {
 		int readPos = (bufPos + dataLen) % bufSize;
-		int maxLen = bufSize - readPos;
+		int maxLen = MIN(bufSize - readPos, bufSize - dataLen);
 		ret = read(STDIN_FILENO, &buffer[readPos], maxLen);
 		if (ret < 0) {
 		    if ((errno != EINTR) && (errno != EAGAIN)) {

-- 
Peter Osterlund - petero2@telia.com
http://w1.894.telia.com/~u89404340



Reply to: