ide-scsi: fix Interrupt Reason checking in idescsi_pc_intr()
[safe/jmp/linux-2.6] / drivers / md / linear.c
index 17f795c..1074824 100644 (file)
@@ -87,30 +87,10 @@ static void linear_unplug(struct request_queue *q)
 
        for (i=0; i < mddev->raid_disks; i++) {
                struct request_queue *r_queue = bdev_get_queue(conf->disks[i].rdev->bdev);
-               if (r_queue->unplug_fn)
-                       r_queue->unplug_fn(r_queue);
+               blk_unplug(r_queue);
        }
 }
 
-static int linear_issue_flush(struct request_queue *q, struct gendisk *disk,
-                             sector_t *error_sector)
-{
-       mddev_t *mddev = q->queuedata;
-       linear_conf_t *conf = mddev_to_conf(mddev);
-       int i, ret = 0;
-
-       for (i=0; i < mddev->raid_disks && ret == 0; i++) {
-               struct block_device *bdev = conf->disks[i].rdev->bdev;
-               struct request_queue *r_queue = bdev_get_queue(bdev);
-
-               if (!r_queue->issue_flush_fn)
-                       ret = -EOPNOTSUPP;
-               else
-                       ret = r_queue->issue_flush_fn(r_queue, bdev->bd_disk, error_sector);
-       }
-       return ret;
-}
-
 static int linear_congested(void *data, int bits)
 {
        mddev_t *mddev = data;
@@ -142,7 +122,7 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
        cnt = 0;
        conf->array_size = 0;
 
-       ITERATE_RDEV(mddev,rdev,tmp) {
+       rdev_for_each(rdev, tmp, mddev) {
                int j = rdev->raid_disk;
                dev_info_t *disk = conf->disks + j;
 
@@ -270,6 +250,7 @@ static int linear_run (mddev_t *mddev)
 {
        linear_conf_t *conf;
 
+       mddev->queue->queue_lock = &mddev->queue->__queue_lock;
        conf = linear_conf(mddev, mddev->raid_disks);
 
        if (!conf)
@@ -279,7 +260,6 @@ static int linear_run (mddev_t *mddev)
 
        blk_queue_merge_bvec(mddev->queue, linear_mergeable_bvec);
        mddev->queue->unplug_fn = linear_unplug;
-       mddev->queue->issue_flush_fn = linear_issue_flush;
        mddev->queue->backing_dev_info.congested_fn = linear_congested;
        mddev->queue->backing_dev_info.congested_data = mddev;
        return 0;
@@ -338,7 +318,7 @@ static int linear_make_request (struct request_queue *q, struct bio *bio)
        sector_t block;
 
        if (unlikely(bio_barrier(bio))) {
-               bio_endio(bio, bio->bi_size, -EOPNOTSUPP);
+               bio_endio(bio, -EOPNOTSUPP);
                return 0;
        }
 
@@ -358,7 +338,7 @@ static int linear_make_request (struct request_queue *q, struct bio *bio)
                        bdevname(tmp_dev->rdev->bdev, b),
                        (unsigned long long)tmp_dev->size,
                        (unsigned long long)tmp_dev->offset);
-               bio_io_error(bio, bio->bi_size);
+               bio_io_error(bio);
                return 0;
        }
        if (unlikely(bio->bi_sector + (bio->bi_size >> 9) >