diff --git a/src/proc_fuse.c b/src/proc_fuse.c index 145e2e2..7442d4c 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c @@ -537,6 +537,15 @@ void free_devinfo_list(struct devinfo *ptr) } } +static bool need_record_diskstats(unsigned int major, unsigned int minor) +{ + // support device which major is 253 and 252 + if (major == 253 || major == 252) { + return true; + } + return false; +} + static int proc_diskstats_read(char *buf, size_t size, off_t offset, struct fuse_file_info *fi) { @@ -562,6 +571,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, int i = 0; int ret; char dev_name[72]; + char tmp_dev_name[72]; if (offset) { int left; @@ -629,6 +639,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, while (getline(&line, &linelen, f) != -1) { ssize_t l; char lbuf[256]; + bool match = false; memset(dev_name, 0, sizeof(dev_name)); i = sscanf(line, "%u %u %71s", &major, &minor, dev_name); @@ -638,9 +649,14 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, if (major == ptr->major && minor == ptr->minor) { snprintf(dev_name, sizeof(dev_name), "%s", ptr->name); dev_name[71] = '\0'; + match = true; } } + if (!match) { + continue; + } + 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); @@ -670,8 +686,16 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, 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 + 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; + } l = snprintf(cache, cache_size, "%s", lbuf); if (l < 0) {