}
int sysfs_get_str(struct mdinfo *sra, struct mdinfo *dev,
- char *name, char *buf, int buf_len)
+ char *name, char *val, int size)
{
char fname[50];
int n;
int fd;
-
sprintf(fname, "/sys/block/%s/md/%s/%s",
sra->sys_name, dev?dev->sys_name:"", name);
fd = open(fname, O_RDONLY);
if (fd < 0)
return -1;
- n = read(fd, buf, buf_len);
+ n = read(fd, val, size);
close(fd);
if (n <= 0)
return -1;
- buf[n] = 0;
- return 0;
+ val[n] = 0;
+ return n;
}
int sysfs_set_safemode(struct mdinfo *sra, unsigned long ms)
return rv;
}
-int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd)
+int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int in_sync)
{
char dv[100];
char nm[100];
rv = sysfs_set_num(sra, sd, "offset", sd->data_offset);
rv |= sysfs_set_num(sra, sd, "size", (sd->component_size+1) / 2);
if (sra->array.level != LEVEL_CONTAINER) {
+ if (in_sync)
+ /* This can correctly fail if array isn't started,
+ * yet, so just ignore status for now.
+ */
+ sysfs_set_str(sra, sd, "state", "in_sync");
rv |= sysfs_set_num(sra, sd, "slot", sd->disk.raid_disk);
-// rv |= sysfs_set_str(sra, sd, "state", "in_sync");
}
return rv;
}