Skip to content

Commit

Permalink
dm log: use flush callback fn
Browse files Browse the repository at this point in the history
Call the flush callback from the log.

If flush failed, we have no alternative but to mark the whole log as dirty.
Also we set the variable flush_failed to prevent any bits ever being marked as
clean again.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
  • Loading branch information
Mikulas Patocka authored and Alasdair G Kergon committed Dec 10, 2009
1 parent 87a8f24 commit 076010e
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions drivers/md/dm-log.c
Original file line number Diff line number Diff line change
Expand Up @@ -677,13 +677,26 @@ static int core_flush(struct dm_dirty_log *log)

static int disk_flush(struct dm_dirty_log *log)
{
int r;
struct log_c *lc = (struct log_c *) log->context;
int r, i;
struct log_c *lc = log->context;

/* only write if the log has changed */
if (!lc->touched_cleaned && !lc->touched_dirtied)
return 0;

if (lc->touched_cleaned && log->flush_callback_fn &&
log->flush_callback_fn(lc->ti)) {
/*
* At this point it is impossible to determine which
* regions are clean and which are dirty (without
* re-reading the log off disk). So mark all of them
* dirty.
*/
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);
Expand Down

0 comments on commit 076010e

Please sign in to comment.