• Ben Woodard's avatar
    [BLOCK] increase size of disk stat counters · 837c7878
    Ben Woodard authored
    The kernel's representation of the disk statistics uses the type unsigned
    which is 32b on both 32b and 64b platforms.  Unfortunately, most system
    tools that work with these numbers that are exported in /proc/diskstats
    including iostat read these numbers into unsigned longs.  This works fine
    on 32b platforms and when the number of IO transactions are small on 64b
    platforms.  However, when the numbers wrap on 64b platforms & you read the
    numbers into unsigned longs, and compare the numbers to previous readings,
    then you get an unsigned representation of a negative number.  This looks
    like a very large 64b number & gives you bizarre readouts in iostat:
    
    ilc4: Device:    rrqm/s wrqm/s r/s    w/s  rsec/s  wsec/s    rkB/s wkB/s avgrq-sz avgqu-sz   await  svctm  %util
    ilc4: sda        5.50   0.00   143.96 0.00 307496983987862656.00 0.00 153748491993931328.00     0.00 2136028725038430.00     7.94   55.12    5.59  80.42
    
    Though fixing iostat in user space is possible, and a quick survey
    indicates that several other similar tools also use unsigned longs when
    processing /proc/diskstats.  Therefore, it seems like a better approach
    would be to extend the length of the disk_stats structure on 64b
    architectures to 64b.  The following patch does that.  It should not affect
    the operation on 32b platforms.
    Signed-off-by: default avatarBen Woodard <woodard@redhat.com>
    Cc: Rick Lindsley <ricklind@us.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarJens Axboe <axboe@suse.de>
    837c7878
genhd.c 18.5 KB