summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Kwolek <adam.kwolek@intel.com>2011-06-14 12:42:06 +1000
committerNeilBrown <neilb@suse.de>2011-06-14 12:42:06 +1000
commit80e4abc99c7f5a16c56c1c4084bfad63aec03c01 (patch)
tree6a0d7888580e72c9f2d8eea269aef126a9ac0203
parent0de8d44ddeb80d73dcad8d28cf4c1e779f5c2040 (diff)
downloadmdadm-80e4abc99c7f5a16c56c1c4084bfad63aec03c01.tar.gz
FIX: Cannot create volume
getinfo_super() can clear entire 'inf' structure before filling with new information. Disk number required later is lost. Restore disk number information after getinfo_super() call. Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r--Create.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/Create.c b/Create.c
index 7b4d0fe..48115db 100644
--- a/Create.c
+++ b/Create.c
@@ -856,11 +856,19 @@ int Create(struct supertype *st, char *mddev,
/* getinfo_super might have lost these ... */
inf->disk.major = major(stb.st_rdev);
inf->disk.minor = minor(stb.st_rdev);
+ /* FIXME the following should not be needed
+ * as getinfo_super is suppose to set
+ * them. However it doesn't for imsm,
+ * so we have this hack for now
+ */
+ if (st->ss == &super_imsm) {
+ inf->disk.number = dnum;
+ inf->disk.raid_disk = dnum;
+ }
}
break;
case 2:
inf->errors = 0;
- rv = 0;
rv = add_disk(mdfd, st, &info, inf);