From: weiping zhang Date: Mon, 15 Jan 2018 15:53:42 +0000 (+0800) Subject: blktrace: don't stop tracer if not setup trace successfully X-Git-Tag: blktrace-1.3.0~34 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=e63098f39398bde67be9b64a49deece1c60614df;p=blktrace.git 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 Signed-off-by: Jens Axboe --- 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)