• B
    bio allocation failure due to bio_get_nr_vecs() · f908ee94
    Bernd Schubert 提交于
    The number of bio_get_nr_vecs() is passed down via bio_alloc() to
    bvec_alloc_bs(), which fails the bio allocation if
    nr_iovecs > BIO_MAX_PAGES. For the underlying caller this causes an
    unexpected bio allocation failure.
    Limiting to queue_max_segments() is not sufficient, as max_segments
    also might be very large.
    
    bvec_alloc_bs(gfp_mask, nr_iovecs, ) => NULL when nr_iovecs  > BIO_MAX_PAGES
    bio_alloc_bioset(gfp_mask, nr_iovecs, ...)
    bio_alloc(GFP_NOIO, nvecs)
    xfs_alloc_ioend_bio()
    Signed-off-by: NBernd Schubert <bernd.schubert@itwm.fraunhofer.de>
    Cc: stable@kernel.org
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    f908ee94
bio.c 39.5 KB