summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2005-04-04 05:18:57 +0000
committerNeil Brown <neilb@suse.de>2005-04-04 05:18:57 +0000
commit0320ea45657e24b2abb4a4da242b9badcfade914 (patch)
treeb200b8a926d388c7b590ebddc22ea5a8a25d8c4a
parenta0ef61bfadb2ab5868545199d0e0ca7661682bac (diff)
downloadmdadm-0320ea45657e24b2abb4a4da242b9badcfade914.tar.gz
mdadm-0320ea45657e24b2abb4a4da242b9badcfade914.tar.xz
mdadm-0320ea45657e24b2abb4a4da242b9badcfade914.zip
Change handling of devices names in args
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
-rw-r--r--ChangeLog4
-rw-r--r--Query.c2
-rw-r--r--mdadm.c37
3 files changed, 38 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index d9d3b06..7e03a5c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -16,6 +16,10 @@ Changes Prior to 1.9.0 release
- Make "mdadm -Ss" stop stacked devices properly, by reversing the
order in which arrays are stopped.
- Improve some error messages.
+ - Allow device name to appear before first option, so e.g.
+ mdadm /dev/md0 -A /dev/sd[ab]
+ works.
+ - Assume '-Q' if just a device is given, rather than being silent.
Changes Prior to 1.8.0 release
- Makefile cleanup from Luca Berra <bluca@comedia.it>
diff --git a/Query.c b/Query.c
index 3f58c8b..95d6914 100644
--- a/Query.c
+++ b/Query.c
@@ -124,7 +124,7 @@ int Query(char *dev)
/* array might be active... */
mddev = get_md_name(super.md_minor);
disc.number = super.this_disk.number;
- activity = "inactive";
+ activity = "undetected";
if (mddev && (fd = open(mddev, O_RDONLY))>=0) {
if (md_get_version(fd) >= 9000 &&
ioctl(fd, GET_ARRAY_INFO, &array)>= 0) {
diff --git a/mdadm.c b/mdadm.c
index 868a48b..daf2412 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -145,7 +145,8 @@ int main(int argc, char *argv[])
case 'a':
case 'r':
case 'f':
- case 1 : if (!mode) newmode = MANAGE; break;
+ if (!mode) newmode = MANAGE;
+ break;
case 'A': newmode = ASSEMBLE; break;
case 'B': newmode = BUILD; break;
@@ -186,11 +187,33 @@ int main(int argc, char *argv[])
fputs(Help_config, stderr);
exit(0);
}
+
+ /* If first option is a device, don't force the mode yet */
+ if (opt == 1) {
+ if (devs_found == 0) {
+ dv = malloc(sizeof(*dv));
+ if (dv == NULL) {
+ fprintf(stderr, Name ": malloc failed\n");
+ exit(3);
+ }
+ dv->devname = optarg;
+ dv->disposition = devmode;
+ dv->next = NULL;
+ *devlistend = dv;
+ devlistend = &dv->next;
+
+ devs_found++;
+ continue;
+ }
+ /* No mode yet, and this is the second device ... */
+ fprintf(stderr, Name ": An option must be given to set the mode before a second device is listed\n");
+ exit(2);
+ }
if (option_index >= 0)
- fprintf(stderr, "--%s", long_options[option_index].name);
+ fprintf(stderr, Name ": --%s", long_options[option_index].name);
else
- fprintf(stderr, "-%c", opt);
- fprintf(stderr, " does not set the mode, and so cannot be first.\n");
+ fprintf(stderr, Name ": -%c", opt);
+ fprintf(stderr, " does not set the mode, and so cannot be the first option.\n");
exit(2);
}
@@ -645,6 +668,12 @@ int main(int argc, char *argv[])
}
+ if (!mode && devs_found) {
+ mode = MISC;
+ devmode = 'Q';
+ if (devlist->disposition == 0)
+ devlist->disposition = devmode;
+ }
if (!mode) {
fputs(Usage, stderr);
exit(2);