]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Add block_subarray()
authorAdam Kwolek <adam.kwolek@intel.com>
Wed, 2 Mar 2011 01:28:13 +0000 (12:28 +1100)
committerNeilBrown <neilb@suse.de>
Wed, 2 Mar 2011 01:28:13 +0000 (12:28 +1100)
Put code for blocking subarray in to separate function.
This little code/function will be used for blocking arrays from mdmon
monitoring during assembly process. Arrays cannot wait for container
assembly finish, because meanwhile monitor can enable arrays for writing.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
msg.c
msg.h

diff --git a/msg.c b/msg.c
index 76e74e7b20684159671c8941ac352d23cabcd617..a1f4bc6e0b5540556549b08578f4190b9e1d704e 100644 (file)
--- a/msg.c
+++ b/msg.c
@@ -235,7 +235,7 @@ static char *ping_monitor_version(char *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;
@@ -255,6 +255,18 @@ static int unblock_subarray(struct mdinfo *sra, const int unfreeze)
        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
@@ -334,9 +346,7 @@ int block_monitor(char *container, const int freeze)
                 * 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);
 
diff --git a/msg.h b/msg.h
index 1f916debe6aa477b376b2214eedd714b9fa72226..91a77987fe362e66d50b3a5de25fe9ec4341cb89 100644 (file)
--- a/msg.h
+++ b/msg.h
@@ -27,6 +27,8 @@ extern int ack(int fd, int tmo);
 extern int wait_reply(int fd, int tmo);
 extern int connect_monitor(char *devname);
 extern int ping_monitor(char *devname);
+extern int block_subarray(struct mdinfo *sra);
+extern int unblock_subarray(struct mdinfo *sra, const int unfreeze);
 extern int block_monitor(char *container, const int freeze);
 extern void unblock_monitor(char *container, const int unfreeze);
 extern int fping_monitor(int sock);