summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorAlexander Viro <viro@math.psu.edu>2002-04-24 23:51:04 -0700
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-04-24 23:51:04 -0700
commit90012e6ec7ead7a4374f86d03ff09c4d14b41ebe (patch)
tree8a57242fa5f17fb284081a671a0ff8c276376adb /drivers
parent61e3b7fcb0a88fb82e93b9b5c384ae70e293ded7 (diff)
[PATCH] (13/15) big struct block_device * push (first series)
- *NOW* all places that (re)assign ->bi_dev have relevant struct block_device *. ->bi_bdev (struct block_device * equivalent of ->bi_dev) introduced, ->bi_dev removed, users updated.
Diffstat (limited to 'drivers')
-rw-r--r--drivers/block/DAC960.c12
-rw-r--r--drivers/block/elevator.c3
-rw-r--r--drivers/block/ll_rw_blk.c42
-rw-r--r--drivers/block/loop.c9
-rw-r--r--drivers/block/rd.c2
-rw-r--r--drivers/md/linear.c2
-rw-r--r--drivers/md/lvm.c1
-rw-r--r--drivers/md/md.c2
-rw-r--r--drivers/md/multipath.c22
-rw-r--r--drivers/md/raid0.c2
-rw-r--r--drivers/md/raid1.c40
11 files changed, 71 insertions, 66 deletions
diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c
index 13fb4c7c4a16..d541ade1220c 100644
--- a/drivers/block/DAC960.c
+++ b/drivers/block/DAC960.c
@@ -2944,6 +2944,10 @@ static inline void DAC960_ProcessCompletedBuffer(BufferHeader_T *BufferHeader,
BufferHeader->bi_end_io(BufferHeader);
}
+static inline int DAC960_PartitionByCommand(DAC960_Command_T *Command)
+{
+ return DAC960_PartitionNumber(to_kdev_t(Command->BufferHeader->bi_bdev->bd_dev));
+}
/*
DAC960_V1_ReadWriteError prints an appropriate error message for Command
@@ -2995,11 +2999,11 @@ static void DAC960_V1_ReadWriteError(DAC960_Command_T *Command)
Controller, Controller->ControllerNumber,
Command->LogicalDriveNumber, Command->BlockNumber,
Command->BlockNumber + Command->BlockCount - 1);
- if (DAC960_PartitionNumber(Command->BufferHeader->bi_dev) > 0)
+ if (DAC960_PartitionByCommand(Command) > 0)
DAC960_Error(" /dev/rd/c%dd%dp%d: relative blocks %u..%u\n",
Controller, Controller->ControllerNumber,
Command->LogicalDriveNumber,
- DAC960_PartitionNumber(Command->BufferHeader->bi_dev),
+ DAC960_PartitionByCommand(Command),
Command->BufferHeader->bi_sector,
Command->BufferHeader->bi_sector + Command->BlockCount - 1);
}
@@ -3859,11 +3863,11 @@ static void DAC960_V2_ReadWriteError(DAC960_Command_T *Command)
Controller, Controller->ControllerNumber,
Command->LogicalDriveNumber, Command->BlockNumber,
Command->BlockNumber + Command->BlockCount - 1);
- if (DAC960_PartitionNumber(Command->BufferHeader->bi_dev) > 0)
+ if (DAC960_PartitionByCommand(Command) > 0)
DAC960_Error(" /dev/rd/c%dd%dp%d: relative blocks %u..%u\n",
Controller, Controller->ControllerNumber,
Command->LogicalDriveNumber,
- DAC960_PartitionNumber(Command->BufferHeader->bi_dev),
+ DAC960_PartitionByCommand(Command),
Command->BufferHeader->bi_sector,
Command->BufferHeader->bi_sector + Command->BlockCount - 1);
}
diff --git a/drivers/block/elevator.c b/drivers/block/elevator.c
index 2c0e9f002fda..189814dbc7d1 100644
--- a/drivers/block/elevator.c
+++ b/drivers/block/elevator.c
@@ -111,7 +111,8 @@ inline int elv_rq_merge_ok(struct request *rq, struct bio *bio)
/*
* same device and no special stuff set, merge is ok
*/
- if (kdev_same(rq->rq_dev, bio->bi_dev) && !rq->waiting && !rq->special)
+ if (kdev_same(rq->rq_dev, to_kdev_t(bio->bi_bdev->bd_dev)) &&
+ !rq->waiting && !rq->special)
return 1;
return 0;
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c
index 5d6c137c7f23..e50693d6a9cf 100644
--- a/drivers/block/ll_rw_blk.c
+++ b/drivers/block/ll_rw_blk.c
@@ -1254,7 +1254,7 @@ get_rq:
req->buffer = bio_data(bio); /* see ->buffer comment above */
req->waiting = NULL;
req->bio = req->biotail = bio;
- req->rq_dev = bio->bi_dev;
+ req->rq_dev = to_kdev_t(bio->bi_bdev->bd_dev);
add_request(q, req, insert_here);
out:
if (freereq)
@@ -1273,23 +1273,19 @@ end_io:
*/
static inline void blk_partition_remap(struct bio *bio)
{
- int major, minor, drive, minor0;
+ struct block_device *bdev = bio->bi_bdev;
struct gendisk *g;
- kdev_t dev0;
-
- major = major(bio->bi_dev);
- if ((g = get_gendisk(bio->bi_dev))) {
- minor = minor(bio->bi_dev);
- drive = (minor >> g->minor_shift);
- minor0 = (drive << g->minor_shift); /* whole disk device */
- /* that is, minor0 = (minor & ~((1<<g->minor_shift)-1)); */
- dev0 = mk_kdev(major, minor0);
- if (!kdev_same(dev0, bio->bi_dev)) {
- bio->bi_dev = dev0;
- bio->bi_sector += g->part[minor].start_sect;
- }
- /* lots of checks are possible */
- }
+
+ if (bdev == bdev->bd_contains)
+ return;
+
+ g = get_gendisk(to_kdev_t(bdev->bd_dev));
+ if (!g)
+ BUG();
+
+ bio->bi_sector += g->part[minor(to_kdev_t((bdev->bd_dev)))].start_sect;
+ bio->bi_bdev = bdev->bd_contains;
+ /* lots of checks are possible */
}
/**
@@ -1324,7 +1320,7 @@ void generic_make_request(struct bio *bio)
int ret, nr_sectors = bio_sectors(bio);
/* Test device or partition size, when known. */
- maxsector = (blkdev_size_in_bytes(bio->bi_dev) >> 9);
+ maxsector = bio->bi_bdev->bd_inode->i_size >> 9;
if (maxsector) {
sector_t sector = bio->bi_sector;
@@ -1336,7 +1332,8 @@ void generic_make_request(struct bio *bio)
printk(KERN_INFO
"attempt to access beyond end of device\n");
printk(KERN_INFO "%s: rw=%ld, want=%ld, limit=%Lu\n",
- kdevname(bio->bi_dev), bio->bi_rw,
+ kdevname(to_kdev_t(bio->bi_bdev->bd_dev)),
+ bio->bi_rw,
sector + nr_sectors,
(long long) maxsector);
@@ -1354,11 +1351,12 @@ void generic_make_request(struct bio *bio)
* Stacking drivers are expected to know what they are doing.
*/
do {
- q = blk_get_queue(bio->bi_dev);
+ q = blk_get_queue(to_kdev_t(bio->bi_bdev->bd_dev));
if (!q) {
printk(KERN_ERR
"generic_make_request: Trying to access nonexistent block-device %s (%Lu)\n",
- kdevname(bio->bi_dev), (long long) bio->bi_sector);
+ kdevname(to_kdev_t(bio->bi_bdev->bd_dev)),
+ (long long) bio->bi_sector);
end_io:
bio->bi_end_io(bio);
break;
@@ -1445,7 +1443,7 @@ int submit_bh(int rw, struct buffer_head * bh)
bio = bio_alloc(GFP_NOIO, 1);
bio->bi_sector = bh->b_blocknr * (bh->b_size >> 9);
- bio->bi_dev = bh->b_dev;
+ bio->bi_bdev = bh->b_bdev;
bio->bi_io_vec[0].bv_page = bh->b_page;
bio->bi_io_vec[0].bv_len = bh->b_size;
bio->bi_io_vec[0].bv_offset = bh_offset(bh);
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 1683819aa124..b2b9d7411dfb 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -380,7 +380,7 @@ static struct bio *loop_get_bio(struct loop_device *lo)
static void loop_end_io_transfer(struct bio *bio)
{
struct bio *rbh = bio->bi_private;
- struct loop_device *lo = &loop_dev[minor(rbh->bi_dev)];
+ struct loop_device *lo = &loop_dev[minor(to_kdev_t(rbh->bi_bdev->bd_dev))];
int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags);
if (!uptodate || bio_rw(bio) == WRITE) {
@@ -413,7 +413,7 @@ out_bh:
bio->bi_sector = rbh->bi_sector + (lo->lo_offset >> 9);
bio->bi_rw = rbh->bi_rw;
spin_lock_irq(&lo->lo_lock);
- bio->bi_dev = to_kdev_t(lo->lo_device->bd_dev);
+ bio->bi_bdev = lo->lo_device;
spin_unlock_irq(&lo->lo_lock);
return bio;
@@ -425,11 +425,12 @@ static int loop_make_request(request_queue_t *q, struct bio *rbh)
struct loop_device *lo;
unsigned long IV;
int rw = bio_rw(rbh);
+ int unit = minor(to_kdev_t(rbh->bi_bdev->bd_dev));
- if (minor(rbh->bi_dev) >= max_loop)
+ if (unit >= max_loop)
goto out;
- lo = &loop_dev[minor(rbh->bi_dev)];
+ lo = &loop_dev[unit];
spin_lock_irq(&lo->lo_lock);
if (lo->lo_state != Lo_bound)
goto inactive;
diff --git a/drivers/block/rd.c b/drivers/block/rd.c
index 3330b415468d..3310efd6c8b2 100644
--- a/drivers/block/rd.c
+++ b/drivers/block/rd.c
@@ -244,7 +244,7 @@ static int rd_make_request(request_queue_t * q, struct bio *sbh)
unsigned long offset, len;
int rw = sbh->bi_rw;
- minor = minor(sbh->bi_dev);
+ minor = minor(to_kdev_t(sbh->bi_bdev->bd_dev));
if (minor >= NUM_RAMDISKS)
goto fail;
diff --git a/drivers/md/linear.c b/drivers/md/linear.c
index 947c92920278..25ffd7b2a43a 100644
--- a/drivers/md/linear.c
+++ b/drivers/md/linear.c
@@ -156,7 +156,7 @@ static int linear_make_request (mddev_t *mddev, int rw, struct bio *bio)
bio_io_error(bio);
return 0;
}
- bio->bi_dev = tmp_dev->dev;
+ bio->bi_bdev = tmp_dev->bdev;
bio->bi_sector = bio->bi_sector - (tmp_dev->offset << 1);
return 1;
diff --git a/drivers/md/lvm.c b/drivers/md/lvm.c
index b005157ff3a2..1c31e2058143 100644
--- a/drivers/md/lvm.c
+++ b/drivers/md/lvm.c
@@ -1,3 +1,4 @@
+#error Broken until maintainers will sanitize kdev_t handling
/*
* kernel/lvm.c
*
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 8c2ce9fea21e..1f27fffc0c70 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -172,7 +172,7 @@ void del_mddev_mapping(mddev_t * mddev, kdev_t dev)
static int md_make_request (request_queue_t *q, struct bio *bio)
{
- mddev_t *mddev = kdev_to_mddev(bio->bi_dev);
+ mddev_t *mddev = kdev_to_mddev(to_kdev_t(bio->bi_bdev->bd_dev));
if (mddev && mddev->pers)
return mddev->pers->make_request(mddev, bio_rw(bio), bio);
diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c
index 1dab6f53b08a..c528494c99d2 100644
--- a/drivers/md/multipath.c
+++ b/drivers/md/multipath.c
@@ -137,7 +137,7 @@ static void multipath_shrink_mpbh(multipath_conf_t *conf)
}
-static int multipath_map (mddev_t *mddev, kdev_t *dev)
+static int multipath_map (mddev_t *mddev, struct block_device **bdev)
{
multipath_conf_t *conf = mddev_to_conf(mddev);
int i, disks = MD_SB_DISKS;
@@ -149,7 +149,7 @@ static int multipath_map (mddev_t *mddev, kdev_t *dev)
for (i = 0; i < disks; i++) {
if (conf->multipaths[i].operational) {
- *dev = conf->multipaths[i].dev;
+ *bdev = conf->multipaths[i].bdev;
return (0);
}
}
@@ -198,7 +198,7 @@ void multipath_end_request(struct bio *bio)
* this branch is our 'one multipath IO has finished' event handler:
*/
if (!uptodate)
- md_error (mp_bh->mddev, bio->bi_dev);
+ md_error (mp_bh->mddev, to_kdev_t(bio->bi_bdev->bd_dev));
else
/*
* Set MPBH_Uptodate in our master buffer_head, so that
@@ -220,7 +220,7 @@ void multipath_end_request(struct bio *bio)
* oops, IO error:
*/
printk(KERN_ERR "multipath: %s: rescheduling sector %lu\n",
- partition_name(bio->bi_dev), bio->bi_sector);
+ bdev_partition_name(bio->bi_bdev), bio->bi_sector);
multipath_reschedule_retry(mp_bh);
return;
}
@@ -269,7 +269,7 @@ static int multipath_make_request (mddev_t *mddev, int rw, struct bio * bio)
multipath = conf->multipaths + multipath_read_balance(conf);
real_bio = bio_clone(bio, GFP_NOIO);
- real_bio->bi_dev = multipath->dev;
+ real_bio->bi_bdev = multipath->bdev;
real_bio->bi_rw = rw;
real_bio->bi_end_io = multipath_end_request;
real_bio->bi_private = mp_bh;
@@ -692,7 +692,7 @@ static void multipathd (void *data)
struct bio *bio;
unsigned long flags;
mddev_t *mddev;
- kdev_t dev;
+ struct block_device *bdev;
for (;;) {
spin_lock_irqsave(&retry_list_lock, flags);
@@ -709,16 +709,16 @@ static void multipathd (void *data)
md_update_sb(mddev);
}
bio = mp_bh->bio;
- dev = bio->bi_dev;
+ bdev = bio->bi_bdev;
- multipath_map (mddev, &bio->bi_dev);
- if (kdev_same(bio->bi_dev, dev)) {
+ multipath_map (mddev, &bio->bi_bdev);
+ if (bio->bi_bdev == bdev) {
printk(IO_ERROR,
- partition_name(bio->bi_dev), bio->bi_sector);
+ bdev_partition_name(bio->bi_bdev), bio->bi_sector);
multipath_end_bh_io(mp_bh, 0);
} else {
printk(REDIRECT_SECTOR,
- partition_name(bio->bi_dev), bio->bi_sector);
+ bdev_partition_name(bio->bi_bdev), bio->bi_sector);
generic_make_request(bio);
}
}
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index 7203d97a27fd..6ecf1c67424f 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -264,7 +264,7 @@ static int raid0_make_request (mddev_t *mddev, int rw, struct bio *bio)
* The new BH_Lock semantics in ll_rw_blk.c guarantee that this
* is the only IO operation happening on this bh.
*/
- bio->bi_dev = tmp_dev->dev;
+ bio->bi_bdev = tmp_dev->bdev;
bio->bi_sector = rsect;
/*
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 5fb7dfda7a5e..3e7d3fc9cede 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -186,7 +186,7 @@ static inline void put_buf(r1bio_t *r1_bio)
mempool_free(r1_bio, conf->r1buf_pool);
}
-static int map(mddev_t *mddev, kdev_t *rdev)
+static int map(mddev_t *mddev, struct block_device **bdev)
{
conf_t *conf = mddev_to_conf(mddev);
int i, disks = MD_SB_DISKS;
@@ -198,7 +198,7 @@ static int map(mddev_t *mddev, kdev_t *rdev)
for (i = 0; i < disks; i++) {
if (conf->mirrors[i].operational) {
- *rdev = conf->mirrors[i].dev;
+ *bdev = conf->mirrors[i].bdev;
return 0;
}
}
@@ -255,7 +255,7 @@ static void end_request(struct bio *bio)
* this branch is our 'one mirror IO has finished' event handler:
*/
if (!uptodate)
- md_error(r1_bio->mddev, bio->bi_dev);
+ md_error(r1_bio->mddev, to_kdev_t(bio->bi_bdev->bd_dev));
else
/*
* Set R1BIO_Uptodate in our master bio, so that
@@ -283,7 +283,7 @@ static void end_request(struct bio *bio)
* oops, read error:
*/
printk(KERN_ERR "raid1: %s: rescheduling sector %lu\n",
- partition_name(bio->bi_dev), r1_bio->sector);
+ bdev_partition_name(bio->bi_bdev), r1_bio->sector);
reschedule_retry(r1_bio);
return;
}
@@ -479,7 +479,7 @@ static int make_request(mddev_t *mddev, int rw, struct bio * bio)
r1_bio->read_bio = read_bio;
read_bio->bi_sector = r1_bio->sector;
- read_bio->bi_dev = mirror->dev;
+ read_bio->bi_bdev = mirror->bdev;
read_bio->bi_end_io = end_request;
read_bio->bi_rw = rw;
read_bio->bi_private = r1_bio;
@@ -503,7 +503,7 @@ static int make_request(mddev_t *mddev, int rw, struct bio * bio)
r1_bio->write_bios[i] = mbio;
mbio->bi_sector = r1_bio->sector;
- mbio->bi_dev = conf->mirrors[i].dev;
+ mbio->bi_bdev = conf->mirrors[i].bdev;
mbio->bi_end_io = end_request;
mbio->bi_rw = rw;
mbio->bi_private = r1_bio;
@@ -947,7 +947,7 @@ static void end_sync_read(struct bio *bio)
* We don't do much here, just schedule handling by raid1d
*/
if (!uptodate)
- md_error (r1_bio->mddev, bio->bi_dev);
+ md_error (r1_bio->mddev, to_kdev_t(bio->bi_bdev->bd_dev));
else
set_bit(R1BIO_Uptodate, &r1_bio->state);
reschedule_retry(r1_bio);
@@ -961,7 +961,7 @@ static void end_sync_write(struct bio *bio)
int i;
if (!uptodate)
- md_error(mddev, bio->bi_dev);
+ md_error(mddev, to_kdev_t(bio->bi_bdev->bd_dev));
for (i = 0; i < MD_SB_DISKS; i++)
if (r1_bio->write_bios[i] == bio) {
@@ -995,7 +995,7 @@ static void sync_request_write(mddev_t *mddev, r1bio_t *r1_bio)
* There is no point trying a read-for-reconstruct as
* reconstruct is about to be aborted
*/
- printk(IO_ERROR, partition_name(bio->bi_dev), r1_bio->sector);
+ printk(IO_ERROR, bdev_partition_name(bio->bi_bdev), r1_bio->sector);
md_done_sync(mddev, r1_bio->master_bio->bi_size >> 9, 0);
resume_device(conf);
put_buf(r1_bio);
@@ -1020,7 +1020,7 @@ static void sync_request_write(mddev_t *mddev, r1bio_t *r1_bio)
if (r1_bio->write_bios[i])
BUG();
r1_bio->write_bios[i] = mbio;
- mbio->bi_dev = conf->mirrors[i].dev;
+ mbio->bi_bdev = conf->mirrors[i].bdev;
mbio->bi_sector = r1_bio->sector;
mbio->bi_end_io = end_sync_write;
mbio->bi_rw = WRITE;
@@ -1038,7 +1038,7 @@ static void sync_request_write(mddev_t *mddev, r1bio_t *r1_bio)
* Nowhere to write this to... I guess we
* must be done
*/
- printk(IO_ERROR, partition_name(bio->bi_dev), r1_bio->sector);
+ printk(IO_ERROR, bdev_partition_name(bio->bi_bdev), r1_bio->sector);
md_done_sync(mddev, r1_bio->master_bio->bi_size >> 9, 0);
resume_device(conf);
put_buf(r1_bio);
@@ -1049,7 +1049,7 @@ static void sync_request_write(mddev_t *mddev, r1bio_t *r1_bio)
if (!mbio)
continue;
- md_sync_acct(mbio->bi_dev, mbio->bi_size >> 9);
+ md_sync_acct(to_kdev_t(mbio->bi_bdev->bd_dev), mbio->bi_size >> 9);
generic_make_request(mbio);
atomic_inc(&conf->mirrors[i].nr_pending);
}
@@ -1071,7 +1071,7 @@ static void raid1d(void *data)
unsigned long flags;
mddev_t *mddev;
conf_t *conf;
- kdev_t dev;
+ struct block_device *bdev;
for (;;) {
@@ -1096,15 +1096,15 @@ static void raid1d(void *data)
break;
case READ:
case READA:
- dev = bio->bi_dev;
- map(mddev, &bio->bi_dev);
- if (kdev_same(bio->bi_dev, dev)) {
- printk(IO_ERROR, partition_name(bio->bi_dev), r1_bio->sector);
+ bdev = bio->bi_bdev;
+ map(mddev, &bio->bi_bdev);
+ if (bio->bi_bdev == bdev) {
+ printk(IO_ERROR, bdev_partition_name(bio->bi_bdev), r1_bio->sector);
raid_end_bio_io(r1_bio, 0);
break;
}
printk(REDIRECT_SECTOR,
- partition_name(bio->bi_dev), r1_bio->sector);
+ bdev_partition_name(bio->bi_bdev), r1_bio->sector);
bio->bi_sector = r1_bio->sector;
bio->bi_rw = r1_bio->cmd;
@@ -1235,7 +1235,7 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
read_bio = bio_clone(r1_bio->master_bio, GFP_NOIO);
read_bio->bi_sector = sector_nr;
- read_bio->bi_dev = mirror->dev;
+ read_bio->bi_bdev = mirror->bdev;
read_bio->bi_end_io = end_sync_read;
read_bio->bi_rw = READ;
read_bio->bi_private = r1_bio;
@@ -1244,7 +1244,7 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
BUG();
r1_bio->read_bio = read_bio;
- md_sync_acct(read_bio->bi_dev, nr_sectors);
+ md_sync_acct(to_kdev_t(read_bio->bi_bdev->bd_dev), nr_sectors);
generic_make_request(read_bio);
atomic_inc(&conf->mirrors[conf->last_used].nr_pending);