Hello,

When drop_progress isn't zero, the root->node's usage count is
increased in btrfs_search_slot. Therefore, the get_bh in the body of
while loop is redundant in most cases. (this change is in accordance
with btrfs_defrag_leaves).

The second change is decrease root->node's usage count when drop a snapshot.

Regards
YZ

diff -r 29b8cc7794ac extent-tree.c
--- a/extent-tree.c     Thu Sep 20 14:14:42 2007 -0400
+++ b/extent-tree.c     Sun Sep 23 12:35:00 2007 +0800
@@ -1483,6 +1483,7 @@ int btrfs_drop_snapshot(struct btrfs_tra
        level = btrfs_header_level(btrfs_buffer_header(root->node));
        orig_level = level;
        if (btrfs_disk_key_objectid(&root_item->drop_progress) == 0) {
+               get_bh(root->node);
                path->nodes[level] = root->node;
                path->slots[level] = 0;
        } else {
@@ -1516,7 +1517,6 @@ int btrfs_drop_snapshot(struct btrfs_tra
                if (wret < 0)
                        ret = wret;
                ret = -EAGAIN;
-               get_bh(root->node);
                break;
        }
        for (i = 0; i <= orig_level; i++) {
diff -r 29b8cc7794ac transaction.c
--- a/transaction.c     Thu Sep 20 14:14:42 2007 -0400
+++ b/transaction.c     Sun Sep 23 12:35:00 2007 +0800
@@ -457,6 +457,7 @@ static int drop_dirty_roots(struct btrfs
                ret = btrfs_end_transaction(trans, tree_root);
                BUG_ON(ret);

+               btrfs_block_release(dirty->root, dirty->root->node);
                kfree(dirty->root);
                kfree(dirty);
                mutex_unlock(&tree_root->fs_info->fs_mutex);

_______________________________________________
Btrfs-devel mailing list
[email protected]
http://oss.oracle.com/mailman/listinfo/btrfs-devel

Reply via email to