1 diff -up procps-3.2.7/proc/sysinfo.c.vmstat procps-3.2.7/proc/sysinfo.c
2 --- procps-3.2.7/proc/sysinfo.c.vmstat 2008-12-04 15:25:50.000000000 +0100
3 +++ procps-3.2.7/proc/sysinfo.c 2008-12-04 16:54:29.000000000 +0100
4 @@ -784,6 +784,18 @@ unsigned int getpartitions_num(struct di
7 /////////////////////////////////////////////////////////////////////////////
8 +static int is_disk(char *dev)
10 + char syspath[PATH_MAX];
13 + while ((slash = strchr(dev, '/')))
15 + snprintf(syspath, sizeof(syspath), "/sys/block/%s", dev);
16 + return !(access(syspath, F_OK));
19 +/////////////////////////////////////////////////////////////////////////////
21 unsigned int getdiskstat(struct disk_stat **disks, struct partition_stat **partitions){
23 @@ -791,6 +803,7 @@ unsigned int getdiskstat(struct disk_sta
27 + char devname[PATH_MAX];
31 @@ -803,10 +816,11 @@ unsigned int getdiskstat(struct disk_sta
35 - fields = sscanf(buff, " %*d %*d %*s %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %u", &dummy);
37 + fields = sscanf(buff, " %*d %*d %15s %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %u",
39 + if (fields == 2 && is_disk(devname)){
40 (*disks) = realloc(*disks, (cDisk+1)*sizeof(struct disk_stat));
41 - sscanf(buff, " %*d %*d %15s %u %u %llu %u %u %u %llu %u %u %u %u",
42 + sscanf(buff, " %*d %*d %15s %lu %lu %llu %lu %lu %lu %llu %lu %lu %lu %lu",
45 (*disks)[cDisk].disk_name,
46 @@ -827,7 +841,9 @@ unsigned int getdiskstat(struct disk_sta
48 (*partitions) = realloc(*partitions, (cPartition+1)*sizeof(struct partition_stat));
50 - sscanf(buff, " %*d %*d %15s %u %llu %u %u",
51 + sscanf(buff, (fields == 2)
52 + ? " %*d %*d %15s %u %*u %llu %*u %u %*u %llu %*u %*u %*u %*u"
53 + : " %*d %*d %15s %u %llu %u %llu",
56 (*partitions)[cPartition].partition_name,
57 diff -up procps-3.2.7/proc/sysinfo.h.vmstat procps-3.2.7/proc/sysinfo.h
58 --- procps-3.2.7/proc/sysinfo.h.vmstat 2008-12-04 15:25:41.000000000 +0100
59 +++ procps-3.2.7/proc/sysinfo.h 2008-12-04 16:54:32.000000000 +0100
60 @@ -95,16 +95,16 @@ typedef struct disk_stat{
61 unsigned long long reads_sectors;
62 unsigned long long written_sectors;
64 - unsigned inprogress_IO;
65 - unsigned merged_reads;
66 - unsigned merged_writes;
67 - unsigned milli_reading;
68 - unsigned milli_spent_IO;
69 - unsigned milli_writing;
70 - unsigned partitions;
72 - unsigned weighted_milli_spent_IO;
74 + unsigned long inprogress_IO;
75 + unsigned long merged_reads;
76 + unsigned long merged_writes;
77 + unsigned long milli_reading;
78 + unsigned long milli_spent_IO;
79 + unsigned long milli_writing;
80 + unsigned long partitions;
81 + unsigned long reads;
82 + unsigned long weighted_milli_spent_IO;
83 + unsigned long writes;
86 typedef struct partition_stat{
87 @@ -113,7 +113,7 @@ typedef struct partition_stat{
88 unsigned parent_disk; // index into a struct disk_stat array
91 - unsigned requested_writes;
92 + unsigned long long requested_writes;
95 extern unsigned int getpartitions_num(struct disk_stat *disks, int ndisks);