• Christoph Hellwig's avatar
    block: avoid extra bio reference for async O_DIRECT · 531724ab
    Christoph Hellwig authored
    The bio referencing has a trick that doesn't do any actual atomic
    inc/dec on the reference count until we have to elevator to > 1. For the
    async IO O_DIRECT case, we can't use the simple DIO variants, so we use
    __blkdev_direct_IO(). It always grabs an extra reference to the bio
    after allocation, which means we then enter the slower path of actually
    having to do atomic_inc/dec on the count.
    
    We don't need to do that for the async case, unless we end up going
    multi-bio, in which case we're already doing huge amounts of IO. For the
    smaller IO case (< BIO_MAX_PAGES), we can do without the extra ref.
    
    Based on an earlier patch (and commit log) from Jens Axboe.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    531724ab
block_dev.c 54.2 KB