diff options
Diffstat (limited to 'btrfs-fix-lockdep-warning-with-reclaim-lock-inversion.patch')
-rw-r--r-- | btrfs-fix-lockdep-warning-with-reclaim-lock-inversion.patch | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/btrfs-fix-lockdep-warning-with-reclaim-lock-inversion.patch b/btrfs-fix-lockdep-warning-with-reclaim-lock-inversion.patch deleted file mode 100644 index c158729d3..000000000 --- a/btrfs-fix-lockdep-warning-with-reclaim-lock-inversion.patch +++ /dev/null @@ -1,79 +0,0 @@ -From patchwork Wed Mar 26 18:11:26 2014 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: btrfs: fix lockdep warning with reclaim lock inversion -From: Jeff Mahoney <jeffm@suse.com> -X-Patchwork-Id: 3894781 -Message-Id: <5333184E.3090609@suse.com> -To: linux-btrfs <linux-btrfs@vger.kernel.org> -Date: Wed, 26 Mar 2014 14:11:26 -0400 - -When encountering memory pressure, testers have run into the following -lockdep warning. It was caused by __link_block_group calling kobject_add -with the groups_sem held. kobject_add calls kvasprintf with GFP_KERNEL, -which gets us into reclaim context. The kobject doesn't actually need -to be added under the lock -- it just needs to ensure that it's only -added for the first block group to be linked. - - -========================================================= -[ INFO: possible irq lock inversion dependency detected ] -3.14.0-rc8-default #1 Not tainted ---------------------------------------------------------- -kswapd0/169 just changed the state of lock: - (&delayed_node->mutex){+.+.-.}, at: [<ffffffffa018baea>] __btrfs_release_delayed_node+0x3a/0x200 [btrfs] -but this lock took another, RECLAIM_FS-unsafe lock in the past: - (&found->groups_sem){+++++.} - -and interrupts could create inverse lock ordering between them. - -other info that might help us debug this: - Possible interrupt unsafe locking scenario: - CPU0 CPU1 - ---- ---- - lock(&found->groups_sem); - local_irq_disable(); - lock(&delayed_node->mutex); - lock(&found->groups_sem); - <Interrupt> - lock(&delayed_node->mutex); - - *** DEADLOCK *** -2 locks held by kswapd0/169: - #0: (shrinker_rwsem){++++..}, at: [<ffffffff81159e8a>] shrink_slab+0x3a/0x160 - #1: (&type->s_umount_key#27){++++..}, at: [<ffffffff811bac6f>] grab_super_passive+0x3f/0x90 - -Signed-off-by: Jeff Mahoney <jeffm@suse.com> ---- - fs/btrfs/extent-tree.c | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) - ---- a/fs/btrfs/extent-tree.c -+++ b/fs/btrfs/extent-tree.c -@@ -8343,9 +8343,15 @@ static void __link_block_group(struct bt - struct btrfs_block_group_cache *cache) - { - int index = get_block_group_index(cache); -+ bool first = false; - - down_write(&space_info->groups_sem); -- if (list_empty(&space_info->block_groups[index])) { -+ if (list_empty(&space_info->block_groups[index])) -+ first = true; -+ list_add_tail(&cache->list, &space_info->block_groups[index]); -+ up_write(&space_info->groups_sem); -+ -+ if (first) { - struct kobject *kobj = &space_info->block_group_kobjs[index]; - int ret; - -@@ -8357,8 +8363,6 @@ static void __link_block_group(struct bt - kobject_put(&space_info->kobj); - } - } -- list_add_tail(&cache->list, &space_info->block_groups[index]); -- up_write(&space_info->groups_sem); - } - - static struct btrfs_block_group_cache * |