]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/btrfs/ctree.c
Btrfs: Replace the transaction work queue with kthreads
[linux-2.6-omap-h63xx.git] / fs / btrfs / ctree.c
index fd68601b60b1dedf5343776495a9a579d36fdea0..40f0e0cb804bd07f84f40d51d33dcfa7377f687f 100644 (file)
@@ -1255,7 +1255,7 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
        lowest_level = p->lowest_level;
        WARN_ON(lowest_level && ins_len);
        WARN_ON(p->nodes[0] != NULL);
-       WARN_ON(root == root->fs_info->extent_root &&
+       WARN_ON(cow && root == root->fs_info->extent_root &&
                !mutex_is_locked(&root->fs_info->alloc_mutex));
        WARN_ON(root == root->fs_info->chunk_root &&
                !mutex_is_locked(&root->fs_info->chunk_mutex));
@@ -1352,6 +1352,8 @@ again:
                                                free_extent_buffer(tmp);
                                        goto again;
                                } else {
+                                       if (tmp)
+                                               free_extent_buffer(tmp);
                                        b = read_node_slot(root, b, slot);
                                }
                        }
@@ -3048,7 +3050,8 @@ int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path)
                free_extent_buffer(c);
                path->nodes[level] = next;
                path->slots[level] = 0;
-               path->locks[level] = 1;
+               if (!path->skip_locking)
+                       path->locks[level] = 1;
                if (!level)
                        break;
                if (level == 1 && path->locks[1] && path->reada)