* [PATCH 1/2] Btrfs: check_int: use the known block location
@ 2014-10-16 15:48 Stefan Behrens
2014-10-16 15:48 ` [PATCH 2/2] Btrfs: check-int: don't complain about balanced blocks Stefan Behrens
2014-10-17 7:15 ` [PATCH 1/2] Btrfs: check_int: use the known block location Wang Shilong
0 siblings, 2 replies; 5+ messages in thread
From: Stefan Behrens @ 2014-10-16 15:48 UTC (permalink / raw)
To: linux-btrfs
The xfstest btrfs/014 which tests the balance operation caused issues with
the check_int module. The attempt was made to use btrfs_map_block() to
find the physical location for a written block. However, this was not
at all needed since the location of the written block was known since
a hook to submit_bio() was the reason for entering the check_int module.
Additionally, after a block relocation it happened that btrfs_map_block()
failed causing misleading error messages afterwards.
This patch changes the check_int module to use the known information of
the physical location from the bio.
Reported-by: Wang Shilong <wangshilong1991@gmail.com>
Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de>
---
fs/btrfs/check-integrity.c | 66 ++++++++--------------------------------------
1 file changed, 11 insertions(+), 55 deletions(-)
diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c
index ce92ae30250f..65fc2e0bbc4a 100644
--- a/fs/btrfs/check-integrity.c
+++ b/fs/btrfs/check-integrity.c
@@ -326,9 +326,6 @@ static int btrfsic_handle_extent_data(struct btrfsic_state *state,
static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len,
struct btrfsic_block_data_ctx *block_ctx_out,
int mirror_num);
-static int btrfsic_map_superblock(struct btrfsic_state *state, u64 bytenr,
- u32 len, struct block_device *bdev,
- struct btrfsic_block_data_ctx *block_ctx_out);
static void btrfsic_release_block_ctx(struct btrfsic_block_data_ctx *block_ctx);
static int btrfsic_read_block(struct btrfsic_state *state,
struct btrfsic_block_data_ctx *block_ctx);
@@ -1609,25 +1606,6 @@ static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len,
return ret;
}
-static int btrfsic_map_superblock(struct btrfsic_state *state, u64 bytenr,
- u32 len, struct block_device *bdev,
- struct btrfsic_block_data_ctx *block_ctx_out)
-{
- block_ctx_out->dev = btrfsic_dev_state_lookup(bdev);
- block_ctx_out->dev_bytenr = bytenr;
- block_ctx_out->start = bytenr;
- block_ctx_out->len = len;
- block_ctx_out->datav = NULL;
- block_ctx_out->pagev = NULL;
- block_ctx_out->mem_to_free = NULL;
- if (NULL != block_ctx_out->dev) {
- return 0;
- } else {
- printk(KERN_INFO "btrfsic: error, cannot lookup dev (#2)!\n");
- return -ENXIO;
- }
-}
-
static void btrfsic_release_block_ctx(struct btrfsic_block_data_ctx *block_ctx)
{
if (block_ctx->mem_to_free) {
@@ -2004,24 +1982,13 @@ again:
}
}
- if (block->is_superblock)
- ret = btrfsic_map_superblock(state, bytenr,
- processed_len,
- bdev, &block_ctx);
- else
- ret = btrfsic_map_block(state, bytenr, processed_len,
- &block_ctx, 0);
- if (ret) {
- printk(KERN_INFO
- "btrfsic: btrfsic_map_block(root @%llu)"
- " failed!\n", bytenr);
- goto continue_loop;
- }
- block_ctx.datav = mapped_datav;
- /* the following is required in case of writes to mirrors,
- * use the same that was used for the lookup */
block_ctx.dev = dev_state;
block_ctx.dev_bytenr = dev_bytenr;
+ block_ctx.start = bytenr;
+ block_ctx.len = processed_len;
+ block_ctx.pagev = NULL;
+ block_ctx.mem_to_free = NULL;
+ block_ctx.datav = mapped_datav;
if (is_metadata || state->include_extent_data) {
block->never_written = 0;
@@ -2135,10 +2102,6 @@ again:
/* this is getting ugly for the
* include_extent_data case... */
bytenr = 0; /* unknown */
- block_ctx.start = bytenr;
- block_ctx.len = processed_len;
- block_ctx.mem_to_free = NULL;
- block_ctx.pagev = NULL;
} else {
processed_len = state->metablock_size;
bytenr = btrfs_stack_header_bytenr(
@@ -2151,22 +2114,15 @@ again:
"Written block @%llu (%s/%llu/?)"
" !found in hash table, M.\n",
bytenr, dev_state->name, dev_bytenr);
-
- ret = btrfsic_map_block(state, bytenr, processed_len,
- &block_ctx, 0);
- if (ret) {
- printk(KERN_INFO
- "btrfsic: btrfsic_map_block(root @%llu)"
- " failed!\n",
- dev_bytenr);
- goto continue_loop;
- }
}
- block_ctx.datav = mapped_datav;
- /* the following is required in case of writes to mirrors,
- * use the same that was used for the lookup */
+
block_ctx.dev = dev_state;
block_ctx.dev_bytenr = dev_bytenr;
+ block_ctx.start = bytenr;
+ block_ctx.len = processed_len;
+ block_ctx.pagev = NULL;
+ block_ctx.mem_to_free = NULL;
+ block_ctx.datav = mapped_datav;
block = btrfsic_block_alloc();
if (NULL == block) {
--
2.1.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] Btrfs: check-int: don't complain about balanced blocks
2014-10-16 15:48 [PATCH 1/2] Btrfs: check_int: use the known block location Stefan Behrens
@ 2014-10-16 15:48 ` Stefan Behrens
2014-10-17 7:16 ` Wang Shilong
2014-10-17 8:06 ` Miao Xie
2014-10-17 7:15 ` [PATCH 1/2] Btrfs: check_int: use the known block location Wang Shilong
1 sibling, 2 replies; 5+ messages in thread
From: Stefan Behrens @ 2014-10-16 15:48 UTC (permalink / raw)
To: linux-btrfs
The xfstest btrfs/014 which tests the balance operation caused that the
check_int module complained that known blocks changed their physical
location. Since this is not an error in this case, only print such
message if the verbose mode was enabled.
Reported-by: Wang Shilong <wangshilong1991@gmail.com>
Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de>
---
fs/btrfs/check-integrity.c | 87 ++++++++++++++++++++++++++--------------------
1 file changed, 49 insertions(+), 38 deletions(-)
diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c
index 65fc2e0bbc4a..65226d7c9fe0 100644
--- a/fs/btrfs/check-integrity.c
+++ b/fs/btrfs/check-integrity.c
@@ -1325,24 +1325,28 @@ static int btrfsic_create_link_to_next_block(
l = NULL;
next_block->generation = BTRFSIC_GENERATION_UNKNOWN;
} else {
- if (next_block->logical_bytenr != next_bytenr &&
- !(!next_block->is_metadata &&
- 0 == next_block->logical_bytenr)) {
- printk(KERN_INFO
- "Referenced block @%llu (%s/%llu/%d)"
- " found in hash table, %c,"
- " bytenr mismatch (!= stored %llu).\n",
- next_bytenr, next_block_ctx->dev->name,
- next_block_ctx->dev_bytenr, *mirror_nump,
- btrfsic_get_block_type(state, next_block),
- next_block->logical_bytenr);
- } else if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
- printk(KERN_INFO
- "Referenced block @%llu (%s/%llu/%d)"
- " found in hash table, %c.\n",
- next_bytenr, next_block_ctx->dev->name,
- next_block_ctx->dev_bytenr, *mirror_nump,
- btrfsic_get_block_type(state, next_block));
+ if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE) {
+ if (next_block->logical_bytenr != next_bytenr &&
+ !(!next_block->is_metadata &&
+ 0 == next_block->logical_bytenr))
+ printk(KERN_INFO
+ "Referenced block @%llu (%s/%llu/%d)"
+ " found in hash table, %c,"
+ " bytenr mismatch (!= stored %llu).\n",
+ next_bytenr, next_block_ctx->dev->name,
+ next_block_ctx->dev_bytenr, *mirror_nump,
+ btrfsic_get_block_type(state,
+ next_block),
+ next_block->logical_bytenr);
+ else
+ printk(KERN_INFO
+ "Referenced block @%llu (%s/%llu/%d)"
+ " found in hash table, %c.\n",
+ next_bytenr, next_block_ctx->dev->name,
+ next_block_ctx->dev_bytenr, *mirror_nump,
+ btrfsic_get_block_type(state,
+ next_block));
+ }
next_block->logical_bytenr = next_bytenr;
next_block->mirror_num = *mirror_nump;
@@ -1528,7 +1532,9 @@ static int btrfsic_handle_extent_data(
return -1;
}
if (!block_was_created) {
- if (next_block->logical_bytenr != next_bytenr &&
+ if ((state->print_mask &
+ BTRFSIC_PRINT_MASK_VERBOSE) &&
+ next_block->logical_bytenr != next_bytenr &&
!(!next_block->is_metadata &&
0 == next_block->logical_bytenr)) {
printk(KERN_INFO
@@ -1881,25 +1887,30 @@ again:
dev_state,
dev_bytenr);
}
- if (block->logical_bytenr != bytenr &&
- !(!block->is_metadata &&
- block->logical_bytenr == 0))
- printk(KERN_INFO
- "Written block @%llu (%s/%llu/%d)"
- " found in hash table, %c,"
- " bytenr mismatch"
- " (!= stored %llu).\n",
- bytenr, dev_state->name, dev_bytenr,
- block->mirror_num,
- btrfsic_get_block_type(state, block),
- block->logical_bytenr);
- else if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
- printk(KERN_INFO
- "Written block @%llu (%s/%llu/%d)"
- " found in hash table, %c.\n",
- bytenr, dev_state->name, dev_bytenr,
- block->mirror_num,
- btrfsic_get_block_type(state, block));
+ if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE) {
+ if (block->logical_bytenr != bytenr &&
+ !(!block->is_metadata &&
+ block->logical_bytenr == 0))
+ printk(KERN_INFO
+ "Written block @%llu (%s/%llu/%d)"
+ " found in hash table, %c,"
+ " bytenr mismatch"
+ " (!= stored %llu).\n",
+ bytenr, dev_state->name,
+ dev_bytenr,
+ block->mirror_num,
+ btrfsic_get_block_type(state,
+ block),
+ block->logical_bytenr);
+ else
+ printk(KERN_INFO
+ "Written block @%llu (%s/%llu/%d)"
+ " found in hash table, %c.\n",
+ bytenr, dev_state->name,
+ dev_bytenr, block->mirror_num,
+ btrfsic_get_block_type(state,
+ block));
+ }
block->logical_bytenr = bytenr;
} else {
if (num_pages * PAGE_CACHE_SIZE <
--
2.1.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] Btrfs: check_int: use the known block location
2014-10-16 15:48 [PATCH 1/2] Btrfs: check_int: use the known block location Stefan Behrens
2014-10-16 15:48 ` [PATCH 2/2] Btrfs: check-int: don't complain about balanced blocks Stefan Behrens
@ 2014-10-17 7:15 ` Wang Shilong
1 sibling, 0 replies; 5+ messages in thread
From: Wang Shilong @ 2014-10-17 7:15 UTC (permalink / raw)
To: Stefan Behrens; +Cc: linux-btrfs
> The xfstest btrfs/014 which tests the balance operation caused issues with
> the check_int module. The attempt was made to use btrfs_map_block() to
> find the physical location for a written block. However, this was not
> at all needed since the location of the written block was known since
> a hook to submit_bio() was the reason for entering the check_int module.
> Additionally, after a block relocation it happened that btrfs_map_block()
> failed causing misleading error messages afterwards.
>
> This patch changes the check_int module to use the known information of
> the physical location from the bio.
>
> Reported-by: Wang Shilong <wangshilong1991@gmail.com>
> Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de>
This passed my Tests after applying both patches.
Tested-by: Wang Shilong <wangshilong1991@gmail.com>
> ---
> fs/btrfs/check-integrity.c | 66 ++++++++--------------------------------------
> 1 file changed, 11 insertions(+), 55 deletions(-)
>
> diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c
> index ce92ae30250f..65fc2e0bbc4a 100644
> --- a/fs/btrfs/check-integrity.c
> +++ b/fs/btrfs/check-integrity.c
> @@ -326,9 +326,6 @@ static int btrfsic_handle_extent_data(struct btrfsic_state *state,
> static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len,
> struct btrfsic_block_data_ctx *block_ctx_out,
> int mirror_num);
> -static int btrfsic_map_superblock(struct btrfsic_state *state, u64 bytenr,
> - u32 len, struct block_device *bdev,
> - struct btrfsic_block_data_ctx *block_ctx_out);
> static void btrfsic_release_block_ctx(struct btrfsic_block_data_ctx *block_ctx);
> static int btrfsic_read_block(struct btrfsic_state *state,
> struct btrfsic_block_data_ctx *block_ctx);
> @@ -1609,25 +1606,6 @@ static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len,
> return ret;
> }
>
> -static int btrfsic_map_superblock(struct btrfsic_state *state, u64 bytenr,
> - u32 len, struct block_device *bdev,
> - struct btrfsic_block_data_ctx *block_ctx_out)
> -{
> - block_ctx_out->dev = btrfsic_dev_state_lookup(bdev);
> - block_ctx_out->dev_bytenr = bytenr;
> - block_ctx_out->start = bytenr;
> - block_ctx_out->len = len;
> - block_ctx_out->datav = NULL;
> - block_ctx_out->pagev = NULL;
> - block_ctx_out->mem_to_free = NULL;
> - if (NULL != block_ctx_out->dev) {
> - return 0;
> - } else {
> - printk(KERN_INFO "btrfsic: error, cannot lookup dev (#2)!\n");
> - return -ENXIO;
> - }
> -}
> -
> static void btrfsic_release_block_ctx(struct btrfsic_block_data_ctx *block_ctx)
> {
> if (block_ctx->mem_to_free) {
> @@ -2004,24 +1982,13 @@ again:
> }
> }
>
> - if (block->is_superblock)
> - ret = btrfsic_map_superblock(state, bytenr,
> - processed_len,
> - bdev, &block_ctx);
> - else
> - ret = btrfsic_map_block(state, bytenr, processed_len,
> - &block_ctx, 0);
> - if (ret) {
> - printk(KERN_INFO
> - "btrfsic: btrfsic_map_block(root @%llu)"
> - " failed!\n", bytenr);
> - goto continue_loop;
> - }
> - block_ctx.datav = mapped_datav;
> - /* the following is required in case of writes to mirrors,
> - * use the same that was used for the lookup */
> block_ctx.dev = dev_state;
> block_ctx.dev_bytenr = dev_bytenr;
> + block_ctx.start = bytenr;
> + block_ctx.len = processed_len;
> + block_ctx.pagev = NULL;
> + block_ctx.mem_to_free = NULL;
> + block_ctx.datav = mapped_datav;
>
> if (is_metadata || state->include_extent_data) {
> block->never_written = 0;
> @@ -2135,10 +2102,6 @@ again:
> /* this is getting ugly for the
> * include_extent_data case... */
> bytenr = 0; /* unknown */
> - block_ctx.start = bytenr;
> - block_ctx.len = processed_len;
> - block_ctx.mem_to_free = NULL;
> - block_ctx.pagev = NULL;
> } else {
> processed_len = state->metablock_size;
> bytenr = btrfs_stack_header_bytenr(
> @@ -2151,22 +2114,15 @@ again:
> "Written block @%llu (%s/%llu/?)"
> " !found in hash table, M.\n",
> bytenr, dev_state->name, dev_bytenr);
> -
> - ret = btrfsic_map_block(state, bytenr, processed_len,
> - &block_ctx, 0);
> - if (ret) {
> - printk(KERN_INFO
> - "btrfsic: btrfsic_map_block(root @%llu)"
> - " failed!\n",
> - dev_bytenr);
> - goto continue_loop;
> - }
> }
> - block_ctx.datav = mapped_datav;
> - /* the following is required in case of writes to mirrors,
> - * use the same that was used for the lookup */
> +
> block_ctx.dev = dev_state;
> block_ctx.dev_bytenr = dev_bytenr;
> + block_ctx.start = bytenr;
> + block_ctx.len = processed_len;
> + block_ctx.pagev = NULL;
> + block_ctx.mem_to_free = NULL;
> + block_ctx.datav = mapped_datav;
>
> block = btrfsic_block_alloc();
> if (NULL == block) {
> --
> 2.1.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Best Regards,
Wang Shilong
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] Btrfs: check-int: don't complain about balanced blocks
2014-10-16 15:48 ` [PATCH 2/2] Btrfs: check-int: don't complain about balanced blocks Stefan Behrens
@ 2014-10-17 7:16 ` Wang Shilong
2014-10-17 8:06 ` Miao Xie
1 sibling, 0 replies; 5+ messages in thread
From: Wang Shilong @ 2014-10-17 7:16 UTC (permalink / raw)
To: Stefan Behrens; +Cc: linux-btrfs
The xfstest btrfs/014 which tests the balance operation caused that the
> check_int module complained that known blocks changed their physical
> location. Since this is not an error in this case, only print such
> message if the verbose mode was enabled.
>
> Reported-by: Wang Shilong <wangshilong1991@gmail.com>
> Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de>
This passed my Tests after applying both patches.
Tested-by: Wang Shilong <wangshilong1991@gmail.com>
> ---
> fs/btrfs/check-integrity.c | 87 ++++++++++++++++++++++++++--------------------
> 1 file changed, 49 insertions(+), 38 deletions(-)
>
> diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c
> index 65fc2e0bbc4a..65226d7c9fe0 100644
> --- a/fs/btrfs/check-integrity.c
> +++ b/fs/btrfs/check-integrity.c
> @@ -1325,24 +1325,28 @@ static int btrfsic_create_link_to_next_block(
> l = NULL;
> next_block->generation = BTRFSIC_GENERATION_UNKNOWN;
> } else {
> - if (next_block->logical_bytenr != next_bytenr &&
> - !(!next_block->is_metadata &&
> - 0 == next_block->logical_bytenr)) {
> - printk(KERN_INFO
> - "Referenced block @%llu (%s/%llu/%d)"
> - " found in hash table, %c,"
> - " bytenr mismatch (!= stored %llu).\n",
> - next_bytenr, next_block_ctx->dev->name,
> - next_block_ctx->dev_bytenr, *mirror_nump,
> - btrfsic_get_block_type(state, next_block),
> - next_block->logical_bytenr);
> - } else if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
> - printk(KERN_INFO
> - "Referenced block @%llu (%s/%llu/%d)"
> - " found in hash table, %c.\n",
> - next_bytenr, next_block_ctx->dev->name,
> - next_block_ctx->dev_bytenr, *mirror_nump,
> - btrfsic_get_block_type(state, next_block));
> + if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE) {
> + if (next_block->logical_bytenr != next_bytenr &&
> + !(!next_block->is_metadata &&
> + 0 == next_block->logical_bytenr))
> + printk(KERN_INFO
> + "Referenced block @%llu (%s/%llu/%d)"
> + " found in hash table, %c,"
> + " bytenr mismatch (!= stored %llu).\n",
> + next_bytenr, next_block_ctx->dev->name,
> + next_block_ctx->dev_bytenr, *mirror_nump,
> + btrfsic_get_block_type(state,
> + next_block),
> + next_block->logical_bytenr);
> + else
> + printk(KERN_INFO
> + "Referenced block @%llu (%s/%llu/%d)"
> + " found in hash table, %c.\n",
> + next_bytenr, next_block_ctx->dev->name,
> + next_block_ctx->dev_bytenr, *mirror_nump,
> + btrfsic_get_block_type(state,
> + next_block));
> + }
> next_block->logical_bytenr = next_bytenr;
>
> next_block->mirror_num = *mirror_nump;
> @@ -1528,7 +1532,9 @@ static int btrfsic_handle_extent_data(
> return -1;
> }
> if (!block_was_created) {
> - if (next_block->logical_bytenr != next_bytenr &&
> + if ((state->print_mask &
> + BTRFSIC_PRINT_MASK_VERBOSE) &&
> + next_block->logical_bytenr != next_bytenr &&
> !(!next_block->is_metadata &&
> 0 == next_block->logical_bytenr)) {
> printk(KERN_INFO
> @@ -1881,25 +1887,30 @@ again:
> dev_state,
> dev_bytenr);
> }
> - if (block->logical_bytenr != bytenr &&
> - !(!block->is_metadata &&
> - block->logical_bytenr == 0))
> - printk(KERN_INFO
> - "Written block @%llu (%s/%llu/%d)"
> - " found in hash table, %c,"
> - " bytenr mismatch"
> - " (!= stored %llu).\n",
> - bytenr, dev_state->name, dev_bytenr,
> - block->mirror_num,
> - btrfsic_get_block_type(state, block),
> - block->logical_bytenr);
> - else if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
> - printk(KERN_INFO
> - "Written block @%llu (%s/%llu/%d)"
> - " found in hash table, %c.\n",
> - bytenr, dev_state->name, dev_bytenr,
> - block->mirror_num,
> - btrfsic_get_block_type(state, block));
> + if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE) {
> + if (block->logical_bytenr != bytenr &&
> + !(!block->is_metadata &&
> + block->logical_bytenr == 0))
> + printk(KERN_INFO
> + "Written block @%llu (%s/%llu/%d)"
> + " found in hash table, %c,"
> + " bytenr mismatch"
> + " (!= stored %llu).\n",
> + bytenr, dev_state->name,
> + dev_bytenr,
> + block->mirror_num,
> + btrfsic_get_block_type(state,
> + block),
> + block->logical_bytenr);
> + else
> + printk(KERN_INFO
> + "Written block @%llu (%s/%llu/%d)"
> + " found in hash table, %c.\n",
> + bytenr, dev_state->name,
> + dev_bytenr, block->mirror_num,
> + btrfsic_get_block_type(state,
> + block));
> + }
> block->logical_bytenr = bytenr;
> } else {
> if (num_pages * PAGE_CACHE_SIZE <
> --
> 2.1.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Best Regards,
Wang Shilong
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] Btrfs: check-int: don't complain about balanced blocks
2014-10-16 15:48 ` [PATCH 2/2] Btrfs: check-int: don't complain about balanced blocks Stefan Behrens
2014-10-17 7:16 ` Wang Shilong
@ 2014-10-17 8:06 ` Miao Xie
1 sibling, 0 replies; 5+ messages in thread
From: Miao Xie @ 2014-10-17 8:06 UTC (permalink / raw)
To: Stefan Behrens, linux-btrfs
On Thu, 16 Oct 2014 17:48:49 +0200, Stefan Behrens wrote:
> The xfstest btrfs/014 which tests the balance operation caused that the
> check_int module complained that known blocks changed their physical
> location. Since this is not an error in this case, only print such
> message if the verbose mode was enabled.
>
> Reported-by: Wang Shilong <wangshilong1991@gmail.com>
> Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de>
> ---
> fs/btrfs/check-integrity.c | 87 ++++++++++++++++++++++++++--------------------
> 1 file changed, 49 insertions(+), 38 deletions(-)
>
> diff --git a/fs/btrfs/check-integrity.c b/fs/btrfs/check-integrity.c
> index 65fc2e0bbc4a..65226d7c9fe0 100644
> --- a/fs/btrfs/check-integrity.c
> +++ b/fs/btrfs/check-integrity.c
> @@ -1325,24 +1325,28 @@ static int btrfsic_create_link_to_next_block(
> l = NULL;
> next_block->generation = BTRFSIC_GENERATION_UNKNOWN;
> } else {
> - if (next_block->logical_bytenr != next_bytenr &&
> - !(!next_block->is_metadata &&
> - 0 == next_block->logical_bytenr)) {
> - printk(KERN_INFO
> - "Referenced block @%llu (%s/%llu/%d)"
> - " found in hash table, %c,"
> - " bytenr mismatch (!= stored %llu).\n",
> - next_bytenr, next_block_ctx->dev->name,
> - next_block_ctx->dev_bytenr, *mirror_nump,
> - btrfsic_get_block_type(state, next_block),
> - next_block->logical_bytenr);
> - } else if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
> - printk(KERN_INFO
> - "Referenced block @%llu (%s/%llu/%d)"
> - " found in hash table, %c.\n",
> - next_bytenr, next_block_ctx->dev->name,
> - next_block_ctx->dev_bytenr, *mirror_nump,
> - btrfsic_get_block_type(state, next_block));
> + if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE) {
> + if (next_block->logical_bytenr != next_bytenr &&
> + !(!next_block->is_metadata &&
> + 0 == next_block->logical_bytenr))
> + printk(KERN_INFO
> + "Referenced block @%llu (%s/%llu/%d)"
> + " found in hash table, %c,"
> + " bytenr mismatch (!= stored %llu).\n",
According to the coding style, we don't expect the user-visible strings are broken.
Thanks
Miao
> + next_bytenr, next_block_ctx->dev->name,
> + next_block_ctx->dev_bytenr, *mirror_nump,
> + btrfsic_get_block_type(state,
> + next_block),
> + next_block->logical_bytenr);
> + else
> + printk(KERN_INFO
> + "Referenced block @%llu (%s/%llu/%d)"
> + " found in hash table, %c.\n",
> + next_bytenr, next_block_ctx->dev->name,
> + next_block_ctx->dev_bytenr, *mirror_nump,
> + btrfsic_get_block_type(state,
> + next_block));
> + }
> next_block->logical_bytenr = next_bytenr;
>
> next_block->mirror_num = *mirror_nump;
> @@ -1528,7 +1532,9 @@ static int btrfsic_handle_extent_data(
> return -1;
> }
> if (!block_was_created) {
> - if (next_block->logical_bytenr != next_bytenr &&
> + if ((state->print_mask &
> + BTRFSIC_PRINT_MASK_VERBOSE) &&
> + next_block->logical_bytenr != next_bytenr &&
> !(!next_block->is_metadata &&
> 0 == next_block->logical_bytenr)) {
> printk(KERN_INFO
> @@ -1881,25 +1887,30 @@ again:
> dev_state,
> dev_bytenr);
> }
> - if (block->logical_bytenr != bytenr &&
> - !(!block->is_metadata &&
> - block->logical_bytenr == 0))
> - printk(KERN_INFO
> - "Written block @%llu (%s/%llu/%d)"
> - " found in hash table, %c,"
> - " bytenr mismatch"
> - " (!= stored %llu).\n",
> - bytenr, dev_state->name, dev_bytenr,
> - block->mirror_num,
> - btrfsic_get_block_type(state, block),
> - block->logical_bytenr);
> - else if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE)
> - printk(KERN_INFO
> - "Written block @%llu (%s/%llu/%d)"
> - " found in hash table, %c.\n",
> - bytenr, dev_state->name, dev_bytenr,
> - block->mirror_num,
> - btrfsic_get_block_type(state, block));
> + if (state->print_mask & BTRFSIC_PRINT_MASK_VERBOSE) {
> + if (block->logical_bytenr != bytenr &&
> + !(!block->is_metadata &&
> + block->logical_bytenr == 0))
> + printk(KERN_INFO
> + "Written block @%llu (%s/%llu/%d)"
> + " found in hash table, %c,"
> + " bytenr mismatch"
> + " (!= stored %llu).\n",
> + bytenr, dev_state->name,
> + dev_bytenr,
> + block->mirror_num,
> + btrfsic_get_block_type(state,
> + block),
> + block->logical_bytenr);
> + else
> + printk(KERN_INFO
> + "Written block @%llu (%s/%llu/%d)"
> + " found in hash table, %c.\n",
> + bytenr, dev_state->name,
> + dev_bytenr, block->mirror_num,
> + btrfsic_get_block_type(state,
> + block));
> + }
> block->logical_bytenr = bytenr;
> } else {
> if (num_pages * PAGE_CACHE_SIZE <
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-10-17 8:04 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-16 15:48 [PATCH 1/2] Btrfs: check_int: use the known block location Stefan Behrens
2014-10-16 15:48 ` [PATCH 2/2] Btrfs: check-int: don't complain about balanced blocks Stefan Behrens
2014-10-17 7:16 ` Wang Shilong
2014-10-17 8:06 ` Miao Xie
2014-10-17 7:15 ` [PATCH 1/2] Btrfs: check_int: use the known block location Wang Shilong
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.