aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Monakhov <dmonakhov@openvz.org>2017-06-29 14:31:10 -0400
committerJens Axboe <axboe@kernel.dk>2017-07-03 18:56:22 -0400
commitfbd08e7673f950854679e5d79a30bb25e77a9d08 (patch)
tree7539736c05c4cec5f456b4e41c88d150b7d3353e
parent309a62fa3a9e78cb37a620913151cbb47d83b81d (diff)
bio-integrity: fix interface for bio_integrity_trim
bio_integrity_trim inherent it's interface from bio_trim and accept offset and size, but this API is error prone because data offset must always be insync with bio's data offset. That is why we have integrity update hook in bio_advance() So only meaningful values are: offset == 0, sectors == bio_sectors(bio) Let's just remove them completely. Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--block/bio-integrity.c11
-rw-r--r--block/bio.c4
-rw-r--r--drivers/md/dm.c2
-rw-r--r--include/linux/bio.h5
4 files changed, 7 insertions, 15 deletions
diff --git a/block/bio-integrity.c b/block/bio-integrity.c
index 8c2253c59edb..3a0d71199fb0 100644
--- a/block/bio-integrity.c
+++ b/block/bio-integrity.c
@@ -433,22 +433,15 @@ EXPORT_SYMBOL(bio_integrity_advance);
433/** 433/**
434 * bio_integrity_trim - Trim integrity vector 434 * bio_integrity_trim - Trim integrity vector
435 * @bio: bio whose integrity vector to update 435 * @bio: bio whose integrity vector to update
436 * @offset: offset to first data sector
437 * @sectors: number of data sectors
438 * 436 *
439 * Description: Used to trim the integrity vector in a cloned bio. 437 * Description: Used to trim the integrity vector in a cloned bio.
440 * The ivec will be advanced corresponding to 'offset' data sectors
441 * and the length will be truncated corresponding to 'len' data
442 * sectors.
443 */ 438 */
444void bio_integrity_trim(struct bio *bio, unsigned int offset, 439void bio_integrity_trim(struct bio *bio)
445 unsigned int sectors)
446{ 440{
447 struct bio_integrity_payload *bip = bio_integrity(bio); 441 struct bio_integrity_payload *bip = bio_integrity(bio);
448 struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev); 442 struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
449 443
450 bio_integrity_advance(bio, offset << 9); 444 bip->bip_iter.bi_size = bio_integrity_bytes(bi, bio_sectors(bio));
451 bip->bip_iter.bi_size = bio_integrity_bytes(bi, sectors);
452} 445}
453EXPORT_SYMBOL(bio_integrity_trim); 446EXPORT_SYMBOL(bio_integrity_trim);
454 447
diff --git a/block/bio.c b/block/bio.c
index 5b4b32a2f8d0..a6b225324a61 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -1868,7 +1868,7 @@ struct bio *bio_split(struct bio *bio, int sectors,
1868 split->bi_iter.bi_size = sectors << 9; 1868 split->bi_iter.bi_size = sectors << 9;
1869 1869
1870 if (bio_integrity(split)) 1870 if (bio_integrity(split))
1871 bio_integrity_trim(split, 0, sectors); 1871 bio_integrity_trim(split);
1872 1872
1873 bio_advance(bio, split->bi_iter.bi_size); 1873 bio_advance(bio, split->bi_iter.bi_size);
1874 1874
@@ -1902,7 +1902,7 @@ void bio_trim(struct bio *bio, int offset, int size)
1902 bio->bi_iter.bi_size = size; 1902 bio->bi_iter.bi_size = size;
1903 1903
1904 if (bio_integrity(bio)) 1904 if (bio_integrity(bio))
1905 bio_integrity_trim(bio, 0, size); 1905 bio_integrity_trim(bio);
1906 1906
1907} 1907}
1908EXPORT_SYMBOL_GPL(bio_trim); 1908EXPORT_SYMBOL_GPL(bio_trim);
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 402946035308..13e714ea7a42 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1153,7 +1153,7 @@ static int clone_bio(struct dm_target_io *tio, struct bio *bio,
1153 clone->bi_iter.bi_size = to_bytes(len); 1153 clone->bi_iter.bi_size = to_bytes(len);
1154 1154
1155 if (unlikely(bio_integrity(bio) != NULL)) 1155 if (unlikely(bio_integrity(bio) != NULL))
1156 bio_integrity_trim(clone, 0, len); 1156 bio_integrity_trim(clone);
1157 1157
1158 return 0; 1158 return 0;
1159} 1159}
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 664a27da276d..1d74f5120369 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -728,7 +728,7 @@ extern bool bio_integrity_enabled(struct bio *bio);
728extern int bio_integrity_prep(struct bio *); 728extern int bio_integrity_prep(struct bio *);
729extern void bio_integrity_endio(struct bio *); 729extern void bio_integrity_endio(struct bio *);
730extern void bio_integrity_advance(struct bio *, unsigned int); 730extern void bio_integrity_advance(struct bio *, unsigned int);
731extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); 731extern void bio_integrity_trim(struct bio *);
732extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t); 732extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t);
733extern int bioset_integrity_create(struct bio_set *, int); 733extern int bioset_integrity_create(struct bio_set *, int);
734extern void bioset_integrity_free(struct bio_set *); 734extern void bioset_integrity_free(struct bio_set *);
@@ -778,8 +778,7 @@ static inline void bio_integrity_advance(struct bio *bio,
778 return; 778 return;
779} 779}
780 780
781static inline void bio_integrity_trim(struct bio *bio, unsigned int offset, 781static inline void bio_integrity_trim(struct bio *bio)
782 unsigned int sectors)
783{ 782{
784 return; 783 return;
785} 784}