Commit 4d020b3a authored by Mike Snitzer's avatar Mike Snitzer

dm writecache: factor out writecache_map_remap_origin()

Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent cdd4d783
...@@ -1301,6 +1301,19 @@ enum wc_map_op { ...@@ -1301,6 +1301,19 @@ enum wc_map_op {
WC_MAP_ERROR, 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) static enum wc_map_op writecache_map_read(struct dm_writecache *wc, struct bio *bio)
{ {
enum wc_map_op map_op; enum wc_map_op map_op;
...@@ -1323,13 +1336,7 @@ static enum wc_map_op writecache_map_read(struct dm_writecache *wc, struct bio * ...@@ -1323,13 +1336,7 @@ static enum wc_map_op writecache_map_read(struct dm_writecache *wc, struct bio *
map_op = WC_MAP_REMAP; map_op = WC_MAP_REMAP;
} }
} else { } else {
if (e) { map_op = writecache_map_remap_origin(wc, bio, 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;
} }
return map_op; return map_op;
...@@ -1417,14 +1424,7 @@ static enum wc_map_op writecache_map_write(struct dm_writecache *wc, struct bio ...@@ -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) { if (!WC_MODE_PMEM(wc) && !found_entry) {
direct_write: direct_write:
e = writecache_find_entry(wc, bio->bi_iter.bi_sector, WFE_RETURN_FOLLOWING); e = writecache_find_entry(wc, bio->bi_iter.bi_sector, WFE_RETURN_FOLLOWING);
if (e) { return writecache_map_remap_origin(wc, bio, 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;
} }
writecache_wait_on_freelist(wc); writecache_wait_on_freelist(wc);
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment