diff options
Diffstat (limited to 'fs/btrfs/check-integrity.c')
-rw-r--r-- | fs/btrfs/check-integrity.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c index 5a3e45db642a..11d47bfb62b4 100644 --- a/fs/btrfs/check-integrity.c +++ b/fs/btrfs/check-integrity.c | |||
@@ -137,7 +137,7 @@ struct btrfsic_block { | |||
137 | unsigned int never_written:1; /* block was added because it was | 137 | unsigned int never_written:1; /* block was added because it was |
138 | * referenced, not because it was | 138 | * referenced, not because it was |
139 | * written */ | 139 | * written */ |
140 | unsigned int mirror_num:2; /* large enough to hold | 140 | unsigned int mirror_num; /* large enough to hold |
141 | * BTRFS_SUPER_MIRROR_MAX */ | 141 | * BTRFS_SUPER_MIRROR_MAX */ |
142 | struct btrfsic_dev_state *dev_state; | 142 | struct btrfsic_dev_state *dev_state; |
143 | u64 dev_bytenr; /* key, physical byte num on disk */ | 143 | u64 dev_bytenr; /* key, physical byte num on disk */ |
@@ -723,7 +723,7 @@ static int btrfsic_process_superblock(struct btrfsic_state *state, | |||
723 | } | 723 | } |
724 | 724 | ||
725 | num_copies = | 725 | num_copies = |
726 | btrfs_num_copies(&state->root->fs_info->mapping_tree, | 726 | btrfs_num_copies(state->root->fs_info, |
727 | next_bytenr, state->metablock_size); | 727 | next_bytenr, state->metablock_size); |
728 | if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) | 728 | if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) |
729 | printk(KERN_INFO "num_copies(log_bytenr=%llu) = %d\n", | 729 | printk(KERN_INFO "num_copies(log_bytenr=%llu) = %d\n", |
@@ -903,7 +903,7 @@ static int btrfsic_process_superblock_dev_mirror( | |||
903 | } | 903 | } |
904 | 904 | ||
905 | num_copies = | 905 | num_copies = |
906 | btrfs_num_copies(&state->root->fs_info->mapping_tree, | 906 | btrfs_num_copies(state->root->fs_info, |
907 | next_bytenr, state->metablock_size); | 907 | next_bytenr, state->metablock_size); |
908 | if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) | 908 | if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) |
909 | printk(KERN_INFO "num_copies(log_bytenr=%llu) = %d\n", | 909 | printk(KERN_INFO "num_copies(log_bytenr=%llu) = %d\n", |
@@ -1287,7 +1287,7 @@ static int btrfsic_create_link_to_next_block( | |||
1287 | *next_blockp = NULL; | 1287 | *next_blockp = NULL; |
1288 | if (0 == *num_copiesp) { | 1288 | if (0 == *num_copiesp) { |
1289 | *num_copiesp = | 1289 | *num_copiesp = |
1290 | btrfs_num_copies(&state->root->fs_info->mapping_tree, | 1290 | btrfs_num_copies(state->root->fs_info, |
1291 | next_bytenr, state->metablock_size); | 1291 | next_bytenr, state->metablock_size); |
1292 | if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) | 1292 | if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) |
1293 | printk(KERN_INFO "num_copies(log_bytenr=%llu) = %d\n", | 1293 | printk(KERN_INFO "num_copies(log_bytenr=%llu) = %d\n", |
@@ -1489,7 +1489,7 @@ static int btrfsic_handle_extent_data( | |||
1489 | chunk_len = num_bytes; | 1489 | chunk_len = num_bytes; |
1490 | 1490 | ||
1491 | num_copies = | 1491 | num_copies = |
1492 | btrfs_num_copies(&state->root->fs_info->mapping_tree, | 1492 | btrfs_num_copies(state->root->fs_info, |
1493 | next_bytenr, state->datablock_size); | 1493 | next_bytenr, state->datablock_size); |
1494 | if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) | 1494 | if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) |
1495 | printk(KERN_INFO "num_copies(log_bytenr=%llu) = %d\n", | 1495 | printk(KERN_INFO "num_copies(log_bytenr=%llu) = %d\n", |
@@ -1582,9 +1582,21 @@ static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len, | |||
1582 | struct btrfs_device *device; | 1582 | struct btrfs_device *device; |
1583 | 1583 | ||
1584 | length = len; | 1584 | length = len; |
1585 | ret = btrfs_map_block(&state->root->fs_info->mapping_tree, READ, | 1585 | ret = btrfs_map_block(state->root->fs_info, READ, |
1586 | bytenr, &length, &multi, mirror_num); | 1586 | bytenr, &length, &multi, mirror_num); |
1587 | 1587 | ||
1588 | if (ret) { | ||
1589 | block_ctx_out->start = 0; | ||
1590 | block_ctx_out->dev_bytenr = 0; | ||
1591 | block_ctx_out->len = 0; | ||
1592 | block_ctx_out->dev = NULL; | ||
1593 | block_ctx_out->datav = NULL; | ||
1594 | block_ctx_out->pagev = NULL; | ||
1595 | block_ctx_out->mem_to_free = NULL; | ||
1596 | |||
1597 | return ret; | ||
1598 | } | ||
1599 | |||
1588 | device = multi->stripes[0].dev; | 1600 | device = multi->stripes[0].dev; |
1589 | block_ctx_out->dev = btrfsic_dev_state_lookup(device->bdev); | 1601 | block_ctx_out->dev = btrfsic_dev_state_lookup(device->bdev); |
1590 | block_ctx_out->dev_bytenr = multi->stripes[0].physical; | 1602 | block_ctx_out->dev_bytenr = multi->stripes[0].physical; |
@@ -1594,8 +1606,7 @@ static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len, | |||
1594 | block_ctx_out->pagev = NULL; | 1606 | block_ctx_out->pagev = NULL; |
1595 | block_ctx_out->mem_to_free = NULL; | 1607 | block_ctx_out->mem_to_free = NULL; |
1596 | 1608 | ||
1597 | if (0 == ret) | 1609 | kfree(multi); |
1598 | kfree(multi); | ||
1599 | if (NULL == block_ctx_out->dev) { | 1610 | if (NULL == block_ctx_out->dev) { |
1600 | ret = -ENXIO; | 1611 | ret = -ENXIO; |
1601 | printk(KERN_INFO "btrfsic: error, cannot lookup dev (#1)!\n"); | 1612 | printk(KERN_INFO "btrfsic: error, cannot lookup dev (#1)!\n"); |
@@ -2463,7 +2474,7 @@ static int btrfsic_process_written_superblock( | |||
2463 | } | 2474 | } |
2464 | 2475 | ||
2465 | num_copies = | 2476 | num_copies = |
2466 | btrfs_num_copies(&state->root->fs_info->mapping_tree, | 2477 | btrfs_num_copies(state->root->fs_info, |
2467 | next_bytenr, BTRFS_SUPER_INFO_SIZE); | 2478 | next_bytenr, BTRFS_SUPER_INFO_SIZE); |
2468 | if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) | 2479 | if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) |
2469 | printk(KERN_INFO "num_copies(log_bytenr=%llu) = %d\n", | 2480 | printk(KERN_INFO "num_copies(log_bytenr=%llu) = %d\n", |
@@ -2960,7 +2971,7 @@ static void btrfsic_cmp_log_and_dev_bytenr(struct btrfsic_state *state, | |||
2960 | struct btrfsic_block_data_ctx block_ctx; | 2971 | struct btrfsic_block_data_ctx block_ctx; |
2961 | int match = 0; | 2972 | int match = 0; |
2962 | 2973 | ||
2963 | num_copies = btrfs_num_copies(&state->root->fs_info->mapping_tree, | 2974 | num_copies = btrfs_num_copies(state->root->fs_info, |
2964 | bytenr, state->metablock_size); | 2975 | bytenr, state->metablock_size); |
2965 | 2976 | ||
2966 | for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) { | 2977 | for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) { |