]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - msg.c
Introduce pr_err for printing error messages.
[thirdparty/mdadm.git] / msg.c
diff --git a/msg.c b/msg.c
index 98d6d13b1e216d27189a47427e8db17f10b22026..e531ef7c93334bce752f0990612a03f51d20de4c 100644 (file)
--- a/msg.c
+++ b/msg.c
@@ -207,9 +207,14 @@ int fping_monitor(int sfd)
 int ping_monitor(char *devname)
 {
        int sfd = connect_monitor(devname);
-       int err = fping_monitor(sfd);
+       int err;
+
+       if (sfd >= 0) {
+               err = fping_monitor(sfd);
+               close(sfd);
+       } else
+               err = -1;
 
-       close(sfd);
        return err;
 }
 
@@ -305,9 +310,8 @@ int check_mdmon_version(char *container)
                ver = version ? mdadm_version(version) : -1;
                free(version);
                if (ver < 3002000) {
-                       fprintf(stderr, Name
-                               ": mdmon instance for %s cannot be disabled\n",
-                               container);
+                       pr_err("mdmon instance for %s cannot be disabled\n",
+                              container);
                        return -1;
                }
        }
@@ -346,8 +350,7 @@ int block_monitor(char *container, const int freeze)
 
        ent = mdstat_read(0, 0);
        if (!ent) {
-               fprintf(stderr, Name
-                       ": failed to read /proc/mdstat while disabling mdmon\n");
+               pr_err("failed to read /proc/mdstat while disabling mdmon\n");
                return -1;
        }
 
@@ -358,9 +361,8 @@ int block_monitor(char *container, const int freeze)
                sysfs_free(sra);
                sra = sysfs_read(-1, e->devnum, GET_VERSION);
                if (!sra) {
-                       fprintf(stderr, Name
-                               ": failed to read sysfs for subarray%s\n",
-                               to_subarray(e, container));
+                       pr_err("failed to read sysfs for subarray%s\n",
+                              to_subarray(e, container));
                        break;
                }
                /* can't reshape an array that we can't monitor */
@@ -401,7 +403,7 @@ int block_monitor(char *container, const int freeze)
        }
 
        if (e) {
-               fprintf(stderr, Name ": failed to freeze subarray%s\n",
+               pr_err("failed to freeze subarray%s\n",
                        to_subarray(e, container));
 
                /* thaw the partially frozen container */
@@ -411,7 +413,7 @@ int block_monitor(char *container, const int freeze)
                        sysfs_free(sra);
                        sra = sysfs_read(-1, e2->devnum, GET_VERSION);
                        if (unblock_subarray(sra, freeze))
-                               fprintf(stderr, Name ": Failed to unfreeze %s\n", e2->dev);
+                               pr_err("Failed to unfreeze %s\n", e2->dev);
                }
 
                ping_monitor(container); /* cleared frozen */
@@ -432,8 +434,7 @@ void unblock_monitor(char *container, const int unfreeze)
 
        ent = mdstat_read(0, 0);
        if (!ent) {
-               fprintf(stderr, Name
-                       ": failed to read /proc/mdstat while unblocking container\n");
+               pr_err("failed to read /proc/mdstat while unblocking container\n");
                return;
        }
 
@@ -443,10 +444,12 @@ void unblock_monitor(char *container, const int unfreeze)
                        continue;
                sysfs_free(sra);
                sra = sysfs_read(-1, e->devnum, GET_VERSION|GET_LEVEL);
+               if (!sra)
+                       continue;
                if (sra->array.level > 0)
                        to_ping++;
                if (unblock_subarray(sra, unfreeze))
-                       fprintf(stderr, Name ": Failed to unfreeze %s\n", e->dev);
+                       pr_err("Failed to unfreeze %s\n", e->dev);
        }
        if (to_ping)
                ping_monitor(container);
@@ -480,3 +483,13 @@ int ping_manager(char *devname)
        close(sfd);
        return err;
 }
+
+/* using takeover operation for grow purposes, mdadm has to be sure
+ * that mdmon processes all updates, and if necessary it will be closed
+ * at takeover to raid0 operation
+  */
+void flush_mdmon(char *container)
+{
+       ping_manager(container);
+       ping_monitor(container);
+}