Filipe Manana
3b87d0c583
btrfs: fix sleep while in non-sleep context during qgroup removal
...
commit 0bb788300990d3eb5582d3301a720f846c78925c upstream.
While removing a qgroup's sysfs entry we end up taking the kernfs_mutex,
through kobject_del(), while holding the fs_info->qgroup_lock spinlock,
producing the following trace:
[821.843637] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:281
[821.843641] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 28214, name: podman
[821.843644] CPU: 3 PID: 28214 Comm: podman Tainted: G W 5.11.6 #15
[821.843646] Hardware name: Dell Inc. PowerEdge R330/084XW4, BIOS 2.11.0 12/08/2020
[821.843647] Call Trace:
[821.843650] dump_stack+0xa1/0xfb
[821.843656] ___might_sleep+0x144/0x160
[821.843659] mutex_lock+0x17/0x40
[821.843662] kernfs_remove_by_name_ns+0x1f/0x80
[821.843666] sysfs_remove_group+0x7d/0xe0
[821.843668] sysfs_remove_groups+0x28/0x40
[821.843670] kobject_del+0x2a/0x80
[821.843672] btrfs_sysfs_del_one_qgroup+0x2b/0x40 [btrfs]
[821.843685] __del_qgroup_rb+0x12/0x150 [btrfs]
[821.843696] btrfs_remove_qgroup+0x288/0x2a0 [btrfs]
[821.843707] btrfs_ioctl+0x3129/0x36a0 [btrfs]
[821.843717] ? __mod_lruvec_page_state+0x5e/0xb0
[821.843719] ? page_add_new_anon_rmap+0xbc/0x150
[821.843723] ? kfree+0x1b4/0x300
[821.843725] ? mntput_no_expire+0x55/0x330
[821.843728] __x64_sys_ioctl+0x5a/0xa0
[821.843731] do_syscall_64+0x33/0x70
[821.843733] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[821.843736] RIP: 0033:0x4cd3fb
[821.843741] RSP: 002b:000000c000906b20 EFLAGS: 00000206 ORIG_RAX: 0000000000000010
[821.843744] RAX: ffffffffffffffda RBX: 000000c000050000 RCX: 00000000004cd3fb
[821.843745] RDX: 000000c000906b98 RSI: 000000004010942a RDI: 000000000000000f
[821.843747] RBP: 000000c000907cd0 R08: 000000c000622901 R09: 0000000000000000
[821.843748] R10: 000000c000d992c0 R11: 0000000000000206 R12: 000000000000012d
[821.843749] R13: 000000000000012c R14: 0000000000000200 R15: 0000000000000049
Fix this by removing the qgroup sysfs entry while not holding the spinlock,
since the spinlock is only meant for protection of the qgroup rbtree.
Reported-by: Stuart Shelton <srcshelton@gmail.com>
Link: https://lore.kernel.org/linux-btrfs/7A5485BB-0628-419D-A4D3-27B1AF47E25A@gmail.com/
Fixes: 49e5fb46211de0 ("btrfs: qgroup: export qgroups in sysfs")
CC: stable@vger.kernel.org # 5.10+
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-03-30 14:31:53 +02:00
..
2020-11-13 22:15:59 +01:00
2019-04-29 19:02:44 +02:00
2020-03-23 17:01:51 +01:00
2020-03-23 17:01:51 +01:00
2021-03-04 11:38:29 +01:00
2021-03-04 11:38:29 +01:00
2021-03-09 11:11:11 +01:00
2021-03-09 11:11:11 +01:00
2020-11-05 13:02:05 +01:00
2020-03-23 17:01:55 +01:00
2021-01-17 14:16:54 +01:00
2020-07-27 12:55:21 +02:00
2020-03-23 17:01:39 +01:00
2020-10-07 12:06:55 +02:00
2020-10-07 12:06:55 +02:00
2021-03-25 09:04:06 +01:00
2021-03-09 11:11:11 +01:00
2020-10-07 12:06:52 +02:00
2020-07-27 12:55:36 +02:00
2021-03-11 14:17:22 +01:00
2020-03-23 17:01:53 +01:00
2021-03-04 11:38:30 +01:00
2021-03-04 11:38:30 +01:00
2021-01-17 14:16:54 +01:00
2019-11-18 12:46:52 +01:00
2019-04-29 19:02:50 +02:00
2021-01-19 18:27:24 +01:00
2020-04-20 17:43:42 +02:00
2021-01-27 11:55:06 +01:00
2020-10-26 15:04:57 +01:00
2020-05-25 11:25:37 +02:00
2020-03-23 17:01:42 +01:00
2021-01-19 18:27:17 +01:00
2020-10-07 12:13:25 +02:00
2020-02-12 17:16:46 +01:00
2019-11-18 23:43:44 +01:00
2020-10-07 12:13:25 +02:00
2021-03-04 11:38:30 +01:00
2020-10-07 12:12:19 +02:00
2021-03-09 11:11:11 +01:00
2021-03-09 11:11:11 +01:00
2020-07-27 12:55:21 +02:00
2021-02-03 23:28:40 +01:00
2019-11-18 17:51:51 +01:00
2019-09-09 14:59:16 +02:00
2020-07-27 12:55:36 +02:00
2021-03-25 09:04:06 +01:00
2021-03-09 11:11:11 +01:00
2020-10-07 12:06:57 +02:00
2020-10-07 12:12:16 +02:00
2020-10-07 12:12:17 +02:00
2019-11-18 12:46:59 +01:00
2020-03-23 17:01:54 +01:00
2020-05-25 11:25:19 +02:00
2020-10-07 12:13:22 +02:00
2020-10-07 12:13:22 +02:00
2021-01-27 11:55:06 +01:00
2021-01-27 11:55:06 +01:00
2020-05-25 11:25:37 +02:00
2019-04-29 19:02:54 +02:00
2021-03-30 14:31:53 +02:00
2021-03-11 14:17:22 +01:00
2021-03-09 11:11:10 +01:00
2019-07-01 13:34:58 +02:00
2020-03-23 17:01:53 +01:00
2020-10-26 15:03:59 +01:00
2020-11-05 13:03:39 +01:00
2019-04-29 19:02:49 +02:00
2021-03-09 11:11:11 +01:00
2020-03-23 17:01:54 +01:00
2021-03-04 11:38:30 +01:00
2020-10-07 12:12:13 +02:00
2021-03-09 11:11:11 +01:00
2021-01-27 11:54:53 +01:00
2020-10-07 12:13:17 +02:00
2021-01-17 14:16:54 +01:00
2021-03-04 11:38:30 +01:00
2020-10-07 12:13:23 +02:00
2021-01-19 18:27:24 +01:00
2020-10-07 12:13:19 +02:00
2020-10-07 12:12:21 +02:00
2021-03-07 12:34:13 +01:00
2020-10-07 12:06:57 +02:00
2021-01-19 18:27:22 +01:00
2019-04-29 19:02:39 +02:00
2020-07-27 12:55:28 +02:00
2021-01-17 14:16:53 +01:00
2020-10-07 12:06:56 +02:00
2020-05-25 11:25:36 +02:00
2021-02-03 23:28:40 +01:00
2021-02-03 23:28:40 +01:00
2021-03-09 11:11:12 +01:00
2019-04-29 19:02:44 +02:00
2020-01-31 10:30:40 -08:00
2019-11-18 12:46:59 +01:00