]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - managemon.c
Improve partition table code.
[thirdparty/mdadm.git] / managemon.c
index e77f045073702590bb153094995ddd58d4d2331c..037406f0df56bcfb447a35f00a5983936b33f444 100644 (file)
@@ -112,8 +112,10 @@ static void close_aa(struct active_array *aa)
 {
        struct mdinfo *d;
 
-       for (d = aa->info.devs; d; d = d->next)
+       for (d = aa->info.devs; d; d = d->next) {
+               close(d->recovery_fd);
                close(d->state_fd);
+       }
 
        close(aa->action_fd);
        close(aa->info.state_fd);
@@ -517,6 +519,9 @@ static void manage_new(struct mdstat_ent *mdstat,
                        newd->state_fd = sysfs_open(new->devnum,
                                                    newd->sys_name,
                                                    "state");
+                       newd->recovery_fd = sysfs_open(new->devnum,
+                                                     newd->sys_name,
+                                                     "recovery_start");
 
                        newd->prev_state = read_dev_state(newd->state_fd);
                        newd->curr_state = newd->prev_state;
@@ -672,14 +677,10 @@ void do_manager(struct supertype *container)
 {
        struct mdstat_ent *mdstat;
        sigset_t set;
-       int proc_fd;
 
        sigprocmask(SIG_UNBLOCK, NULL, &set);
        sigdelset(&set, SIGUSR1);
-       sigdelset(&set, SIGHUP);
-       sigdelset(&set, SIGALRM);
        sigdelset(&set, SIGTERM);
-       proc_fd = open("/proc/mounts", O_RDONLY);
 
        do {
 
@@ -697,21 +698,6 @@ void do_manager(struct supertype *container)
 
                        read_sock(container);
 
-                       if (container->sock < 0 || socket_hup_requested) {
-                               /* If this fails, we hope it already exists
-                                * pid file lives in /var/run/mdadm/mdXX.pid
-                                */
-                               mkdir("/var", 0600);
-                               mkdir("/var/run", 0600);
-                               mkdir("/var/run/mdadm", 0600);
-                               close(container->sock);
-                               container->sock = make_control_sock(container->devname);
-                               make_pidfile(container->devname, 0);
-                               socket_hup_requested = 0;
-                       }
-                       if (container->sock < 0)
-                               alarm(30);
-
                        free_mdstat(mdstat);
                }
                remove_old();
@@ -723,12 +709,9 @@ void do_manager(struct supertype *container)
                if (sigterm)
                        wakeup_monitor();
 
-               if (update_queue == NULL) {
-                       if (container->sock < 0)
-                               mdstat_wait_fd(proc_fd, &set);
-                       else
-                               mdstat_wait_fd(container->sock, &set);
-               } else
+               if (update_queue == NULL)
+                       mdstat_wait_fd(container->sock, &set);
+               else
                        /* If an update is happening, just wait for signal */
                        pselect(0, NULL, NULL, NULL, NULL, &set);
        } while(1);