blktrace: backport upstream bugfix patches Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
51 lines
1.5 KiB
Diff
51 lines
1.5 KiB
Diff
From 3f8cadf8435fa3c9b0fe8aa1f7e2a50832310560 Mon Sep 17 00:00:00 2001
|
|
From: weiping zhang <zhangweiping@didichuxing.com>
|
|
Date: Mon, 15 Jan 2018 23:53:42 +0800
|
|
Subject: [PATCH 04/15] blktrace: don't stop tracer if not setup trace
|
|
successfully
|
|
|
|
if we run blktrace on same device twice, the second time will failed
|
|
to ioctl(BLKTRACESETUP), then it will call __stop_tracer, which lead
|
|
the first blktrace failed to access debugfs entries. So this patch add
|
|
a check to handle this case, to avoid stop tracer uncondionally.
|
|
|
|
Signed-off-by: weiping zhang <zhangweiping@didichuxing.com>
|
|
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
|
---
|
|
blktrace.c | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/blktrace.c b/blktrace.c
|
|
index e048f68..d0d271f 100644
|
|
--- a/blktrace.c
|
|
+++ b/blktrace.c
|
|
@@ -112,6 +112,7 @@ struct devpath {
|
|
struct cl_host *ch;
|
|
u32 cl_id;
|
|
time_t cl_connect_time;
|
|
+ int setup_done; /* ioctl BLKTRACESETUP done */
|
|
struct io_info *ios;
|
|
};
|
|
|
|
@@ -1083,6 +1084,7 @@ static int setup_buts(void)
|
|
if (ioctl(dpp->fd, BLKTRACESETUP, &buts) >= 0) {
|
|
dpp->ncpus = max_cpus;
|
|
dpp->buts_name = strdup(buts.name);
|
|
+ dpp->setup_done = 1;
|
|
if (dpp->stats)
|
|
free(dpp->stats);
|
|
dpp->stats = calloc(dpp->ncpus, sizeof(*dpp->stats));
|
|
@@ -1285,7 +1287,8 @@ static void rel_devpaths(void)
|
|
struct devpath *dpp = list_entry(p, struct devpath, head);
|
|
|
|
list_del(&dpp->head);
|
|
- __stop_trace(dpp->fd);
|
|
+ if (dpp->setup_done)
|
|
+ __stop_trace(dpp->fd);
|
|
close(dpp->fd);
|
|
|
|
if (dpp->heads)
|
|
--
|
|
1.8.3.1
|
|
|