summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAlexander Viro <viro@math.psu.edu>2002-10-15 04:25:37 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2002-10-15 04:25:37 -0700
commit5682bcc620dbee99319997718c8929ec0d797854 (patch)
tree09a95ed6c8f9233f0182b037ead14982059c8d09 /include
parent68c16870dcfaba7c9e2dd5055a2caf4edcf42e87 (diff)
[PATCH] bdev->bd_disk introduced
There we go - now we can put a reference to gendisk into block_device. Which we do in do_open(). Most of the callers of get_gendisk() are simply using bdev->bd_disk now (and most of the put_disk() calls introduced on previous step disappear). We also put that pointer into struct request - ->rq_disk. That allows to get rid of disk_index() kludges in md.c (we simply count relevant IO in the struct gendisk fields) and kill the export of get_gendisk(). Notice that by now we can move _all_ IO counters into gendisk. That will kill a bunch of per-major arrays and more importantly, allow to merge sard in clean way. FWIW, we probably could show them as disk/partitions attributes in driverfs...
Diffstat (limited to 'include')
-rw-r--r--include/linux/blkdev.h1
-rw-r--r--include/linux/fs.h1
-rw-r--r--include/linux/genhd.h13
3 files changed, 6 insertions, 9 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 607641c6cfb1..ccb56d58de6a 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -34,6 +34,7 @@ struct request {
int rq_status; /* should split this into a few status bits */
kdev_t rq_dev;
+ struct gendisk *rq_disk;
int errors;
sector_t sector;
unsigned long nr_sectors;
diff --git a/include/linux/fs.h b/include/linux/fs.h
index cac13f931cec..bca164f4265a 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -359,6 +359,7 @@ struct block_device {
sector_t bd_offset;
unsigned bd_part_count;
int bd_invalidated;
+ struct gendisk * bd_disk;
};
struct inode {
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index 030ee2f87891..9de2f51ae935 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -90,6 +90,10 @@ struct gendisk {
devfs_handle_t disk_de; /* piled higher and deeper */
struct device *driverfs_dev;
struct device disk_dev;
+
+ unsigned sync_io; /* RAID */
+ unsigned reads, writes;
+ unsigned rio, wio;
};
/* drivers/block/genhd.c */
@@ -272,15 +276,6 @@ extern void put_disk(struct gendisk *disk);
/* will go away */
extern void blk_set_probe(int major, struct gendisk *(p)(int));
-static inline unsigned int disk_index (kdev_t dev)
-{
- int part, res;
- struct gendisk *g = get_gendisk(kdev_t_to_nr(dev), &part);
- res = g ? (minor(dev) >> g->minor_shift) : 0;
- put_disk(g);
- return res;
-}
-
#endif
#endif