Btrfs: Fix typo and memory leak in extent-tree.c
authorYan <yanzheng@21cn.com>
Thu, 1 Nov 2007 15:28:41 +0000 (11:28 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:03:57 +0000 (11:03 -0400)
This patch fixes a typo in update_block_group and memory leak in
btrfs_free_block_groups.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/extent-tree.c

index 7de7707..e7192ea 100644 (file)
@@ -588,16 +588,15 @@ static int update_block_group(struct btrfs_trans_handle *trans,
                            old_val < (cache->key.offset >> 1)) {
                                int bit_to_clear;
                                int bit_to_set;
-
                                cache->data = data;
                                if (data) {
-                                       bit_to_clear = BLOCK_GROUP_DATA;
-                                       bit_to_set = BLOCK_GROUP_METADATA;
+                                       bit_to_clear = BLOCK_GROUP_METADATA;
+                                       bit_to_set = BLOCK_GROUP_DATA;
                                        cache->item.flags |=
                                                BTRFS_BLOCK_GROUP_DATA;
                                } else {
-                                       bit_to_clear = BLOCK_GROUP_METADATA;
-                                       bit_to_set = BLOCK_GROUP_DATA;
+                                       bit_to_clear = BLOCK_GROUP_DATA;
+                                       bit_to_set = BLOCK_GROUP_METADATA;
                                        cache->item.flags &=
                                                ~BTRFS_BLOCK_GROUP_DATA;
                                }
@@ -1459,13 +1458,16 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
 {
        u64 start;
        u64 end;
+       u64 ptr;
        int ret;
-
        while(1) {
                ret = find_first_extent_bit(&info->block_group_cache, 0,
                                            &start, &end, (unsigned int)-1);
                if (ret)
                        break;
+               ret = get_state_private(&info->block_group_cache, start, &ptr);
+               if (!ret)
+                       kfree((void *)(unsigned long)ptr);
                clear_extent_bits(&info->block_group_cache, start,
                                  end, (unsigned int)-1, GFP_NOFS);
        }