• Tejun Heo's avatar
    bio: fix bio_kmalloc() · 451a9ebf
    Tejun Heo authored
    Impact: fix bio_kmalloc() and its destruction path
    
    bio_kmalloc() was broken in two ways.
    
    * bvec_alloc_bs() first allocates bvec using kmalloc() and then
      ignores it and allocates again like non-kmalloc bvecs.
    
    * bio_kmalloc_destructor() didn't check for and free bio integrity
      data.
    
    This patch fixes the above problems.  kmalloc patch is separated out
    from bio_alloc_bioset() and allocates the requested number of bvecs as
    inline bvecs.
    
    * bio_alloc_bioset() no longer takes NULL @bs.  None other than
      bio_kmalloc() used it and outside users can't know how it was
      allocated anyway.
    
    * Define and use BIO_POOL_NONE so that pool index check in
      bvec_free_bs() triggers if inline or kmalloc allocated bvec gets
      there.
    
    * Relocate destructors on top of each allocation function so that how
      they're used is more clear.
    
    Jens Axboe suggested allocating bvecs inline.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
    451a9ebf
bio.c 38.8 KB