diff options
author | Kent Overstreet <koverstreet@google.com> | 2012-09-06 18:34:56 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2012-09-09 04:35:38 -0400 |
commit | 1e2a410ff71504a64d1af2e354287ac51aeac1b0 (patch) | |
tree | e4ae4669d958fc932e5ae67cafd8de860f1f91c9 | |
parent | 395c72a707d966b36d5a42fe12c3a237ded3a0d9 (diff) |
block: Ues bi_pool for bio_integrity_alloc()
Now that bios keep track of where they were allocated from,
bio_integrity_alloc_bioset() becomes redundant.
Remove bio_integrity_alloc_bioset() and drop bio_set argument from the
related functions and make them use bio->bi_pool.
Signed-off-by: Kent Overstreet <koverstreet@google.com>
CC: Jens Axboe <axboe@kernel.dk>
CC: Martin K. Petersen <martin.petersen@oracle.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | block/blk-core.c | 2 | ||||
-rw-r--r-- | drivers/md/dm.c | 4 | ||||
-rw-r--r-- | drivers/md/md.c | 2 | ||||
-rw-r--r-- | fs/bio-integrity.c | 44 | ||||
-rw-r--r-- | fs/bio.c | 6 | ||||
-rw-r--r-- | include/linux/bio.h | 9 |
6 files changed, 26 insertions, 41 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index 4b4dbdfbca89..95c493511be7 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
@@ -2788,7 +2788,7 @@ int blk_rq_prep_clone(struct request *rq, struct request *rq_src, | |||
2788 | __bio_clone(bio, bio_src); | 2788 | __bio_clone(bio, bio_src); |
2789 | 2789 | ||
2790 | if (bio_integrity(bio_src) && | 2790 | if (bio_integrity(bio_src) && |
2791 | bio_integrity_clone(bio, bio_src, gfp_mask, bs)) | 2791 | bio_integrity_clone(bio, bio_src, gfp_mask)) |
2792 | goto free_and_out; | 2792 | goto free_and_out; |
2793 | 2793 | ||
2794 | if (bio_ctr && bio_ctr(bio, bio_src, data)) | 2794 | if (bio_ctr && bio_ctr(bio, bio_src, data)) |
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 0c3d6dd51897..f43aaf689bd0 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
@@ -1068,7 +1068,7 @@ static struct bio *split_bvec(struct bio *bio, sector_t sector, | |||
1068 | clone->bi_flags |= 1 << BIO_CLONED; | 1068 | clone->bi_flags |= 1 << BIO_CLONED; |
1069 | 1069 | ||
1070 | if (bio_integrity(bio)) { | 1070 | if (bio_integrity(bio)) { |
1071 | bio_integrity_clone(clone, bio, GFP_NOIO, bs); | 1071 | bio_integrity_clone(clone, bio, GFP_NOIO); |
1072 | bio_integrity_trim(clone, | 1072 | bio_integrity_trim(clone, |
1073 | bio_sector_offset(bio, idx, offset), len); | 1073 | bio_sector_offset(bio, idx, offset), len); |
1074 | } | 1074 | } |
@@ -1094,7 +1094,7 @@ static struct bio *clone_bio(struct bio *bio, sector_t sector, | |||
1094 | clone->bi_flags &= ~(1 << BIO_SEG_VALID); | 1094 | clone->bi_flags &= ~(1 << BIO_SEG_VALID); |
1095 | 1095 | ||
1096 | if (bio_integrity(bio)) { | 1096 | if (bio_integrity(bio)) { |
1097 | bio_integrity_clone(clone, bio, GFP_NOIO, bs); | 1097 | bio_integrity_clone(clone, bio, GFP_NOIO); |
1098 | 1098 | ||
1099 | if (idx != bio->bi_idx || clone->bi_size < bio->bi_size) | 1099 | if (idx != bio->bi_idx || clone->bi_size < bio->bi_size) |
1100 | bio_integrity_trim(clone, | 1100 | bio_integrity_trim(clone, |
diff --git a/drivers/md/md.c b/drivers/md/md.c index b8eebe357b2b..457ca8451ddb 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -186,7 +186,7 @@ struct bio *bio_clone_mddev(struct bio *bio, gfp_t gfp_mask, | |||
186 | if (bio_integrity(bio)) { | 186 | if (bio_integrity(bio)) { |
187 | int ret; | 187 | int ret; |
188 | 188 | ||
189 | ret = bio_integrity_clone(b, bio, gfp_mask, mddev->bio_set); | 189 | ret = bio_integrity_clone(b, bio, gfp_mask); |
190 | 190 | ||
191 | if (ret < 0) { | 191 | if (ret < 0) { |
192 | bio_put(b); | 192 | bio_put(b); |
diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c index e85c04b9f61c..a3f28f331b2b 100644 --- a/fs/bio-integrity.c +++ b/fs/bio-integrity.c | |||
@@ -70,23 +70,25 @@ static inline int use_bip_pool(unsigned int idx) | |||
70 | } | 70 | } |
71 | 71 | ||
72 | /** | 72 | /** |
73 | * bio_integrity_alloc_bioset - Allocate integrity payload and attach it to bio | 73 | * bio_integrity_alloc - Allocate integrity payload and attach it to bio |
74 | * @bio: bio to attach integrity metadata to | 74 | * @bio: bio to attach integrity metadata to |
75 | * @gfp_mask: Memory allocation mask | 75 | * @gfp_mask: Memory allocation mask |
76 | * @nr_vecs: Number of integrity metadata scatter-gather elements | 76 | * @nr_vecs: Number of integrity metadata scatter-gather elements |
77 | * @bs: bio_set to allocate from | ||
78 | * | 77 | * |
79 | * Description: This function prepares a bio for attaching integrity | 78 | * Description: This function prepares a bio for attaching integrity |
80 | * metadata. nr_vecs specifies the maximum number of pages containing | 79 | * metadata. nr_vecs specifies the maximum number of pages containing |
81 | * integrity metadata that can be attached. | 80 | * integrity metadata that can be attached. |
82 | */ | 81 | */ |
83 | struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *bio, | 82 | struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio, |
84 | gfp_t gfp_mask, | 83 | gfp_t gfp_mask, |
85 | unsigned int nr_vecs, | 84 | unsigned int nr_vecs) |
86 | struct bio_set *bs) | ||
87 | { | 85 | { |
88 | struct bio_integrity_payload *bip; | 86 | struct bio_integrity_payload *bip; |
89 | unsigned int idx = vecs_to_idx(nr_vecs); | 87 | unsigned int idx = vecs_to_idx(nr_vecs); |
88 | struct bio_set *bs = bio->bi_pool; | ||
89 | |||
90 | if (!bs) | ||
91 | bs = fs_bio_set; | ||
90 | 92 | ||
91 | BUG_ON(bio == NULL); | 93 | BUG_ON(bio == NULL); |
92 | bip = NULL; | 94 | bip = NULL; |
@@ -114,37 +116,22 @@ struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *bio, | |||
114 | 116 | ||
115 | return bip; | 117 | return bip; |
116 | } | 118 | } |
117 | EXPORT_SYMBOL(bio_integrity_alloc_bioset); | ||
118 | |||
119 | /** | ||
120 | * bio_integrity_alloc - Allocate integrity payload and attach it to bio | ||
121 | * @bio: bio to attach integrity metadata to | ||
122 | * @gfp_mask: Memory allocation mask | ||
123 | * @nr_vecs: Number of integrity metadata scatter-gather elements | ||
124 | * | ||
125 | * Description: This function prepares a bio for attaching integrity | ||
126 | * metadata. nr_vecs specifies the maximum number of pages containing | ||
127 | * integrity metadata that can be attached. | ||
128 | */ | ||
129 | struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio, | ||
130 | gfp_t gfp_mask, | ||
131 | unsigned int nr_vecs) | ||
132 | { | ||
133 | return bio_integrity_alloc_bioset(bio, gfp_mask, nr_vecs, fs_bio_set); | ||
134 | } | ||
135 | EXPORT_SYMBOL(bio_integrity_alloc); | 119 | EXPORT_SYMBOL(bio_integrity_alloc); |
136 | 120 | ||
137 | /** | 121 | /** |
138 | * bio_integrity_free - Free bio integrity payload | 122 | * bio_integrity_free - Free bio integrity payload |
139 | * @bio: bio containing bip to be freed | 123 | * @bio: bio containing bip to be freed |
140 | * @bs: bio_set this bio was allocated from | ||
141 | * | 124 | * |
142 | * Description: Used to free the integrity portion of a bio. Usually | 125 | * Description: Used to free the integrity portion of a bio. Usually |
143 | * called from bio_free(). | 126 | * called from bio_free(). |
144 | */ | 127 | */ |
145 | void bio_integrity_free(struct bio *bio, struct bio_set *bs) | 128 | void bio_integrity_free(struct bio *bio) |
146 | { | 129 | { |
147 | struct bio_integrity_payload *bip = bio->bi_integrity; | 130 | struct bio_integrity_payload *bip = bio->bi_integrity; |
131 | struct bio_set *bs = bio->bi_pool; | ||
132 | |||
133 | if (!bs) | ||
134 | bs = fs_bio_set; | ||
148 | 135 | ||
149 | BUG_ON(bip == NULL); | 136 | BUG_ON(bip == NULL); |
150 | 137 | ||
@@ -730,19 +717,18 @@ EXPORT_SYMBOL(bio_integrity_split); | |||
730 | * @bio: New bio | 717 | * @bio: New bio |
731 | * @bio_src: Original bio | 718 | * @bio_src: Original bio |
732 | * @gfp_mask: Memory allocation mask | 719 | * @gfp_mask: Memory allocation mask |
733 | * @bs: bio_set to allocate bip from | ||
734 | * | 720 | * |
735 | * Description: Called to allocate a bip when cloning a bio | 721 | * Description: Called to allocate a bip when cloning a bio |
736 | */ | 722 | */ |
737 | int bio_integrity_clone(struct bio *bio, struct bio *bio_src, | 723 | int bio_integrity_clone(struct bio *bio, struct bio *bio_src, |
738 | gfp_t gfp_mask, struct bio_set *bs) | 724 | gfp_t gfp_mask) |
739 | { | 725 | { |
740 | struct bio_integrity_payload *bip_src = bio_src->bi_integrity; | 726 | struct bio_integrity_payload *bip_src = bio_src->bi_integrity; |
741 | struct bio_integrity_payload *bip; | 727 | struct bio_integrity_payload *bip; |
742 | 728 | ||
743 | BUG_ON(bip_src == NULL); | 729 | BUG_ON(bip_src == NULL); |
744 | 730 | ||
745 | bip = bio_integrity_alloc_bioset(bio, gfp_mask, bip_src->bip_vcnt, bs); | 731 | bip = bio_integrity_alloc(bio, gfp_mask, bip_src->bip_vcnt); |
746 | 732 | ||
747 | if (bip == NULL) | 733 | if (bip == NULL) |
748 | return -EIO; | 734 | return -EIO; |
@@ -241,7 +241,7 @@ void bio_free(struct bio *bio, struct bio_set *bs) | |||
241 | bvec_free_bs(bs, bio->bi_io_vec, BIO_POOL_IDX(bio)); | 241 | bvec_free_bs(bs, bio->bi_io_vec, BIO_POOL_IDX(bio)); |
242 | 242 | ||
243 | if (bio_integrity(bio)) | 243 | if (bio_integrity(bio)) |
244 | bio_integrity_free(bio, bs); | 244 | bio_integrity_free(bio); |
245 | 245 | ||
246 | /* | 246 | /* |
247 | * If we have front padding, adjust the bio pointer before freeing | 247 | * If we have front padding, adjust the bio pointer before freeing |
@@ -341,7 +341,7 @@ EXPORT_SYMBOL(bio_alloc); | |||
341 | static void bio_kmalloc_destructor(struct bio *bio) | 341 | static void bio_kmalloc_destructor(struct bio *bio) |
342 | { | 342 | { |
343 | if (bio_integrity(bio)) | 343 | if (bio_integrity(bio)) |
344 | bio_integrity_free(bio, fs_bio_set); | 344 | bio_integrity_free(bio); |
345 | kfree(bio); | 345 | kfree(bio); |
346 | } | 346 | } |
347 | 347 | ||
@@ -480,7 +480,7 @@ struct bio *bio_clone(struct bio *bio, gfp_t gfp_mask) | |||
480 | if (bio_integrity(bio)) { | 480 | if (bio_integrity(bio)) { |
481 | int ret; | 481 | int ret; |
482 | 482 | ||
483 | ret = bio_integrity_clone(b, bio, gfp_mask, fs_bio_set); | 483 | ret = bio_integrity_clone(b, bio, gfp_mask); |
484 | 484 | ||
485 | if (ret < 0) { | 485 | if (ret < 0) { |
486 | bio_put(b); | 486 | bio_put(b); |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 26435890dc87..a11f74bc82d2 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -505,9 +505,8 @@ static inline struct bio *bio_list_get(struct bio_list *bl) | |||
505 | 505 | ||
506 | #define bio_integrity(bio) (bio->bi_integrity != NULL) | 506 | #define bio_integrity(bio) (bio->bi_integrity != NULL) |
507 | 507 | ||
508 | extern struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *, gfp_t, unsigned int, struct bio_set *); | ||
509 | extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int); | 508 | extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int); |
510 | extern void bio_integrity_free(struct bio *, struct bio_set *); | 509 | extern void bio_integrity_free(struct bio *); |
511 | extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int); | 510 | extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int); |
512 | extern int bio_integrity_enabled(struct bio *bio); | 511 | extern int bio_integrity_enabled(struct bio *bio); |
513 | extern int bio_integrity_set_tag(struct bio *, void *, unsigned int); | 512 | extern int bio_integrity_set_tag(struct bio *, void *, unsigned int); |
@@ -517,7 +516,7 @@ extern void bio_integrity_endio(struct bio *, int); | |||
517 | extern void bio_integrity_advance(struct bio *, unsigned int); | 516 | extern void bio_integrity_advance(struct bio *, unsigned int); |
518 | extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); | 517 | extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int); |
519 | extern void bio_integrity_split(struct bio *, struct bio_pair *, int); | 518 | extern void bio_integrity_split(struct bio *, struct bio_pair *, int); |
520 | extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t, struct bio_set *); | 519 | extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t); |
521 | extern int bioset_integrity_create(struct bio_set *, int); | 520 | extern int bioset_integrity_create(struct bio_set *, int); |
522 | extern void bioset_integrity_free(struct bio_set *); | 521 | extern void bioset_integrity_free(struct bio_set *); |
523 | extern void bio_integrity_init(void); | 522 | extern void bio_integrity_init(void); |
@@ -549,13 +548,13 @@ static inline int bio_integrity_prep(struct bio *bio) | |||
549 | return 0; | 548 | return 0; |
550 | } | 549 | } |
551 | 550 | ||
552 | static inline void bio_integrity_free(struct bio *bio, struct bio_set *bs) | 551 | static inline void bio_integrity_free(struct bio *bio) |
553 | { | 552 | { |
554 | return; | 553 | return; |
555 | } | 554 | } |
556 | 555 | ||
557 | static inline int bio_integrity_clone(struct bio *bio, struct bio *bio_src, | 556 | static inline int bio_integrity_clone(struct bio *bio, struct bio *bio_src, |
558 | gfp_t gfp_mask, struct bio_set *bs) | 557 | gfp_t gfp_mask) |
559 | { | 558 | { |
560 | return 0; | 559 | return 0; |
561 | } | 560 | } |