7 -static int device_size_calculation(mddev_t * mddev)
10 - unsigned int readahead;
11 - struct list_head *tmp;
15 - * Do device size calculation. Bail out if too small.
16 - * (we have to do this after having validated chunk_size,
17 - * because device size has to be modulo chunk_size)
20 - ITERATE_RDEV(mddev,rdev,tmp) {
23 - if (rdev->size < mddev->chunk_size / 1024) {
25 - "md: Dev %s smaller than chunk_size:"
27 - bdev_partition_name(rdev->bdev),
28 - (unsigned long long)rdev->size,
29 - mddev->chunk_size / 1024);
34 - switch (mddev->level) {
35 - case LEVEL_MULTIPATH:
45 - zoned_raid_size(mddev);
49 - zoned_raid_size(mddev);
50 - data_disks = mddev->raid_disks;
57 - data_disks = mddev->raid_disks-1;
60 - printk(KERN_ERR "md: md%d: unsupported raid level %d\n",
61 - mdidx(mddev), mddev->level);
64 - if (!md_size[mdidx(mddev)])
65 - md_size[mdidx(mddev)] = mddev->size * data_disks;
67 - readahead = (VM_MAX_READAHEAD * 1024) / PAGE_SIZE;
68 - if (!mddev->level || (mddev->level == 4) || (mddev->level == 5)) {
69 - readahead = (mddev->chunk_size>>PAGE_SHIFT) * 4 * data_disks;
70 - if (readahead < data_disks * (MAX_SECTORS>>(PAGE_SHIFT-9))*2)
71 - readahead = data_disks * (MAX_SECTORS>>(PAGE_SHIFT-9))*2;
73 - // (no multipath branch - it uses the default setting)
74 - if (mddev->level == -3)
78 - printk(KERN_INFO "md%d: max total readahead window set to %ldk\n",
79 - mdidx(mddev), readahead*(PAGE_SIZE/1024));
82 - "md%d: %d data-disks, max readahead per data-disk: %ldk\n",
83 - mdidx(mddev), data_disks, readahead/data_disks*(PAGE_SIZE/1024));
89 static struct gendisk *md_probe(dev_t dev, int *part, void *data)
91 static DECLARE_MUTEX(disks_sem);
96 - if (device_size_calculation(mddev))
100 * Drop all container device buffers, from now on
101 * the only valid external interface is through the md