Index: oldkernel/linux/drivers/block/ll_rw_blk.c
diff -u linux/drivers/block/ll_rw_blk.c:1.2 linux/drivers/block/ll_rw_blk.c:1.3
--- linux/drivers/block/ll_rw_blk.c:1.2	Thu Jun  1 14:51:28 2000
+++ linux/drivers/block/ll_rw_blk.c	Thu Jun  1 17:02:44 2000
@@ -297,6 +297,37 @@
 		printk(KERN_ERR "drive_stat_acct: cmd not R/W?\n");
 }
 
+static inline void drive_pg_stat_acct(int cmd, int major, int minor)
+{
+	short disk_index = 255;
+
+	switch (major) {
+		case DAC960_MAJOR+0:
+			disk_index = (minor & 0x00f8) >> 3;
+		break;
+		case SCSI_DISK0_MAJOR:
+			disk_index = (minor & 0x00f0) >> 4;
+		break;
+		case IDE0_MAJOR:        /* same as HD_MAJOR */
+		case XT_DISK_MAJOR:
+			disk_index = (minor & 0x0040) >> 6;
+		break;
+		case IDE1_MAJOR:
+			disk_index = ((minor & 0x0040) >> 6) + 2;
+		default:
+		break;
+	}
+
+	if (disk_index < 4) {
+		if (cmd == READ)
+			kstat.dk_drive_pgin[disk_index]++;
+		else if (cmd == WRITE)
+			kstat.dk_drive_pgout[disk_index]++;
+		else
+			printk(KERN_ERR "drive_pg_stat_acct: cmd not R/W?\n");
+	}
+}
+
 /*
  * add-request adds a request to the linked list.
  * It disables interrupts (aquires the request spinlock) so that it can muck
@@ -414,12 +445,16 @@
 	wake_up (&wait_for_request);
 }
 
-void make_request(int major, int rw, struct buffer_head * bh)
+void make_request(kdev_t dev, int rw, struct buffer_head * bh)
 {
 	unsigned int sector, count;
 	struct request * req;
 	int rw_ahead, max_req, max_sectors, max_segments;
 	unsigned long flags;
+	int major, minor;
+
+	major = MAJOR (dev);
+	minor = MINOR (dev);
 
 	count = bh->b_size >> 9;
 	sector = bh->b_rsector;
@@ -464,6 +499,7 @@
 			if (buffer_uptodate(bh)) /* Hmmph! Already have it */
 				goto end_io;
 			kstat.pgpgin++;
+			drive_pg_stat_acct(rw, major, minor);
 			max_req = NR_REQUEST;	/* reads take precedence */
 			break;
 		case WRITEA:
@@ -478,6 +514,7 @@
 			 * requests are only for reads.
 			 */
 			kstat.pgpgout++;
+			drive_pg_stat_acct(rw, major, minor);
 			max_req = (NR_REQUEST * 2) / 3;
 			break;
 		default:
@@ -713,7 +750,7 @@
 				continue;
 			}
 #endif
-			make_request(MAJOR(bh[i]->b_rdev), rw, bh[i]);
+			make_request(bh[i]->b_rdev, rw, bh[i]);
 		}
 	}
 	return;
Index: oldkernel/linux/fs/proc/array.c
diff -u linux/fs/proc/array.c:1.3 linux/fs/proc/array.c:1.4
--- linux/fs/proc/array.c:1.3	Thu Jun  1 16:47:27 2000
+++ linux/fs/proc/array.c	Thu Jun  1 17:02:44 2000
@@ -275,6 +275,8 @@
 		"disk_wio %u %u %u %u\n"
 		"disk_rblk %u %u %u %u\n"
 		"disk_wblk %u %u %u %u\n"
+		"disk_pgin %u %u %u %u\n"
+		"disk_pgout %u %u %u %u\n"
 		"page %u %u\n"
 		"swap %u %u\n"
 		"intr %u",
@@ -286,6 +288,8 @@
 		"disk_wio %u %u %u %u\n"
 		"disk_rblk %u %u %u %u\n"
 		"disk_wblk %u %u %u %u\n"
+		"disk_pgin %u %u %u %u\n"
+		"disk_pgout %u %u %u %u\n"
 		"page %u %u\n"
 		"swap %u %u\n"
 		"intr %u",
@@ -304,6 +308,10 @@
 		kstat.dk_drive_rblk[2], kstat.dk_drive_rblk[3],
 		kstat.dk_drive_wblk[0], kstat.dk_drive_wblk[1],
 		kstat.dk_drive_wblk[2], kstat.dk_drive_wblk[3],
+		kstat.dk_drive_pgin[0], kstat.dk_drive_pgin[1],
+		kstat.dk_drive_pgin[2], kstat.dk_drive_pgin[3],
+		kstat.dk_drive_pgout[0], kstat.dk_drive_pgout[1],
+		kstat.dk_drive_pgout[2], kstat.dk_drive_pgout[3],
 		kstat.pgpgin,
 		kstat.pgpgout,
 		kstat.pswpin,
Index: oldkernel/linux/include/linux/blkdev.h
diff -u linux/include/linux/blkdev.h:1.2 linux/include/linux/blkdev.h:1.3
--- linux/include/linux/blkdev.h:1.2	Thu Jun  1 14:51:29 2000
+++ linux/include/linux/blkdev.h	Thu Jun  1 17:02:44 2000
@@ -59,7 +59,7 @@
 extern struct wait_queue * wait_for_request;
 extern void resetup_one_dev(struct gendisk *dev, int drive);
 extern void unplug_device(void * data);
-extern void make_request(int major,int rw, struct buffer_head * bh);
+extern void make_request(kdev_t dev, int rw, struct buffer_head * bh);
 
 /* md needs this function to remap requests */
 extern int md_map (kdev_t dev, kdev_t *rdev,
Index: oldkernel/linux/include/linux/kernel_stat.h
diff -u linux/include/linux/kernel_stat.h:1.1.1.1 linux/include/linux/kernel_stat.h:1.2
--- linux/include/linux/kernel_stat.h:1.1.1.1	Wed May 31 12:33:49 2000
+++ linux/include/linux/kernel_stat.h	Thu Jun  1 17:02:44 2000
@@ -23,6 +23,8 @@
 	unsigned int dk_drive_wio[DK_NDRIVE];
 	unsigned int dk_drive_rblk[DK_NDRIVE];
 	unsigned int dk_drive_wblk[DK_NDRIVE];
+	unsigned int dk_drive_pgin[DK_NDRIVE];
+	unsigned int dk_drive_pgout[DK_NDRIVE];
 	unsigned int pgpgin, pgpgout;
 	unsigned int pswpin, pswpout;
 	unsigned int irqs[NR_CPUS][NR_IRQS];
