md: raid0/linear: ensure device sizes are rounded to chunk size.
[safe/jmp/linux-2.6] / drivers / md / linear.c
index 9b02a73..dda2f1b 100644 (file)
@@ -135,6 +135,7 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
        list_for_each_entry(rdev, &mddev->disks, same_set) {
                int j = rdev->raid_disk;
                dev_info_t *disk = conf->disks + j;
+               sector_t sectors;
 
                if (j < 0 || j >= raid_disks || disk->rdev) {
                        printk("linear: disk numbering problem. Aborting!\n");
@@ -142,6 +143,11 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
                }
 
                disk->rdev = rdev;
+               if (mddev->chunk_sectors) {
+                       sectors = rdev->sectors;
+                       sector_div(sectors, mddev->chunk_sectors);
+                       rdev->sectors = sectors * mddev->chunk_sectors;
+               }
 
                blk_queue_stack_limits(mddev->queue,
                                       rdev->bdev->bd_disk->queue);
@@ -305,7 +311,7 @@ static int linear_make_request (struct request_queue *q, struct bio *bio)
 static void linear_status (struct seq_file *seq, mddev_t *mddev)
 {
 
-       seq_printf(seq, " %dk rounding", mddev->chunk_size/1024);
+       seq_printf(seq, " %dk rounding", mddev->chunk_sectors / 2);
 }