diff --git a/blktrace.spec b/blktrace.spec index 8c9ba7b..2eccbfc 100644 --- a/blktrace.spec +++ b/blktrace.spec @@ -1,7 +1,7 @@ Summary: Utilities for performing block layer IO tracing in the Linux kernel Name: blktrace Version: 1.2.0 -Release: 19%{?dist} +Release: 20%{?dist} License: GPLv2+ Source: http://brick.kernel.dk/snaps/blktrace-%{version}.tar.bz2 Url: http://brick.kernel.dk/snaps @@ -16,6 +16,8 @@ Patch0: blktrace-fix-btt-overflow.patch Patch1: blktrace-python3.patch Patch2: 0001-fix-parallel-build-failures.patch Patch3: 0001-fix-parallel-build-of-btt-and-blkiomon.patch +# Upstream: blktrace-1.3.0-5-g1836be5 +Patch4: for-next-fix-hang-when-BLKTRACESETUP-fails-and-o-is-used.patch %description blktrace is a block layer IO tracing mechanism which provides detailed @@ -32,6 +34,7 @@ information about IO patterns. %patch1 -p1 %patch2 -p1 %patch3 -p1 +%patch4 -p1 sed -i '1s=^#!/usr/bin/python3=#!%{__python3}=' \ btt/{btt_plot.py,bno_plot.py} @@ -85,6 +88,10 @@ information about IO patterns. %{_mandir}/man1/iowatcher.* %changelog +* Sun Aug 18 2024 Pavel Reichl - 1.2.0-20 +- fix hang when BLKTRACESETUP fails and "-o -" is used +- Related RHEL-54661 + * Mon Aug 09 2021 Mohan Boddu - 1.2.0-19 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags Related: rhbz#1991688 diff --git a/for-next-fix-hang-when-BLKTRACESETUP-fails-and-o-is-used.patch b/for-next-fix-hang-when-BLKTRACESETUP-fails-and-o-is-used.patch new file mode 100644 index 0000000..af44911 --- /dev/null +++ b/for-next-fix-hang-when-BLKTRACESETUP-fails-and-o-is-used.patch @@ -0,0 +1,55 @@ +From 1836be5d99c9362f1e2b39206c95270f19cb7faa Mon Sep 17 00:00:00 2001 +From: Eric Sandeen +Date: Wed, 5 Jun 2024 23:07:27 -0500 +Subject: [PATCH] fix hang when BLKTRACESETUP fails and "-o -" is used + +# blktrace -o - /dev/sda /dev/sdb /dev/sdc + +has to be SIGKILLed if BLKTRACESETUP fails for any or all of the devices +listed. (I simulated this by just catching one of the devices in +setup_buts(), skipping the ioctl, and doing ret++). + +This seems to be because with "-o -" on the command line, use_tracer_devpaths() +sees piped_output set, so we call process_trace_bufs which ends up waiting on +(!done) and "done" is never set. i.e. + +atexit(exit_tracing) + wait_tracers + if (use_tracer_devpaths()) // true because "-o -" + process_trace_bufs + while (wait_empty_entries()) + wait_empty_entries + while (!done ... ) + + +I think this can be avoided by just setting "done = 1" before returning +when setup_buts() fails in run_tracers(). + +Signed-off-by: Eric Sandeen +Reviewed-by: Jeff Moyer +Link: https://lore.kernel.org/r/f3204c9d-1384-40b5-a5fb-3bb967ca2bec@redhat.com +Signed-off-by: Jens Axboe +Signed-off-by: Pavel Reichl +--- + blktrace.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/blktrace.c b/blktrace.c +index 3444fbb..038b2cb 100644 +--- a/blktrace.c ++++ b/blktrace.c +@@ -2684,8 +2684,10 @@ static int run_tracers(void) + if (net_mode == Net_client) + printf("blktrace: connecting to %s\n", hostname); + +- if (setup_buts()) ++ if (setup_buts()) { ++ done = 1; + return 1; ++ } + + if (use_tracer_devpaths()) { + if (setup_tracer_devpaths()) +-- +2.46.0 +