diff options
Diffstat (limited to 'fs/bio.c')
-rw-r--r-- | fs/bio.c | 56 |
1 files changed, 29 insertions, 27 deletions
@@ -532,13 +532,13 @@ void __bio_clone(struct bio *bio, struct bio *bio_src) | |||
532 | * most users will be overriding ->bi_bdev with a new target, | 532 | * most users will be overriding ->bi_bdev with a new target, |
533 | * so we don't set nor calculate new physical/hw segment counts here | 533 | * so we don't set nor calculate new physical/hw segment counts here |
534 | */ | 534 | */ |
535 | bio->bi_sector = bio_src->bi_sector; | 535 | bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector; |
536 | bio->bi_bdev = bio_src->bi_bdev; | 536 | bio->bi_bdev = bio_src->bi_bdev; |
537 | bio->bi_flags |= 1 << BIO_CLONED; | 537 | bio->bi_flags |= 1 << BIO_CLONED; |
538 | bio->bi_rw = bio_src->bi_rw; | 538 | bio->bi_rw = bio_src->bi_rw; |
539 | bio->bi_vcnt = bio_src->bi_vcnt; | 539 | bio->bi_vcnt = bio_src->bi_vcnt; |
540 | bio->bi_size = bio_src->bi_size; | 540 | bio->bi_iter.bi_size = bio_src->bi_iter.bi_size; |
541 | bio->bi_idx = bio_src->bi_idx; | 541 | bio->bi_iter.bi_idx = bio_src->bi_iter.bi_idx; |
542 | } | 542 | } |
543 | EXPORT_SYMBOL(__bio_clone); | 543 | EXPORT_SYMBOL(__bio_clone); |
544 | 544 | ||
@@ -612,7 +612,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
612 | if (unlikely(bio_flagged(bio, BIO_CLONED))) | 612 | if (unlikely(bio_flagged(bio, BIO_CLONED))) |
613 | return 0; | 613 | return 0; |
614 | 614 | ||
615 | if (((bio->bi_size + len) >> 9) > max_sectors) | 615 | if (((bio->bi_iter.bi_size + len) >> 9) > max_sectors) |
616 | return 0; | 616 | return 0; |
617 | 617 | ||
618 | /* | 618 | /* |
@@ -635,8 +635,9 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
635 | simulate merging updated prev_bvec | 635 | simulate merging updated prev_bvec |
636 | as new bvec. */ | 636 | as new bvec. */ |
637 | .bi_bdev = bio->bi_bdev, | 637 | .bi_bdev = bio->bi_bdev, |
638 | .bi_sector = bio->bi_sector, | 638 | .bi_sector = bio->bi_iter.bi_sector, |
639 | .bi_size = bio->bi_size - prev_bv_len, | 639 | .bi_size = bio->bi_iter.bi_size - |
640 | prev_bv_len, | ||
640 | .bi_rw = bio->bi_rw, | 641 | .bi_rw = bio->bi_rw, |
641 | }; | 642 | }; |
642 | 643 | ||
@@ -684,8 +685,8 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
684 | if (q->merge_bvec_fn) { | 685 | if (q->merge_bvec_fn) { |
685 | struct bvec_merge_data bvm = { | 686 | struct bvec_merge_data bvm = { |
686 | .bi_bdev = bio->bi_bdev, | 687 | .bi_bdev = bio->bi_bdev, |
687 | .bi_sector = bio->bi_sector, | 688 | .bi_sector = bio->bi_iter.bi_sector, |
688 | .bi_size = bio->bi_size, | 689 | .bi_size = bio->bi_iter.bi_size, |
689 | .bi_rw = bio->bi_rw, | 690 | .bi_rw = bio->bi_rw, |
690 | }; | 691 | }; |
691 | 692 | ||
@@ -708,7 +709,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
708 | bio->bi_vcnt++; | 709 | bio->bi_vcnt++; |
709 | bio->bi_phys_segments++; | 710 | bio->bi_phys_segments++; |
710 | done: | 711 | done: |
711 | bio->bi_size += len; | 712 | bio->bi_iter.bi_size += len; |
712 | return len; | 713 | return len; |
713 | } | 714 | } |
714 | 715 | ||
@@ -807,22 +808,22 @@ void bio_advance(struct bio *bio, unsigned bytes) | |||
807 | if (bio_integrity(bio)) | 808 | if (bio_integrity(bio)) |
808 | bio_integrity_advance(bio, bytes); | 809 | bio_integrity_advance(bio, bytes); |
809 | 810 | ||
810 | bio->bi_sector += bytes >> 9; | 811 | bio->bi_iter.bi_sector += bytes >> 9; |
811 | bio->bi_size -= bytes; | 812 | bio->bi_iter.bi_size -= bytes; |
812 | 813 | ||
813 | if (bio->bi_rw & BIO_NO_ADVANCE_ITER_MASK) | 814 | if (bio->bi_rw & BIO_NO_ADVANCE_ITER_MASK) |
814 | return; | 815 | return; |
815 | 816 | ||
816 | while (bytes) { | 817 | while (bytes) { |
817 | if (unlikely(bio->bi_idx >= bio->bi_vcnt)) { | 818 | if (unlikely(bio->bi_iter.bi_idx >= bio->bi_vcnt)) { |
818 | WARN_ONCE(1, "bio idx %d >= vcnt %d\n", | 819 | WARN_ONCE(1, "bio idx %d >= vcnt %d\n", |
819 | bio->bi_idx, bio->bi_vcnt); | 820 | bio->bi_iter.bi_idx, bio->bi_vcnt); |
820 | break; | 821 | break; |
821 | } | 822 | } |
822 | 823 | ||
823 | if (bytes >= bio_iovec(bio)->bv_len) { | 824 | if (bytes >= bio_iovec(bio)->bv_len) { |
824 | bytes -= bio_iovec(bio)->bv_len; | 825 | bytes -= bio_iovec(bio)->bv_len; |
825 | bio->bi_idx++; | 826 | bio->bi_iter.bi_idx++; |
826 | } else { | 827 | } else { |
827 | bio_iovec(bio)->bv_len -= bytes; | 828 | bio_iovec(bio)->bv_len -= bytes; |
828 | bio_iovec(bio)->bv_offset += bytes; | 829 | bio_iovec(bio)->bv_offset += bytes; |
@@ -1485,7 +1486,7 @@ struct bio *bio_map_kern(struct request_queue *q, void *data, unsigned int len, | |||
1485 | if (IS_ERR(bio)) | 1486 | if (IS_ERR(bio)) |
1486 | return bio; | 1487 | return bio; |
1487 | 1488 | ||
1488 | if (bio->bi_size == len) | 1489 | if (bio->bi_iter.bi_size == len) |
1489 | return bio; | 1490 | return bio; |
1490 | 1491 | ||
1491 | /* | 1492 | /* |
@@ -1763,16 +1764,16 @@ struct bio_pair *bio_split(struct bio *bi, int first_sectors) | |||
1763 | return bp; | 1764 | return bp; |
1764 | 1765 | ||
1765 | trace_block_split(bdev_get_queue(bi->bi_bdev), bi, | 1766 | trace_block_split(bdev_get_queue(bi->bi_bdev), bi, |
1766 | bi->bi_sector + first_sectors); | 1767 | bi->bi_iter.bi_sector + first_sectors); |
1767 | 1768 | ||
1768 | BUG_ON(bio_segments(bi) > 1); | 1769 | BUG_ON(bio_segments(bi) > 1); |
1769 | atomic_set(&bp->cnt, 3); | 1770 | atomic_set(&bp->cnt, 3); |
1770 | bp->error = 0; | 1771 | bp->error = 0; |
1771 | bp->bio1 = *bi; | 1772 | bp->bio1 = *bi; |
1772 | bp->bio2 = *bi; | 1773 | bp->bio2 = *bi; |
1773 | bp->bio2.bi_sector += first_sectors; | 1774 | bp->bio2.bi_iter.bi_sector += first_sectors; |
1774 | bp->bio2.bi_size -= first_sectors << 9; | 1775 | bp->bio2.bi_iter.bi_size -= first_sectors << 9; |
1775 | bp->bio1.bi_size = first_sectors << 9; | 1776 | bp->bio1.bi_iter.bi_size = first_sectors << 9; |
1776 | 1777 | ||
1777 | if (bi->bi_vcnt != 0) { | 1778 | if (bi->bi_vcnt != 0) { |
1778 | bp->bv1 = *bio_iovec(bi); | 1779 | bp->bv1 = *bio_iovec(bi); |
@@ -1821,21 +1822,22 @@ void bio_trim(struct bio *bio, int offset, int size) | |||
1821 | int sofar = 0; | 1822 | int sofar = 0; |
1822 | 1823 | ||
1823 | size <<= 9; | 1824 | size <<= 9; |
1824 | if (offset == 0 && size == bio->bi_size) | 1825 | if (offset == 0 && size == bio->bi_iter.bi_size) |
1825 | return; | 1826 | return; |
1826 | 1827 | ||
1827 | clear_bit(BIO_SEG_VALID, &bio->bi_flags); | 1828 | clear_bit(BIO_SEG_VALID, &bio->bi_flags); |
1828 | 1829 | ||
1829 | bio_advance(bio, offset << 9); | 1830 | bio_advance(bio, offset << 9); |
1830 | 1831 | ||
1831 | bio->bi_size = size; | 1832 | bio->bi_iter.bi_size = size; |
1832 | 1833 | ||
1833 | /* avoid any complications with bi_idx being non-zero*/ | 1834 | /* avoid any complications with bi_idx being non-zero*/ |
1834 | if (bio->bi_idx) { | 1835 | if (bio->bi_iter.bi_idx) { |
1835 | memmove(bio->bi_io_vec, bio->bi_io_vec+bio->bi_idx, | 1836 | memmove(bio->bi_io_vec, bio->bi_io_vec+bio->bi_iter.bi_idx, |
1836 | (bio->bi_vcnt - bio->bi_idx) * sizeof(struct bio_vec)); | 1837 | (bio->bi_vcnt - bio->bi_iter.bi_idx) * |
1837 | bio->bi_vcnt -= bio->bi_idx; | 1838 | sizeof(struct bio_vec)); |
1838 | bio->bi_idx = 0; | 1839 | bio->bi_vcnt -= bio->bi_iter.bi_idx; |
1840 | bio->bi_iter.bi_idx = 0; | ||
1839 | } | 1841 | } |
1840 | /* Make sure vcnt and last bv are not too big */ | 1842 | /* Make sure vcnt and last bv are not too big */ |
1841 | bio_for_each_segment(bvec, bio, i) { | 1843 | bio_for_each_segment(bvec, bio, i) { |
@@ -1871,7 +1873,7 @@ sector_t bio_sector_offset(struct bio *bio, unsigned short index, | |||
1871 | sector_sz = queue_logical_block_size(bio->bi_bdev->bd_disk->queue); | 1873 | sector_sz = queue_logical_block_size(bio->bi_bdev->bd_disk->queue); |
1872 | sectors = 0; | 1874 | sectors = 0; |
1873 | 1875 | ||
1874 | if (index >= bio->bi_idx) | 1876 | if (index >= bio->bi_iter.bi_idx) |
1875 | index = bio->bi_vcnt - 1; | 1877 | index = bio->bi_vcnt - 1; |
1876 | 1878 | ||
1877 | bio_for_each_segment_all(bv, bio, i) { | 1879 | bio_for_each_segment_all(bv, bio, i) { |