Btrfs: avoid races between super writeout and device list updates
authorChris Mason <chris.mason@oracle.com>
Wed, 10 Jun 2009 19:17:02 +0000 (15:17 -0400)
committerChris Mason <chris.mason@oracle.com>
Wed, 10 Jun 2009 19:17:02 +0000 (15:17 -0400)
commite5e9a5206a171b2c467e494aebcdcf70c47289bc
treed9a6a89cccbd084db923f1661b52d5a1dfdb83fe
parent7df336ec1266dccbb253bac52c529d3dcc7c22d0
Btrfs: avoid races between super writeout and device list updates

On multi-device filesystems, btrfs writes supers to all of the devices
before considering a sync complete.  There wasn't any additional
locking between super writeout and the device list management code
because device management was done inside a transaction and
super writeout only happened  with no transation writers running.

With the btrfs fsync log and other async transaction updates, this
has been racey for some time.  This adds a mutex to protect
the device list.  The existing volume mutex could not be reused due to
transaction lock ordering requirements.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/disk-io.c
fs/btrfs/volumes.c
fs/btrfs/volumes.h