* [PATCH 0/2] blk-cgroup: two fixes on list corruption
@ 2024-05-15 1:31 Ming Lei
2024-05-15 1:31 ` [PATCH 1/2] blk-cgroup: fix list corruption from resetting io stat Ming Lei
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Ming Lei @ 2024-05-15 1:31 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-block, Tejun Heo, Waiman Long, Ming Lei
Hello,
The 1st patch fixes list corruption when running reset_iostat(cgroup
v1).
The 2nd patch fixes potential list corruption when reordering of
writting to ->lqueued and reading from iostat instance.
Ming Lei (2):
blk-cgroup: fix list corruption from resetting io stat
blk-cgroup: fix list corruption from reorder of WRITE ->lqueued
block/blk-cgroup.c | 68 ++++++++++++++++++++++++++++++----------------
1 file changed, 45 insertions(+), 23 deletions(-)
--
2.44.0
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 1/2] blk-cgroup: fix list corruption from resetting io stat 2024-05-15 1:31 [PATCH 0/2] blk-cgroup: two fixes on list corruption Ming Lei @ 2024-05-15 1:31 ` Ming Lei 2024-05-15 13:59 ` Waiman Long 2024-05-15 16:49 ` Tejun Heo 2024-05-15 1:31 ` [PATCH 2/2] blk-cgroup: fix list corruption from reorder of WRITE ->lqueued Ming Lei 2024-05-16 2:21 ` [PATCH 0/2] blk-cgroup: two fixes on list corruption Jens Axboe 2 siblings, 2 replies; 9+ messages in thread From: Ming Lei @ 2024-05-15 1:31 UTC (permalink / raw) To: Jens Axboe; +Cc: linux-block, Tejun Heo, Waiman Long, Ming Lei, Jay Shin Since commit 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()"), each iostat instance is added to blkcg percpu list, so blkcg_reset_stats() can't reset the stat instance by memset(), otherwise the llist may be corrupted. Fix the issue by only resetting the counter part. Cc: Tejun Heo <tj@kernel.org> Cc: Waiman Long <longman@redhat.com> Cc: Jay Shin <jaeshin@redhat.com> Fixes: 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()") Signed-off-by: Ming Lei <ming.lei@redhat.com> --- block/blk-cgroup.c | 58 ++++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c index 059467086b13..86752b1652b5 100644 --- a/block/blk-cgroup.c +++ b/block/blk-cgroup.c @@ -619,12 +619,45 @@ static void blkg_destroy_all(struct gendisk *disk) spin_unlock_irq(&q->queue_lock); } +static void blkg_iostat_set(struct blkg_iostat *dst, struct blkg_iostat *src) +{ + int i; + + for (i = 0; i < BLKG_IOSTAT_NR; i++) { + dst->bytes[i] = src->bytes[i]; + dst->ios[i] = src->ios[i]; + } +} + +static void __blkg_clear_stat(struct blkg_iostat_set *bis) +{ + struct blkg_iostat cur = {0}; + unsigned long flags; + + flags = u64_stats_update_begin_irqsave(&bis->sync); + blkg_iostat_set(&bis->cur, &cur); + blkg_iostat_set(&bis->last, &cur); + u64_stats_update_end_irqrestore(&bis->sync, flags); +} + +static void blkg_clear_stat(struct blkcg_gq *blkg) +{ + int cpu; + + for_each_possible_cpu(cpu) { + struct blkg_iostat_set *s = per_cpu_ptr(blkg->iostat_cpu, cpu); + + __blkg_clear_stat(s); + } + __blkg_clear_stat(&blkg->iostat); +} + static int blkcg_reset_stats(struct cgroup_subsys_state *css, struct cftype *cftype, u64 val) { struct blkcg *blkcg = css_to_blkcg(css); struct blkcg_gq *blkg; - int i, cpu; + int i; mutex_lock(&blkcg_pol_mutex); spin_lock_irq(&blkcg->lock); @@ -635,18 +668,7 @@ static int blkcg_reset_stats(struct cgroup_subsys_state *css, * anyway. If you get hit by a race, retry. */ hlist_for_each_entry(blkg, &blkcg->blkg_list, blkcg_node) { - for_each_possible_cpu(cpu) { - struct blkg_iostat_set *bis = - per_cpu_ptr(blkg->iostat_cpu, cpu); - memset(bis, 0, sizeof(*bis)); - - /* Re-initialize the cleared blkg_iostat_set */ - u64_stats_init(&bis->sync); - bis->blkg = blkg; - } - memset(&blkg->iostat, 0, sizeof(blkg->iostat)); - u64_stats_init(&blkg->iostat.sync); - + blkg_clear_stat(blkg); for (i = 0; i < BLKCG_MAX_POLS; i++) { struct blkcg_policy *pol = blkcg_policy[i]; @@ -949,16 +971,6 @@ void blkg_conf_exit(struct blkg_conf_ctx *ctx) } EXPORT_SYMBOL_GPL(blkg_conf_exit); -static void blkg_iostat_set(struct blkg_iostat *dst, struct blkg_iostat *src) -{ - int i; - - for (i = 0; i < BLKG_IOSTAT_NR; i++) { - dst->bytes[i] = src->bytes[i]; - dst->ios[i] = src->ios[i]; - } -} - static void blkg_iostat_add(struct blkg_iostat *dst, struct blkg_iostat *src) { int i; -- 2.44.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] blk-cgroup: fix list corruption from resetting io stat 2024-05-15 1:31 ` [PATCH 1/2] blk-cgroup: fix list corruption from resetting io stat Ming Lei @ 2024-05-15 13:59 ` Waiman Long 2024-05-15 16:49 ` Tejun Heo 1 sibling, 0 replies; 9+ messages in thread From: Waiman Long @ 2024-05-15 13:59 UTC (permalink / raw) To: Ming Lei, Jens Axboe; +Cc: linux-block, Tejun Heo, Jay Shin On 5/14/24 21:31, Ming Lei wrote: > Since commit 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()"), > each iostat instance is added to blkcg percpu list, so blkcg_reset_stats() > can't reset the stat instance by memset(), otherwise the llist may be > corrupted. > > Fix the issue by only resetting the counter part. > > Cc: Tejun Heo <tj@kernel.org> > Cc: Waiman Long <longman@redhat.com> > Cc: Jay Shin <jaeshin@redhat.com> > Fixes: 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()") > Signed-off-by: Ming Lei <ming.lei@redhat.com> > --- > block/blk-cgroup.c | 58 ++++++++++++++++++++++++++++------------------ > 1 file changed, 35 insertions(+), 23 deletions(-) > > diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c > index 059467086b13..86752b1652b5 100644 > --- a/block/blk-cgroup.c > +++ b/block/blk-cgroup.c > @@ -619,12 +619,45 @@ static void blkg_destroy_all(struct gendisk *disk) > spin_unlock_irq(&q->queue_lock); > } > > +static void blkg_iostat_set(struct blkg_iostat *dst, struct blkg_iostat *src) > +{ > + int i; > + > + for (i = 0; i < BLKG_IOSTAT_NR; i++) { > + dst->bytes[i] = src->bytes[i]; > + dst->ios[i] = src->ios[i]; > + } > +} > + > +static void __blkg_clear_stat(struct blkg_iostat_set *bis) > +{ > + struct blkg_iostat cur = {0}; > + unsigned long flags; > + > + flags = u64_stats_update_begin_irqsave(&bis->sync); > + blkg_iostat_set(&bis->cur, &cur); > + blkg_iostat_set(&bis->last, &cur); > + u64_stats_update_end_irqrestore(&bis->sync, flags); > +} > + > +static void blkg_clear_stat(struct blkcg_gq *blkg) > +{ > + int cpu; > + > + for_each_possible_cpu(cpu) { > + struct blkg_iostat_set *s = per_cpu_ptr(blkg->iostat_cpu, cpu); > + > + __blkg_clear_stat(s); > + } > + __blkg_clear_stat(&blkg->iostat); > +} > + > static int blkcg_reset_stats(struct cgroup_subsys_state *css, > struct cftype *cftype, u64 val) > { > struct blkcg *blkcg = css_to_blkcg(css); > struct blkcg_gq *blkg; > - int i, cpu; > + int i; > > mutex_lock(&blkcg_pol_mutex); > spin_lock_irq(&blkcg->lock); > @@ -635,18 +668,7 @@ static int blkcg_reset_stats(struct cgroup_subsys_state *css, > * anyway. If you get hit by a race, retry. > */ > hlist_for_each_entry(blkg, &blkcg->blkg_list, blkcg_node) { > - for_each_possible_cpu(cpu) { > - struct blkg_iostat_set *bis = > - per_cpu_ptr(blkg->iostat_cpu, cpu); > - memset(bis, 0, sizeof(*bis)); > - > - /* Re-initialize the cleared blkg_iostat_set */ > - u64_stats_init(&bis->sync); > - bis->blkg = blkg; > - } > - memset(&blkg->iostat, 0, sizeof(blkg->iostat)); > - u64_stats_init(&blkg->iostat.sync); > - > + blkg_clear_stat(blkg); > for (i = 0; i < BLKCG_MAX_POLS; i++) { > struct blkcg_policy *pol = blkcg_policy[i]; > > @@ -949,16 +971,6 @@ void blkg_conf_exit(struct blkg_conf_ctx *ctx) > } > EXPORT_SYMBOL_GPL(blkg_conf_exit); > > -static void blkg_iostat_set(struct blkg_iostat *dst, struct blkg_iostat *src) > -{ > - int i; > - > - for (i = 0; i < BLKG_IOSTAT_NR; i++) { > - dst->bytes[i] = src->bytes[i]; > - dst->ios[i] = src->ios[i]; > - } > -} > - > static void blkg_iostat_add(struct blkg_iostat *dst, struct blkg_iostat *src) > { > int i; Reviewed-by: Waiman Long <longman@redhat.com> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] blk-cgroup: fix list corruption from resetting io stat 2024-05-15 1:31 ` [PATCH 1/2] blk-cgroup: fix list corruption from resetting io stat Ming Lei 2024-05-15 13:59 ` Waiman Long @ 2024-05-15 16:49 ` Tejun Heo 1 sibling, 0 replies; 9+ messages in thread From: Tejun Heo @ 2024-05-15 16:49 UTC (permalink / raw) To: Ming Lei; +Cc: Jens Axboe, linux-block, Waiman Long, Jay Shin On Wed, May 15, 2024 at 09:31:56AM +0800, Ming Lei wrote: > Since commit 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()"), > each iostat instance is added to blkcg percpu list, so blkcg_reset_stats() > can't reset the stat instance by memset(), otherwise the llist may be > corrupted. > > Fix the issue by only resetting the counter part. > > Cc: Tejun Heo <tj@kernel.org> > Cc: Waiman Long <longman@redhat.com> > Cc: Jay Shin <jaeshin@redhat.com> > Fixes: 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()") > Signed-off-by: Ming Lei <ming.lei@redhat.com> Acked-by: Tejun Heo <tj@kernel.org> Thanks. -- tejun ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/2] blk-cgroup: fix list corruption from reorder of WRITE ->lqueued 2024-05-15 1:31 [PATCH 0/2] blk-cgroup: two fixes on list corruption Ming Lei 2024-05-15 1:31 ` [PATCH 1/2] blk-cgroup: fix list corruption from resetting io stat Ming Lei @ 2024-05-15 1:31 ` Ming Lei 2024-05-15 14:09 ` Waiman Long 2024-05-16 2:21 ` [PATCH 0/2] blk-cgroup: two fixes on list corruption Jens Axboe 2 siblings, 1 reply; 9+ messages in thread From: Ming Lei @ 2024-05-15 1:31 UTC (permalink / raw) To: Jens Axboe; +Cc: linux-block, Tejun Heo, Waiman Long, Ming Lei __blkcg_rstat_flush() can be run anytime, especially when blk_cgroup_bio_start is being executed. If WRITE of `->lqueued` is re-ordered with READ of 'bisc->lnode.next' in the loop of __blkcg_rstat_flush(), `next_bisc` can be assigned with one stat instance being added in blk_cgroup_bio_start(), then the local list in __blkcg_rstat_flush() could be corrupted. Fix the issue by adding one barrier. Cc: Tejun Heo <tj@kernel.org> Cc: Waiman Long <longman@redhat.com> Fixes: 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()") Signed-off-by: Ming Lei <ming.lei@redhat.com> --- block/blk-cgroup.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c index 86752b1652b5..b36ba1d40ba1 100644 --- a/block/blk-cgroup.c +++ b/block/blk-cgroup.c @@ -1036,6 +1036,16 @@ static void __blkcg_rstat_flush(struct blkcg *blkcg, int cpu) struct blkg_iostat cur; unsigned int seq; + /* + * Order assignment of `next_bisc` from `bisc->lnode.next` in + * llist_for_each_entry_safe and clearing `bisc->lqueued` for + * avoiding to assign `next_bisc` with new next pointer added + * in blk_cgroup_bio_start() in case of re-ordering. + * + * The pair barrier is implied in llist_add() in blk_cgroup_bio_start(). + */ + smp_mb(); + WRITE_ONCE(bisc->lqueued, false); /* fetch the current per-cpu values */ -- 2.44.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] blk-cgroup: fix list corruption from reorder of WRITE ->lqueued 2024-05-15 1:31 ` [PATCH 2/2] blk-cgroup: fix list corruption from reorder of WRITE ->lqueued Ming Lei @ 2024-05-15 14:09 ` Waiman Long 2024-05-15 14:46 ` Waiman Long 2024-05-16 0:58 ` Ming Lei 0 siblings, 2 replies; 9+ messages in thread From: Waiman Long @ 2024-05-15 14:09 UTC (permalink / raw) To: Ming Lei, Jens Axboe; +Cc: linux-block, Tejun Heo On 5/14/24 21:31, Ming Lei wrote: > __blkcg_rstat_flush() can be run anytime, especially when blk_cgroup_bio_start > is being executed. > > If WRITE of `->lqueued` is re-ordered with READ of 'bisc->lnode.next' in > the loop of __blkcg_rstat_flush(), `next_bisc` can be assigned with one > stat instance being added in blk_cgroup_bio_start(), then the local > list in __blkcg_rstat_flush() could be corrupted. > > Fix the issue by adding one barrier. > > Cc: Tejun Heo <tj@kernel.org> > Cc: Waiman Long <longman@redhat.com> > Fixes: 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()") > Signed-off-by: Ming Lei <ming.lei@redhat.com> > --- > block/blk-cgroup.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c > index 86752b1652b5..b36ba1d40ba1 100644 > --- a/block/blk-cgroup.c > +++ b/block/blk-cgroup.c > @@ -1036,6 +1036,16 @@ static void __blkcg_rstat_flush(struct blkcg *blkcg, int cpu) > struct blkg_iostat cur; > unsigned int seq; > > + /* > + * Order assignment of `next_bisc` from `bisc->lnode.next` in > + * llist_for_each_entry_safe and clearing `bisc->lqueued` for > + * avoiding to assign `next_bisc` with new next pointer added > + * in blk_cgroup_bio_start() in case of re-ordering. > + * > + * The pair barrier is implied in llist_add() in blk_cgroup_bio_start(). > + */ > + smp_mb(); > + > WRITE_ONCE(bisc->lqueued, false); I believe replacing WRITE_ONCE() by smp_store_release() and the READ_ONCE() in blk_cgroup_bio_start() by smp_load_acquire() should provide enough barrier to prevent unexpected reordering as the subsequent u64_stats_fetch_begin() will also provide a read barrier for subsequent read. Cheers, Longman > > /* fetch the current per-cpu values */ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] blk-cgroup: fix list corruption from reorder of WRITE ->lqueued 2024-05-15 14:09 ` Waiman Long @ 2024-05-15 14:46 ` Waiman Long 2024-05-16 0:58 ` Ming Lei 1 sibling, 0 replies; 9+ messages in thread From: Waiman Long @ 2024-05-15 14:46 UTC (permalink / raw) To: Ming Lei, Jens Axboe; +Cc: linux-block, Tejun Heo On 5/15/24 10:09, Waiman Long wrote: > > On 5/14/24 21:31, Ming Lei wrote: >> __blkcg_rstat_flush() can be run anytime, especially when >> blk_cgroup_bio_start >> is being executed. >> >> If WRITE of `->lqueued` is re-ordered with READ of 'bisc->lnode.next' in >> the loop of __blkcg_rstat_flush(), `next_bisc` can be assigned with one >> stat instance being added in blk_cgroup_bio_start(), then the local >> list in __blkcg_rstat_flush() could be corrupted. >> >> Fix the issue by adding one barrier. >> >> Cc: Tejun Heo <tj@kernel.org> >> Cc: Waiman Long <longman@redhat.com> >> Fixes: 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()") >> Signed-off-by: Ming Lei <ming.lei@redhat.com> >> --- >> block/blk-cgroup.c | 10 ++++++++++ >> 1 file changed, 10 insertions(+) >> >> diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c >> index 86752b1652b5..b36ba1d40ba1 100644 >> --- a/block/blk-cgroup.c >> +++ b/block/blk-cgroup.c >> @@ -1036,6 +1036,16 @@ static void __blkcg_rstat_flush(struct blkcg >> *blkcg, int cpu) >> struct blkg_iostat cur; >> unsigned int seq; >> + /* >> + * Order assignment of `next_bisc` from `bisc->lnode.next` in >> + * llist_for_each_entry_safe and clearing `bisc->lqueued` for >> + * avoiding to assign `next_bisc` with new next pointer added >> + * in blk_cgroup_bio_start() in case of re-ordering. >> + * >> + * The pair barrier is implied in llist_add() in >> blk_cgroup_bio_start(). >> + */ >> + smp_mb(); >> + >> WRITE_ONCE(bisc->lqueued, false); > > I believe replacing WRITE_ONCE() by smp_store_release() and the > READ_ONCE() in blk_cgroup_bio_start() by smp_load_acquire() should > provide enough barrier to prevent unexpected reordering as the > subsequent u64_stats_fetch_begin() will also provide a read barrier > for subsequent read. We can also use a smp_acquire__after_ctrl_dep() after the READ_ONCE() in blk_cgroup_bio_start() instead of a full smp_load_acquire() to optimize it a bit more. Cheers, Longman ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] blk-cgroup: fix list corruption from reorder of WRITE ->lqueued 2024-05-15 14:09 ` Waiman Long 2024-05-15 14:46 ` Waiman Long @ 2024-05-16 0:58 ` Ming Lei 1 sibling, 0 replies; 9+ messages in thread From: Ming Lei @ 2024-05-16 0:58 UTC (permalink / raw) To: Waiman Long; +Cc: Jens Axboe, linux-block, Tejun Heo, ming.lei On Wed, May 15, 2024 at 10:09:30AM -0400, Waiman Long wrote: > > On 5/14/24 21:31, Ming Lei wrote: > > __blkcg_rstat_flush() can be run anytime, especially when blk_cgroup_bio_start > > is being executed. > > > > If WRITE of `->lqueued` is re-ordered with READ of 'bisc->lnode.next' in > > the loop of __blkcg_rstat_flush(), `next_bisc` can be assigned with one > > stat instance being added in blk_cgroup_bio_start(), then the local > > list in __blkcg_rstat_flush() could be corrupted. > > > > Fix the issue by adding one barrier. > > > > Cc: Tejun Heo <tj@kernel.org> > > Cc: Waiman Long <longman@redhat.com> > > Fixes: 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()") > > Signed-off-by: Ming Lei <ming.lei@redhat.com> > > --- > > block/blk-cgroup.c | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c > > index 86752b1652b5..b36ba1d40ba1 100644 > > --- a/block/blk-cgroup.c > > +++ b/block/blk-cgroup.c > > @@ -1036,6 +1036,16 @@ static void __blkcg_rstat_flush(struct blkcg *blkcg, int cpu) > > struct blkg_iostat cur; > > unsigned int seq; > > + /* > > + * Order assignment of `next_bisc` from `bisc->lnode.next` in > > + * llist_for_each_entry_safe and clearing `bisc->lqueued` for > > + * avoiding to assign `next_bisc` with new next pointer added > > + * in blk_cgroup_bio_start() in case of re-ordering. > > + * > > + * The pair barrier is implied in llist_add() in blk_cgroup_bio_start(). > > + */ > > + smp_mb(); > > + > > WRITE_ONCE(bisc->lqueued, false); > > I believe replacing WRITE_ONCE() by smp_store_release() and the READ_ONCE() > in blk_cgroup_bio_start() by smp_load_acquire() should provide enough > barrier to prevent unexpected reordering as Yeah, smp_load_acquire() and smp_store_release() pair works too, but with one extra cost of smp_mb() around llist_add() which implies barrier already. So I prefer to this patch. > the subsequent > u64_stats_fetch_begin() will also provide a read barrier for subsequent > read. u64_stats_fetch_begin() is nop in case of `BITS_PER_LONG == 64`. Thanks, Ming ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] blk-cgroup: two fixes on list corruption 2024-05-15 1:31 [PATCH 0/2] blk-cgroup: two fixes on list corruption Ming Lei 2024-05-15 1:31 ` [PATCH 1/2] blk-cgroup: fix list corruption from resetting io stat Ming Lei 2024-05-15 1:31 ` [PATCH 2/2] blk-cgroup: fix list corruption from reorder of WRITE ->lqueued Ming Lei @ 2024-05-16 2:21 ` Jens Axboe 2 siblings, 0 replies; 9+ messages in thread From: Jens Axboe @ 2024-05-16 2:21 UTC (permalink / raw) To: Ming Lei; +Cc: linux-block, Tejun Heo, Waiman Long On Wed, 15 May 2024 09:31:55 +0800, Ming Lei wrote: > The 1st patch fixes list corruption when running reset_iostat(cgroup > v1). > > The 2nd patch fixes potential list corruption when reordering of > writting to ->lqueued and reading from iostat instance. > > > [...] Applied, thanks! [1/2] blk-cgroup: fix list corruption from resetting io stat commit: 6da6680632792709cecf2b006f2fe3ca7857e791 [2/2] blk-cgroup: fix list corruption from reorder of WRITE ->lqueued commit: d0aac2363549e12cc79b8e285f13d5a9f42fd08e Best regards, -- Jens Axboe ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-05-16 2:21 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-05-15 1:31 [PATCH 0/2] blk-cgroup: two fixes on list corruption Ming Lei 2024-05-15 1:31 ` [PATCH 1/2] blk-cgroup: fix list corruption from resetting io stat Ming Lei 2024-05-15 13:59 ` Waiman Long 2024-05-15 16:49 ` Tejun Heo 2024-05-15 1:31 ` [PATCH 2/2] blk-cgroup: fix list corruption from reorder of WRITE ->lqueued Ming Lei 2024-05-15 14:09 ` Waiman Long 2024-05-15 14:46 ` Waiman Long 2024-05-16 0:58 ` Ming Lei 2024-05-16 2:21 ` [PATCH 0/2] blk-cgroup: two fixes on list corruption Jens Axboe
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.