diff options
author | Arnd Bergmann <arnd@arndb.de> | 2012-07-12 17:27:36 +0200 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2012-07-12 17:27:36 +0200 |
commit | 35bf8cc74b2b1dfad18df6d330b271e68ab6e3f5 (patch) | |
tree | adf37371beb73adbb0d2414a52d86580dd37d2e0 /fs/btrfs/backref.c | |
parent | 5351da96bd6662d28c41a3e9e652019a11f3cf7c (diff) | |
parent | cfda590178a16e2b5edb09e131460b3e64819807 (diff) |
Merge branch 'picoxcell/timer' into next/timer
Imported from mailing list
* picoxcell/timer:
clocksource: dw_apb_timer: Add common DTS glue for dw_apb_timer
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'fs/btrfs/backref.c')
-rw-r--r-- | fs/btrfs/backref.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 7301cdb4b2c..a383c18e74e 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -301,10 +301,14 @@ static int __resolve_indirect_ref(struct btrfs_fs_info *fs_info, goto out; eb = path->nodes[level]; - if (!eb) { - WARN_ON(1); - ret = 1; - goto out; + while (!eb) { + if (!level) { + WARN_ON(1); + ret = 1; + goto out; + } + level--; + eb = path->nodes[level]; } ret = add_all_parents(root, path, parents, level, &ref->key_for_search, @@ -835,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; @@ -928,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); |