• E
    block: Convert bdrv_get_block_status() to bytes · 237d78f8
    Eric Blake 提交于
    We are gradually moving away from sector-based interfaces, towards
    byte-based.  In the common case, allocation is unlikely to ever use
    values that are not naturally sector-aligned, but it is possible
    that byte-based values will let us be more precise about allocation
    at the end of an unaligned file that can do byte-based access.
    
    Changing the name of the function from bdrv_get_block_status() to
    bdrv_block_status() ensures that the compiler enforces that all
    callers are updated.  For now, the io.c layer still assert()s that
    all callers are sector-aligned, but that can be relaxed when a later
    patch implements byte-based block status in the drivers.
    
    There was an inherent limitation in returning the offset via the
    return value: we only have room for BDRV_BLOCK_OFFSET_MASK bits, which
    means an offset can only be mapped for sector-aligned queries (or,
    if we declare that non-aligned input is at the same relative position
    modulo 512 of the answer), so the new interface also changes things to
    return the offset via output through a parameter by reference rather
    than mashed into the return value.  We'll have some glue code that
    munges between the two styles until we finish converting all uses.
    
    For the most part this patch is just the addition of scaling at the
    callers followed by inverse scaling at bdrv_block_status(), coupled
    with the tweak in calling convention.  But some code, particularly
    bdrv_is_allocated(), gets a lot simpler because it no longer has to
    mess with sectors.
    
    For ease of review, bdrv_get_block_status_above() will be tackled
    separately.
    Signed-off-by: NEric Blake <eblake@redhat.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    237d78f8
qemu-img.c 139.3 KB