On 3/7/23 4:49 AM, Shinichiro Kawasaki wrote: > On Mar 07, 2023 / 18:28, Yu Kuai wrote: >> Hi, Jan >> >> 在 2023/03/07 18:20, Jan Kara 写道: > > [...] > >>> So rather doing something like: >>> >>> bfqq_data->stable_merge_bfqq = NULL; >>> new_bfqq = bfq_setup_stable_merge(bfqd, bfqq, >>> stable_merge_bfqq, bfqq_data); >>> bfq_put_stable_ref(stable_merge_bfqq); >>> return new_bfqq; >>> >>> should work in bfq_setup_cooperator(). >> >> Yes, this will work. > > Based on the description above, I quickly created the dirty patch below, and > confirmed it avoids the BUG. Looks good. Jan, Yu, thanks for the quick actions. > Let me wait for the formal patch. > > diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c > index 8a8d4441519c..50eb435efed0 100644 > --- a/block/bfq-iosched.c > +++ b/block/bfq-iosched.c > @@ -2932,15 +2932,15 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq, > msecs_to_jiffies(bfq_late_stable_merging))) { > struct bfq_queue *stable_merge_bfqq = > bfqq_data->stable_merge_bfqq; > + static struct bfq_queue *new_bfqq; > > /* deschedule stable merge, because done or aborted here */ > - bfq_put_stable_ref(stable_merge_bfqq); > - > bfqq_data->stable_merge_bfqq = NULL; > - > - return bfq_setup_stable_merge(bfqd, bfqq, > - stable_merge_bfqq, > - bfqq_data); > + new_bfqq = bfq_setup_stable_merge(bfqd, bfqq, > + stable_merge_bfqq, > + bfqq_data); > + bfq_put_stable_ref(stable_merge_bfqq); > + return new_bfqq; > } > } Can you or Jan post this as a real patch so we can get it queued up? -- Jens Axboe