浏览代码

Btrfs: Fix typo and memory leak in extent-tree.c

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>
Yan 17 年之前
父节点
当前提交
b97f9203b4
共有 1 个文件被更改,包括 8 次插入6 次删除
  1. 8 6
      fs/btrfs/extent-tree.c

+ 8 - 6
fs/btrfs/extent-tree.c

@@ -588,16 +588,15 @@ static int update_block_group(struct btrfs_trans_handle *trans,
 			    old_val < (cache->key.offset >> 1)) {
 			    old_val < (cache->key.offset >> 1)) {
 				int bit_to_clear;
 				int bit_to_clear;
 				int bit_to_set;
 				int bit_to_set;
-
 				cache->data = data;
 				cache->data = data;
 				if (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 |=
 					cache->item.flags |=
 						BTRFS_BLOCK_GROUP_DATA;
 						BTRFS_BLOCK_GROUP_DATA;
 				} else {
 				} 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 &=
 					cache->item.flags &=
 						~BTRFS_BLOCK_GROUP_DATA;
 						~BTRFS_BLOCK_GROUP_DATA;
 				}
 				}
@@ -1459,13 +1458,16 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
 {
 {
 	u64 start;
 	u64 start;
 	u64 end;
 	u64 end;
+	u64 ptr;
 	int ret;
 	int ret;
-
 	while(1) {
 	while(1) {
 		ret = find_first_extent_bit(&info->block_group_cache, 0,
 		ret = find_first_extent_bit(&info->block_group_cache, 0,
 					    &start, &end, (unsigned int)-1);
 					    &start, &end, (unsigned int)-1);
 		if (ret)
 		if (ret)
 			break;
 			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,
 		clear_extent_bits(&info->block_group_cache, start,
 				  end, (unsigned int)-1, GFP_NOFS);
 				  end, (unsigned int)-1, GFP_NOFS);
 	}
 	}