Lines Matching refs:dmap

71  * we use a second set of bitmaps, the dmap (dirty bitmap), which includes two
87 * and dmap.
89 * During a metadata commit we scan dmap->dirty_words and dmap->dirty_regions
93 * We use the helper dmap->dirty_words bitmap, which is smaller than the
107 * swap the currently used dmap with the unused one. This allows the metadata
127 struct dirty_map dmap[2];
473 static int __dirty_map_init(struct dirty_map *dmap, unsigned long nr_words,
476 dmap->changed = 0;
478 dmap->dirty_words = kvzalloc(bitmap_size(nr_words), GFP_KERNEL);
479 if (!dmap->dirty_words)
482 dmap->dirty_regions = kvzalloc(bitmap_size(nr_regions), GFP_KERNEL);
483 if (!dmap->dirty_regions) {
484 kvfree(dmap->dirty_words);
491 static void __dirty_map_exit(struct dirty_map *dmap)
493 kvfree(dmap->dirty_words);
494 kvfree(dmap->dirty_regions);
499 if (__dirty_map_init(&cmd->dmap[0], cmd->nr_words, cmd->nr_regions)) {
504 if (__dirty_map_init(&cmd->dmap[1], cmd->nr_words, cmd->nr_regions)) {
506 __dirty_map_exit(&cmd->dmap[0]);
510 cmd->current_dmap = &cmd->dmap[0];
518 __dirty_map_exit(&cmd->dmap[0]);
519 __dirty_map_exit(&cmd->dmap[1]);
742 static int __flush_dmap(struct dm_clone_metadata *cmd, struct dirty_map *dmap)
749 word = find_next_bit(dmap->dirty_words, cmd->nr_words, word);
754 r = __update_metadata_word(cmd, dmap->dirty_regions, word);
759 __clear_bit(word, dmap->dirty_words);
770 dmap->changed = 0;
779 struct dirty_map *dmap, *next_dmap;
789 dmap = cmd->current_dmap;
792 next_dmap = (dmap == &cmd->dmap[0]) ? &cmd->dmap[1] : &cmd->dmap[0];
809 cmd->committing_dmap = dmap;
832 /* Clear committing dmap */
844 struct dirty_map *dmap;
862 dmap = cmd->current_dmap;
864 __set_bit(word, dmap->dirty_words);
865 __set_bit(region_nr, dmap->dirty_regions);
867 dmap->changed = 1;
879 struct dirty_map *dmap;
896 dmap = cmd->current_dmap;
900 __set_bit(word, dmap->dirty_words);
901 __set_bit(region_nr, dmap->dirty_regions);
903 dmap->changed = 1;
944 r = cmd->dmap[0].changed || cmd->dmap[1].changed;