Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Morton <akpm@digeo.com>2002-11-10 02:02:25 -0800
committerDavid S. Miller <davem@nuts.ninka.net>2002-11-10 02:02:25 -0800
commit36e573c792536dbe8334ef1e5e3b5c4f49d6113a (patch)
tree8c3aeed26844b36e4e2ccb8caba6b6000381d1d5
parent3e4c5912b9043263c64a30591b7ebd3a7ffd9cea (diff)
[PATCH] remove duplicated disk statistics
This patch will break some userspace monitoring apps in the name of having sane disk statistics in 2.6.x. Patch from Rick Lindsley <ricklind@us.ibm.com> In 2.5.46, there are now disk statistics being collected twice: once for gendisk/hd_struct, and once for dkstat. They are collecting the same thing. This patch removes dkstat, which also had the disadvantage of being limited by DK_MAX_MAJOR and DK_MAX_DISK. (Those #defines are removed too.) In addition, this patch removes disk statistics from /proc/stat since they are now available via sysfs and there seems to have been a general preference in previous discussions to "clean up" /proc/stat. Too many disks being reported in /proc/stat also caused buffer overflows when trying to print out the data. The code in led.c from the parisc architecture has not apparently been recompiled under recent versions of 2.5, since it references kstat.dk_drive which doesn't exist in later versions. Accordingly, I've added an #ifdef 0 and a comment to that code so that it may at least compile, albeit without one feature -- a step up from its state now. If it is preferable to keep the broken code in, that patch may easily be excised from below.
-rw-r--r--drivers/block/ll_rw_blk.c18
-rw-r--r--drivers/parisc/led.c9
-rw-r--r--fs/proc/proc_misc.c21
-rw-r--r--include/linux/blkdev.h16
4 files changed, 9 insertions, 55 deletions
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c
index b5399a8aab3a..7698b794961d 100644
--- a/drivers/block/ll_rw_blk.c
+++ b/drivers/block/ll_rw_blk.c
@@ -28,11 +28,6 @@
#include <linux/slab.h>
/*
- * Disk stats
- */
-struct disk_stat dkstat;
-
-/*
* For the allocated request tables
*/
static kmem_cache_t *request_cachep;
@@ -1412,19 +1407,6 @@ void drive_stat_acct(struct request *rq, int nr_sectors, int new_io)
major = rq->rq_disk->major;
index = rq->rq_disk->first_minor >> rq->rq_disk->minor_shift;
-
- if ((index >= DK_MAX_DISK) || (major >= DK_MAX_MAJOR))
- return;
-
- dkstat.drive[major][index] += new_io;
- if (rw == READ) {
- dkstat.drive_rio[major][index] += new_io;
- dkstat.drive_rblk[major][index] += nr_sectors;
- } else if (rw == WRITE) {
- dkstat.drive_wio[major][index] += new_io;
- dkstat.drive_wblk[major][index] += nr_sectors;
- } else
- printk(KERN_ERR "drive_stat_acct: cmd not R/W?\n");
}
/*
diff --git a/drivers/parisc/led.c b/drivers/parisc/led.c
index d57179c44908..3e2e0afd6e3a 100644
--- a/drivers/parisc/led.c
+++ b/drivers/parisc/led.c
@@ -404,6 +404,14 @@ static void led_get_diskio_stats(int addvalue)
int major, disk, total;
total = 0;
+#ifdef 0
+ /*
+ * this section will no longer work in 2.5, as we no longer
+ * have either kstat.dk_drive nor DK_MAX_*. It can probably
+ * be rewritten to use the per-disk statistics now kept in the
+ * gendisk, but since I have no HP machines to test it on, I'm
+ * not really up to that. ricklind@us.ibm.com 11/7/02
+ */
for (major = 0; major < DK_MAX_MAJOR; major++) {
for (disk = 0; disk < DK_MAX_DISK; disk++)
total += dkstat.drive[major][disk];
@@ -417,6 +425,7 @@ static void led_get_diskio_stats(int addvalue)
} else
led_diskio_counter += CALC_ADD(total, diskio_max, addvalue);
}
+#endif
diskio_total_last += total;
}
diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c
index 18a39634aba8..3f1db05f5445 100644
--- a/fs/proc/proc_misc.c
+++ b/fs/proc/proc_misc.c
@@ -330,7 +330,6 @@ static int kstat_read_proc(char *page, char **start, off_t off,
extern unsigned long total_forks;
unsigned long jif = jiffies;
unsigned int sum = 0, user = 0, nice = 0, system = 0, idle = 0, iowait = 0;
- int major, disk;
for (i = 0 ; i < NR_CPUS; i++) {
int j;
@@ -370,26 +369,6 @@ static int kstat_read_proc(char *page, char **start, off_t off,
len += sprintf(page + len, " %u", kstat_irqs(i));
#endif
- len += sprintf(page + len, "\ndisk_io: ");
-
- for (major = 0; major < DK_MAX_MAJOR; major++) {
- for (disk = 0; disk < DK_MAX_DISK; disk++) {
- int active = dkstat.drive[major][disk] +
- dkstat.drive_rblk[major][disk] +
- dkstat.drive_wblk[major][disk];
- if (active)
- len += sprintf(page + len,
- "(%u,%u):(%u,%u,%u,%u,%u) ",
- major, disk,
- dkstat.drive[major][disk],
- dkstat.drive_rio[major][disk],
- dkstat.drive_rblk[major][disk],
- dkstat.drive_wio[major][disk],
- dkstat.drive_wblk[major][disk]
- );
- }
- }
-
len += sprintf(page + len,
"\nctxt %lu\n"
"btime %lu\n"
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 95b7c2e03a2a..a3927e6b6dee 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -11,22 +11,6 @@
#include <asm/scatterlist.h>
-/*
- * Disk stats ...
- */
-
-#define DK_MAX_MAJOR 16
-#define DK_MAX_DISK 16
-
-struct disk_stat {
- unsigned int drive[DK_MAX_MAJOR][DK_MAX_DISK];
- unsigned int drive_rio[DK_MAX_MAJOR][DK_MAX_DISK];
- unsigned int drive_wio[DK_MAX_MAJOR][DK_MAX_DISK];
- unsigned int drive_rblk[DK_MAX_MAJOR][DK_MAX_DISK];
- unsigned int drive_wblk[DK_MAX_MAJOR][DK_MAX_DISK];
-};
-extern struct disk_stat dkstat;
-
struct request_queue;
typedef struct request_queue request_queue_t;
struct elevator_s;