diff options
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/linear.c | 5 | ||||
-rw-r--r-- | drivers/md/multipath.c | 8 | ||||
-rw-r--r-- | drivers/md/raid1.c | 7 | ||||
-rw-r--r-- | drivers/md/raid10.c | 6 | ||||
-rw-r--r-- | drivers/md/raid5.c | 7 | ||||
-rw-r--r-- | drivers/md/raid6main.c | 6 |
6 files changed, 19 insertions, 20 deletions
diff --git a/drivers/md/linear.c b/drivers/md/linear.c index 161e9aa8729..b1941b887f4 100644 --- a/drivers/md/linear.c +++ b/drivers/md/linear.c @@ -269,9 +269,8 @@ static int linear_make_request (request_queue_t *q, struct bio *bio) * split it. */ struct bio_pair *bp; - bp = bio_split(bio, bio_split_pool, - (bio->bi_sector + (bio->bi_size >> 9) - - (tmp_dev->offset + tmp_dev->size))<<1); + bp = bio_split(bio, bio_split_pool, + ((tmp_dev->offset + tmp_dev->size)<<1) - bio->bi_sector); if (linear_make_request(q, &bp->bio1)) generic_make_request(&bp->bio1); if (linear_make_request(q, &bp->bio2)) diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c index 4e4bfde3db5..2ae2d709cb1 100644 --- a/drivers/md/multipath.c +++ b/drivers/md/multipath.c @@ -462,10 +462,6 @@ static int multipath_run (mddev_t *mddev) } memset(conf->multipaths, 0, sizeof(struct multipath_info)*mddev->raid_disks); - mddev->queue->unplug_fn = multipath_unplug; - - mddev->queue->issue_flush_fn = multipath_issue_flush; - conf->working_disks = 0; ITERATE_RDEV(mddev,rdev,tmp) { disk_idx = rdev->raid_disk; @@ -528,6 +524,10 @@ static int multipath_run (mddev_t *mddev) * Ok, everything is just fine now */ mddev->array_size = mddev->size; + + mddev->queue->unplug_fn = multipath_unplug; + mddev->queue->issue_flush_fn = multipath_issue_flush; + return 0; out_free_conf: diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 83380b5d659..1db5de52d37 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1197,10 +1197,6 @@ static int run(mddev_t *mddev) if (!conf->r1bio_pool) goto out_no_mem; - mddev->queue->unplug_fn = raid1_unplug; - - mddev->queue->issue_flush_fn = raid1_issue_flush; - ITERATE_RDEV(mddev, rdev, tmp) { disk_idx = rdev->raid_disk; if (disk_idx >= mddev->raid_disks @@ -1282,6 +1278,9 @@ static int run(mddev_t *mddev) */ mddev->array_size = mddev->size; + mddev->queue->unplug_fn = raid1_unplug; + mddev->queue->issue_flush_fn = raid1_issue_flush; + return 0; out_no_mem: diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index e9dc2876a62..3c37be6423d 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -1639,9 +1639,6 @@ static int run(mddev_t *mddev) mdname(mddev)); goto out_free_conf; } - mddev->queue->unplug_fn = raid10_unplug; - - mddev->queue->issue_flush_fn = raid10_issue_flush; ITERATE_RDEV(mddev, rdev, tmp) { disk_idx = rdev->raid_disk; @@ -1713,6 +1710,9 @@ static int run(mddev_t *mddev) mddev->array_size = size/2; mddev->resync_max_sectors = size; + mddev->queue->unplug_fn = raid10_unplug; + mddev->queue->issue_flush_fn = raid10_issue_flush; + /* Calculate max read-ahead size. * We need to readahead at least twice a whole stripe.... * maybe... diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index e96e2a10a9c..3cb11ac232f 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -1620,9 +1620,6 @@ static int run (mddev_t *mddev) atomic_set(&conf->active_stripes, 0); atomic_set(&conf->preread_active_stripes, 0); - mddev->queue->unplug_fn = raid5_unplug_device; - mddev->queue->issue_flush_fn = raid5_issue_flush; - PRINTK("raid5: run(%s) called.\n", mdname(mddev)); ITERATE_RDEV(mddev,rdev,tmp) { @@ -1728,6 +1725,10 @@ memory = conf->max_nr_stripes * (sizeof(struct stripe_head) + } /* Ok, everything is just fine now */ + + mddev->queue->unplug_fn = raid5_unplug_device; + mddev->queue->issue_flush_fn = raid5_issue_flush; + mddev->array_size = mddev->size * (mddev->raid_disks - 1); return 0; abort: diff --git a/drivers/md/raid6main.c b/drivers/md/raid6main.c index 8a33f351e09..908edd78a79 100644 --- a/drivers/md/raid6main.c +++ b/drivers/md/raid6main.c @@ -1779,9 +1779,6 @@ static int run (mddev_t *mddev) atomic_set(&conf->active_stripes, 0); atomic_set(&conf->preread_active_stripes, 0); - mddev->queue->unplug_fn = raid6_unplug_device; - mddev->queue->issue_flush_fn = raid6_issue_flush; - PRINTK("raid6: run(%s) called.\n", mdname(mddev)); ITERATE_RDEV(mddev,rdev,tmp) { @@ -1895,6 +1892,9 @@ static int run (mddev_t *mddev) /* Ok, everything is just fine now */ mddev->array_size = mddev->size * (mddev->raid_disks - 2); + + mddev->queue->unplug_fn = raid6_unplug_device; + mddev->queue->issue_flush_fn = raid6_issue_flush; return 0; abort: if (conf) { |