mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 08:19:28 +00:00
Btrfs: leave critical region in btrfs_find_all_roots as soon as possible
When delayed refs exist, btrfs_find_all_roots used to hold the delayed ref mutex way longer than actually required. We ought to drop it immediately after we're done collecting all the delayed refs. Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
This commit is contained in:
parent
c3e0696523
commit
155725c9c0
1 changed files with 1 additions and 2 deletions
|
@ -839,6 +839,7 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans,
|
||||||
}
|
}
|
||||||
ret = __add_delayed_refs(head, delayed_ref_seq,
|
ret = __add_delayed_refs(head, delayed_ref_seq,
|
||||||
&prefs_delayed);
|
&prefs_delayed);
|
||||||
|
mutex_unlock(&head->mutex);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
spin_unlock(&delayed_refs->lock);
|
spin_unlock(&delayed_refs->lock);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -932,8 +933,6 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans,
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (head)
|
|
||||||
mutex_unlock(&head->mutex);
|
|
||||||
btrfs_free_path(path);
|
btrfs_free_path(path);
|
||||||
while (!list_empty(&prefs)) {
|
while (!list_empty(&prefs)) {
|
||||||
ref = list_first_entry(&prefs, struct __prelim_ref, list);
|
ref = list_first_entry(&prefs, struct __prelim_ref, list);
|
||||||
|
|
Loading…
Reference in a new issue