From 44e3708cdb204782d728ddd6a40dec230bb9299c Mon Sep 17 00:00:00 2001 From: Cesare Tirabassi Date: Sat, 30 Jan 2010 14:19:38 +0100 Subject: [PATCH] Fix diskio total computation for kernel > 2.6.31 (sf: #2942117) --- src/linux.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/linux.c b/src/linux.c index e00f264..23f95fa 100644 --- a/src/linux.c +++ b/src/linux.c @@ -2256,6 +2256,7 @@ void update_diskio(void) struct diskio_stat *cur; unsigned int reads, writes; unsigned int total_reads = 0, total_writes = 0; + size_t len_devbuf; stats.current = 0; stats.current_read = 0; @@ -2276,8 +2277,15 @@ void update_diskio(void) * XXX: ignore devices which are part of a SW RAID (MD_MAJOR) */ if (col_count == 5 && major != LVM_BLK_MAJOR && major != NBD_MAJOR && major != RAMDISK_MAJOR && major != LOOP_MAJOR) { - total_reads += reads; - total_writes += writes; + /* If the last character of the device is a digit we assume + * it is a subdevice (needed for kernel > 2.6.31) */ + if (devbuf) { + len_devbuf = strlen(devbuf); + if ((len_devbuf > 0) && !isdigit(devbuf[len_devbuf-1])) { + total_reads += reads; + total_writes += writes; + } + } } else { col_count = sscanf(buf, "%u %u %s %*u %u %*u %u", &major, &minor, devbuf, &reads, &writes); -- 1.7.9.5