Your message dated Tue, 27 May 2025 13:57:35 +0000
with message-id <e1ujuob-003snb...@respighi.debian.org>
and subject line unblock iotop-c
has caused the Debian Bug report #1106606,
regarding unblock: iotop-c/1.30-1
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)
--
1106606: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1106606
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: ioto...@packages.debian.org
Control: affects -1 + src:iotop-c
User: release.debian....@packages.debian.org
Usertags: unblock
Please unblock package iotop-c
[ Reason ]
Kernel 6.14 introduced an incompatibility in struct taskstats [1][2]
iotop-c 1.29 wrongly assumes that the newer kernels will use the
broken struct from 6.14 but the change was fixed in mainline [3]
and there is a plan to backport it to 6.14 as well.
[ Impact ]
iotop-c 1.29 will be non-functional on all 6.14 kernels that include
the fix and all kernels newer that 6.14
[ Tests ]
iotop-c 1.30 was manually tested by compiling against both fixed and
unfixed kernel headers and then running the binary on older than 6.14,
broken 6.14 and fixed 6.14.
[ Risks ]
iotop-c is a leaf package, all the changes between 1.29 and 1.30 are
small and trivial. Hence the risk of unblocking the update is zero.
Both alternatives - iotop-py and htop are non-functional on 6.14
kernels before the fix gets applied. Also htop will not work on any
other kernel if it is compiled against the unfixed 6.14 headers.
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
[ Other info ]
[1] https://github.com/Tomas-M/iotop/issues/82
[2] https://bugzilla.kernel.org/show_bug.cgi?id=220102
[3]
https://lore.kernel.org/all/CAHk-=wilrw8dn8-4jmeczh0opo8skxoc5e6fwmfspwgmpqy...@mail.gmail.com/
unblock iotop-c/1.30-1
diff -Nru iotop-c-1.29/debian/changelog iotop-c-1.30/debian/changelog
--- iotop-c-1.29/debian/changelog 2025-05-06 22:09:06.000000000 +0000
+++ iotop-c-1.30/debian/changelog 2025-05-26 20:24:48.000000000 +0000
@@ -1,3 +1,14 @@
+iotop-c (1.30-1) unstable; urgency=medium
+
+ * Update to new upstream release of 1.30
+ - kernel commit 0bf2d83 fixes the problem with struct taskstats
+ now iotop 1.30 handles only v15 of the struct in a different
+ way, retaining compatibility with both old and new kernels
+ - show zero current values for exited processes
+ - flush stdout after each batch run
+
+ -- Boian Bonev <bbo...@ipacct.com> Mon, 26 May 2025 20:24:48 +0000
+
iotop-c (1.29-1) unstable; urgency=medium
* Update to new upstream release of 1.29
diff -Nru iotop-c-1.29/fedora/iotop-c.spec iotop-c-1.30/fedora/iotop-c.spec
--- iotop-c-1.29/fedora/iotop-c.spec 2025-05-06 22:11:46.000000000 +0000
+++ iotop-c-1.30/fedora/iotop-c.spec 2025-05-26 20:36:11.000000000 +0000
@@ -1,5 +1,5 @@
Name: iotop-c
-Version: 1.29
+Version: 1.30
Release: 1%{?dist}
Summary: Simple top-like I/O monitor (implemented in C)
@@ -53,6 +53,9 @@
%{_mandir}/man8/iotop.8*
%changelog
+* Mon May 26 2025 Boian Bonev <bbo...@ipacct.com> - 1.30-1
+- Update to latest ver 1.30
+
* Tue May 6 2025 Boian Bonev <bbo...@ipacct.com> - 1.29-1
- Update to latest ver 1.29
diff -Nru iotop-c-1.29/src/iotop.h iotop-c-1.30/src/iotop.h
--- iotop-c-1.29/src/iotop.h 2025-05-06 22:08:49.000000000 +0000
+++ iotop-c-1.30/src/iotop.h 2025-05-26 20:36:11.000000000 +0000
@@ -30,7 +30,7 @@
#include "ucell.h"
-#define VERSION "1.29"
+#define VERSION "1.30"
typedef enum {
E_GR_IO,
@@ -96,6 +96,7 @@
extern int maxpidlen;
extern unsigned taskstats_ver;
+#define IOTOP_TASKSTATS_MINVER 4
#define IOTOP_TASKSTATS_VERSION 15
#define HISTORY_POS 60
diff -Nru iotop-c-1.29/src/view_batch.c iotop-c-1.30/src/view_batch.c
--- iotop-c-1.29/src/view_batch.c 2025-05-02 15:12:39.000000000 +0000
+++ iotop-c-1.30/src/view_batch.c 2025-05-26 20:36:05.000000000 +0000
@@ -136,6 +136,7 @@
if ((params.iter>-1)&&((--params.iter)==0))
break;
+ fflush(stdout);
sleep(params.delay);
}
arr_free(cs);
diff -Nru iotop-c-1.29/src/view_curses.c iotop-c-1.30/src/view_curses.c
--- iotop-c-1.29/src/view_curses.c 2025-05-06 22:08:49.000000000 +0000
+++ iotop-c-1.30/src/view_curses.c 2025-05-26 20:36:05.000000000 +0000
@@ -1190,8 +1190,13 @@
read_val=config.f.processes?s->read_val_acc_p:s->read_val_acc;
write_val=config.f.processes?s->write_val_acc_p:s->write_val_acc;
} else {
-
read_val=config.f.processes?s->read_val_p:s->read_val;
-
write_val=config.f.processes?s->write_val_p:s->write_val;
+ if (s->exited) {
+ read_val=0.0;
+ write_val=0.0;
+ } else {
+
read_val=config.f.processes?s->read_val_p:s->read_val;
+
write_val=config.f.processes?s->write_val_p:s->write_val;
+ }
}
humanize_val(&read_val,read_str,1);
@@ -1325,16 +1330,24 @@
attron(config.f.nocolor?A_ITALIC:COLOR_PAIR(RED_PAIR));
printw(" Error ");
attroff(config.f.nocolor?A_ITALIC:COLOR_PAIR(RED_PAIR));
- } else
-
color_print_pc(config.f.processes?s->swapin_val_p:s->swapin_val);
+ } else {
+ if (s->exited)
+ color_print_pc(0);
+ else
+
color_print_pc(config.f.processes?s->swapin_val_p:s->swapin_val);
+ }
}
if (!config.f.hideio&&has_tda) {
if (s->error_x) {
attron(config.f.nocolor?A_ITALIC:COLOR_PAIR(RED_PAIR));
printw(" Error ");
attroff(config.f.nocolor?A_ITALIC:COLOR_PAIR(RED_PAIR));
- } else
-
color_print_pc(config.f.processes?s->blkio_val_p:s->blkio_val);
+ } else {
+ if (s->exited)
+ color_print_pc(0);
+ else
+
color_print_pc(config.f.processes?s->blkio_val_p:s->blkio_val);
+ }
}
if (!config.f.hidegraph&&hrevpos>0) {
if (config.f.reverse_graph) {
@@ -2603,12 +2616,12 @@
"\tto restore it to its previous value and save
some CPU cycles.\n"
);
}
- if (taskstats_ver)
+ if (taskstats_ver&&taskstats_ver<IOTOP_TASKSTATS_MINVER)
printf(
"WARNING:\n"
"\tThis kernel provides struct taskstats with version
%u.\n"
- "\tThat may not be compatible with the currently
supported version %u.\n",
- taskstats_ver,IOTOP_TASKSTATS_VERSION
+ "\tThat does not contain the required data and should
be %u or greater.\n",
+ taskstats_ver,IOTOP_TASKSTATS_MINVER
);
}
diff -Nru iotop-c-1.29/src/xxxid_info.c iotop-c-1.30/src/xxxid_info.c
--- iotop-c-1.29/src/xxxid_info.c 2025-05-06 22:08:49.000000000 +0000
+++ iotop-c-1.30/src/xxxid_info.c 2025-05-26 20:36:05.000000000 +0000
@@ -191,29 +191,32 @@
na=(struct nlattr *)NLA_DATA(na);
while (len2<aggr_len) {
if (na->nla_type==TASKSTATS_TYPE_STATS) {
+ // NOTE: we use the build system kernel
headers for the version field only
+ // all the data access is done by using
copies of the respective versions
+ // of the kernel headers
+ // A patch that will fix the problem is
proposed to be included in the kernel
+ // and the only broken struct taskstats
will be the one with v15. But we can
+ // not rely on the build system kernel
headers for universal access and have
+ // to keep the copies.
+ // In this way a build with any kernel
headers will work everywhere
struct taskstats *ts=NLA_DATA(na);
struct taskstats_v14 *t14=NLA_DATA(na);
struct taskstats_v15 *t15=NLA_DATA(na);
- // add a compile time check to raise
awareness
- #if TASKSTATS_VERSION >
IOTOP_TASKSTATS_VERSION
- #warning Current kernel implements
newer struct taskstats, maybe we need a fix for that too
- #endif
-
- if (ts->version<15) { // use v14 for 14
and below
+ if (ts->version<IOTOP_TASKSTATS_MINVER)
// v3 and below does not have the data we require
+ taskstats_ver=ts->version;
+ else if (ts->version!=15) { // use v14
for v4..v14 & v16 onwards
stats->read_bytes=t14->read_bytes;
stats->write_bytes=t14->write_bytes;
stats->swapin_delay_total=t14->swapin_delay_total;
stats->blkio_delay_total=t14->blkio_delay_total;
stats->euid=t14->ac_uid;
- } else {
+ } else { // exception for v15 only
stats->read_bytes=t15->read_bytes;
stats->write_bytes=t15->write_bytes;
stats->swapin_delay_total=t15->swapin_delay_total;
stats->blkio_delay_total=t15->blkio_delay_total;
stats->euid=t15->ac_uid;
- if
(ts->version>IOTOP_TASKSTATS_VERSION) // print a warning about running on a
kernel with maybe incompatible struct taskstats
-
taskstats_ver=ts->version;
}
}
len2+=NLA_ALIGN(na->nla_len);
--- End Message ---
--- Begin Message ---
Unblocked.
--- End Message ---