Re: [PATCH 1/1] async_xor: It should add src_offs when dropping destination page

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Apr 25, 2021 at 2:23 AM Xiao Ni <xni@xxxxxxxxxx> wrote:
>
> Now we support sharing one page if PAGE_SIZE is not equal stripe size. To support this,
> it needs to support calculating xor value with different offsets for each r5dev. One
> offset array is used to record those offsets.
>
> In RMW mode, parity page is used as a source page. It sets ASYNC_TX_XOR_DROP_DST before
> calculating xor value in ops_run_prexor5. So it needs to add src_list and src_offs at
> the same time. Now it only needs src_list. So the xor value which is calculated is wrong.
> It can cause data corruption problem.
>
> I can reproduce this problem 100% on a POWER8 machine. The steps are:
> mdadm -CR /dev/md0 -l5 -n3 /dev/sdb1 /dev/sdc1 /dev/sdd1 --size=3G
> mkfs.xfs /dev/md0
> mount /dev/md0 /mnt/test
> mount: /mnt/test: mount(2) system call failed: Structure needs cleaning.
>

Thanks for the fix! Applied to md-next.

A few nits for future patches:

> Fixes: 29bcff787 ("md/raid5: add new xor function to support different page offset")

Please use "Fixes" with the first 12 characters of the hash: 29bcff787a25.

Also please run checkpatch.pl for the patch. In this one, it complains:

WARNING: Possible unwrapped commit description (prefer a maximum 75
chars per line)

Thanks,
Song


> Signed-off-by: Xiao Ni <xni@xxxxxxxxxx>
> ---
>  crypto/async_tx/async_xor.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/crypto/async_tx/async_xor.c b/crypto/async_tx/async_xor.c
> index a057ecb..6cd7f70 100644
> --- a/crypto/async_tx/async_xor.c
> +++ b/crypto/async_tx/async_xor.c
> @@ -233,6 +233,7 @@ async_xor_offs(struct page *dest, unsigned int offset,
>                 if (submit->flags & ASYNC_TX_XOR_DROP_DST) {
>                         src_cnt--;
>                         src_list++;
> +                       src_offs++;
>                 }
>
>                 /* wait for any prerequisite operations */
> --
> 2.7.5
>



[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux