Btrfs: Fix extent_buffer and extent_state leaks
[linux-2.6-block.git] / fs / btrfs / transaction.c
index 750f35a37aae8c01fe7b8c61bcf624e287693257..372b61f5733fea2a9a562af8732e5ee00dc705f8 100644 (file)
@@ -352,7 +352,7 @@ int btrfs_defrag_root(struct btrfs_root *root, int cacheonly)
                return 0;
 
        trans = btrfs_start_transaction(root, 1);
-       while (1) {
+       while (0) {
                root->defrag_running = 1;
                ret = btrfs_defrag_leaves(trans, root, cacheonly);
                nr = trans->blocks_used;
@@ -394,7 +394,7 @@ int btrfs_defrag_dirty_roots(struct btrfs_fs_info *info)
                for (i = 0; i < ret; i++) {
                        root = gang[i];
                        last = root->root_key.objectid + 1;
-                       // btrfs_defrag_root(root, 1);
+                       btrfs_defrag_root(root, 1);
                }
        }
        // btrfs_defrag_root(info->extent_root, 1);
@@ -462,6 +462,7 @@ static int drop_dirty_roots(struct btrfs_root *tree_root,
                ret = btrfs_end_transaction(trans, tree_root);
                BUG_ON(ret);
 
+               free_extent_buffer(dirty->root->node);
                kfree(dirty->root);
                kfree(dirty);
                mutex_unlock(&tree_root->fs_info->fs_mutex);