On 06/21/2016 08:16 AM, Kevin Wolf wrote: > Am 14.06.2016 um 23:30 hat Eric Blake geschrieben: >> It makes more sense to have ALL block size limit constraints >> in the same struct. Improve the documentation while at it. >> >> Signed-off-by: Eric Blake <ebl...@redhat.com> >> >> ---
>> struct BlockLimits { >> + /* Alignment requirement, in bytes, for offset/length of I/O >> + * requests. Must be a power of 2 less than INT_MAX. A value of 0 >> + * defaults to 1 for drivers with modern byte interfaces, and to >> + * 512 otherwise. */ > > No, a value of zero probably crashes qemu. The defaults apply when they > aren't overridden by the driver, but this field is always non-zero. > Then why does block.c have: --- a/block.c +++ b/block.c @@ -1016,7 +1016,7 @@ static int bdrv_open_common(BlockDriverState *bs, BdrvChild *file, assert(bdrv_opt_mem_align(bs) != 0); assert(bdrv_min_mem_align(bs) != 0); - assert(is_power_of_2(bs->request_alignment) || bdrv_is_sg(bs)); + assert(is_power_of_2(bs->bl.request_alignment) || bdrv_is_sg(bs)); That says that if bdrv_is_sg(bs), we can indeed have request_alignment be 0. Should I track that down and fix it first, so that request_alignment is always nonzero? If so, is using '1' for bdrv_is_sg(bs) the ideal solution? -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature