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>
このコミットが含まれているのは:
@@ -96,7 +96,12 @@ struct btrfs_fs_devices {
|
||||
u64 rw_devices;
|
||||
u64 total_rw_bytes;
|
||||
struct block_device *latest_bdev;
|
||||
/* all of the devices in the FS */
|
||||
|
||||
/* all of the devices in the FS, protected by a mutex
|
||||
* so we can safely walk it to write out the supers without
|
||||
* worrying about add/remove by the multi-device code
|
||||
*/
|
||||
struct mutex device_list_mutex;
|
||||
struct list_head devices;
|
||||
|
||||
/* devices not currently being allocated */
|
||||
|
新しいイシューから参照
ユーザーをブロックする