From 449ad8444924c5f9d0b6ab646202e9b1655ec7c9 Mon Sep 17 00:00:00 2001 From: zhangsong Date: Tue, 19 May 2020 21:58:33 +0800 Subject: [PATCH] lxcfs: fix proc diskstats show in container reason:fix proc diskstats show in container Signed-off-by: zhangsong --- bindings.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/bindings.c b/bindings.c index 446a1d0..19cd57e 100644 --- a/bindings.c +++ b/bindings.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -4145,8 +4146,8 @@ child_out: } end->next = NULL; end->name = must_copy_string(dev_name); - end->major = ((unsigned int)dev_num & 0xff00) >> 8; - end->minor = (unsigned int)dev_num & 0x00ff; + end->major = MAJOR(dev_num); + end->minor = MINOR(dev_num); } err: if (stream[0]) @@ -4172,7 +4173,8 @@ void free_devinfo_list(struct devinfo *ptr) static bool need_record_diskstats(unsigned int major, unsigned int minor) { //only support device which major is 253. - if (major == 253) { + // fix: major number 252 is also supported. + if (major == 253 || major == 252) { return true; } return false; @@ -4290,17 +4292,22 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, tot_ticks = tot_ticks/1000000; memset(lbuf, 0, 256); - if (read || write || read_merged || write_merged || read_sectors || write_sectors || read_ticks || write_ticks) - snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", - major, minor, dev_name, read, read_merged, read_sectors, read_ticks, - write, write_merged, write_sectors, write_ticks, ios_pgr, tot_ticks, rq_ticks); - else if (need_record_diskstats(major, minor)) { - sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", - &major, &minor, tmp_dev_name, &read, &read_merged, &read_sectors, &read_ticks, - &write, &write_merged, &write_sectors, &write_ticks, &ios_pgr, &tot_ticks, &rq_ticks); - snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", - major, minor, dev_name, read, read_merged, read_sectors, read_ticks, - write, write_merged, write_sectors, write_ticks, ios_pgr, tot_ticks, rq_ticks); + if (read || write || read_merged || write_merged || read_sectors || write_sectors || read_ticks || write_ticks) { + if (need_record_diskstats(major, minor)) { + sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", + &major, &minor, tmp_dev_name, &read, &read_merged, &read_sectors, &read_ticks, + &write, &write_merged, &write_sectors, &write_ticks, &ios_pgr, &tot_ticks, &rq_ticks); + } + snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", + major, minor, dev_name, read, read_merged, read_sectors, read_ticks, + write, write_merged, write_sectors, write_ticks, ios_pgr, tot_ticks, rq_ticks); + } else if (need_record_diskstats(major, minor)) { + sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", + &major, &minor, tmp_dev_name, &read, &read_merged, &read_sectors, &read_ticks, + &write, &write_merged, &write_sectors, &write_ticks, &ios_pgr, &tot_ticks, &rq_ticks); + snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", + major, minor, dev_name, read, read_merged, read_sectors, read_ticks, + write, write_merged, write_sectors, write_ticks, ios_pgr, tot_ticks, rq_ticks); } else { continue; } -- 2.21.0