iov_iter: add ITER_BVEC_FLAG_NO_REF flag
authorJens Axboe <axboe@kernel.dk>
Wed, 27 Feb 2019 20:05:25 +0000 (13:05 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 18 Mar 2019 16:44:48 +0000 (10:44 -0600)
commit875f1d0769cdcfe1596ff0ca609b453359e42ec9
tree7a62a8236e2412bc136376e0c22114b5e631f98a
parentbf33a7699e992b12d4c7d39dc3f0b61f6b26c5c2
iov_iter: add ITER_BVEC_FLAG_NO_REF flag

For ITER_BVEC, if we're holding on to kernel pages, the caller
doesn't need to grab a reference to the bvec pages, and drop that
same reference on IO completion. This is essentially safe for any
ITER_BVEC, but some use cases end up reusing pages and uncondtionally
dropping a page reference on completion. And example of that is
sendfile(2), that ends up being a splice_in + splice_out on the
pipe pages.

Add a flag that tells us it's fine to not grab a page reference
to the bvec pages, since that caller knows not to drop a reference
when it's done with the pages.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c
include/linux/uio.h