block: allow bio_for_each_segment_all() to iterate over multi-page bvec
This patch introduces one extra iterator variable to bio_for_each_segment_all(), then we can allow bio_for_each_segment_all() to iterate over multi-page bvec. Given it is just one mechannical & simple change on all bio_for_each_segment_all() users, this patch does tree-wide change in one single patch, so that we can avoid to use a temporary helper for this conversion. Reviewed-by: Omar Sandoval <osandov@fb.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Esse commit está contido em:
@@ -432,8 +432,9 @@ static void do_btree_node_write(struct btree *b)
|
||||
int j;
|
||||
struct bio_vec *bv;
|
||||
void *base = (void *) ((unsigned long) i & ~(PAGE_SIZE - 1));
|
||||
struct bvec_iter_all iter_all;
|
||||
|
||||
bio_for_each_segment_all(bv, b->bio, j)
|
||||
bio_for_each_segment_all(bv, b->bio, j, iter_all)
|
||||
memcpy(page_address(bv->bv_page),
|
||||
base + j * PAGE_SIZE, PAGE_SIZE);
|
||||
|
||||
|
@@ -1447,8 +1447,9 @@ static void crypt_free_buffer_pages(struct crypt_config *cc, struct bio *clone)
|
||||
{
|
||||
unsigned int i;
|
||||
struct bio_vec *bv;
|
||||
struct bvec_iter_all iter_all;
|
||||
|
||||
bio_for_each_segment_all(bv, clone, i) {
|
||||
bio_for_each_segment_all(bv, clone, i, iter_all) {
|
||||
BUG_ON(!bv->bv_page);
|
||||
mempool_free(bv->bv_page, &cc->page_pool);
|
||||
}
|
||||
|
@@ -2112,13 +2112,14 @@ static void process_checks(struct r1bio *r1_bio)
|
||||
struct page **spages = get_resync_pages(sbio)->pages;
|
||||
struct bio_vec *bi;
|
||||
int page_len[RESYNC_PAGES] = { 0 };
|
||||
struct bvec_iter_all iter_all;
|
||||
|
||||
if (sbio->bi_end_io != end_sync_read)
|
||||
continue;
|
||||
/* Now we can 'fixup' the error value */
|
||||
sbio->bi_status = 0;
|
||||
|
||||
bio_for_each_segment_all(bi, sbio, j)
|
||||
bio_for_each_segment_all(bi, sbio, j, iter_all)
|
||||
page_len[j] = bi->bv_len;
|
||||
|
||||
if (!status) {
|
||||
|
Referência em uma nova issue
Block a user