patch-2.3.99-pre8 linux/drivers/block/ll_rw_blk.c
Next file: linux/drivers/block/md.c
Previous file: linux/drivers/block/linear.c
Back to the patch index
Back to the overall index
- Lines: 89
- Date:
Fri May 12 11:36:27 2000
- Orig file:
v2.3.99-pre7/linux/drivers/block/ll_rw_blk.c
- Orig date:
Wed Apr 26 16:34:07 2000
diff -u --recursive --new-file v2.3.99-pre7/linux/drivers/block/ll_rw_blk.c linux/drivers/block/ll_rw_blk.c
@@ -373,40 +373,23 @@
else ro_bits[major][minor >> 5] &= ~(1 << (minor & 31));
}
-static inline void drive_stat_acct(struct request *req,
+inline void drive_stat_acct (kdev_t dev, int rw,
unsigned long nr_sectors, int new_io)
{
- int major = MAJOR(req->rq_dev);
- int minor = MINOR(req->rq_dev);
- unsigned int disk_index;
-
- 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;
- break;
- default:
- return;
- }
- if (disk_index >= DK_NDRIVE)
+ unsigned int major = MAJOR(dev);
+ unsigned int index;
+
+ index = disk_index(dev);
+ if ((index >= DK_MAX_DISK) || (major >= DK_MAX_MAJOR))
return;
- kstat.dk_drive[disk_index] += new_io;
- if (req->cmd == READ) {
- kstat.dk_drive_rio[disk_index] += new_io;
- kstat.dk_drive_rblk[disk_index] += nr_sectors;
- } else if (req->cmd == WRITE) {
- kstat.dk_drive_wio[disk_index] += new_io;
- kstat.dk_drive_wblk[disk_index] += nr_sectors;
+ kstat.dk_drive[major][index] += new_io;
+ if (rw == READ) {
+ kstat.dk_drive_rio[major][index] += new_io;
+ kstat.dk_drive_rblk[major][index] += nr_sectors;
+ } else if (rw == WRITE) {
+ kstat.dk_drive_wio[major][index] += new_io;
+ kstat.dk_drive_wblk[major][index] += nr_sectors;
} else
printk(KERN_ERR "drive_stat_acct: cmd not R/W?\n");
}
@@ -426,7 +409,7 @@
{
int major;
- drive_stat_acct(req, req->nr_sectors, 1);
+ drive_stat_acct(req->rq_dev, req->cmd, req->nr_sectors, 1);
if (list_empty(head)) {
req->elevator_sequence = elevator_sequence(&q->elevator, latency);
@@ -686,7 +669,7 @@
req->bhtail->b_reqnext = bh;
req->bhtail = bh;
req->nr_sectors = req->hard_nr_sectors += count;
- drive_stat_acct(req, count, 0);
+ drive_stat_acct(req->rq_dev, req->cmd, count, 0);
elevator_merge_after(elevator, req, latency);
@@ -716,7 +699,7 @@
req->current_nr_sectors = count;
req->sector = req->hard_sector = sector;
req->nr_sectors = req->hard_nr_sectors += count;
- drive_stat_acct(req, count, 0);
+ drive_stat_acct(req->rq_dev, req->cmd, count, 0);
elevator_merge_before(elevator, req, latency);
@@ -1090,6 +1073,7 @@
EXPORT_SYMBOL(end_that_request_first);
EXPORT_SYMBOL(end_that_request_last);
EXPORT_SYMBOL(blk_init_queue);
+EXPORT_SYMBOL(blk_get_queue);
EXPORT_SYMBOL(blk_cleanup_queue);
EXPORT_SYMBOL(blk_queue_headactive);
EXPORT_SYMBOL(blk_queue_pluggable);
FUNET's LINUX-ADM group, [email protected]
TCL-scripts by Sam Shen (who was at: [email protected])