diff options
author | Kent Overstreet <kmo@daterainc.com> | 2013-08-07 17:33:00 -0400 |
---|---|---|
committer | Kent Overstreet <kmo@daterainc.com> | 2013-11-24 01:33:57 -0500 |
commit | 4b1faf931650d4a35b2a570318862821d6a962e3 (patch) | |
tree | 1e9002a82c7108ea8d54efa2bb88537b2f6f4e11 | |
parent | 20d0189b1012a37d2533a87fb451f7852f2418d1 (diff) |
block: Kill bio_pair_split()
Signed-off-by: Kent Overstreet <kmo@daterainc.com>
Cc: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | fs/bio-integrity.c | 45 | ||||
-rw-r--r-- | fs/bio.c | 90 | ||||
-rw-r--r-- | include/linux/bio.h | 30 |
3 files changed, 0 insertions, 165 deletions
diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c index 9d547d2e357c..80d972d739e5 100644 --- a/fs/bio-integrity.c +++ b/fs/bio-integrity.c | |||
@@ -581,51 +581,6 @@ void bio_integrity_trim(struct bio *bio, unsigned int offset, | |||
581 | EXPORT_SYMBOL(bio_integrity_trim); | 581 | EXPORT_SYMBOL(bio_integrity_trim); |
582 | 582 | ||
583 | /** | 583 | /** |
584 | * bio_integrity_split - Split integrity metadata | ||
585 | * @bio: Protected bio | ||
586 | * @bp: Resulting bio_pair | ||
587 | * @sectors: Offset | ||
588 | * | ||
589 | * Description: Splits an integrity page into a bio_pair. | ||
590 | */ | ||
591 | void bio_integrity_split(struct bio *bio, struct bio_pair *bp, int sectors) | ||
592 | { | ||
593 | struct blk_integrity *bi; | ||
594 | struct bio_integrity_payload *bip = bio->bi_integrity; | ||
595 | unsigned int nr_sectors; | ||
596 | |||
597 | if (bio_integrity(bio) == 0) | ||
598 | return; | ||
599 | |||
600 | bi = bdev_get_integrity(bio->bi_bdev); | ||
601 | BUG_ON(bi == NULL); | ||
602 | BUG_ON(bip->bip_vcnt != 1); | ||
603 | |||
604 | nr_sectors = bio_integrity_hw_sectors(bi, sectors); | ||
605 | |||
606 | bp->bio1.bi_integrity = &bp->bip1; | ||
607 | bp->bio2.bi_integrity = &bp->bip2; | ||
608 | |||
609 | bp->iv1 = bip->bip_vec[bip->bip_iter.bi_idx]; | ||
610 | bp->iv2 = bip->bip_vec[bip->bip_iter.bi_idx]; | ||
611 | |||
612 | bp->bip1.bip_vec = &bp->iv1; | ||
613 | bp->bip2.bip_vec = &bp->iv2; | ||
614 | |||
615 | bp->iv1.bv_len = sectors * bi->tuple_size; | ||
616 | bp->iv2.bv_offset += sectors * bi->tuple_size; | ||
617 | bp->iv2.bv_len -= sectors * bi->tuple_size; | ||
618 | |||
619 | bp->bip1.bip_iter.bi_sector = bio->bi_integrity->bip_iter.bi_sector; | ||
620 | bp->bip2.bip_iter.bi_sector = | ||
621 | bio->bi_integrity->bip_iter.bi_sector + nr_sectors; | ||
622 | |||
623 | bp->bip1.bip_vcnt = bp->bip2.bip_vcnt = 1; | ||
624 | bp->bip1.bip_iter.bi_idx = bp->bip2.bip_iter.bi_idx = 0; | ||
625 | } | ||
626 | EXPORT_SYMBOL(bio_integrity_split); | ||
627 | |||
628 | /** | ||
629 | * bio_integrity_clone - Callback for cloning bios with integrity metadata | 584 | * bio_integrity_clone - Callback for cloning bios with integrity metadata |
630 | * @bio: New bio | 585 | * @bio: New bio |
631 | * @bio_src: Original bio | 586 | * @bio_src: Original bio |
@@ -38,8 +38,6 @@ | |||
38 | */ | 38 | */ |
39 | #define BIO_INLINE_VECS 4 | 39 | #define BIO_INLINE_VECS 4 |
40 | 40 | ||
41 | static mempool_t *bio_split_pool __read_mostly; | ||
42 | |||
43 | /* | 41 | /* |
44 | * if you change this list, also change bvec_alloc or things will | 42 | * if you change this list, also change bvec_alloc or things will |
45 | * break badly! cannot be bigger than what you can fit into an | 43 | * break badly! cannot be bigger than what you can fit into an |
@@ -1829,89 +1827,6 @@ struct bio *bio_split(struct bio *bio, int sectors, | |||
1829 | } | 1827 | } |
1830 | EXPORT_SYMBOL(bio_split); | 1828 | EXPORT_SYMBOL(bio_split); |
1831 | 1829 | ||
1832 | void bio_pair_release(struct bio_pair *bp) | ||
1833 | { | ||
1834 | if (atomic_dec_and_test(&bp->cnt)) { | ||
1835 | struct bio *master = bp->bio1.bi_private; | ||
1836 | |||
1837 | bio_endio(master, bp->error); | ||
1838 | mempool_free(bp, bp->bio2.bi_private); | ||
1839 | } | ||
1840 | } | ||
1841 | EXPORT_SYMBOL(bio_pair_release); | ||
1842 | |||
1843 | static void bio_pair_end_1(struct bio *bi, int err) | ||
1844 | { | ||
1845 | struct bio_pair *bp = container_of(bi, struct bio_pair, bio1); | ||
1846 | |||
1847 | if (err) | ||
1848 | bp->error = err; | ||
1849 | |||
1850 | bio_pair_release(bp); | ||
1851 | } | ||
1852 | |||
1853 | static void bio_pair_end_2(struct bio *bi, int err) | ||
1854 | { | ||
1855 | struct bio_pair *bp = container_of(bi, struct bio_pair, bio2); | ||
1856 | |||
1857 | if (err) | ||
1858 | bp->error = err; | ||
1859 | |||
1860 | bio_pair_release(bp); | ||
1861 | } | ||
1862 | |||
1863 | /* | ||
1864 | * split a bio - only worry about a bio with a single page in its iovec | ||
1865 | */ | ||
1866 | struct bio_pair *bio_pair_split(struct bio *bi, int first_sectors) | ||
1867 | { | ||
1868 | struct bio_pair *bp = mempool_alloc(bio_split_pool, GFP_NOIO); | ||
1869 | |||
1870 | if (!bp) | ||
1871 | return bp; | ||
1872 | |||
1873 | trace_block_split(bdev_get_queue(bi->bi_bdev), bi, | ||
1874 | bi->bi_iter.bi_sector + first_sectors); | ||
1875 | |||
1876 | BUG_ON(bio_multiple_segments(bi)); | ||
1877 | atomic_set(&bp->cnt, 3); | ||
1878 | bp->error = 0; | ||
1879 | bp->bio1 = *bi; | ||
1880 | bp->bio2 = *bi; | ||
1881 | bp->bio2.bi_iter.bi_sector += first_sectors; | ||
1882 | bp->bio2.bi_iter.bi_size -= first_sectors << 9; | ||
1883 | bp->bio1.bi_iter.bi_size = first_sectors << 9; | ||
1884 | |||
1885 | if (bi->bi_vcnt != 0) { | ||
1886 | bp->bv1 = bio_iovec(bi); | ||
1887 | bp->bv2 = bio_iovec(bi); | ||
1888 | |||
1889 | if (bio_is_rw(bi)) { | ||
1890 | bp->bv2.bv_offset += first_sectors << 9; | ||
1891 | bp->bv2.bv_len -= first_sectors << 9; | ||
1892 | bp->bv1.bv_len = first_sectors << 9; | ||
1893 | } | ||
1894 | |||
1895 | bp->bio1.bi_io_vec = &bp->bv1; | ||
1896 | bp->bio2.bi_io_vec = &bp->bv2; | ||
1897 | |||
1898 | bp->bio1.bi_max_vecs = 1; | ||
1899 | bp->bio2.bi_max_vecs = 1; | ||
1900 | } | ||
1901 | |||
1902 | bp->bio1.bi_end_io = bio_pair_end_1; | ||
1903 | bp->bio2.bi_end_io = bio_pair_end_2; | ||
1904 | |||
1905 | bp->bio1.bi_private = bi; | ||
1906 | bp->bio2.bi_private = bio_split_pool; | ||
1907 | |||
1908 | if (bio_integrity(bi)) | ||
1909 | bio_integrity_split(bi, bp, first_sectors); | ||
1910 | |||
1911 | return bp; | ||
1912 | } | ||
1913 | EXPORT_SYMBOL(bio_pair_split); | ||
1914 | |||
1915 | /** | 1830 | /** |
1916 | * bio_trim - trim a bio | 1831 | * bio_trim - trim a bio |
1917 | * @bio: bio to trim | 1832 | * @bio: bio to trim |
@@ -2113,11 +2028,6 @@ static int __init init_bio(void) | |||
2113 | if (bioset_integrity_create(fs_bio_set, BIO_POOL_SIZE)) | 2028 | if (bioset_integrity_create(fs_bio_set, BIO_POOL_SIZE)) |
2114 | panic("bio: can't create integrity pool\n"); | 2029 | panic("bio: can't create integrity pool\n"); |
2115 | 2030 | ||
2116 | bio_split_pool = mempool_create_kmalloc_pool(BIO_SPLIT_ENTRIES, | ||
2117 | sizeof(struct bio_pair)); | ||
2118 | if (!bio_split_pool) | ||
2119 | panic("bio: can't create split pool\n"); | ||
2120 | |||
2121 | return 0; | 2031 | return 0; |
2122 | } | 2032 | } |
2123 | subsys_initcall(init_bio); | 2033 | subsys_initcall(init_bio); |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 19e31b2f5b2c..70654521dab6 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -297,30 +297,7 @@ struct bio_integrity_payload { | |||
297 | }; | 297 | }; |
298 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ | 298 | #endif /* CONFIG_BLK_DEV_INTEGRITY */ |
299 | 299 | ||
300 | /* | ||
301 | * A bio_pair is used when we need to split a bio. | ||
302 | * This can only happen for a bio that refers to just one | ||
303 | * page of data, and in the unusual situation when the | ||
304 | * page crosses a chunk/device boundary | ||
305 | * | ||
306 | * The address of the master bio is stored in bio1.bi_private | ||
307 | * The address of the pool the pair was allocated from is stored | ||
308 | * in bio2.bi_private | ||
309 | */ | ||
310 | struct bio_pair { | ||
311 | struct bio bio1, bio2; | ||
312 | struct bio_vec bv1, bv2; | ||
313 | #if defined(CONFIG_BLK_DEV_INTEGRITY) | ||
314 | struct bio_integrity_payload bip1, bip2; | ||
315 | struct bio_vec iv1, iv2; | ||
316 | #endif | ||
317 | atomic_t cnt; | ||
318 | int error; | ||
319 | }; | ||
320 | extern struct bio_pair *bio_pair_split(struct bio *bi, int first_sectors); | ||
321 | extern void bio_pair_release(struct bio_pair *dbio); | ||
322 | extern void bio_trim(struct bio *bio, int offset, int size); | 300 | extern void bio_trim(struct bio *bio, int offset, int size); |
323 | |||
324 | extern struct bio *bio_split(struct bio *bio, int sectors, | 301 | extern struct bio *bio_split(struct bio *bio, int sectors, |
325 | gfp_t gfp, struct bio_set *bs); | 302 | gfp_t gfp, struct bio_set *bs); |
326 | 303 | ||
@@ -677,7 +654,6 @@ extern int bio_integrity_prep(struct bio *); | |||
677 | extern void bio_integrity_endio(struct bio *, int); | 654 | extern void bio_integrity_endio(struct bio *, int); |
678 | extern void bio_integrity_advance(struct bio *, unsigned int); | 655 | extern void bio_integrity_advance(struct bio *, unsigned int); |
679 | extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); | 656 | extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); |
680 | extern void bio_integrity_split(struct bio *, struct bio_pair *, int); | ||
681 | extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t); | 657 | extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t); |
682 | extern int bioset_integrity_create(struct bio_set *, int); | 658 | extern int bioset_integrity_create(struct bio_set *, int); |
683 | extern void bioset_integrity_free(struct bio_set *); | 659 | extern void bioset_integrity_free(struct bio_set *); |
@@ -721,12 +697,6 @@ static inline int bio_integrity_clone(struct bio *bio, struct bio *bio_src, | |||
721 | return 0; | 697 | return 0; |
722 | } | 698 | } |
723 | 699 | ||
724 | static inline void bio_integrity_split(struct bio *bio, struct bio_pair *bp, | ||
725 | int sectors) | ||
726 | { | ||
727 | return; | ||
728 | } | ||
729 | |||
730 | static inline void bio_integrity_advance(struct bio *bio, | 700 | static inline void bio_integrity_advance(struct bio *bio, |
731 | unsigned int bytes_done) | 701 | unsigned int bytes_done) |
732 | { | 702 | { |