linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Behrens <sbehrens@giantdisaster.de>
To: Zhaolei <zhaolei@cn.fujitsu.com>,
	linux-btrfs <linux-btrfs@vger.kernel.org>
Cc: Miao Xie <miaox@cn.fujitsu.com>
Subject: Re: [PATCH 10/16] Btrfs: Avoid trustless page-level-repair in dev-replace
Date: Mon, 19 Jan 2015 13:25:30 +0100	[thread overview]
Message-ID: <54BCF7BA.90302@giantdisaster.de> (raw)
In-Reply-To: <1421666465-3892-11-git-send-email-zhaolei@cn.fujitsu.com>

On Mon, 19 Jan 2015 19:20:59 +0800, Zhaolei wrote:
> From: Zhao Lei <zhaolei@cn.fujitsu.com>
> 
> Current code of page level repair for dev-replace can only support
> io-error, we can't use it in checksum-fail case.
> 
> We can skip this kind of repair in dev-replace just as we in scrub.

Why? I see dev-replace as a disk copy operation with integrated support
to pick the best mirror source device. Therefore the strategy was to
always write to the target device, even in case of uncorrectable
checksum errors. Maybe the checksum was wrong, not the data itself, and
you can repair files later by recalculating the checksum. If you write
nothing at all, some random, old data remains on the target disk,
instead of potentially fixable data.

Therefore this is handled differently for the dev-replace and for the
scrub case. For scrub, data is only overwritten when the source data is
verified, since the goal is to repair something. Dev-replace's goal is
to copy something.


> 
> Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
> Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
> ---
>  fs/btrfs/scrub.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
> index 9afc6dd..6cf0dc7 100644
> --- a/fs/btrfs/scrub.c
> +++ b/fs/btrfs/scrub.c
> @@ -1099,6 +1099,10 @@ nodatasum_case:
>  		}
>  	}
>  
> +	/* can only fix I/O errors from here on */
> +	if (sblock_bad->no_io_error_seen)
> +		goto did_not_correct_error;
> +
>  	/*
>  	 * for dev_replace, pick good pages and write to the target device.
>  	 */
> @@ -1181,10 +1185,6 @@ nodatasum_case:
>  	 * area are unreadable.
>  	 */
>  
> -	/* can only fix I/O errors from here on */
> -	if (sblock_bad->no_io_error_seen)
> -		goto did_not_correct_error;
> -
>  	success = 1;
>  	for (page_num = 0; page_num < sblock_bad->page_count; page_num++) {
>  		struct scrub_page *page_bad = sblock_bad->pagev[page_num];
> 


  reply	other threads:[~2015-01-19 12:25 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-19 11:20 [PATCH v2 00/16] Btrfs: Cleanup for raid56 scrub Zhaolei
2015-01-19 11:20 ` [PATCH 01/16] Btrfs: fix a out-of-bound access of raid_map Zhaolei
2015-01-19 11:20 ` [PATCH 02/16] Btrfs: sort raid_map before adding tgtdev stripes Zhaolei
2015-01-19 11:20 ` [PATCH 03/16] Btrfs: Make raid_map array be inlined in btrfs_bio structure Zhaolei
2015-01-19 11:20 ` [PATCH 04/16] Btrfs: add ref_count and free function for btrfs_bio Zhaolei
2015-01-19 11:20 ` [PATCH 05/16] Btrfs: Fix a jump typo of nodatasum_case to avoid wrong WARN_ON() Zhaolei
2015-01-19 11:20 ` [PATCH 06/16] Btrfs: Remove noneed force_write in scrub_write_block_to_dev_replace Zhaolei
2015-01-19 11:20 ` [PATCH 07/16] Btrfs: Cleanup btrfs_bio_counter_inc_blocked() Zhaolei
2015-01-19 11:20 ` [PATCH 08/16] Btrfs: btrfs_rm_dev_replace_blocked(): Use wait_event() Zhaolei
2015-01-19 11:20 ` [PATCH 09/16] Btrfs: Break loop when reach BTRFS_MAX_MIRRORS in scrub_setup_recheck_block() Zhaolei
2015-01-19 11:20 ` [PATCH 10/16] Btrfs: Avoid trustless page-level-repair in dev-replace Zhaolei
2015-01-19 12:25   ` Stefan Behrens [this message]
2015-01-20  3:07     ` Zhao Lei
2015-01-19 11:21 ` [PATCH 11/16] Btrfs: Separate finding-right-mirror and writing-to-target's process in scrub_handle_errored_block() Zhaolei
2015-01-19 11:21 ` [PATCH 12/16] Btrfs: Combine per-page recover in dev-replace and scrub Zhaolei
2015-01-19 11:21 ` [PATCH 13/16] Btrfs: Simplify scrub_setup_recheck_block()'s argument Zhaolei
2015-01-19 11:21 ` [PATCH 14/16] Btrfs: Include map_type in raid_bio Zhaolei
2015-01-19 11:21 ` [PATCH 15/16] Btrfs: Introduce BTRFS_BLOCK_GROUP_RAID56_MASK to check raid56 simply Zhaolei
2015-01-19 11:21 ` [PATCH 16/16] Rename all ref_count to refs in struct Zhaolei

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54BCF7BA.90302@giantdisaster.de \
    --to=sbehrens@giantdisaster.de \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=miaox@cn.fujitsu.com \
    --cc=zhaolei@cn.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).