Thread (7 messages) 7 messages, 3 authors, 2021-11-04

Re: [PATCH] btrfs: Remove spurious unlock/lock of unused_bgs_lock

From: Nikolay Borisov <hidden>
Date: 2021-10-22 15:02:28


On 22.10.21 г. 17:14, David Sterba wrote:
On Fri, Oct 22, 2021 at 09:12:11AM +0300, Nikolay Borisov wrote:
quoted
On 21.10.21 г. 20:04, David Sterba wrote:
quoted
On Thu, Oct 14, 2021 at 10:03:11AM +0300, Nikolay Borisov wrote:
quoted
Since both unused block groups and reclaim bgs lists are protected by
unused_bgs_lock then free them in the same critical section without
doing an extra unlock/lock pair.

Signed-off-by: Nikolay Borisov <redacted>
---
 fs/btrfs/block-group.c | 2 --
 1 file changed, 2 deletions(-)
diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c
index e790ea0798c7..308b8e92c70e 100644
--- a/fs/btrfs/block-group.c
+++ b/fs/btrfs/block-group.c
@@ -3873,9 +3873,7 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
 		list_del_init(&block_group->bg_list);
 		btrfs_put_block_group(block_group);
 	}
-	spin_unlock(&info->unused_bgs_lock);
 
-	spin_lock(&info->unused_bgs_lock);
That looks correct, I'm not sure about one thing. The calls to
btrfs_put_block_group can be potentaily taking some time if the last
reference is dropped and we need to call btrfs_discard_cancel_work and
several kfree()s. Indirectly there's eg. cancel_delayed_work_sync and
btrfs_discard_schedule_work, so calling all that under unused_bgs_lock
seems quite heavy.
btrfs_free_block_groups is called from 2 contexts only:

1. If we error out during mount
2. One of the last things we do during unmount, when all worker threads
are stopped.

IMO doing the cond_resched_lock would be a premature optimisation and
I'd aim for simplicity.
I'm not optimizing anything but rather preventing problems, cond_resched
is lightweight and one of the things that's nice to the rest of the
system.
But my patch doesn't change that, even without the patch the problem you
are hinting at (which I think is moot) can still occur because we the
final put is still done under the lock. So at the very least it should
be a different patch.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help