aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kmo@daterainc.com>2013-08-07 17:33:00 -0400
committerKent Overstreet <kmo@daterainc.com>2013-11-24 01:33:57 -0500
commit4b1faf931650d4a35b2a570318862821d6a962e3 (patch)
tree1e9002a82c7108ea8d54efa2bb88537b2f6f4e11
parent20d0189b1012a37d2533a87fb451f7852f2418d1 (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.c45
-rw-r--r--fs/bio.c90
-rw-r--r--include/linux/bio.h30
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,
581EXPORT_SYMBOL(bio_integrity_trim); 581EXPORT_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 */
591void 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}
626EXPORT_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
diff --git a/fs/bio.c b/fs/bio.c
index 7b062befac82..75c49a382239 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -38,8 +38,6 @@
38 */ 38 */
39#define BIO_INLINE_VECS 4 39#define BIO_INLINE_VECS 4
40 40
41static 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}
1830EXPORT_SYMBOL(bio_split); 1828EXPORT_SYMBOL(bio_split);
1831 1829
1832void 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}
1841EXPORT_SYMBOL(bio_pair_release);
1842
1843static 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
1853static 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 */
1866struct 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}
1913EXPORT_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}
2123subsys_initcall(init_bio); 2033subsys_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 */
310struct 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};
320extern struct bio_pair *bio_pair_split(struct bio *bi, int first_sectors);
321extern void bio_pair_release(struct bio_pair *dbio);
322extern void bio_trim(struct bio *bio, int offset, int size); 300extern void bio_trim(struct bio *bio, int offset, int size);
323
324extern struct bio *bio_split(struct bio *bio, int sectors, 301extern 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 *);
677extern void bio_integrity_endio(struct bio *, int); 654extern void bio_integrity_endio(struct bio *, int);
678extern void bio_integrity_advance(struct bio *, unsigned int); 655extern void bio_integrity_advance(struct bio *, unsigned int);
679extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); 656extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int);
680extern void bio_integrity_split(struct bio *, struct bio_pair *, int);
681extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t); 657extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t);
682extern int bioset_integrity_create(struct bio_set *, int); 658extern int bioset_integrity_create(struct bio_set *, int);
683extern void bioset_integrity_free(struct bio_set *); 659extern 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
724static inline void bio_integrity_split(struct bio *bio, struct bio_pair *bp,
725 int sectors)
726{
727 return;
728}
729
730static inline void bio_integrity_advance(struct bio *bio, 700static inline void bio_integrity_advance(struct bio *bio,
731 unsigned int bytes_done) 701 unsigned int bytes_done)
732{ 702{