[PATCH] md: factor out cloned bio cleanup into md_free_bio()

Abd-Alrhman Masalkhi <[email protected]>
Newsgroups gmane.linux.raid,gmane.linux.kernel
Message-ID <[email protected]>
Refactor duplicated cloned bio completion and cleanup logic into
a new helper, md_free_bio().

md_end_clone_io() and md_free_cloned_bio() previously shared nearly
identical teardown code, differing only in whether the original
bio’s endio callback was invoked. Introduce a boolean parameter
orig_endio to control this behavior and consolidate the logic.

Signed-off-by: Abd-Alrhman Masalkhi <[email protected]>
---
 drivers/md/md.c | 26 +++++++++-----------------
 1 file changed, 9 insertions(+), 17 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index ac71640ff3a8..707d605fee61 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -9208,7 +9208,7 @@ static void md_bitmap_end(struct mddev *mddev, struct md_io_clone *md_io_clone)
 	fn(mddev, md_io_clone->offset, md_io_clone->sectors);
 }
 
-static void md_end_clone_io(struct bio *bio)
+static void md_free_bio(struct bio *bio, bool orig_endio)
 {
 	struct md_io_clone *md_io_clone = bio->bi_private;
 	struct bio *orig_bio = md_io_clone->orig_bio;
@@ -9224,10 +9224,16 @@ static void md_end_clone_io(struct bio *bio)
 		bio_end_io_acct(orig_bio, md_io_clone->start_time);
 
 	bio_put(bio);
-	bio_endio(orig_bio);
+	if (orig_endio)
+		bio_endio(orig_bio);
 	percpu_ref_put(&mddev->active_io);
 }
 
+static void md_end_clone_io(struct bio *bio)
+{
+	md_free_bio(bio, true);
+}
+
 static void md_clone_bio(struct mddev *mddev, struct bio **bio)
 {
 	struct block_device *bdev = (*bio)->bi_bdev;
@@ -9262,21 +9268,7 @@ EXPORT_SYMBOL_GPL(md_account_bio);
 
 void md_free_cloned_bio(struct bio *bio)
 {
-	struct md_io_clone *md_io_clone = bio->bi_private;
-	struct bio *orig_bio = md_io_clone->orig_bio;
-	struct mddev *mddev = md_io_clone->mddev;
-
-	if (bio_data_dir(orig_bio) == WRITE && md_bitmap_enabled(mddev, false))
-		md_bitmap_end(mddev, md_io_clone);
-
-	if (bio->bi_status && !orig_bio->bi_status)
-		orig_bio->bi_status = bio->bi_status;
-
-	if (md_io_clone->start_time)
-		bio_end_io_acct(orig_bio, md_io_clone->start_time);
-
-	bio_put(bio);
-	percpu_ref_put(&mddev->active_io);
+	md_free_bio(bio, false);
 }
 EXPORT_SYMBOL_GPL(md_free_cloned_bio);
 
-- 
2.43.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.