* [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
* [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 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 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 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
* 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.