Blob Blame History Raw
From 4d020b3a290707b19a3974fe8bc356f0b01b6928 Mon Sep 17 00:00:00 2001
From: Mike Snitzer <snitzer@redhat.com>
Date: Mon, 12 Jul 2021 16:58:49 -0400
Subject: [PATCH] dm writecache: factor out writecache_map_remap_origin()
Git-commit: 4d020b3a290707b19a3974fe8bc356f0b01b6928
Patch-mainline: v5.15-rc1
References: jsc#PED-2765

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Coly Li <colyli@suse.de>

---
 drivers/md/dm-writecache.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/md/dm-writecache.c b/drivers/md/dm-writecache.c
index 53076c7f4a34..2a920e95975a 100644
--- a/drivers/md/dm-writecache.c
+++ b/drivers/md/dm-writecache.c
@@ -1301,6 +1301,19 @@ enum wc_map_op {
 	WC_MAP_ERROR,
 };
 
+static enum wc_map_op writecache_map_remap_origin(struct dm_writecache *wc, struct bio *bio,
+						  struct wc_entry *e)
+{
+	if (e) {
+		sector_t next_boundary =
+			read_original_sector(wc, e) - bio->bi_iter.bi_sector;
+		if (next_boundary < bio->bi_iter.bi_size >> SECTOR_SHIFT)
+			dm_accept_partial_bio(bio, next_boundary);
+	}
+
+	return WC_MAP_REMAP_ORIGIN;
+}
+
 static enum wc_map_op writecache_map_read(struct dm_writecache *wc, struct bio *bio)
 {
 	enum wc_map_op map_op;
@@ -1323,13 +1336,7 @@ static enum wc_map_op writecache_map_read(struct dm_writecache *wc, struct bio *
 			map_op = WC_MAP_REMAP;
 		}
 	} else {
-		if (e) {
-			sector_t next_boundary =
-				read_original_sector(wc, e) - bio->bi_iter.bi_sector;
-			if (next_boundary < bio->bi_iter.bi_size >> SECTOR_SHIFT)
-				dm_accept_partial_bio(bio, next_boundary);
-		}
-		map_op = WC_MAP_REMAP_ORIGIN;
+		map_op = writecache_map_remap_origin(wc, bio, e);
 	}
 
 	return map_op;
@@ -1417,14 +1424,7 @@ static enum wc_map_op writecache_map_write(struct dm_writecache *wc, struct bio
 			if (!WC_MODE_PMEM(wc) && !found_entry) {
 direct_write:
 				e = writecache_find_entry(wc, bio->bi_iter.bi_sector, WFE_RETURN_FOLLOWING);
-				if (e) {
-					sector_t next_boundary = read_original_sector(wc, e) - bio->bi_iter.bi_sector;
-					BUG_ON(!next_boundary);
-					if (next_boundary < bio->bi_iter.bi_size >> SECTOR_SHIFT) {
-						dm_accept_partial_bio(bio, next_boundary);
-					}
-				}
-				return WC_MAP_REMAP_ORIGIN;
+				return writecache_map_remap_origin(wc, bio, e);
 			}
 			writecache_wait_on_freelist(wc);
 			continue;
-- 
2.35.3