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);