]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
md: raid0: Make raid0_run() return a proper error code.
authorAndre Noll <maan@systemlinux.org>
Tue, 16 Jun 2009 06:47:21 +0000 (16:47 +1000)
committerNeilBrown <neilb@suse.de>
Tue, 16 Jun 2009 06:47:21 +0000 (16:47 +1000)
Currently raid0_run() always returns -ENOMEM on errors. This is
incorrect as running the array might fail for other reasons, for
example because not all component devices were available.

This patch changes create_strip_zones() so that it returns a proper
error code (either -ENOMEM or -EINVAL) rather than 1 on errors and
makes raid0_run(), its single caller, return that value instead
of -ENOMEM.

Signed-off-by: Andre Noll <maan@systemlinux.org>
Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/raid0.c

index edffc4940b497b920a5b6ffae49b1185b593623b..e5648b660e751099076bb45231d4a30db0d8afab 100644 (file)
@@ -105,12 +105,12 @@ static int create_strip_zones (mddev_t *mddev)
        conf->strip_zone = kzalloc(sizeof(struct strip_zone)*
                                conf->nr_strip_zones, GFP_KERNEL);
        if (!conf->strip_zone)
-               return 1;
+               return -ENOMEM;
        conf->devlist = kzalloc(sizeof(mdk_rdev_t*)*
                                conf->nr_strip_zones*mddev->raid_disks,
                                GFP_KERNEL);
        if (!conf->devlist)
-               return 1;
+               return -ENOMEM;
 
        /* The first zone must contain all devices, so here we check that
         * there is a proper alignment of slots to devices and find them all
@@ -207,8 +207,8 @@ static int create_strip_zones (mddev_t *mddev)
 
        printk(KERN_INFO "raid0: done.\n");
        return 0;
- abort:
-       return 1;
+abort:
+       return -EINVAL;
 }
 
 /**
@@ -254,6 +254,7 @@ static sector_t raid0_size(mddev_t *mddev, sector_t sectors, int raid_disks)
 static int raid0_run(mddev_t *mddev)
 {
        raid0_conf_t *conf;
+       int ret;
 
        if (mddev->chunk_size == 0) {
                printk(KERN_ERR "md/raid0: non-zero chunk size required.\n");
@@ -269,12 +270,13 @@ static int raid0_run(mddev_t *mddev)
 
        conf = kmalloc(sizeof (raid0_conf_t), GFP_KERNEL);
        if (!conf)
-               goto out;
+               return -ENOMEM;
        mddev->private = (void *)conf;
  
        conf->strip_zone = NULL;
        conf->devlist = NULL;
-       if (create_strip_zones (mddev)) 
+       ret = create_strip_zones(mddev);
+       if (ret < 0)
                goto out_free_conf;
 
        /* calculate array device size */
@@ -306,8 +308,7 @@ out_free_conf:
        kfree(conf->devlist);
        kfree(conf);
        mddev->private = NULL;
-out:
-       return -ENOMEM;
+       return ret;
 }
 
 static int raid0_stop (mddev_t *mddev)