Commit 927ffe7c authored by Mark McLoughlin's avatar Mark McLoughlin Committed by Linus Torvalds
Browse files

[PATCH] dm snapshot: fix metadata writing when suspending



When suspending a device-mapper device, dm_suspend() sleeps until all
necessary I/O is completed.  This state is triggered by a callback from
persistent_commit().  But some I/O can still be issued *after* the callback
(to prepare the next metadata area for use if the current one is full).  This
patch delays the callback until after that I/O is complete.

Signed-off-by: default avatarMark McLoughlin <markmc@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent e4ff496d
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -536,14 +536,6 @@ static void persistent_commit(struct exception_store *store,
		if (r)
			ps->valid = 0;

		for (i = 0; i < ps->callback_count; i++) {
			cb = ps->callbacks + i;
			cb->callback(cb->context, r == 0 ? 1 : 0);
		}

		ps->callback_count = 0;
	}

		/*
		 * Have we completely filled the current area ?
		 */
@@ -553,6 +545,14 @@ static void persistent_commit(struct exception_store *store,
			if (r)
				ps->valid = 0;
		}

		for (i = 0; i < ps->callback_count; i++) {
			cb = ps->callbacks + i;
			cb->callback(cb->context, r == 0 ? 1 : 0);
		}

		ps->callback_count = 0;
	}
}

static void persistent_drop(struct exception_store *store)