On Sun, Aug 20, 2023 at 5:13 PM Yu Kuai <yukuai1@xxxxxxxxxxxxxxx> wrote: > > From: Yu Kuai <yukuai3@xxxxxxxxxx> > > It's a little weird to borrow 'del_work' for md_start_sync(), declare > a new work_struct 'sync_work' for md_start_sync(). > > Signed-off-by: Yu Kuai <yukuai3@xxxxxxxxxx> > --- > drivers/md/md.c | 10 ++++++---- > drivers/md/md.h | 5 ++++- > 2 files changed, 10 insertions(+), 5 deletions(-) > > diff --git a/drivers/md/md.c b/drivers/md/md.c > index 5c3c19b8d509..90815be1e80f 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -631,13 +631,13 @@ void mddev_put(struct mddev *mddev) > * flush_workqueue() after mddev_find will succeed in waiting > * for the work to be done. > */ > - INIT_WORK(&mddev->del_work, mddev_delayed_delete); > queue_work(md_misc_wq, &mddev->del_work); > } > spin_unlock(&all_mddevs_lock); > } > > static void md_safemode_timeout(struct timer_list *t); > +static void md_start_sync(struct work_struct *ws); > > void mddev_init(struct mddev *mddev) > { > @@ -662,6 +662,9 @@ void mddev_init(struct mddev *mddev) > mddev->resync_min = 0; > mddev->resync_max = MaxSector; > mddev->level = LEVEL_NONE; > + > + INIT_WORK(&mddev->sync_work, md_start_sync); > + INIT_WORK(&mddev->del_work, mddev_delayed_delete); > } > EXPORT_SYMBOL_GPL(mddev_init); > > @@ -9245,7 +9248,7 @@ static int remove_and_add_spares(struct mddev *mddev, > > static void md_start_sync(struct work_struct *ws) > { > - struct mddev *mddev = container_of(ws, struct mddev, del_work); > + struct mddev *mddev = container_of(ws, struct mddev, sync_work); > > rcu_assign_pointer(mddev->sync_thread, > md_register_thread(md_do_sync, mddev, "resync")); > @@ -9458,8 +9461,7 @@ void md_check_recovery(struct mddev *mddev) > */ > md_bitmap_write_all(mddev->bitmap); > } > - INIT_WORK(&mddev->del_work, md_start_sync); > - queue_work(md_misc_wq, &mddev->del_work); > + queue_work(md_misc_wq, &mddev->sync_work); > goto unlock; > } > not_running: > diff --git a/drivers/md/md.h b/drivers/md/md.h > index 9bcb77bca963..64d05cb65287 100644 > --- a/drivers/md/md.h > +++ b/drivers/md/md.h > @@ -450,7 +450,10 @@ struct mddev { > struct kernfs_node *sysfs_degraded; /*handle for 'degraded' */ > struct kernfs_node *sysfs_level; /*handle for 'level' */ > > - struct work_struct del_work; /* used for delayed sysfs removal */ > + /* used for delayed sysfs removal */ > + struct work_struct del_work; > + /* used for register new sync thread */ > + struct work_struct sync_work; > > /* "lock" protects: > * flush_bio transition from NULL to !NULL > -- > 2.39.2 > Reviewed-by: Xiao Ni <xni@xxxxxxxxxx>