@@ -310,10 +310,20 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
310
310
local_irq_restore (flags );
311
311
}
312
312
313
- static void blk_trace_free (struct blk_trace * bt )
313
+ static void blk_trace_free (struct request_queue * q , struct blk_trace * bt )
314
314
{
315
315
relay_close (bt -> rchan );
316
- debugfs_remove (bt -> dir );
316
+
317
+ /*
318
+ * If 'bt->dir' is not set, then both 'dropped' and 'msg' are created
319
+ * under 'q->debugfs_dir', thus lookup and remove them.
320
+ */
321
+ if (!bt -> dir ) {
322
+ debugfs_remove (debugfs_lookup ("dropped" , q -> debugfs_dir ));
323
+ debugfs_remove (debugfs_lookup ("msg" , q -> debugfs_dir ));
324
+ } else {
325
+ debugfs_remove (bt -> dir );
326
+ }
317
327
free_percpu (bt -> sequence );
318
328
free_percpu (bt -> msg_data );
319
329
kfree (bt );
@@ -335,10 +345,10 @@ static void put_probe_ref(void)
335
345
mutex_unlock (& blk_probe_mutex );
336
346
}
337
347
338
- static void blk_trace_cleanup (struct blk_trace * bt )
348
+ static void blk_trace_cleanup (struct request_queue * q , struct blk_trace * bt )
339
349
{
340
350
synchronize_rcu ();
341
- blk_trace_free (bt );
351
+ blk_trace_free (q , bt );
342
352
put_probe_ref ();
343
353
}
344
354
@@ -352,7 +362,7 @@ static int __blk_trace_remove(struct request_queue *q)
352
362
return - EINVAL ;
353
363
354
364
if (bt -> trace_state != Blktrace_running )
355
- blk_trace_cleanup (bt );
365
+ blk_trace_cleanup (q , bt );
356
366
357
367
return 0 ;
358
368
}
@@ -572,7 +582,7 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
572
582
ret = 0 ;
573
583
err :
574
584
if (ret )
575
- blk_trace_free (bt );
585
+ blk_trace_free (q , bt );
576
586
return ret ;
577
587
}
578
588
@@ -1616,7 +1626,7 @@ static int blk_trace_remove_queue(struct request_queue *q)
1616
1626
1617
1627
put_probe_ref ();
1618
1628
synchronize_rcu ();
1619
- blk_trace_free (bt );
1629
+ blk_trace_free (q , bt );
1620
1630
return 0 ;
1621
1631
}
1622
1632
@@ -1647,7 +1657,7 @@ static int blk_trace_setup_queue(struct request_queue *q,
1647
1657
return 0 ;
1648
1658
1649
1659
free_bt :
1650
- blk_trace_free (bt );
1660
+ blk_trace_free (q , bt );
1651
1661
return ret ;
1652
1662
}
1653
1663
0 commit comments