diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-08-25 06:33:44 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-08-25 06:33:44 +0000 |
commit | 6bd6dbbd3ae53a268a510270bebaab24fff382ca (patch) | |
tree | 41d0361e6b48ce74584c9a6fcb475d5054ca4141 /drivers/block | |
parent | ee355114ec6062d00c1376b184b886a39e74fd4e (diff) |
Merge with Linux 2.4.0-test6-pre10.
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/ll_rw_blk.c | 33 | ||||
-rw-r--r-- | drivers/block/md.c | 2 | ||||
-rw-r--r-- | drivers/block/raid1.c | 21 | ||||
-rw-r--r-- | drivers/block/raid5.c | 30 | ||||
-rw-r--r-- | drivers/block/xd.h | 1 |
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 */ |