int r;
        __le64 value;
 
-       if (!info->current_index_set)
+       if (!info->current_index_set || !info->dirty)
                return 0;
 
        value = cpu_to_le64(info->current_bits);
                return r;
 
        info->current_index_set = false;
+       info->dirty = false;
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(dm_bitset_flush);
        info->current_bits = le64_to_cpu(value);
        info->current_index_set = true;
        info->current_index = array_index;
+       info->dirty = false;
+
        return 0;
 }
 
                return r;
 
        set_bit(b, (unsigned long *) &info->current_bits);
+       info->dirty = true;
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(dm_bitset_set_bit);
                return r;
 
        clear_bit(b, (unsigned long *) &info->current_bits);
+       info->dirty = true;
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(dm_bitset_clear_bit);