• Kent Overstreet's avatar
    block: Consolidate bio_alloc_bioset(), bio_kmalloc() · 3f86a82a
    Kent Overstreet authored
    Previously, bio_kmalloc() and bio_alloc_bioset() behaved slightly
    different because there was some almost-duplicated code - this fixes
    some of that.
    
    The important change is that previously bio_kmalloc() always set
    bi_io_vec = bi_inline_vecs, even if nr_iovecs == 0 - unlike
    bio_alloc_bioset(). This would cause bio_has_data() to return true; I
    don't know if this resulted in any actual bugs but it was certainly
    wrong.
    
    bio_kmalloc() and bio_alloc_bioset() also have different arbitrary
    limits on nr_iovecs - 1024 (UIO_MAXIOV) for bio_kmalloc(), 256
    (BIO_MAX_PAGES) for bio_alloc_bioset(). This patch doesn't fix that, but
    at least they're enforced closer together and hopefully they will be
    fixed in a later patch.
    
    This'll also help with some future cleanups - there are a fair number of
    functions that allocate bios (e.g. bio_clone()), and now they don't have
    to be duplicated for bio_alloc(), bio_alloc_bioset(), and bio_kmalloc().
    Signed-off-by: default avatarKent Overstreet <koverstreet@google.com>
    CC: Jens Axboe <axboe@kernel.dk>
    v7: Re-add dropped comments, improv patch description
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    3f86a82a
bio.c 40 KB