Re: [PATCH] md: don't update recovery_cp when curr_resync is ACTIVE

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

 



On Mon, Jan 30, 2023 at 10:39 PM Hou Tao <houtao@xxxxxxxxxxxxxxx> wrote:
>
> From: Hou Tao <houtao1@xxxxxxxxxx>
>
> Don't update recovery_cp when curr_resync is MD_RESYNC_ACTIVE, otherwise
> md may skip the resync of the first 3 sectors if the resync procedure is
> interrupted before the first calling of ->sync_request() as shown below:
>
> md_do_sync thread          control thread
>   // setup resync
>   mddev->recovery_cp = 0
>   j = 0
>   mddev->curr_resync = MD_RESYNC_ACTIVE
>
>                              // e.g., set array as idle
>                              set_bit(MD_RECOVERY_INTR, &&mddev_recovery)
>   // resync loop
>   // check INTR before calling sync_request
>   !test_bit(MD_RECOVERY_INTR, &mddev->recovery
>
>   // resync interrupted
>   // update recovery_cp from 0 to 3
>   // the resync of three 3 sectors will be skipped
>   mddev->recovery_cp = 3
>
> Fixes: eac58d08d493 ("md: Use enum for overloaded magic numbers used by mddev->curr_resync")
> Signed-off-by: Hou Tao <houtao1@xxxxxxxxxx>

By the way, how did you find this issue? Is it from users/production?
Or just from reading the code?

Thanks,
Song



[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