On Mon, Mar 10, 2025 at 10:42 PM Blazej Kucman <blazej.kucman@xxxxxxxxxxxxxxx> wrote: > > On Mon, 10 Mar 2025 19:09:36 +0800 > Wu Guanghao <wuguanghao3@xxxxxxxxxx> 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@xxxxxxxxxx> > > --- > > 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? Hi all I've been fixing the test failures recently and I'll create a PR for this patch set. So you can create a PR tomorrow. If you are not familiar with this, I can help. Regards Xiao > > Thansk, > Blazej >