On Tue, Jan 31, 2023 at 9:06 AM Logan Gunthorpe <logang@xxxxxxxxxxxx> wrote: > > > > On 2023-01-31 12:07 a.m., Hou Tao 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> > > Nice Catch! Thanks. > > Reviewed-by: Logan Gunthorpe <logang@xxxxxxxxxxxx> Applied to md-next. Thanks! Song