mirror of
https://github.com/qemu/qemu.git
synced 2024-11-23 19:03:38 +08:00
qemu-img: Allow target be aligned to sector size
We cannot write to images opened with O_DIRECT unless we allow them to
be resized so they are aligned to the sector size: Since 9c60a5d197
,
bdrv_node_refresh_perm() ensures that for nodes whose length is not
aligned to the request alignment and where someone has taken a WRITE
permission, the RESIZE permission is taken, too).
Let qemu-img convert pass the BDRV_O_RESIZE flag (which causes
blk_new_open() to take the RESIZE permission) when using cache=none for
the target, so that when writing to it, it can be aligned to the target
sector size.
Without this patch, an error is returned:
$ qemu-img convert -f raw -O raw -t none foo.img /mnt/tmp/foo.img
qemu-img: Could not open '/mnt/tmp/foo.img': Cannot get 'write'
permission without 'resize': Image size is not a multiple of request
alignment
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1994266
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
Message-Id: <20210819101200.64235-1-hreitz@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
This commit is contained in:
parent
ff812c5563
commit
a1c62436a4
@ -2628,6 +2628,14 @@ static int img_convert(int argc, char **argv)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (flags & BDRV_O_NOCACHE) {
|
||||
/*
|
||||
* If we open the target with O_DIRECT, it may be necessary to
|
||||
* extend its size to align to the physical sector size.
|
||||
*/
|
||||
flags |= BDRV_O_RESIZE;
|
||||
}
|
||||
|
||||
if (skip_create) {
|
||||
s.target = img_open(tgt_image_opts, out_filename, out_fmt,
|
||||
flags, writethrough, s.quiet, false);
|
||||
|
Loading…
Reference in New Issue
Block a user