+ if (stat(devname, &stb) < 0) {
+ if (verbose >= 0)
+ fprintf(stderr, Name ": stat failed for %s: %s.\n",
+ devname, strerror(errno));
+ return rv;
+ }
+ if ((stb.st_mode & S_IFMT) != S_IFBLK) {
+ if (verbose >= 0)
+ fprintf(stderr, Name ": %s is not a block device.\n",
+ devname);
+ return rv;
+ }
+ dfd = dev_open(devname, O_RDONLY|O_EXCL);
+ if (dfd < 0) {
+ if (verbose >= 0)
+ fprintf(stderr, Name ": cannot open %s: %s.\n",
+ devname, strerror(errno));
+ return rv;
+ }
+ /* If the device is a container, we do something very different */
+ if (get_dev_size(dfd, devname, &size) == 0)
+ goto out;
+ if (size == 0) {
+ if (!st)
+ st = super_by_fd(dfd, NULL);
+ if (st)
+ rv = st->ss->load_container(st, dfd, NULL);
+
+ close(dfd);
+ if (!rv && st->ss->container_content)
+ return Incremental_container(st, devname, homehost,
+ verbose, runstop, autof);
+
+ fprintf(stderr, Name ": %s is not part of an md array.\n",
+ devname);
+ return rv;
+ }