md: fix error path when duplicate name is found on md device creation.
authorNeilBrown <neilb@suse.de>
Wed, 1 Jul 2009 02:27:21 +0000 (12:27 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 1 Jul 2009 02:27:21 +0000 (12:27 +1000)
When an md device is created by name (rather than number) we need to
check that the name is not already in use.  If this check finds a
duplicate, we return an error without dropping the lock or freeing
the newly create mddev.
This patch fixes that.

Cc: stable@kernel.org
Found-by: Jiri Slaby <jirislaby@gmail.com>
Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/md.c

index 2166af8a76546d43f6739dadbcfd4e23779bf4c1..58bee2366ea8eaf8a11602cb2aec7f3677e19d99 100644 (file)
@@ -3862,6 +3862,8 @@ static int md_alloc(dev_t dev, char *name)
                        if (mddev2->gendisk &&
                            strcmp(mddev2->gendisk->disk_name, name) == 0) {
                                spin_unlock(&all_mddevs_lock);
+                               mutex_unlock(&disks_mutex);
+                               mddev_put(mddev);
                                return -EEXIST;
                        }
                spin_unlock(&all_mddevs_lock);