diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-07-04 01:27:42 +0200 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 23:08:23 +0200 |
commit | 885678f68dd1bf9638087ae8b22051b464f5ec05 (patch) | |
tree | 50f741fa071215136b5bb395b5ffe3b4249f12e4 /fs/bcachefs/util.c | |
parent | bcachefs: kill bch2_crc64_update (diff) | |
download | linux-885678f68dd1bf9638087ae8b22051b464f5ec05.tar.xz linux-885678f68dd1bf9638087ae8b22051b464f5ec05.zip |
bcachefs: Kill direct access to bi_io_vec
Switch to always using bio_add_page(), which merges contiguous pages now
that we have multipage bvecs.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/util.c')
-rw-r--r-- | fs/bcachefs/util.c | 31 |
1 files changed, 8 insertions, 23 deletions
diff --git a/fs/bcachefs/util.c b/fs/bcachefs/util.c index 0ca1fb59f54d..fc2ca798fbc3 100644 --- a/fs/bcachefs/util.c +++ b/fs/bcachefs/util.c @@ -506,33 +506,18 @@ size_t bch2_pd_controller_print_debug(struct bch_pd_controller *pd, char *buf) /* misc: */ -void bch2_bio_map(struct bio *bio, void *base) +void bch2_bio_map(struct bio *bio, void *base, size_t size) { - size_t size = bio->bi_iter.bi_size; - struct bio_vec *bv = bio->bi_io_vec; - - BUG_ON(!bio->bi_iter.bi_size); - BUG_ON(bio->bi_vcnt); - BUG_ON(!bio->bi_max_vecs); - - bv->bv_offset = base ? offset_in_page(base) : 0; - goto start; - - for (; size; bio->bi_vcnt++, bv++) { - BUG_ON(bio->bi_vcnt >= bio->bi_max_vecs); - - bv->bv_offset = 0; -start: bv->bv_len = min_t(size_t, PAGE_SIZE - bv->bv_offset, - size); - if (base) { - bv->bv_page = is_vmalloc_addr(base) + while (size) { + struct page *page = is_vmalloc_addr(base) ? vmalloc_to_page(base) : virt_to_page(base); + unsigned offset = offset_in_page(base); + unsigned len = min_t(size_t, PAGE_SIZE - offset, size); - base += bv->bv_len; - } - - size -= bv->bv_len; + BUG_ON(!bio_add_page(bio, page, len, offset)); + size -= len; + base += len; } } |