]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commit5c462631fe207f04d99c9eb36662b7068e45bf0d
tree8bfb395ad202bb38e9ed47d574abab5d3eac92bb
parentb24add160406c10b47a1ffa15c6c252a11481d6d
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