]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Monitor.c
Add tests/05r1-internalbitmap-v1a
[thirdparty/mdadm.git] / Monitor.c
index ce0087cfac0c7f7ddeee6eba063640aebf4cbc11..16a39b491f89732868ee330c624bdad12e02603a 100644 (file)
--- a/Monitor.c
+++ b/Monitor.c
@@ -47,7 +47,7 @@ static char *percentalerts[] = {
 int Monitor(mddev_dev_t devlist,
            char *mailaddr, char *alert_cmd,
            int period, int daemonise, int scan, int oneshot,
-           char *config, int test)
+           char *config, int test, char* pidfile)
 {
        /*
         * Every few seconds, scan every md device looking for changes
@@ -127,7 +127,18 @@ int Monitor(mddev_dev_t devlist,
        if (daemonise) {
                int pid = fork();
                if (pid > 0) {
-                       printf("%d\n", pid);
+                       if (!pidfile)
+                               printf("%d\n", pid);
+                       else {
+                               FILE *pid_file;
+                               pid_file=fopen(pidfile, "w");
+                               if (!pid_file)
+                                       perror("cannot create pid file");
+                               else {
+                                       fprintf(pid_file,"%d\n", pid);
+                                       fclose(pid_file);
+                               }
+                       }
                        return 0;
                }
                if (pid < 0) {
@@ -235,10 +246,10 @@ int Monitor(mddev_dev_t devlist,
                                struct stat stb;
                                if (fstat(fd, &stb) == 0 &&
                                    (S_IFMT&stb.st_mode)==S_IFBLK) {
-                                       if (MAJOR(stb.st_rdev) == MD_MAJOR)
-                                               st->devnum = MINOR(stb.st_rdev);
+                                       if (major(stb.st_rdev) == MD_MAJOR)
+                                               st->devnum = minor(stb.st_rdev);
                                        else
-                                               st->devnum = -1- (MINOR(stb.st_rdev)>>6);
+                                               st->devnum = -1- (minor(stb.st_rdev)>>6);
                                }
                        }
 
@@ -312,7 +323,7 @@ int Monitor(mddev_dev_t devlist,
                                                alert("Fail", dev, dv, mailaddr, alert_cmd);
                                        else if (i >= (unsigned)array.raid_disks &&
                                                 (disc.major || disc.minor) &&
-                                                st->devid[i] == MKDEV(disc.major, disc.minor) &&
+                                                st->devid[i] == makedev(disc.major, disc.minor) &&
                                                 ((newstate&change)&(1<<MD_DISK_FAULTY))
                                                )
                                                alert("FailSpare", dev, dv, mailaddr, alert_cmd);
@@ -324,7 +335,7 @@ int Monitor(mddev_dev_t devlist,
                                                alert("SpareActive", dev, dv, mailaddr, alert_cmd);
                                }
                                st->devstate[i] = disc.state;
-                               st->devid[i] = MKDEV(disc.major, disc.minor);
+                               st->devid[i] = makedev(disc.major, disc.minor);
                        }
                        close(fd);
                        st->active = array.active_disks;
@@ -428,6 +439,8 @@ int Monitor(mddev_dev_t devlist,
                }
                test = 0;
        }
+       if (pidfile)
+               unlink(pidfile);
        return 0;
 }