return err;
}
+/* ping monitor using device number */
+int ping_monitor_by_id(int devnum)
+{
+ int err = -1;
+ char *container = devnum2devname(devnum);
+
+ if (container) {
+ err = ping_monitor(container);
+ free(container);
+ }
+
+ return err;
+}
+
static char *ping_monitor_version(char *devname)
{
int sfd = connect_monitor(devname);
return msg.buf;
}
-static int unblock_subarray(struct mdinfo *sra, const int unfreeze)
+int unblock_subarray(struct mdinfo *sra, const int unfreeze)
{
char buf[64];
int rc = 0;
return rc;
}
+int block_subarray(struct mdinfo *sra)
+{
+ char buf[64];
+ int rc = 0;
+
+ sprintf(buf, "external:%s\n", sra->text_version);
+ buf[9] = '-';
+ if (sysfs_set_str(sra, NULL, "metadata_version", buf))
+ rc = -1;
+
+ return rc;
+}
/**
* block_monitor - prevent mdmon spare assignment
* @container - container to block
* takeover in reshape case and spare reassignment in the
* auto-rebuild case)
*/
- sprintf(buf, "external:%s\n", sra->text_version);
- buf[9] = '-';
- if (sysfs_set_str(sra, NULL, "metadata_version", buf))
+ if (block_subarray(sra))
break;
ping_monitor(container);
sysfs_free(sra);
free_mdstat(ent);
- free(container);
return rv;
}