diff options
author | Andre Noll <maan@systemlinux.org> | 2009-06-16 02:47:21 -0400 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-06-16 02:47:21 -0400 |
commit | 5568a6035d9fca2cd8f1ef7005e215eae4e65fab (patch) | |
tree | d4433e2449d51e38b841660b8b1017822828044c /drivers/md/raid0.c | |
parent | 8f79cfcdb65472f1504ade2f53e5f2bfdaeb95da (diff) |
md: raid0: Make raid0_run() return a proper error code.
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>
Diffstat (limited to 'drivers/md/raid0.c')
-rw-r--r-- | drivers/md/raid0.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index edffc4940b49..e5648b660e75 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c | |||
@@ -105,12 +105,12 @@ static int create_strip_zones (mddev_t *mddev) | |||
105 | conf->strip_zone = kzalloc(sizeof(struct strip_zone)* | 105 | conf->strip_zone = kzalloc(sizeof(struct strip_zone)* |
106 | conf->nr_strip_zones, GFP_KERNEL); | 106 | conf->nr_strip_zones, GFP_KERNEL); |
107 | if (!conf->strip_zone) | 107 | if (!conf->strip_zone) |
108 | return 1; | 108 | return -ENOMEM; |
109 | conf->devlist = kzalloc(sizeof(mdk_rdev_t*)* | 109 | conf->devlist = kzalloc(sizeof(mdk_rdev_t*)* |
110 | conf->nr_strip_zones*mddev->raid_disks, | 110 | conf->nr_strip_zones*mddev->raid_disks, |
111 | GFP_KERNEL); | 111 | GFP_KERNEL); |
112 | if (!conf->devlist) | 112 | if (!conf->devlist) |
113 | return 1; | 113 | return -ENOMEM; |
114 | 114 | ||
115 | /* The first zone must contain all devices, so here we check that | 115 | /* The first zone must contain all devices, so here we check that |
116 | * there is a proper alignment of slots to devices and find them all | 116 | * 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) | |||
207 | 207 | ||
208 | printk(KERN_INFO "raid0: done.\n"); | 208 | printk(KERN_INFO "raid0: done.\n"); |
209 | return 0; | 209 | return 0; |
210 | abort: | 210 | abort: |
211 | return 1; | 211 | return -EINVAL; |
212 | } | 212 | } |
213 | 213 | ||
214 | /** | 214 | /** |
@@ -254,6 +254,7 @@ static sector_t raid0_size(mddev_t *mddev, sector_t sectors, int raid_disks) | |||
254 | static int raid0_run(mddev_t *mddev) | 254 | static int raid0_run(mddev_t *mddev) |
255 | { | 255 | { |
256 | raid0_conf_t *conf; | 256 | raid0_conf_t *conf; |
257 | int ret; | ||
257 | 258 | ||
258 | if (mddev->chunk_size == 0) { | 259 | if (mddev->chunk_size == 0) { |
259 | printk(KERN_ERR "md/raid0: non-zero chunk size required.\n"); | 260 | printk(KERN_ERR "md/raid0: non-zero chunk size required.\n"); |
@@ -269,12 +270,13 @@ static int raid0_run(mddev_t *mddev) | |||
269 | 270 | ||
270 | conf = kmalloc(sizeof (raid0_conf_t), GFP_KERNEL); | 271 | conf = kmalloc(sizeof (raid0_conf_t), GFP_KERNEL); |
271 | if (!conf) | 272 | if (!conf) |
272 | goto out; | 273 | return -ENOMEM; |
273 | mddev->private = (void *)conf; | 274 | mddev->private = (void *)conf; |
274 | 275 | ||
275 | conf->strip_zone = NULL; | 276 | conf->strip_zone = NULL; |
276 | conf->devlist = NULL; | 277 | conf->devlist = NULL; |
277 | if (create_strip_zones (mddev)) | 278 | ret = create_strip_zones(mddev); |
279 | if (ret < 0) | ||
278 | goto out_free_conf; | 280 | goto out_free_conf; |
279 | 281 | ||
280 | /* calculate array device size */ | 282 | /* calculate array device size */ |
@@ -306,8 +308,7 @@ out_free_conf: | |||
306 | kfree(conf->devlist); | 308 | kfree(conf->devlist); |
307 | kfree(conf); | 309 | kfree(conf); |
308 | mddev->private = NULL; | 310 | mddev->private = NULL; |
309 | out: | 311 | return ret; |
310 | return -ENOMEM; | ||
311 | } | 312 | } |
312 | 313 | ||
313 | static int raid0_stop (mddev_t *mddev) | 314 | static int raid0_stop (mddev_t *mddev) |