All of lore.kernel.org
 help / color / mirror / Atom feed
From: Blazej Kucman <blazej.kucman@linux.intel.com>
To: Wu Guanghao <wuguanghao3@huawei.com>
Cc: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>,
	Yu Kuai <yukuai1@huaweicloud.com>, <xni@redhat.com>,
	<ncroxon@redhat.com>, <linux-raid@vger.kernel.org>,
	<liubo254@huawei.com>
Subject: Re: [PATCH v2] mdadm: Clear extra flags when initializing metadata
Date: Mon, 10 Mar 2025 15:41:59 +0100	[thread overview]
Message-ID: <20250310154159.00007ea6@linux.intel.com> (raw)
In-Reply-To: <27127b7d-7da6-cd31-01db-6725884a7286@huawei.com>

On Mon, 10 Mar 2025 19:09:36 +0800
Wu Guanghao <wuguanghao3@huawei.com> wrote:

Hi,
Thanks for your patch.

you are only adding a change to native metadata so it would be good to
emphasize this in the title, please change "mdadm:" to "super1:"

There are also a few checkpatch issues,


> When adding a disk to a RAID1 array, the metadata is read from the
> existing member disks for sync. However, only the bad_blocks flag are
> copied, the bad_blocks records are not copied, so the bad_blocks
> records are all zeros. The kernel function super_1_load() detects
> bad_blocks flag and reads the bad_blocks record, then sets the bad
> block using badblocks_set().

WARNING: Prefer a maximum 75 chars per line (possible unwrapped commit
description?) #8: 
the bad_blocks records are not copied, so the bad_blocks records are
all zeros.

> 
> After the kernel commit 1726c7746("badblocks: improve badblocks_set()
> for multiple ranges handling"), if the length of a bad_blocks record

please use SHA-1 ID - first 12 characters and space between ID and
(Tile) 

> is 0, it will return a failure. Therefore the device addition will
> fail.
> 
> So when adding a new disk, some flags cannot be sync and need to be
> cleared.
> 
> Signed-off-by: Wu Guanghao <wuguanghao3@huawei.com>
> ---
> Changelog:
> v2:
>     Add a testcase.
>     Clear extra replace flag.
> ---
>  super1.c                 |  4 ++++
>  tests/05r1-add-badblocks | 25 +++++++++++++++++++++++++
>  2 files changed, 29 insertions(+)
>  create mode 100644 tests/05r1-add-badblocks
> 
> diff --git a/super1.c b/super1.c
> index fe3c4c64..f4a29f4f 100644
> --- a/super1.c
> +++ b/super1.c
> @@ -1971,6 +1971,10 @@ static int write_init_super1(struct supertype
> *st) long bm_offset;
>  	bool raid0_need_layout = false;
> 
> +	/* Clear extra flags */
> +	sb->feature_map &= ~__cpu_to_le32(MD_FEATURE_BAD_BLOCKS |
> +                                          MD_FEATURE_REPLACEMENT);

ERROR: code indent should use tabs where possible
#36: FILE: super1.c:1976:
+                                          MD_FEATURE_REPLACEMENT);$

WARNING: please, no spaces at the start of a line
#36: FILE: super1.c:1976:
+                                          MD_FEATURE_REPLACEMENT);$

However, in this case the code will fit on one line, the limit is 100
characters.

> +
>  	/* Since linux kernel v5.4, raid0 always has a layout */
>  	if (has_raid0_layout(sb) && get_linux_version() >= 5004000)
>  		raid0_need_layout = true;
> diff --git a/tests/05r1-add-badblocks b/tests/05r1-add-badblocks
> new file mode 100644
> index 00000000..88b064f2
> --- /dev/null
> +++ b/tests/05r1-add-badblocks
> @@ -0,0 +1,25 @@
> +#
> +# create a raid1 with a drive and set badblocks for the drive.
> +# add a new drive does not cause an error.
> +#
> +
> +# create raid1
> +mdadm -CR $md0 -l1 -n2 -e1.0 $dev1 missing
> +testdev $md0 1 $mdsize1a 64
> +sleep 3
> +
> +# set badblocks for the drive
> +dev1_name=$(basename $dev1)
> +echo "10000 100" > /sys/block/md0/md/dev-$dev1_name/bad_blocks
> +echo "write_error" > /sys/block/md0/md/dev-$dev1_name/state
> +
> +# maybe fail but that's ok, as it's only intended to
> +# record the bad block in the metadata.
> +mkfs.ext3 $md0
> +
> +# re-add and recovery
> +mdadm $md0 -a $dev2
> +check recovery
> +
> +mdadm -S $md0
> +

Since you added the test, would you be able to issue a PR on github
to get the tests running?

Thansk,
Blazej

  reply	other threads:[~2025-03-10 14:42 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <b894d081-eda9-6b28-5fef-75753838a916@huawei.com>
2025-03-10 11:09 ` [PATCH v2] mdadm: Clear extra flags when initializing metadata Wu Guanghao
2025-03-10 14:41   ` Blazej Kucman [this message]
2025-03-11  1:10     ` Xiao Ni
2025-03-11  2:08       ` Wu Guanghao
2025-03-11  2:28         ` Xiao Ni
2025-03-11  2:23     ` Wu Guanghao

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=20250310154159.00007ea6@linux.intel.com \
    --to=blazej.kucman@linux.intel.com \
    --cc=linux-raid@vger.kernel.org \
    --cc=liubo254@huawei.com \
    --cc=mariusz.tkaczyk@linux.intel.com \
    --cc=ncroxon@redhat.com \
    --cc=wuguanghao3@huawei.com \
    --cc=xni@redhat.com \
    --cc=yukuai1@huaweicloud.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 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.