Loading kernel/trace/blktrace.c +18 −8 Original line number Diff line number Diff line Loading @@ -310,10 +310,20 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, local_irq_restore(flags); } static void blk_trace_free(struct blk_trace *bt) static void blk_trace_free(struct request_queue *q, struct blk_trace *bt) { relay_close(bt->rchan); /* * If 'bt->dir' is not set, then both 'dropped' and 'msg' are created * under 'q->debugfs_dir', thus lookup and remove them. */ if (!bt->dir) { debugfs_remove(debugfs_lookup("dropped", q->debugfs_dir)); debugfs_remove(debugfs_lookup("msg", q->debugfs_dir)); } else { debugfs_remove(bt->dir); } free_percpu(bt->sequence); free_percpu(bt->msg_data); kfree(bt); Loading @@ -335,10 +345,10 @@ static void put_probe_ref(void) mutex_unlock(&blk_probe_mutex); } static void blk_trace_cleanup(struct blk_trace *bt) static void blk_trace_cleanup(struct request_queue *q, struct blk_trace *bt) { synchronize_rcu(); blk_trace_free(bt); blk_trace_free(q, bt); put_probe_ref(); } Loading @@ -352,7 +362,7 @@ static int __blk_trace_remove(struct request_queue *q) return -EINVAL; if (bt->trace_state != Blktrace_running) blk_trace_cleanup(bt); blk_trace_cleanup(q, bt); return 0; } Loading Loading @@ -572,7 +582,7 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, ret = 0; err: if (ret) blk_trace_free(bt); blk_trace_free(q, bt); return ret; } Loading Loading @@ -1616,7 +1626,7 @@ static int blk_trace_remove_queue(struct request_queue *q) put_probe_ref(); synchronize_rcu(); blk_trace_free(bt); blk_trace_free(q, bt); return 0; } Loading Loading @@ -1647,7 +1657,7 @@ static int blk_trace_setup_queue(struct request_queue *q, return 0; free_bt: blk_trace_free(bt); blk_trace_free(q, bt); return ret; } Loading Loading
kernel/trace/blktrace.c +18 −8 Original line number Diff line number Diff line Loading @@ -310,10 +310,20 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, local_irq_restore(flags); } static void blk_trace_free(struct blk_trace *bt) static void blk_trace_free(struct request_queue *q, struct blk_trace *bt) { relay_close(bt->rchan); /* * If 'bt->dir' is not set, then both 'dropped' and 'msg' are created * under 'q->debugfs_dir', thus lookup and remove them. */ if (!bt->dir) { debugfs_remove(debugfs_lookup("dropped", q->debugfs_dir)); debugfs_remove(debugfs_lookup("msg", q->debugfs_dir)); } else { debugfs_remove(bt->dir); } free_percpu(bt->sequence); free_percpu(bt->msg_data); kfree(bt); Loading @@ -335,10 +345,10 @@ static void put_probe_ref(void) mutex_unlock(&blk_probe_mutex); } static void blk_trace_cleanup(struct blk_trace *bt) static void blk_trace_cleanup(struct request_queue *q, struct blk_trace *bt) { synchronize_rcu(); blk_trace_free(bt); blk_trace_free(q, bt); put_probe_ref(); } Loading @@ -352,7 +362,7 @@ static int __blk_trace_remove(struct request_queue *q) return -EINVAL; if (bt->trace_state != Blktrace_running) blk_trace_cleanup(bt); blk_trace_cleanup(q, bt); return 0; } Loading Loading @@ -572,7 +582,7 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, ret = 0; err: if (ret) blk_trace_free(bt); blk_trace_free(q, bt); return ret; } Loading Loading @@ -1616,7 +1626,7 @@ static int blk_trace_remove_queue(struct request_queue *q) put_probe_ref(); synchronize_rcu(); blk_trace_free(bt); blk_trace_free(q, bt); return 0; } Loading Loading @@ -1647,7 +1657,7 @@ static int blk_trace_setup_queue(struct request_queue *q, return 0; free_bt: blk_trace_free(bt); blk_trace_free(q, bt); return ret; } Loading