Commit c5b971d7 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] md: set ra_pages for raid0/raid5 devices properly.

From: NeilBrown <neilb@cse.unsw.edu.au>

stripe to be effective.  This patch sets ra_pages
appropriately.
parent 59165b4f
......@@ -311,6 +311,22 @@ static int raid0_run (mddev_t *mddev)
conf->hash_spacing++;
}
/* calculate the max read-ahead size.
* For read-ahead of large files to be effective, we need to
* readahead at least a whole stripe. i.e. number of devices
* multiplied by chunk size.
* If an individual device has an ra_pages greater than the
* chunk size, then we will not drive that device as hard as it
* wants. We consider this a configuration error: a larger
* chunksize should be used in that case.
*/
{
int stripe = mddev->raid_disks * mddev->chunk_size / PAGE_CACHE_SIZE;
if (mddev->queue->backing_dev_info.ra_pages < stripe)
mddev->queue->backing_dev_info.ra_pages = stripe;
}
blk_queue_merge_bvec(mddev->queue, raid0_mergeable_bvec);
return 0;
......
......@@ -1587,6 +1587,16 @@ memory = conf->max_nr_stripes * (sizeof(struct stripe_head) +
print_raid5_conf(conf);
/* read-ahead size must cover a whole stripe, which is
* (n-1) * chunksize where 'n' is the number of raid devices
*/
{
int stripe = (mddev->raid_disks-1) * mddev->chunk_size
/ PAGE_CACHE_SIZE;
if (mddev->queue->backing_dev_info.ra_pages < stripe)
mddev->queue->backing_dev_info.ra_pages = stripe;
}
/* Ok, everything is just fine now */
mddev->array_size = mddev->size * (mddev->raid_disks - 1);
return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment