lxcfs/0015-proc-fix-proc-diskstats-output-format.patch

93 lines
3.8 KiB
Diff
Raw Normal View History

From 19bedb98bf93ac67d78cc0606d66e03217e15cbb Mon Sep 17 00:00:00 2001
From: vegbir <yangjiaqi16@huawei.com>
Date: Sat, 15 Jul 2023 08:15:57 +0000
Subject: [PATCH 15/16] proc fix proc diskstats output format
Signed-off-by: vegbir <yangjiaqi16@huawei.com>
---
src/proc_fuse.c | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/src/proc_fuse.c b/src/proc_fuse.c
index fa5b055..97bfff8 100644
--- a/src/proc_fuse.c
+++ b/src/proc_fuse.c
@@ -810,10 +810,10 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
memset(lbuf, 0, 256);
if (stats.read || stats.write || stats.read_merged || stats.write_merged ||
stats.read_sectors || stats.write_sectors || stats.read_ticks ||
- stats.write_ticks || stats.ios_pgr || stats.total_ticks || stats.rq_ticks ||
+ stats.write_ticks || stats.ios_pgr || stats.total_ticks || stats.rq_ticks || stats.discard ||
stats.discard_merged || stats.discard_sectors || stats.discard_ticks) {
if (need_record_diskstats(stats.major, stats.minor)) {
- sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
+ sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
&stats.major,
&stats.minor,
tmp_dev_name,
@@ -828,11 +828,12 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
&stats.ios_pgr,
&stats.total_ticks,
&stats.rq_ticks,
+ &stats.discard,
&stats.discard_merged,
&stats.discard_sectors,
&stats.discard_ticks);
}
- snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
+ ret = snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
stats.major,
stats.minor,
stats.dev_name,
@@ -847,11 +848,17 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
stats.ios_pgr,
stats.total_ticks,
stats.rq_ticks,
+ stats.discard,
stats.discard_merged,
stats.discard_sectors,
stats.discard_ticks);
+ if(ret >= 256) {
+ lxcfs_error("Insufficient buffer for %u:%u %s diskstats",
+ stats.major, stats.minor, stats.dev_name);
+ continue;
+ }
} else if (need_record_diskstats(stats.major, stats.minor)) {
- sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
+ sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
&stats.major,
&stats.minor,
tmp_dev_name,
@@ -866,10 +873,11 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
&stats.ios_pgr,
&stats.total_ticks,
&stats.rq_ticks,
+ &stats.discard,
&stats.discard_merged,
&stats.discard_sectors,
&stats.discard_ticks);
- snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
+ ret = snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
stats.major,
stats.minor,
stats.dev_name,
@@ -884,9 +892,15 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
stats.ios_pgr,
stats.total_ticks,
stats.rq_ticks,
+ stats.discard,
stats.discard_merged,
stats.discard_sectors,
stats.discard_ticks);
+ if(ret >= 256) {
+ lxcfs_error("Insufficient buffer for %u:%u %s diskstats",
+ stats.major, stats.minor, stats.dev_name);
+ continue;
+ }
} else {
continue;
}
--
2.41.0