Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1415148
| From | Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 4.5 118/128] btrfs: fix lock dep warning move scratch super outside of chunk_mutex |
| Date | 2016-06-06 16:40 +0200 |
| Message-ID | <rH3R9-68Z-73@gated-at.bofh.it> (permalink) |
| References | <rGOIq-4dq-17@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
4.5-stable review patch. If anyone has any objections, please let me know.
------------------
From: Anand Jain <anand.jain@oracle.com>
commit 48b3b9d401ec86899a52003b37331190a35a81a6 upstream.
Move scratch super outside of the chunk lock to avoid below
lockdep warning. The better place to scratch super is in
the function btrfs_rm_dev_replace_free_srcdev() just before
free_device, which is outside of the chunk lock as well.
To reproduce:
(fresh boot)
mkfs.btrfs -f -draid5 -mraid5 /dev/sdc /dev/sdd /dev/sde
mount /dev/sdc /btrfs
dd if=/dev/zero of=/btrfs/tf1 bs=4096 count=100
(get devmgt from https://github.com/asj/devmgt.git)
devmgt detach /dev/sde
dd if=/dev/zero of=/btrfs/tf1 bs=4096 count=100
sync
btrfs replace start -Brf 3 /dev/sdf /btrfs <--
devmgt attach host7
======================================================
[ INFO: possible circular locking dependency detected ]
4.6.0-rc2asj+ #1 Not tainted
---------------------------------------------------
btrfs/2174 is trying to acquire lock:
(sb_writers){.+.+.+}, at:
[<ffffffff812449b4>] __sb_start_write+0xb4/0xf0
but task is already holding lock:
(&fs_info->chunk_mutex){+.+.+.}, at:
[<ffffffffa05c5f55>] btrfs_dev_replace_finishing+0x145/0x980 [btrfs]
which lock already depends on the new lock.
Chain exists of:
sb_writers --> &fs_devs->device_list_mutex --> &fs_info->chunk_mutex
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&fs_info->chunk_mutex);
lock(&fs_devs->device_list_mutex);
lock(&fs_info->chunk_mutex);
lock(sb_writers);
---
fs/btrfs/volumes.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -1971,11 +1971,8 @@ void btrfs_rm_dev_replace_remove_srcdev(
if (srcdev->missing)
fs_devices->missing_devices--;
- if (srcdev->writeable) {
+ if (srcdev->writeable)
fs_devices->rw_devices--;
- /* zero out the old super if it is writable */
- btrfs_scratch_superblocks(srcdev->bdev, srcdev->name->str);
- }
if (srcdev->bdev)
fs_devices->open_devices--;
@@ -1986,6 +1983,10 @@ void btrfs_rm_dev_replace_free_srcdev(st
{
struct btrfs_fs_devices *fs_devices = srcdev->fs_devices;
+ if (srcdev->writeable) {
+ /* zero out the old super if it is writable */
+ btrfs_scratch_superblocks(srcdev->bdev, srcdev->name->str);
+ }
call_rcu(&srcdev->rcu, free_device);
/*
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 4.5 000/128] 4.5.7-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 01:00 +0200 [PATCH 4.5 126/128] Btrfs: fix unexpected return value of fiemap Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 127/128] btrfs: scrub: Set bbio to NULL before calling btrfs_map_block Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 098/128] PM / sleep: Handle failures in device_suspend_late() consistently Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 093/128] ext4: fix check of dqget() return value in ext4_ioctl_setproject() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 110/128] btrfs: allow balancing to dup with multi-device Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 128/128] btrfs: make state preallocation more speculative in __set_extent_bit Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 120/128] btrfs: fix int32 overflow in shrink_delalloc(). Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 095/128] ext4: address UBSAN warning in mb_find_order_for_block() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 102/128] gcov: disable tree-loop-im to reduce stack usage Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 097/128] nfs: avoid race that crashes nfs_init_commit Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 100/128] scripts/package/Makefile: rpmbuild add support of RPMOPTS Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 115/128] btrfs: add check to sysfs handler of label Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 096/128] ext4: silence UBSAN in ext4_mb_init() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 116/128] Btrfs: fix divide error upon chunks stripe_len Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 123/128] btrfs: pass the right error code to the btrfs_std_error Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 113/128] btrfs: fix lock dep warning, move scratch dev out of device_list_mutex and uuid_mutex Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 122/128] btrfs: fix memory leak during RAID 5/6 device replacement Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 109/128] Btrfs: do not create empty block group if we have allocated data Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 114/128] btrfs: add read-only check to sysfs handler of features Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 119/128] btrfs: add write protection to SET_FEATURES ioctl Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 117/128] Btrfs: remove BUG_ON()s in btrfs_map_block Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 111/128] btrfs: fix mixed block count of available space Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 118/128] btrfs: fix lock dep warning move scratch super outside of chunk_mutex Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 125/128] Btrfs: fix empty symlink after creating symlink and fsync parent dir Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 101/128] mm: thp: avoid false positive VM_BUG_ON_PAGE in page_move_anon_rmap() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:40 +0200 [PATCH 4.5 112/128] btrfs: avoid overflowing f_bfree Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-06-06 16:50 +0200 Re: [PATCH 4.5 000/128] 4.5.7-stable review Shuah Khan <shuahkh@osg.samsung.com> - 2016-06-06 19:30 +0200 Re: [PATCH 4.5 000/128] 4.5.7-stable review Guenter Roeck <linux@roeck-us.net> - 2016-06-07 15:40 +0200
csiph-web