return st1.st_rdev == st2.st_rdev;
}
-void wait_for(char *dev)
+void wait_for(char *dev, int fd)
{
int i;
+ struct stat stb_want;
+
+ if (fstat(fd, &stb_want) != 0 ||
+ (stb_want.st_mode & S_IFMT) != S_IFBLK)
+ return;
for (i=0 ; i<25 ; i++) {
struct stat stb;
- if (stat(dev, &stb) == 0)
+ if (stat(dev, &stb) == 0 &&
+ (stb.st_mode & S_IFMT) == S_IFBLK &&
+ (stb.st_rdev == stb_want.st_rdev))
return;
usleep(200000);
}
if (sra)
sysfs_free(sra);
sra = sysfs_read(-1, devnum, GET_VERSION);
- verstr = sra->text_version ? : "-no-metadata-";
+ if (sra && sra->text_version[0])
+ verstr = sra->text_version;
+ else
+ verstr = "-no-metadata-";
}
for (i = 0; st == NULL && superlist[i] ; i++)
int rv;
#ifndef MDASSEMBLE
if (st->ss->external) {
- rv = sysfs_add_disk(sra, info);
+ rv = sysfs_add_disk(sra, info,
+ info->disk.state & (1<<MD_DISK_SYNC));
if (! rv) {
struct mdinfo *sd2;
for (sd2 = sra->devs; sd2; sd2=sd2->next)