84 lines
3.4 KiB
Diff
84 lines
3.4 KiB
Diff
diff --git a/src/proc_fuse.c b/src/proc_fuse.c
|
|
index 519cda4..96eb9d7 100644
|
|
--- a/src/proc_fuse.c
|
|
+++ b/src/proc_fuse.c
|
|
@@ -608,11 +608,6 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
|
|
return read_file_fuse("/proc/diskstats", buf, size, d);
|
|
}
|
|
|
|
- ret = cgroup_ops->get_io_merged(cgroup_ops, cg, &io_merged_str);
|
|
- if (ret < 0) {
|
|
- if (ret == -EOPNOTSUPP)
|
|
- return read_file_fuse("/proc/diskstats", buf, size, d);
|
|
- }
|
|
|
|
ret = cgroup_ops->get_io_service_bytes(cgroup_ops, cg, &io_service_bytes_str);
|
|
if (ret < 0) {
|
|
@@ -620,17 +615,9 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
|
|
return read_file_fuse("/proc/diskstats", buf, size, d);
|
|
}
|
|
|
|
- ret = cgroup_ops->get_io_wait_time(cgroup_ops, cg, &io_wait_time_str);
|
|
- if (ret < 0) {
|
|
- if (ret == -EOPNOTSUPP)
|
|
- return read_file_fuse("/proc/diskstats", buf, size, d);
|
|
- }
|
|
-
|
|
- ret = cgroup_ops->get_io_service_time(cgroup_ops, cg, &io_service_time_str);
|
|
- if (ret < 0) {
|
|
- if (ret == -EOPNOTSUPP)
|
|
- return read_file_fuse("/proc/diskstats", buf, size, d);
|
|
- }
|
|
+ cgroup_ops->get_io_merged(cgroup_ops, cg, &io_merged_str);
|
|
+ cgroup_ops->get_io_wait_time(cgroup_ops, cg, &io_wait_time_str);
|
|
+ cgroup_ops->get_io_service_time(cgroup_ops, cg, &io_service_time_str);
|
|
|
|
f = fopen_cached("/proc/diskstats", "re", &fopen_cache);
|
|
if (!f)
|
|
@@ -663,26 +650,32 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
|
|
|
|
get_blkio_io_value(io_serviced_str, major, minor, "Read", &read);
|
|
get_blkio_io_value(io_serviced_str, major, minor, "Write", &write);
|
|
- get_blkio_io_value(io_merged_str, major, minor, "Read", &read_merged);
|
|
- get_blkio_io_value(io_merged_str, major, minor, "Write", &write_merged);
|
|
+ if (io_merged_str != NULL) {
|
|
+ get_blkio_io_value(io_merged_str, major, minor, "Read", &read_merged);
|
|
+ get_blkio_io_value(io_merged_str, major, minor, "Write", &write_merged);
|
|
+ }
|
|
get_blkio_io_value(io_service_bytes_str, major, minor, "Read", &read_sectors);
|
|
read_sectors = read_sectors/512;
|
|
get_blkio_io_value(io_service_bytes_str, major, minor, "Write", &write_sectors);
|
|
write_sectors = write_sectors/512;
|
|
|
|
- get_blkio_io_value(io_service_time_str, major, minor, "Read", &rd_svctm);
|
|
- rd_svctm = rd_svctm/1000000;
|
|
- get_blkio_io_value(io_wait_time_str, major, minor, "Read", &rd_wait);
|
|
- rd_wait = rd_wait/1000000;
|
|
- read_ticks = rd_svctm + rd_wait;
|
|
+ if (io_service_time_str != NULL) {
|
|
+ get_blkio_io_value(io_service_time_str, major, minor, "Read", &rd_svctm);
|
|
+ rd_svctm = rd_svctm/1000000;
|
|
+ get_blkio_io_value(io_service_time_str, major, minor, "Write", &wr_svctm);
|
|
+ wr_svctm = wr_svctm/1000000;
|
|
+ get_blkio_io_value(io_service_time_str, major, minor, "Total", &tot_ticks);
|
|
+ }
|
|
|
|
- get_blkio_io_value(io_service_time_str, major, minor, "Write", &wr_svctm);
|
|
- wr_svctm = wr_svctm/1000000;
|
|
- get_blkio_io_value(io_wait_time_str, major, minor, "Write", &wr_wait);
|
|
- wr_wait = wr_wait/1000000;
|
|
- write_ticks = wr_svctm + wr_wait;
|
|
+ if (io_wait_time_str != NULL) {
|
|
+ get_blkio_io_value(io_wait_time_str, major, minor, "Read", &rd_wait);
|
|
+ rd_wait = rd_wait/1000000;
|
|
+ get_blkio_io_value(io_wait_time_str, major, minor, "Write", &wr_wait);
|
|
+ wr_wait = wr_wait/1000000;
|
|
+ }
|
|
|
|
- get_blkio_io_value(io_service_time_str, major, minor, "Total", &tot_ticks);
|
|
+ read_ticks = rd_svctm + rd_wait;
|
|
+ write_ticks = wr_svctm + wr_wait;
|
|
tot_ticks = tot_ticks/1000000;
|
|
|
|
memset(lbuf, 0, 256);
|