On Thu, May 28, 2020 at 07:44:38AM -0700, Bart Van Assche wrote: > > @@ -1669,10 +1672,7 @@ static int blk_trace_setup_queue(struct request_queue *q, > > > > blk_trace_setup_lba(bt, bdev); > > > > - ret = -EBUSY; > > - if (cmpxchg(&q->blk_trace, NULL, bt)) > > - goto free_bt; > > - > > + rcu_assign_pointer(q->blk_trace, bt); > > get_probe_ref(); > > return 0; > > Shouldn't q->blk_trace only be assigned if > q->blk_trace == NULL? Yes but the old call checked for that and left it as NULL if it was not NULL. I have a patch in my series which checks for q->blkt_trace *early* prior to continuing to avoid concurrent calls proactively, otherwise this will fail only at the very end. Luis