The following commit has been merged in the linux branch: commit 4c6fff445d7aa753957856278d4d93bcad6e2c14 Author: Mikulas Patocka mpatocka@redhat.com Date: Fri Oct 16 23:18:16 2009 +0100
dm snapshot: lock snapshot while supplying status
This patch locks the snapshot when returning status. It fixes a race when it could return an invalid number of free chunks if someone was simultaneously modifying it.
Cc: stable@kernel.org Signed-off-by: Mikulas Patocka mpatocka@redhat.com Signed-off-by: Alasdair G Kergon agk@redhat.com
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 9cb392b..9bc814a 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c @@ -1152,6 +1152,8 @@ static int snapshot_status(struct dm_target *ti, status_type_t type, unsigned sz = 0; struct dm_snapshot *snap = ti->private;
+ down_write(&snap->lock); + switch (type) { case STATUSTYPE_INFO: if (!snap->valid) @@ -1183,6 +1185,8 @@ static int snapshot_status(struct dm_target *ti, status_type_t type, break; }
+ up_write(&snap->lock); + return 0; }