On Fri, Nov 23, 2007 at 02:36:03PM +0000, Richard W.M. Jones wrote:
> Richard W.M. Jones wrote:
> >The Debian maintainer of virt-install found this problem which seems to
> >be a bug in virt-clone:
> >
> ># virt-clone -o demo -n demo2 --connect=qemu:///session -f bla2.img
> >libvir: QEMU error :
> >libvir: QEMU error :
> >Cloning from /home/foo/kvm/test/bla.img to bla2.img
> >ERROR: local variable 'b' referenced before assignment
>
> Judging from the error message, I'm guessing that it happens at the line
> I've marked below (in virtinst/CloneManager.py):
>
> while 1:
> l = os.read(src_fd, design.clone_bs)
> s = len(l)
> if s == 0:
> meter.end(size)
> break
> # check sequence of zeros
> if sparse_copy_mode == True and zeros == l:
> os.lseek(dst_fd, s, 1)
> else:
> b = os.write(dst_fd, l)
> if s != b: <--------
> meter.end(i)
> break
> i += s
> if i < size:
> meter.update(i)
>
> It's a very strange piece of code. AIUI it seems to be saying that if
> we get a short write, then we should just end the copy without any sort
> of error indication, which can't be the right thing to do.
Yeah, that looks bogus. Guess that 'if s != b' got mis-indented. It
definitely needs to raise an error condition of some sort too.