• E
    nbd: Advertise realistic limits to block layer · 20220471
    Eric Blake 提交于
    We were basing the advertisement of maximum discard and transfer
    length off of UINT32_MAX, but since the rest of the block layer
    has signed int limits on a transaction, nothing could ever reach
    that maximum, and we risk overflowing an int once things are
    converted to byte-based rather than sector-based limits.  What's
    more, we DO have a much smaller limit: both the current kernel
    and qemu-nbd have a hard limit of 32M on a read or write
    transaction, and while they may also permit up to a full 32 bits
    on a discard transaction, the upstream NBD protocol is proposing
    wording that without any explicit advertisement otherwise,
    clients should limit ALL requests to the same limits as read and
    write, even though the other requests do not actually require as
    many bytes across the wire.  So the better limit to tell the
    block layer is 32M for both values.
    
    Behavior doesn't actually change with this patch (the block layer
    is currently ignoring the max_transfer advertisements); but when
    that problem is fixed in a later series, this patch will prevent
    the exposure of a latent bug.
    Signed-off-by: NEric Blake <eblake@redhat.com>
    Reviewed-by: NKevin Wolf <kwolf@redhat.com>
    Acked-by: NPaolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: NFam Zheng <famz@redhat.com>
    Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    20220471
nbd.c 15.2 KB