aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2017-11-04 22:10:00 -0600
committerJens Axboe <axboe@kernel.dk>2017-11-04 22:10:00 -0600
commitab6809de8aa6c1e2bac1e2d9167e5232f0cccfeb (patch)
tree645e1072f43b6fbd3e543056dc4526a18773b4d5
parent8772bc4fb049bdd879de5952d6f291a34112fae0 (diff)
downloadblktrace-ab6809de8aa6c1e2bac1e2d9167e5232f0cccfeb.tar.gz
blktrace: abort if device ioctl setup fails
If we fail doing the BLKTRACESETUP ioctl, blktrace still marches on and sets up the rest. This results in errors like the below: blktrace /dev/sdf BLKTRACESETUP(2) /dev/sdf failed: 5/Input/output error Thread 1 failed open /sys/kernel/debug/block/(null)/trace1: 2/No such file or directory Thread 3 failed open /sys/kernel/debug/block/(null)/trace3: 2/No such file or directory Thread 2 failed open /sys/kernel/debug/block/(null)/trace2: 2/No such file or directory [...] FAILED to start thread on CPU 0: 1/Operation not permitted FAILED to start thread on CPU 1: 1/Operation not permitted FAILED to start thread on CPU 2: 1/Operation not permitted and blktrace continues to run, though it can't do anything in this state. If the ioctl setup fails, just abort. Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--blktrace.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/blktrace.c b/blktrace.c
index e8f2f87..e048f68 100644
--- a/blktrace.c
+++ b/blktrace.c
@@ -1066,9 +1066,10 @@ static void close_client_connections(void)
}
}
-static void setup_buts(void)
+static int setup_buts(void)
{
struct list_head *p;
+ int ret = 0;
__list_for_each(p, &devpaths) {
struct blk_user_trace_setup buts;
@@ -1086,10 +1087,14 @@ static void setup_buts(void)
free(dpp->stats);
dpp->stats = calloc(dpp->ncpus, sizeof(*dpp->stats));
memset(dpp->stats, 0, dpp->ncpus * sizeof(*dpp->stats));
- } else
+ } else {
fprintf(stderr, "BLKTRACESETUP(2) %s failed: %d/%s\n",
dpp->path, errno, strerror(errno));
+ ret++;
+ }
}
+
+ return ret;
}
static void start_buts(void)
@@ -2676,7 +2681,8 @@ static int run_tracers(void)
if (net_mode == Net_client)
printf("blktrace: connecting to %s\n", hostname);
- setup_buts();
+ if (setup_buts())
+ return 1;
if (use_tracer_devpaths()) {
if (setup_tracer_devpaths())