On Tue, Aug 06, 2013 at 09:53:40AM +0800, Asias He wrote: > From: MORITA Kazutaka <morita.kazut...@lab.ntt.co.jp> > > While Asias is debugging an issue creating qcow2 images on top of > non-file protocols. It boils down to this example using NBD: > > $ qemu-io -c 'open -g nbd+unix:///?socket=/tmp/nbd.sock' -c 'read -v 0 512' > > Notice the open -g option to set bs->growable. This means you can > read/write beyond end of file. Reading beyond end of file is supposed > to produce zeroes. > > We rely on this behavior in qcow2_create2() during qcow2 image > creation. We create a new file and then write the qcow2 header > structure using bdrv_pwrite(). Since QCowHeader is not a multiple of > sector size, block.c first uses bdrv_read() on the empty file to fetch > the first sector (should be all zeroes). > > Here is the output from the qemu-io NBD example above: > > $ qemu-io -c 'open -g nbd+unix:///?socket=/tmp/nbd.sock' -c 'read -v 0 512' > 00000000: ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ................ > 00000010: ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ................ > 00000020: ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ................ > ... > > We are not zeroing the buffer! As a result qcow2 image creation on top > of protocols is not guaranteed to work even when file creation is > supported by the protocol. > > Signed-off-by: MORITA Kazutaka <morita.kazut...@lab.ntt.co.jp> > Signed-off-by: Asias He <as...@redhat.com> > --- > block.c | 30 +++++++++++++++++++++++++++++- > 1 file changed, 29 insertions(+), 1 deletion(-)
Applied again on top of Asias' fix so qcow2 vmstate doesn't break. Thanks, applied to my block tree: https://github.com/stefanha/qemu/commits/block Stefan