[dm-devel] [PATCH 2/2] dm: additional cleanup for clone_bio

Mike Snitzer snitzer at redhat.com
Fri Dec 7 23:20:09 UTC 2012


Port split up of clone_bio as originally coded by Joe (prior to Mikulas'
per-bio patches).  In doing so it became clear there is no need to pass
bio_set to clone_bio.

Signed-off-by: Mike Snitzer <snitzer at redhat.com>
Cc: Joe Thornber <ejt at redhat.com>
---
 drivers/md/dm.c |   62 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 36 insertions(+), 26 deletions(-)

diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 506c73a..739fd2b 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1061,23 +1061,23 @@ static void split_bvec(struct dm_target_io *tio, struct bio *bio,
 	}
 }
 
-/*
- * Creates a bio that consists of range of complete bvecs.
- */
-static void clone_bio(struct dm_target_io *tio, struct bio *bio,
-		      sector_t sector, unsigned short idx,
-		      unsigned short bv_count, unsigned int len,
-		      struct bio_set *bs)
+static void bio_setup_sector(struct bio *bio, sector_t sector, sector_t len)
 {
-	struct bio *clone = &tio->clone;
+	bio->bi_sector = sector;
+	bio->bi_size = to_bytes(len);
+}
 
-	__bio_clone(clone, bio);
-	clone->bi_sector = sector;
-	clone->bi_idx = idx;
-	clone->bi_vcnt = idx + bv_count;
-	clone->bi_size = to_bytes(len);
-	clone->bi_flags &= ~(1 << BIO_SEG_VALID);
+static void bio_setup_bv(struct bio *bio, unsigned short idx,
+			 unsigned short bv_count)
+{
+	bio->bi_idx = idx;
+	bio->bi_vcnt = idx + bv_count;
+	bio->bi_flags &= ~(1 << BIO_SEG_VALID);
+}
 
+static void clone_bio_integrity(struct bio *bio, struct bio *clone,
+				unsigned short idx, unsigned int len)
+{
 	if (bio_integrity(bio)) {
 		bio_integrity_clone(clone, bio, GFP_NOIO);
 
@@ -1087,6 +1087,21 @@ static void clone_bio(struct dm_target_io *tio, struct bio *bio,
 	}
 }
 
+/*
+ * Creates a bio that consists of range of complete bvecs.
+ */
+static void clone_bio(struct dm_target_io *tio, struct bio *bio,
+		      sector_t sector, unsigned short idx,
+		      unsigned short bv_count, unsigned int len)
+{
+	struct bio *clone = &tio->clone;
+
+	__bio_clone(clone, bio);
+	bio_setup_sector(clone, sector, len);
+	bio_setup_bv(clone, idx, bv_count);
+	clone_bio_integrity(bio, clone, idx, len);
+}
+
 static struct dm_target_io *alloc_tio(struct clone_info *ci,
 				      struct dm_target *ti, int nr_iovecs)
 {
@@ -1131,13 +1146,9 @@ static void __issue_target_request(struct clone_info *ci, struct dm_target *ti,
 	 * ci->bio->bi_max_vecs is BIO_INLINE_VECS anyway, for both flush
 	 * and discard, so no need for concern about wasted bvec allocations.
 	 */
-
-	 __bio_clone(clone, ci->bio);
-	if (len) {
-		clone->bi_sector = ci->sector;
-		clone->bi_size = to_bytes(len);
-	}
-
+	__bio_clone(clone, ci->bio);
+	if (len)
+		bio_setup_sector(clone, ci->sector, len);
 	__map_bio(ti, tio);
 }
 
@@ -1165,7 +1176,7 @@ static int __clone_and_map_empty_flush(struct clone_info *ci)
 static void __issue_bio_to_target(struct clone_info *ci, struct dm_target *ti,
 				  struct bio *bio, sector_t sector,
 				  unsigned short idx, unsigned bv_count,
-				  unsigned len, struct bio_set *bs)
+				  unsigned len)
 {
 	unsigned i, num_duplicates = num_duplicate_bios_needed(ti, bio);
 	struct dm_target_io *tio;
@@ -1173,7 +1184,7 @@ static void __issue_bio_to_target(struct clone_info *ci, struct dm_target *ti,
 	for (i = 0; i < num_duplicates; i++) {
 		tio = alloc_tio(ci, ti, bio->bi_max_vecs);
 		tio->target_request_nr = i;
-		clone_bio(tio, bio, sector, idx, bv_count, len, bs);
+		clone_bio(tio, bio, sector, idx, bv_count, len);
 		__map_bio(ti, tio);
 	}
 }
@@ -1203,8 +1214,7 @@ static void __clone_and_map_simple(struct clone_info *ci, struct dm_target *ti)
 	struct bio *bio = ci->bio;
 
 	__issue_bio_to_target(ci, ti, bio, ci->sector, ci->idx,
-			      bio->bi_vcnt - ci->idx, ci->sector_count,
-			      ci->md->bs);
+			      bio->bi_vcnt - ci->idx, ci->sector_count);
 	ci->sector_count = 0;
 }
 
@@ -1282,7 +1292,7 @@ static int __clone_and_map(struct clone_info *ci)
 		}
 
 		__issue_bio_to_target(ci, ti, bio, ci->sector, ci->idx,
-				      i - ci->idx, len, ci->md->bs);
+				      i - ci->idx, len);
 
 		ci->sector += len;
 		ci->sector_count -= len;
-- 
1.7.1




More information about the dm-devel mailing list