summaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-08-25 06:33:44 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-08-25 06:33:44 +0000
commit6bd6dbbd3ae53a268a510270bebaab24fff382ca (patch)
tree41d0361e6b48ce74584c9a6fcb475d5054ca4141 /drivers/block
parentee355114ec6062d00c1376b184b886a39e74fd4e (diff)
Merge with Linux 2.4.0-test6-pre10.
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/ll_rw_blk.c33
-rw-r--r--drivers/block/md.c2
-rw-r--r--drivers/block/raid1.c21
-rw-r--r--drivers/block/raid5.c30
-rw-r--r--drivers/block/xd.h1
5 files changed, 33 insertions, 54 deletions
diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c
index cf6e99878..5c1fda2c3 100644
--- a/drivers/block/ll_rw_blk.c
+++ b/drivers/block/ll_rw_blk.c
@@ -842,10 +842,10 @@ end_io:
return 0;
}
-void generic_make_request (request_queue_t *q, int rw, struct buffer_head * bh)
+void generic_make_request (int rw, struct buffer_head * bh)
{
int major = MAJOR(bh->b_rdev);
-
+ request_queue_t *q;
if (blk_size[major]) {
unsigned long maxsector = (blk_size[major][MINOR(bh->b_rdev)] << 1) + 1;
unsigned int sector, count;
@@ -877,12 +877,21 @@ void generic_make_request (request_queue_t *q, int rw, struct buffer_head * bh)
* still free to implement/resolve their own stacking
* by explicitly returning 0)
*/
- while (q->make_request_fn(q, rw, bh))
- /* NOTE: we don't repeat the blk_size check even though we now have a
- * new device. stacking drivers are expected to know what
- * they are doing.
- */
+ /* NOTE: we don't repeat the blk_size check for each new device.
+ * Stacking drivers are expected to know what they are doing.
+ */
+ do {
q = blk_get_queue(bh->b_rdev);
+ if (!q) {
+ printk(KERN_ERR
+ "generic_make_request: Trying to access nonexistent block-device %s (%ld)\n",
+ kdevname(bh->b_rdev), bh->b_rsector);
+ buffer_IO_error(bh);
+ break;
+ }
+
+ }
+ while (q->make_request_fn(q, rw, bh));
}
/* This function can be used to request a number of buffers from a block
@@ -892,19 +901,11 @@ void generic_make_request (request_queue_t *q, int rw, struct buffer_head * bh)
void ll_rw_block(int rw, int nr, struct buffer_head * bhs[])
{
struct buffer_head *bh;
- request_queue_t *q;
unsigned int major;
int correct_size;
int i;
major = MAJOR(bhs[0]->b_dev);
- q = blk_get_queue(bhs[0]->b_dev);
- if (!q) {
- printk(KERN_ERR
- "ll_rw_block: Trying to read nonexistent block-device %s (%ld)\n",
- kdevname(bhs[0]->b_dev), bhs[0]->b_blocknr);
- goto sorry;
- }
/* Determine correct block size for this device. */
correct_size = BLOCK_SIZE;
@@ -948,7 +949,7 @@ void ll_rw_block(int rw, int nr, struct buffer_head * bhs[])
bh->b_rdev = bh->b_dev;
bh->b_rsector = bh->b_blocknr * (bh->b_size>>9);
- generic_make_request(q, rw, bh);
+ generic_make_request(rw, bh);
}
return;
diff --git a/drivers/block/md.c b/drivers/block/md.c
index 9774233cc..d54669fc8 100644
--- a/drivers/block/md.c
+++ b/drivers/block/md.c
@@ -2741,7 +2741,7 @@ static int md_ioctl (struct inode *inode, struct file *file,
if (md_copy_from_user(&info, (void*)arg, sizeof(info)))
err = -EFAULT;
else
- err = add_new_disk(mddev, (void *)arg);
+ err = add_new_disk(mddev, &info);
goto done_unlock;
}
case HOT_REMOVE_DISK:
diff --git a/drivers/block/raid1.c b/drivers/block/raid1.c
index baf839b1d..4c364712a 100644
--- a/drivers/block/raid1.c
+++ b/drivers/block/raid1.c
@@ -551,7 +551,6 @@ static int raid1_make_request (mddev_t *mddev, int rw,
int disks = MD_SB_DISKS;
int i, sum_bhs = 0, sectors;
struct mirror_info *mirror;
- request_queue_t *q;
if (!buffer_locked(bh))
BUG();
@@ -628,8 +627,7 @@ static int raid1_make_request (mddev_t *mddev, int rw,
/* bh_req->b_rsector = bh->n_rsector; */
bh_req->b_end_io = raid1_end_request;
bh_req->b_private = r1_bh;
- q = blk_get_queue(bh_req->b_rdev);
- generic_make_request (q, rw, bh_req);
+ generic_make_request (rw, bh_req);
return 0;
}
@@ -704,8 +702,7 @@ static int raid1_make_request (mddev_t *mddev, int rw,
while(bh) {
struct buffer_head *bh2 = bh;
bh = bh->b_next;
- q = blk_get_queue(bh2->b_rdev);
- generic_make_request(q, rw, bh2);
+ generic_make_request(rw, bh2);
}
return (0);
}
@@ -1124,7 +1121,6 @@ static void raid1d (void *data)
struct raid1_bh *r1_bh;
struct buffer_head *bh;
unsigned long flags;
- request_queue_t *q;
mddev_t *mddev;
kdev_t dev;
@@ -1206,8 +1202,7 @@ static void raid1d (void *data)
while (mbh) {
struct buffer_head *bh1 = mbh;
mbh = mbh->b_next;
- q = blk_get_queue(bh1->b_rdev);
- generic_make_request(q, WRITE, bh1);
+ generic_make_request(WRITE, bh1);
md_sync_acct(bh1->b_rdev, bh1->b_size/512);
}
} else {
@@ -1220,8 +1215,7 @@ static void raid1d (void *data)
printk (REDIRECT_SECTOR,
partition_name(bh->b_dev), bh->b_blocknr);
bh->b_rdev = bh->b_dev;
- q = blk_get_queue(bh->b_rdev);
- generic_make_request (q, READ, bh);
+ generic_make_request(READ, bh);
}
}
@@ -1238,8 +1232,7 @@ static void raid1d (void *data)
printk (REDIRECT_SECTOR,
partition_name(bh->b_dev), bh->b_blocknr);
bh->b_rdev = bh->b_dev;
- q = blk_get_queue(bh->b_rdev);
- generic_make_request (q, r1_bh->cmd, bh);
+ generic_make_request (r1_bh->cmd, bh);
}
break;
}
@@ -1348,7 +1341,6 @@ static int raid1_sync_request (mddev_t *mddev, unsigned long block_nr)
{
raid1_conf_t *conf = mddev_to_conf(mddev);
struct mirror_info *mirror;
- request_queue_t *q;
struct raid1_bh *r1_bh;
struct buffer_head *bh;
int bsize;
@@ -1435,8 +1427,7 @@ static int raid1_sync_request (mddev_t *mddev, unsigned long block_nr)
bh->b_rsector = block_nr<<1;
init_waitqueue_head(&bh->b_wait);
- q = blk_get_queue(bh->b_rdev);
- generic_make_request(q, READ, bh);
+ generic_make_request(READ, bh);
md_sync_acct(bh->b_rdev, bh->b_size/512);
return (bsize >> 10);
diff --git a/drivers/block/raid5.c b/drivers/block/raid5.c
index 346cc2759..5d575a7f5 100644
--- a/drivers/block/raid5.c
+++ b/drivers/block/raid5.c
@@ -1017,7 +1017,6 @@ static void handle_stripe_write (mddev_t *mddev , raid5_conf_t *conf,
int nr_failed_other, int nr_cache_overwrite, int nr_failed_overwrite)
{
int i, allclean;
- request_queue_t *q;
unsigned int block;
struct buffer_head *bh;
int method1 = INT_MAX, method2 = INT_MAX;
@@ -1088,21 +1087,18 @@ static void handle_stripe_write (mddev_t *mddev , raid5_conf_t *conf,
PRINTK("writing spare %d\n", i);
atomic_inc(&sh->nr_pending);
bh->b_dev = bh->b_rdev = conf->spare->dev;
- q = blk_get_queue(bh->b_rdev);
- generic_make_request(q, WRITERAW, bh);
+ generic_make_request(WRITERAW, bh);
} else {
#if 0
atomic_inc(&sh->nr_pending);
bh->b_dev = bh->b_rdev = conf->disks[i].dev;
- q = blk_get_queue(bh->b_rdev);
- generic_make_request(q, WRITERAW, bh);
+ generic_make_request(WRITERAW, bh);
#else
if (!allclean || (i==sh->pd_idx)) {
PRINTK("writing dirty %d\n", i);
atomic_inc(&sh->nr_pending);
bh->b_dev = bh->b_rdev = conf->disks[i].dev;
- q = blk_get_queue(bh->b_rdev);
- generic_make_request(q, WRITERAW, bh);
+ generic_make_request(WRITERAW, bh);
} else {
PRINTK("not writing clean %d\n", i);
raid5_end_request(bh, 1);
@@ -1147,8 +1143,7 @@ static void handle_stripe_write (mddev_t *mddev , raid5_conf_t *conf,
lock_get_bh(sh->bh_old[i]);
atomic_inc(&sh->nr_pending);
sh->bh_old[i]->b_dev = sh->bh_old[i]->b_rdev = conf->disks[i].dev;
- q = blk_get_queue(sh->bh_old[i]->b_rdev);
- generic_make_request(q, READ, sh->bh_old[i]);
+ generic_make_request(READ, sh->bh_old[i]);
atomic_dec(&sh->bh_old[i]->b_count);
}
PRINTK("handle_stripe() %lu, reading %d old buffers\n", sh->sector, md_atomic_read(&sh->nr_pending));
@@ -1163,7 +1158,6 @@ static void handle_stripe_read (mddev_t *mddev , raid5_conf_t *conf,
int nr_failed_other, int nr_cache_overwrite, int nr_failed_overwrite)
{
int i;
- request_queue_t *q;
int method1 = INT_MAX;
method1 = nr_read - nr_cache_overwrite;
@@ -1194,8 +1188,7 @@ static void handle_stripe_read (mddev_t *mddev , raid5_conf_t *conf,
lock_get_bh(sh->bh_old[i]);
atomic_inc(&sh->nr_pending);
sh->bh_old[i]->b_dev = sh->bh_old[i]->b_rdev = conf->disks[i].dev;
- q = blk_get_queue(sh->bh_old[i]->b_rdev);
- generic_make_request(q, READ, sh->bh_old[i]);
+ generic_make_request(READ, sh->bh_old[i]);
atomic_dec(&sh->bh_old[i]->b_count);
}
PRINTK("handle_stripe() %lu, phase READ_OLD, pending %d buffers\n", sh->sector, md_atomic_read(&sh->nr_pending));
@@ -1224,8 +1217,7 @@ static void handle_stripe_read (mddev_t *mddev , raid5_conf_t *conf,
lock_get_bh(sh->bh_req[i]);
atomic_inc(&sh->nr_pending);
sh->bh_req[i]->b_dev = sh->bh_req[i]->b_rdev = conf->disks[i].dev;
- q = blk_get_queue(sh->bh_req[i]->b_rdev);
- generic_make_request(q, READ, sh->bh_req[i]);
+ generic_make_request(READ, sh->bh_req[i]);
atomic_dec(&sh->bh_req[i]->b_count);
}
PRINTK("handle_stripe() %lu, phase READ, pending %d\n", sh->sector, md_atomic_read(&sh->nr_pending));
@@ -1239,7 +1231,6 @@ static void handle_stripe_sync (mddev_t *mddev , raid5_conf_t *conf,
int parity, int parity_failed, int nr_cache, int nr_cache_other,
int nr_failed_other, int nr_cache_overwrite, int nr_failed_overwrite)
{
- request_queue_t *q;
struct buffer_head *bh;
int i, pd_idx;
@@ -1262,8 +1253,7 @@ static void handle_stripe_sync (mddev_t *mddev , raid5_conf_t *conf,
lock_get_bh(bh);
atomic_inc(&sh->nr_pending);
bh->b_dev = bh->b_rdev = conf->disks[i].dev;
- q = blk_get_queue(bh->b_rdev);
- generic_make_request(q, READ, bh);
+ generic_make_request(READ, bh);
md_sync_acct(bh->b_rdev, bh->b_size/512);
atomic_dec(&sh->bh_old[i]->b_count);
}
@@ -1292,8 +1282,7 @@ static void handle_stripe_sync (mddev_t *mddev , raid5_conf_t *conf,
atomic_inc(&sh->nr_pending);
lock_get_bh(bh);
bh->b_dev = bh->b_rdev = conf->spare->dev;
- q = blk_get_queue(bh->b_rdev);
- generic_make_request(q, WRITERAW, bh);
+ generic_make_request(WRITERAW, bh);
md_sync_acct(bh->b_rdev, bh->b_size/512);
atomic_dec(&bh->b_count);
PRINTK("handle_stripe_sync() %lu, phase WRITE, pending %d buffers\n", sh->sector, md_atomic_read(&sh->nr_pending));
@@ -1319,8 +1308,7 @@ static void handle_stripe_sync (mddev_t *mddev , raid5_conf_t *conf,
lock_get_bh(bh);
atomic_inc(&sh->nr_pending);
bh->b_dev = bh->b_rdev = conf->disks[pd_idx].dev;
- q = blk_get_queue(bh->b_rdev);
- generic_make_request(q, WRITERAW, bh);
+ generic_make_request(WRITERAW, bh);
md_sync_acct(bh->b_rdev, bh->b_size/512);
atomic_dec(&bh->b_count);
PRINTK("handle_stripe_sync() %lu phase WRITE, pending %d buffers\n",
diff --git a/drivers/block/xd.h b/drivers/block/xd.h
index 1612f321d..7babb59b9 100644
--- a/drivers/block/xd.h
+++ b/drivers/block/xd.h
@@ -103,7 +103,6 @@ typedef struct {
const char *name;
} XD_SIGNATURE;
-static int xd_setup (char *);
#ifndef MODULE
static int xd_manual_geo_init (char *command);
#endif /* MODULE */