diff options
author | Jeff Mahoney <jeffm@suse.com> | 2016-09-20 08:50:21 -0400 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2016-09-26 18:08:44 +0200 |
commit | cea67ab92d3d4da9f2b4141d87cb8664757daca0 (patch) | |
tree | 75f6575c0d9aecef3d981ff0083222b2c4932be9 /fs/btrfs/root-tree.c | |
parent | 02794222c4132ac003e7281fb71f4ec1645ffc87 (diff) | |
download | blackbird-op-linux-cea67ab92d3d4da9f2b4141d87cb8664757daca0.tar.gz blackbird-op-linux-cea67ab92d3d4da9f2b4141d87cb8664757daca0.zip |
btrfs: clean the old superblocks before freeing the device
btrfs_rm_device frees the block device but then re-opens it using
the saved device name. A race exists between the close and the
re-open that allows the block size to be changed. The result
is getting stuck forever in the reclaim loop in __getblk_slow.
This patch moves the superblock cleanup before closing the block
device, which is also consistent with other callers. We also don't
need a private copy of dev_name as the whole routine operates under
the uuid_mutex.
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/root-tree.c')
0 files changed, 0 insertions, 0 deletions