]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Monitor: fix writing autorebuild.pid
authorAnna Czarnowska <anna.czarnowska@intel.com>
Fri, 26 Nov 2010 13:29:53 +0000 (14:29 +0100)
committerNeilBrown <neilb@suse.de>
Sun, 28 Nov 2010 22:57:41 +0000 (09:57 +1100)
If /var/run/mdadm doesn't exist we can never succeed writing
so we should try to create it first. When we make sure it is there we
write pid file as before.

Signed-off-by: Anna Czarnowska <anna.czarnowska@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Monitor.c

index 8d397bc072d9fa61b8130e4ff76e5deb0b9a8ee3..0e9168842f06cb4e2eacfd41bd9dcc545ef23614 100644 (file)
--- a/Monitor.c
+++ b/Monitor.c
@@ -296,21 +296,27 @@ static int check_one_sharer(int scan)
                        } else {
                                fprintf(stderr, Name ": Warning: One"
                                        " autorebuild process already"
-                                       " running.");
+                                       " running.\n");
                        }
                }
                fclose(fp);
        }
        if (scan) {
-               fp = fopen("/var/run/mdadm/autorebuild.pid", "w");
-               if (!fp)
-                       fprintf(stderr, Name ": Cannot create"
-                               " autorebuild.pid "
-                               "file\n");
-               else {
-                       pid = getpid();
-                       fprintf(fp, "%d\n", pid);
-                       fclose(fp);
+               if (mkdir("/var/run/mdadm", S_IRWXU) < 0 &&
+                   errno != EEXIST) {
+                       fprintf(stderr, Name ": Can't create "
+                               "autorebuild.pid file\n");
+               } else {
+                       fp = fopen("/var/run/mdadm/autorebuild.pid", "w");
+                       if (!fp)
+                               fprintf(stderr, Name ": Cannot create"
+                                       " autorebuild.pid"
+                                       "file\n");
+                       else {
+                               pid = getpid();
+                               fprintf(fp, "%d\n", pid);
+                               fclose(fp);
+                       }
                }
        }
        return 0;