Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com> --- drivers/md/dm-ploop-bat.c | 2 +- drivers/md/dm-ploop-cmd.c | 12 ++++++------ drivers/md/dm-ploop-map.c | 2 +- drivers/md/dm-ploop-target.c | 2 +- drivers/md/dm-ploop.h | 11 ++++++++--- 5 files changed, 17 insertions(+), 12 deletions(-)
diff --git a/drivers/md/dm-ploop-bat.c b/drivers/md/dm-ploop-bat.c index 6ac660ab8b8f..04698d99a67a 100644 --- a/drivers/md/dm-ploop-bat.c +++ b/drivers/md/dm-ploop-bat.c @@ -156,7 +156,7 @@ static int parse_bat_entries(struct ploop *ploop, map_index_t *bat_entries, if (bat_entries[i] == BAT_ENTRY_NONE) return -EINVAL; if (bat_entries[i]) { - bat_levels[i] = BAT_LEVEL_TOP; + bat_levels[i] = nr_deltas; /* See top_level() */ /* Cluster may refer out holes_bitmap after shrinking */ if (bat_entries[i] < ploop->hb_nr) ploop_hole_clear_bit(bat_entries[i], ploop); diff --git a/drivers/md/dm-ploop-cmd.c b/drivers/md/dm-ploop-cmd.c index 57ab6a867db1..e150edc4136f 100644 --- a/drivers/md/dm-ploop-cmd.c +++ b/drivers/md/dm-ploop-cmd.c @@ -288,7 +288,7 @@ static int ploop_grow_relocate_cluster(struct ploop *ploop, /* Update local BAT copy */ write_lock_irq(&ploop->bat_rwlock); - WARN_ON(!try_update_bat_entry(ploop, cluster, BAT_LEVEL_TOP, new_dst)); + WARN_ON(!try_update_bat_entry(ploop, cluster, top_level(ploop), new_dst)); write_unlock_irq(&ploop->bat_rwlock); not_occupied: /* @@ -634,7 +634,7 @@ static void process_merge_latest_snapshot_cmd(struct ploop *ploop, /* * This adds cluster lk. Further write bios to *cluster will go * from ploop_map to kwork (because bat_levels[*cluster] is not - * BAT_LEVEL_TOP), so they will see the lk. + * top_level()), so they will see the lk. */ if (submit_cluster_cow(ploop, level, *cluster, dst_cluster, ploop_queue_deferred_cmd_wrapper, cmd)) { @@ -948,9 +948,9 @@ static void process_flip_upper_deltas(struct ploop *ploop, struct ploop_cmd *cmd if (bat_entries[i] == BAT_ENTRY_NONE) continue; if (md->bat_levels[i] == level) { - md->bat_levels[i] = BAT_LEVEL_TOP; + md->bat_levels[i] = top_level(ploop); clear_bit(bat_entries[i], holes_bitmap); - } else if (md->bat_levels[i] == BAT_LEVEL_TOP) { + } else if (md->bat_levels[i] == top_level(ploop)) { md->bat_levels[i] = level; } } @@ -1003,7 +1003,7 @@ static void process_tracking_start(struct ploop *ploop, struct ploop_cmd *cmd) for (; i <= end; i++) { dst_cluster = bat_entries[i]; if (dst_cluster == BAT_ENTRY_NONE || - md->bat_levels[i] != BAT_LEVEL_TOP) + md->bat_levels[i] != top_level(ploop)) continue; if (WARN_ON(dst_cluster >= tb_nr)) { ret = -EIO; @@ -1065,7 +1065,7 @@ static unsigned int max_dst_cluster_in_top_delta(struct ploop *ploop) bat_entries = kmap_atomic(md->page); for (; i <= end; i++) { if (dst_cluster < bat_entries[i] && - md->bat_levels[i] == BAT_LEVEL_TOP) + md->bat_levels[i] == top_level(ploop)) dst_cluster = bat_entries[i]; } kunmap_atomic(bat_entries); diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c index 1e8a0a1561ce..4ad950afdda3 100644 --- a/drivers/md/dm-ploop-map.c +++ b/drivers/md/dm-ploop-map.c @@ -622,7 +622,7 @@ static void ploop_advance_local_after_bat_wb(struct ploop *ploop, if (success) { bat_entries[i] = dst_cluster[i]; - md->bat_levels[i] = BAT_LEVEL_TOP; + md->bat_levels[i] = top_level(ploop); } else { /* * Despite set_bit() is atomic, we take read_lock() diff --git a/drivers/md/dm-ploop-target.c b/drivers/md/dm-ploop-target.c index a14d0d6cab4f..8a2a5312195e 100644 --- a/drivers/md/dm-ploop-target.c +++ b/drivers/md/dm-ploop-target.c @@ -142,7 +142,7 @@ static int ploop_add_deltas_stack(struct ploop *ploop, char **argv, int argc) if (!argc) goto out; ret = -EINVAL; - if (argc > BAT_LEVEL_TOP - 1) + if (argc > BAT_LEVEL_MAX - 1) goto out; ret = -ENOMEM; diff --git a/drivers/md/dm-ploop.h b/drivers/md/dm-ploop.h index cee2a962802d..6644ef391791 100644 --- a/drivers/md/dm-ploop.h +++ b/drivers/md/dm-ploop.h @@ -100,7 +100,6 @@ struct ploop_cmd { /* We can't use 0 for unmapped clusters, since RAW image references 0 cluster */ #define BAT_ENTRY_NONE UINT_MAX -#define BAT_LEVEL_TOP U8_MAX #define CLEANUP_DELAY 20 #define PLOOP_INFLIGHT_TIMEOUT (60 * HZ) @@ -310,6 +309,12 @@ static inline bool whole_cluster(struct ploop *ploop, struct bio *bio) return !(bio_end_sector(bio) & ((1 << ploop->cluster_log) - 1)); } +#define BAT_LEVEL_MAX (U8_MAX - 1) +static inline u8 top_level(struct ploop *ploop) +{ + return ploop->nr_deltas; +} + static inline void ploop_hole_set_bit(unsigned long nr, struct ploop *ploop) { if (!WARN_ON_ONCE(nr >= ploop->hb_nr)) @@ -400,7 +405,7 @@ static inline bool cluster_is_in_top_delta(struct ploop *ploop, return false; dst_cluster = ploop_bat_entries(ploop, cluster, &level); - if (dst_cluster == BAT_ENTRY_NONE || level < BAT_LEVEL_TOP) + if (dst_cluster == BAT_ENTRY_NONE || level < top_level(ploop)) return false; return true; } @@ -420,7 +425,7 @@ static inline bool md_page_cluster_is_in_top_delta(struct ploop *ploop, bat_entries = kmap_atomic(md->page); if (bat_entries[cluster] == BAT_ENTRY_NONE || - md->bat_levels[cluster] < BAT_LEVEL_TOP) + md->bat_levels[cluster] < top_level(ploop)) ret = false; kunmap_atomic(bat_entries); return ret; _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel