===================================================================
@@ -679,6 +679,20 @@ static int disk_flush(struct dm_dirty_lo
if (!lc->touched_cleaned && !lc->touched_dirtied)
return 0;
+ if (lc->touched_cleaned && flush) {
+ if (flush(cookie)) {
+ /*
+ * At this point it is impossible to determine which
+ * regions are clean and which are dirty. So mark all
+ * of them dirty.
+ */
+ int i;
+ lc->flush_failed = 1;
+ for (i = 0; i < lc->region_count; i++)
+ log_clear_bit(lc, lc->clean_bits, i);
+ }
+ }
+
r = rw_header(lc, WRITE);
if (r)
fail_log_device(lc);
Call the flush callback from the log. If flush failed, we need to mark the whole log as dirty. Also, set variable flush_failed, which prevents any bits ever being marked as free. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> --- drivers/md/dm-log.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel