lxcfs/0024-fix-proc-diskstats-show-in-container.patch

83 lines
3.7 KiB
Diff
Raw Normal View History

From 449ad8444924c5f9d0b6ab646202e9b1655ec7c9 Mon Sep 17 00:00:00 2001
From: zhangsong <zhangsong34@huawei.com>
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 <zhangsong34@huawei.com>
---
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 <time.h>
#include <unistd.h>
#include <wait.h>
+#include <linux/kdev_t.h>
#include <linux/magic.h>
#include <linux/sched.h>
#include <sys/epoll.h>
@@ -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