static struct block_device_operations md_fops;
-static struct gendisk *disks[MAX_MD_DEVS];
-
/*
* Enables to iterate over all existing md arrays
* all_mddevs_lock protects this list as well as mddev_map.
return NULL;
down(&disks_sem);
- if (disks[unit]) {
+ if (mddev->gendisk) {
up(&disks_sem);
mddev_put(mddev);
return NULL;
disk->private_data = mddev;
disk->queue = mddev->queue;
add_disk(disk);
- disks[mdidx(mddev)] = disk;
+ mddev->gendisk = disk;
up(&disks_sem);
return NULL;
}
unit = mdidx(mddev);
md_probe(0, &unit, NULL);
- disk = disks[unit];
+ disk = mddev->gendisk;
if (!disk)
return -ENOMEM;
static int restart_array(mddev_t *mddev)
{
- struct gendisk *disk = disks[mdidx(mddev)];
+ struct gendisk *disk = mddev->gendisk;
int err;
/*
static int do_md_stop(mddev_t * mddev, int ro)
{
int err = 0;
- struct gendisk *disk = disks[mdidx(mddev)];
+ struct gendisk *disk = mddev->gendisk;
if (mddev->pers) {
if (atomic_read(&mddev->active)>2) {
export_array(mddev);
mddev->array_size = 0;
- disk = disks[mdidx(mddev)];
+ disk = mddev->gendisk;
if (disk)
set_capacity(disk, 0);
} else
err = put_user (4, (char *) &loc->sectors);
if (err)
goto abort_unlock;
- err = put_user(get_capacity(disks[mdidx(mddev)])/8,
+ err = put_user(get_capacity(mddev->gendisk)/8,
(short *) &loc->cylinders);
if (err)
goto abort_unlock;
static __exit void md_exit(void)
{
+ mddev_t *mddev;
+ struct list_head *tmp;
int i;
blk_unregister_region(MKDEV(MAJOR_NR,0), MAX_MD_DEVS);
for (i=0; i < MAX_MD_DEVS; i++)
#ifdef CONFIG_PROC_FS
remove_proc_entry("mdstat", NULL);
#endif
- for (i = 0; i < MAX_MD_DEVS; i++) {
- struct gendisk *disk = disks[i];
- mddev_t *mddev;
- if (!disks[i])
+ ITERATE_MDDEV(mddev,tmp) {
+ struct gendisk *disk = mddev->gendisk;
+ if (!disk)
continue;
- mddev = disk->private_data;
export_array(mddev);
del_gendisk(disk);
put_disk(disk);
+ mddev->gendisk = NULL;
mddev_put(mddev);
}
}