[Top][All Lists]

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

Re: [Qemu-devel] block: Review of .has_zero_init use

From: Richard W.M. Jones
Subject: Re: [Qemu-devel] block: Review of .has_zero_init use
Date: Tue, 25 Jun 2013 13:05:33 +0100
User-agent: Mutt/1.5.20 (2009-12-10)

On Tue, Jun 25, 2013 at 01:39:11PM +0200, Kevin Wolf wrote:
> * ssh           - currently has_zero_init = 1 (is this correct?)
> It might be possible that the correct value depends on the backend on
> the server side for some protocols - for example, I think for SSH it
> depends on whether you access a regular file or a block device on the
> other host (if accessing a block device is even possible).

This seems to depend on the behaviour of O_TRUNC on block devices.
The man page says it's unspecified, but I tested it on Linux, and
Linux ignores it (for logical volumes anyway).

When the ssh driver is asked to do bdrv_create it does on the
remote end:

 - open (filename, O_RDWR|O_CREAT|O_TRUNC, 0644) [1]
 - lseek (fd, size-1, SEEK_SET)                  [2]
 - write (fd, &'\0', 1)

In other words for regular files, it creates a sparse file.  For block
devices, I tested the sequence above, and it doesn't fail.

So .. I guess that has_zero_init = 0 would be correct?

Unless we fstat the fd after opening it and return some conditional
value from bdrv_has_zero_init eg if it's a block device.  Is that


[1] Mode 0644 is hard-coded :-(

[2] I realize now it's actually possible to use ftruncate, although
it's not obvious.  There is no explicit truncate operation in sftp.
But there is a "setattr" operation, which if you try to set the size
attr in fact does a truncate at the remote end.

Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]