Skip to content

Commit

Permalink
dm snapshot: permit invalid activation
Browse files Browse the repository at this point in the history
Allow invalid snapshots to be activated instead of failing.

This allows userspace to reinstate any given snapshot state - for
example after an unscheduled reboot - and clean up the invalid snapshot
at its leisure.

Cc: stable@kernel.org
Signed-off-by: Milan Broz <mbroz@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Milan Broz authored and Linus Torvalds committed Jul 12, 2007
1 parent fcac03a commit 0764147
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 6 deletions.
11 changes: 6 additions & 5 deletions drivers/md/dm-exception-store.c
Original file line number Diff line number Diff line change
Expand Up @@ -489,17 +489,18 @@ static int persistent_read_metadata(struct exception_store *store)
/*
* Sanity checks.
*/
if (!ps->valid) {
DMWARN("snapshot is marked invalid");
return -EINVAL;
}

if (ps->version != SNAPSHOT_DISK_VERSION) {
DMWARN("unable to handle snapshot disk version %d",
ps->version);
return -EINVAL;
}

/*
* Metadata are valid, but snapshot is invalidated
*/
if (!ps->valid)
return 1;

/*
* Read the metadata.
*/
Expand Down
5 changes: 4 additions & 1 deletion drivers/md/dm-snap.c
Original file line number Diff line number Diff line change
Expand Up @@ -523,9 +523,12 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)

/* Metadata must only be loaded into one table at once */
r = s->store.read_metadata(&s->store);
if (r) {
if (r < 0) {
ti->error = "Failed to read snapshot metadata";
goto bad6;
} else if (r > 0) {
s->valid = 0;
DMWARN("Snapshot is marked invalid.");
}

bio_list_init(&s->queued_bios);
Expand Down

0 comments on commit 0764147

Please sign in to comment.