]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Create: give better error message if member device unusable.
authorNeilBrown <neilb@suse.de>
Tue, 10 May 2011 07:58:41 +0000 (17:58 +1000)
committerNeilBrown <neilb@suse.de>
Tue, 10 May 2011 07:58:41 +0000 (17:58 +1000)
Rather than just saying "unusable", report if device is busy
or is no a block device.

Signed-off-by: NeilBrown <neilb@suse.de>
Create.c

index ef60244a352216dd950f8a9301cae242be3c7b29..fb7f22897300fd3075032d810b42b7672ca2a315 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -292,6 +292,8 @@ int Create(struct supertype *st, char *mddev,
        for (dv=devlist; dv && !have_container; dv=dv->next, dnum++) {
                char *dname = dv->devname;
                unsigned long long freesize;
+               int dfd;
+
                if (strcasecmp(dname, "missing")==0) {
                        if (first_missing > dnum)
                                first_missing = dnum;
@@ -300,6 +302,20 @@ int Create(struct supertype *st, char *mddev,
                        missing_disks ++;
                        continue;
                }
+               dfd = open(dname, O_RDONLY|O_EXCL);
+               if (dfd < 0) {
+                       fprintf(stderr, Name ": cannot open %s: %s\n",
+                               dname, strerror(errno));
+                       exit(2);
+               }
+               if (fstat(dfd, &stb) != 0 ||
+                   (stb.st_mode & S_IFMT) != S_IFBLK) {
+                       close(dfd);
+                       fprintf(stderr, Name ": %s is not a block device\n",
+                               dname);
+                       exit(2);
+               }
+               close(dfd);
                info.array.working_disks++;
                if (dnum < raiddisks)
                        info.array.active_disks++;