summaryrefslogtreecommitdiffstats
path: root/Create.c
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2008-05-15 16:48:19 +1000
committerNeil Brown <neilb@suse.de>2008-05-15 16:48:19 +1000
commit598f0d58ac3544e25f90f2d34337e15764f4d877 (patch)
tree9cfe332da8c0deee87065a14014a2904ee991902 /Create.c
parenta19c88b83db3cc25affb75fe2d5531c964379d96 (diff)
downloadmdadm-598f0d58ac3544e25f90f2d34337e15764f4d877.tar.gz
mdadm-598f0d58ac3544e25f90f2d34337e15764f4d877.tar.xz
mdadm-598f0d58ac3544e25f90f2d34337e15764f4d877.zip
Can now mostly assemble DDF arrays
Diffstat (limited to 'Create.c')
-rw-r--r--Create.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/Create.c b/Create.c
index 50da1ad..0bc4738 100644
--- a/Create.c
+++ b/Create.c
@@ -637,6 +637,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
rv = 0;
if (st->ss->external) {
+ st->ss->getinfo_super_n(st, &info);
rv = sysfs_add_disk(sra, fd, &info);
close(fd);
} else {
@@ -666,12 +667,27 @@ int Create(struct supertype *st, char *mddev, int mdfd,
/* No need to start */
;
else if (runstop == 1 || subdevs >= raiddisks) {
- mdu_param_t param;
- if (ioctl(mdfd, RUN_ARRAY, &param)) {
- fprintf(stderr, Name ": RUN_ARRAY failed: %s\n",
- strerror(errno));
- Manage_runstop(mddev, mdfd, -1, 0);
- return 1;
+ if (st->ss->external) {
+ switch(level) {
+ case LEVEL_LINEAR:
+ case LEVEL_MULTIPATH:
+ case 0:
+ sysfs_set_str(sra, NULL, "array_state",
+ "active");
+ break;
+ default:
+ sysfs_set_str(sra, NULL, "array_state",
+ "readonly");
+ break;
+ }
+ } else {
+ mdu_param_t param;
+ if (ioctl(mdfd, RUN_ARRAY, &param)) {
+ fprintf(stderr, Name ": RUN_ARRAY failed: %s\n",
+ strerror(errno));
+ Manage_runstop(mddev, mdfd, -1, 0);
+ return 1;
+ }
}
if (verbose >= 0)
fprintf(stderr, Name ": array %s started.\n", mddev);