• E
    block: Track write zero limits in bytes · cf081fca
    Eric Blake 提交于
    Another step towards removing sector-based interfaces: convert
    the maximum write and minimum alignment values from sectors to
    bytes.  Rename the variables to let the compiler check that all
    users are converted to the new semantics.
    
    The maximum remains an int as long as BDRV_REQUEST_MAX_SECTORS
    is constrained by INT_MAX (this means that we can't even
    support a 2G write_zeroes, but just under it) - changing
    operation lengths to unsigned or to 64-bits is a much bigger
    audit, and debatable if we even want to do it (since at the
    core, a 32-bit platform will still have ssize_t as its
    underlying limit on write()).
    
    Meanwhile, alignment is changed to 'uint32_t', since it makes no
    sense to have an alignment larger than the maximum write, and
    less painful to use an unsigned type with well-defined behavior
    in bit operations than to have to worry about what happens if
    a driver mistakenly supplies a negative alignment.
    
    Add an assert that no one was trying to use sectors to get a
    write zeroes larger than 2G, and therefore that a later conversion
    to bytes won't be impacted by keeping the limit at 32 bits.
    Signed-off-by: NEric Blake <eblake@redhat.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    cf081fca
io.c 74.0 KB