On Wed, Jun 10, 2020 at 09:52:13PM +0000, Luis Chamberlain wrote: > diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c > index 7ff2ea5cd05e..5cea04c05e09 100644 > --- a/kernel/trace/blktrace.c > +++ b/kernel/trace/blktrace.c > @@ -524,10 +524,16 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, > if (!bt->msg_data) > goto err; > > - ret = -ENOENT; > - > - dir = debugfs_lookup(buts->name, blk_debugfs_root); > - if (!dir) > + /* > + * When tracing whole make_request drivers (multiqueue) block devices, > + * reuse the existing debugfs directory created by the block layer on > + * init. For request-based block devices, all partitions block devices, > + * and scsi-generic block devices we create a temporary new debugfs > + * directory that will be removed once the trace ends. > + */ > + if (queue_is_mq(q)) And this should be instead: if (queue_is_mq(q) && bdev && bdev == bdev->bd_contains) > + dir = q->debugfs_dir; > + else > bt->dir = dir = debugfs_create_dir(buts->name, blk_debugfs_root); > > bt->dev = dev; > @@ -565,8 +571,6 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, > > ret = 0; > err: > - if (dir && !bt->dir) > - dput(dir); > if (ret) > blk_trace_free(bt); > return ret;