]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Monitor.c
Monitor: reduce default poll interval if mdstat is pollable.
[thirdparty/mdadm.git] / Monitor.c
index cbc5d0fe9ebf5ca3a2b6de6f06ad8276dd8d85d7..92aaf65573f8eed876f82270ee8a7d84de154c17 100644 (file)
--- a/Monitor.c
+++ b/Monitor.c
@@ -168,10 +168,18 @@ int Monitor(mddev_dev_t devlist,
                        struct state *st;
                        if (mdlist->devname == NULL)
                                continue;
+                       if (strcasecmp(mdlist->devname, "<ignore>") == 0)
+                               continue;
                        st = malloc(sizeof *st);
                        if (st == NULL)
                                continue;
-                       st->devname = strdup(mdlist->devname);
+                       if (mdlist->devname[0] == '/')
+                               st->devname = strdup(mdlist->devname);
+                       else {
+                               st->devname = malloc(8+strlen(mdlist->devname)+1);
+                               strcpy(strcpy(st->devname, "/dev/md/"),
+                                      mdlist->devname);
+                       }
                        st->utime = 0;
                        st->next = statelist;
                        st->err = 0;
@@ -276,6 +284,10 @@ int Monitor(mddev_dev_t devlist,
                                        mse = mse2;
                                }
 
+                       if (array.utime == 0)
+                               /* external arrays don't update utime */
+                               array.utime = time(0);
+
                        if (st->utime == array.utime &&
                            st->failed == array.failed_disks &&
                            st->working == array.working_disks &&
@@ -434,6 +446,8 @@ int Monitor(mddev_dev_t devlist,
                                        st->spare_group = NULL;
                                        st->expected_spares = -1;
                                        statelist = st;
+                                       if (test)
+                                               alert("TestMessage", st->devname, NULL, mailaddr, mailfrom, alert_cmd, dosyslog);
                                        alert("NewArray", st->devname, NULL, mailaddr, mailfrom, alert_cmd, dosyslog);
                                        new_found = 1;
                                }
@@ -704,7 +718,7 @@ int WaitClean(char *dev, int verbose)
                        if (sysfs_match_word(buf, clean_states) <= 4)
                                break;
                        FD_SET(state_fd, &fds);
-                       rv = select(state_fd + 1, &fds, NULL, NULL, &tm);
+                       rv = select(state_fd + 1, NULL, NULL, &fds, &tm);
                        if (rv < 0 && errno != EINTR)
                                break;
                        lseek(state_fd, 0, SEEK_SET);