From: Jan Schmidt Date: Fri, 22 Jun 2012 12:01:00 +0000 (+0200) Subject: Btrfs: leave critical region in btrfs_find_all_roots as soon as possible X-Git-Tag: v3.5-rc6~14^2~11 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=155725c9c051a343be5e555bf943da827e6cf721;p=platform%2Fkernel%2Flinux-exynos.git 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 --- diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index cf0df90..a383c18 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -839,6 +839,7 @@ again: } ret = __add_delayed_refs(head, delayed_ref_seq, &prefs_delayed); + mutex_unlock(&head->mutex); if (ret) { spin_unlock(&delayed_refs->lock); goto out; @@ -932,8 +933,6 @@ again: } out: - if (head) - mutex_unlock(&head->mutex); btrfs_free_path(path); while (!list_empty(&prefs)) { ref = list_first_entry(&prefs, struct __prelim_ref, list);