summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2019-04-11 08:23:28 +0200
committerJens Axboe <axboe@kernel.dk>2019-04-12 09:06:37 -0600
commita10584c3cda9cbb1a1ccd072783bfd625f99e40d (patch)
tree812ccc3a2f7ea4d998d9c71a60d94a61abe891a2
parent8a96a0e408102fb7aa73d8aa0b5e2219cfd51e55 (diff)
downloadlinux-stable-a10584c3cda9cbb1a1ccd072783bfd625f99e40d.tar.gz
linux-stable-a10584c3cda9cbb1a1ccd072783bfd625f99e40d.tar.bz2
linux-stable-a10584c3cda9cbb1a1ccd072783bfd625f99e40d.zip
block: refactor __bio_iov_bvec_add_pages
Return early on error, and add an unlikely annotation for that case. Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--block/bio.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/block/bio.c b/block/bio.c
index c2592c5d70b9..ad346082a971 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -873,20 +873,19 @@ static int __bio_iov_bvec_add_pages(struct bio *bio, struct iov_iter *iter)
len = min_t(size_t, bv->bv_len - iter->iov_offset, iter->count);
size = bio_add_page(bio, bv->bv_page, len,
bv->bv_offset + iter->iov_offset);
- if (size == len) {
- if (!bio_flagged(bio, BIO_NO_PAGE_REF)) {
- struct page *page;
- int i;
+ if (unlikely(size != len))
+ return -EINVAL;
- mp_bvec_for_each_page(page, bv, i)
- get_page(page);
- }
+ if (!bio_flagged(bio, BIO_NO_PAGE_REF)) {
+ struct page *page;
+ int i;
- iov_iter_advance(iter, size);
- return 0;
+ mp_bvec_for_each_page(page, bv, i)
+ get_page(page);
}
- return -EINVAL;
+ iov_iter_advance(iter, size);
+ return 0;
}
#define PAGE_PTRS_PER_BVEC (sizeof(struct bio_vec) / sizeof(struct page *))