Message ID | 20240220153059.11233-4-xni@redhat.com (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Mike Snitzer |
Headers | show |
Series | Fix regression bugs | expand |
Hi, 在 2024/02/20 23:30, Xiao Ni 写道: > If all flush bios finish fast, it doesn't decrease active_io. And it will > stuck when stopping array. > > This can be reproduced by lvm2 test shell/integrity-caching.sh. > But it can't reproduce 100%. > > Fixes: fa2bbff7b0b4 ("md: synchronize flush io with array reconfiguration") > Signed-off-by: Xiao Ni <xni@redhat.com> Same patch is already applied: 855678ed8534 md: Fix missing release of 'active_io' for flush Thanks, Kuai > --- > drivers/md/md.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/md/md.c b/drivers/md/md.c > index 77e3af7cf6bb..a41bed286fd2 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -579,8 +579,12 @@ static void submit_flushes(struct work_struct *ws) > rcu_read_lock(); > } > rcu_read_unlock(); > - if (atomic_dec_and_test(&mddev->flush_pending)) > + if (atomic_dec_and_test(&mddev->flush_pending)) { > + /* The pair is percpu_ref_get() from md_flush_request() */ > + percpu_ref_put(&mddev->active_io); > + > queue_work(md_wq, &mddev->flush_work); > + } > } > > static void md_submit_flush_data(struct work_struct *ws) >
On Fri, Feb 23, 2024 at 11:06 AM Yu Kuai <yukuai1@huaweicloud.com> wrote: > > Hi, > > 在 2024/02/20 23:30, Xiao Ni 写道: > > If all flush bios finish fast, it doesn't decrease active_io. And it will > > stuck when stopping array. > > > > This can be reproduced by lvm2 test shell/integrity-caching.sh. > > But it can't reproduce 100%. > > > > Fixes: fa2bbff7b0b4 ("md: synchronize flush io with array reconfiguration") > > Signed-off-by: Xiao Ni <xni@redhat.com> > > Same patch is already applied: > > 855678ed8534 md: Fix missing release of 'active_io' for flush Thanks for the information. I used Linus's tree so I missed this one. Regards Xiao > > Thanks, > Kuai > > > --- > > drivers/md/md.c | 6 +++++- > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/md/md.c b/drivers/md/md.c > > index 77e3af7cf6bb..a41bed286fd2 100644 > > --- a/drivers/md/md.c > > +++ b/drivers/md/md.c > > @@ -579,8 +579,12 @@ static void submit_flushes(struct work_struct *ws) > > rcu_read_lock(); > > } > > rcu_read_unlock(); > > - if (atomic_dec_and_test(&mddev->flush_pending)) > > + if (atomic_dec_and_test(&mddev->flush_pending)) { > > + /* The pair is percpu_ref_get() from md_flush_request() */ > > + percpu_ref_put(&mddev->active_io); > > + > > queue_work(md_wq, &mddev->flush_work); > > + } > > } > > > > static void md_submit_flush_data(struct work_struct *ws) > > >
diff --git a/drivers/md/md.c b/drivers/md/md.c index 77e3af7cf6bb..a41bed286fd2 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -579,8 +579,12 @@ static void submit_flushes(struct work_struct *ws) rcu_read_lock(); } rcu_read_unlock(); - if (atomic_dec_and_test(&mddev->flush_pending)) + if (atomic_dec_and_test(&mddev->flush_pending)) { + /* The pair is percpu_ref_get() from md_flush_request() */ + percpu_ref_put(&mddev->active_io); + queue_work(md_wq, &mddev->flush_work); + } } static void md_submit_flush_data(struct work_struct *ws)
If all flush bios finish fast, it doesn't decrease active_io. And it will stuck when stopping array. This can be reproduced by lvm2 test shell/integrity-caching.sh. But it can't reproduce 100%. Fixes: fa2bbff7b0b4 ("md: synchronize flush io with array reconfiguration") Signed-off-by: Xiao Ni <xni@redhat.com> --- drivers/md/md.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)