block: avoid extra bio reference for async O_DIRECT
authorChristoph Hellwig <hch@lst.de>
Fri, 30 Nov 2018 08:23:48 +0000 (09:23 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 30 Nov 2018 15:28:51 +0000 (08:28 -0700)
commit531724abc3bfb556c1dd68086cf9cb51f76464e3
tree8bfb395ad202bb38e9ed47d574abab5d3eac92bb
parent27fae429acee1e9418059e7fa545438075af5256
block: avoid extra bio reference for async O_DIRECT

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: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/block_dev.c