Skip to content

Commit

Permalink
dm thin: synchronize the pool mode during suspend
Browse files Browse the repository at this point in the history
Commit b533065 ("dm thin: handle metadata failures more consistently")
increased potential for the pool's mode to be changed in response to
metadata operation failures.

When the pool mode is changed it isn't synchronized with the mode in
pool_features stored in the target's context (ti->private) that is used
as the basis for (re)establishing the pool mode during resume via
bind_control_target.

It is important that we synchronize the pool mode when it is changed
otherwise the pool may experience and unexpected mode transition on the
next resume (especially if there was no new table load).

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Acked-by: Joe Thornber <ejt@redhat.com>
  • Loading branch information
Mike Snitzer committed Mar 4, 2014
1 parent 2c94582 commit cdc2b41
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions drivers/md/dm-thin.c
Original file line number Diff line number Diff line change
Expand Up @@ -1402,6 +1402,7 @@ static enum pool_mode get_pool_mode(struct pool *pool)
static void set_pool_mode(struct pool *pool, enum pool_mode new_mode)
{
int r;
struct pool_c *pt = pool->ti->private;
enum pool_mode old_mode = pool->pf.mode;

switch (new_mode) {
Expand Down Expand Up @@ -1448,6 +1449,11 @@ static void set_pool_mode(struct pool *pool, enum pool_mode new_mode)
}

pool->pf.mode = new_mode;
/*
* The pool mode may have changed, sync it so bind_control_target()
* doesn't cause an unexpected mode transition on resume.
*/
pt->adjusted_pf.mode = new_mode;
}

/*
Expand Down

0 comments on commit cdc2b41

Please sign in to comment.