[et-mgmt-tools] [PATCH] Fix sparse file size off-by-one error

Daniel P. Berrange berrange at redhat.com
Wed Dec 3 09:35:09 UTC 2008


On Tue, Dec 02, 2008 at 06:24:50PM -0800, john.levon at sun.com wrote:
> # HG changeset patch
> # User john.levon at sun.com
> # Date 1228271065 28800
> # Node ID ca3207be8b5da3d6f4f9f5432dfa819cfab173c8
> # Parent  31aef21ff81fc33675c09ed0e03e152b963f5042
> Fix sparse file size off-by-one error
> 
> The Solaris loopback driver (lofi) requires files be a multiple of
> 512-bytes in size. Sparse files created via lseek(f, size, 0) are
> 1 byte larger than what is being requested.
> 
> Signed-off-by: John Danielson <john.danielson at sun.com>
> 
> diff --git a/virtinst/CloneManager.py b/virtinst/CloneManager.py
> --- a/virtinst/CloneManager.py
> +++ b/virtinst/CloneManager.py
> @@ -557,7 +557,7 @@ def _do_duplicate(design):
>                  design.clone_bs = 4096
>                  sparse_copy_mode = True
>                  fd = os.open(dst_dev, os.O_WRONLY | os.O_CREAT)
> -                os.lseek(fd, dst_siz, 0)
> +                os.lseek(fd, dst_siz - 1, 0)
>                  os.write(fd, '\x00')

Perhaps we should just avoid the extra 1 byte write here, by switching
to ftruncate, eg

                    fd = os.open(dst_dev, os.O_WRONLY | os.O_CREAT)
                    os.ftruncate(fd, dst_siz, 0)
                    os.close(fd)

> diff --git a/virtinst/VirtualDisk.py b/virtinst/VirtualDisk.py
> --- a/virtinst/VirtualDisk.py
> +++ b/virtinst/VirtualDisk.py
> @@ -488,7 +488,7 @@ class VirtualDisk(VirtualDevice):
>                  try:
>                      fd = os.open(self.path, os.O_WRONLY | os.O_CREAT)
>                      if self.sparse:
> -                        os.lseek(fd, size_bytes, 0)
> +                        os.lseek(fd, size_bytes -1, 0)
>                          os.write(fd, '\x00')

Likewise here 


Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the et-mgmt-tools mailing list