]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdmon.c
imsm: FIX: Use definitions for migration record disk operations
[thirdparty/mdadm.git] / mdmon.c
diff --git a/mdmon.c b/mdmon.c
index 1f39f165d620035aebc06112a7ee872ceb34269b..b6ae0e68d390211c9e6fda3faa232822e3c43606 100644 (file)
--- a/mdmon.c
+++ b/mdmon.c
@@ -189,6 +189,9 @@ static void try_kill_monitor(pid_t pid, char *devname, int sock)
 
        kill(pid, SIGTERM);
 
+       if (sock < 0)
+               return;
+
        /* Wait for monitor to exit by reading from the socket, after
         * clearing the non-blocking flag */
        fl = fcntl(sock, F_GETFL, 0);
@@ -300,7 +303,8 @@ int main(int argc, char *argv[])
                /* launch an mdmon instance for each container found */
                mdstat = mdstat_read(0, 0);
                for (e = mdstat; e; e = e->next) {
-                       if (strncmp(e->metadata_version, "external:", 9) == 0 &&
+                       if (e->metadata_version &&
+                           strncmp(e->metadata_version, "external:", 9) == 0 &&
                            !is_subarray(&e->metadata_version[9])) {
                                devname = devnum2devname(e->devnum);
                                /* update cmdline so this mdmon instance can be
@@ -467,6 +471,7 @@ static int mdmon(char *devname, int devnum, int must_fork, int takeover)
                        exit(3);
                }
                close(victim_sock);
+               victim_sock = -1;
        }
        if (container->ss->load_container(container, mdfd, devname)) {
                fprintf(stderr, "mdmon: Cannot load metadata for %s\n",
@@ -500,7 +505,8 @@ static int mdmon(char *devname, int devnum, int must_fork, int takeover)
 
        if (victim > 0) {
                try_kill_monitor(victim, container->devname, victim_sock);
-               close(victim_sock);
+               if (victim_sock >= 0)
+                       close(victim_sock);
        }
 
        setsid();
@@ -513,6 +519,12 @@ static int mdmon(char *devname, int devnum, int must_fork, int takeover)
        ignore = dup(0);
 #endif
 
+       /* This silliness is to stop the compiler complaining
+        * that we ignore 'ignore'
+        */
+       if (ignore)
+               ignore++;
+
        do_manager(container);
 
        exit(0);
@@ -526,3 +538,26 @@ int child_monitor(int afd, struct mdinfo *sra, struct reshape *reshape,
 {
        return 0;
 }
+
+int restore_stripes(int *dest, unsigned long long *offsets,
+                   int raid_disks, int chunk_size, int level, int layout,
+                   int source, unsigned long long read_offset,
+                   unsigned long long start, unsigned long long length,
+                   char *src_buf)
+{
+       return 1;
+}
+
+void abort_reshape(struct mdinfo *sra)
+{
+       return;
+}
+
+int save_stripes(int *source, unsigned long long *offsets,
+                int raid_disks, int chunk_size, int level, int layout,
+                int nwrites, int *dest,
+                unsigned long long start, unsigned long long length,
+                char *buf)
+{
+       return 0;
+}