]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Monitor.c
Add 'ppl' and 'no-ppl' options for --update=
[thirdparty/mdadm.git] / Monitor.c
index f19c2e58a5209728fc1af5447ec3dc5bacc63468..bdd3e63e40ee80cf509aba8e48fd216935962724 100644 (file)
--- a/Monitor.c
+++ b/Monitor.c
@@ -33,7 +33,7 @@
 struct state {
        char *devname;
        char devnm[32]; /* to sync with mdstat info */
-       long utime;
+       unsigned int utime;
        int err;
        char *spare_group;
        int active, working, failed, spare, raid;
@@ -213,6 +213,8 @@ int Monitor(struct mddev_dev *devlist,
                if (mdstat)
                        free_mdstat(mdstat);
                mdstat = mdstat_read(oneshot?0:1, 0);
+               if (!mdstat)
+                       mdstat_close();
 
                for (st=statelist; st; st=st->next)
                        if (check_array(st, mdstat, c->test, &info,
@@ -597,7 +599,7 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
                } else
                        alert("RebuildFinished", dev, NULL, ainfo);
                if (sra)
-                       free(sra);
+                       sysfs_free(sra);
        }
        st->percent = mse->percent;
 
@@ -992,6 +994,7 @@ int Wait(char *dev)
 {
        struct stat stb;
        char devnm[32];
+       char *tmp;
        int rv = 1;
        int frozen_remaining = 3;
 
@@ -1000,7 +1003,12 @@ int Wait(char *dev)
                        strerror(errno));
                return 2;
        }
-       strcpy(devnm, stat2devnm(&stb));
+       tmp = stat2devnm(&stb);
+       if (!tmp) {
+               pr_err("%s is not a block device.\n", dev);
+               return 2;
+       }
+       strcpy(devnm, tmp);
 
        while(1) {
                struct mdstat_ent *ms = mdstat_read(1, 0);