diff options
Diffstat (limited to 'drivers/md/raid5.c')
-rw-r--r-- | drivers/md/raid5.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 2dba305daf3c..03f31379cebb 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -1822,11 +1822,13 @@ static int run(mddev_t *mddev) | |||
1822 | return -EIO; | 1822 | return -EIO; |
1823 | } | 1823 | } |
1824 | 1824 | ||
1825 | mddev->private = kzalloc(sizeof (raid5_conf_t) | 1825 | mddev->private = kzalloc(sizeof (raid5_conf_t), GFP_KERNEL); |
1826 | + mddev->raid_disks * sizeof(struct disk_info), | ||
1827 | GFP_KERNEL); | ||
1828 | if ((conf = mddev->private) == NULL) | 1826 | if ((conf = mddev->private) == NULL) |
1829 | goto abort; | 1827 | goto abort; |
1828 | conf->disks = kzalloc(mddev->raid_disks * sizeof(struct disk_info), | ||
1829 | GFP_KERNEL); | ||
1830 | if (!conf->disks) | ||
1831 | goto abort; | ||
1830 | 1832 | ||
1831 | conf->mddev = mddev; | 1833 | conf->mddev = mddev; |
1832 | 1834 | ||
@@ -1966,6 +1968,7 @@ static int run(mddev_t *mddev) | |||
1966 | abort: | 1968 | abort: |
1967 | if (conf) { | 1969 | if (conf) { |
1968 | print_raid5_conf(conf); | 1970 | print_raid5_conf(conf); |
1971 | kfree(conf->disks); | ||
1969 | kfree(conf->stripe_hashtbl); | 1972 | kfree(conf->stripe_hashtbl); |
1970 | kfree(conf); | 1973 | kfree(conf); |
1971 | } | 1974 | } |
@@ -1986,6 +1989,7 @@ static int stop(mddev_t *mddev) | |||
1986 | kfree(conf->stripe_hashtbl); | 1989 | kfree(conf->stripe_hashtbl); |
1987 | blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/ | 1990 | blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/ |
1988 | sysfs_remove_group(&mddev->kobj, &raid5_attrs_group); | 1991 | sysfs_remove_group(&mddev->kobj, &raid5_attrs_group); |
1992 | kfree(conf->disks); | ||
1989 | kfree(conf); | 1993 | kfree(conf); |
1990 | mddev->private = NULL; | 1994 | mddev->private = NULL; |
1991 | return 0; | 1995 | return 0; |