diff --git a/killproc-2.14.dif b/killproc-2.14.dif deleted file mode 100644 index 31b1992..0000000 --- a/killproc-2.14.dif +++ /dev/null @@ -1,186 +0,0 @@ ---- libinit.h -+++ libinit.h 2009-03-10 13:06:32.512001779 +0100 -@@ -46,7 +46,7 @@ - # define restrict __restrict__ - # endif - #endif --#define alignof(type) (sizeof(type)+(sizeof(type)%sizeof(void*))) -+#define alignof(type) ((sizeof(type)+(sizeof(void*)-1)) & ~(sizeof(void*)-1)) - - /* - * LSB specs: ---- mkill.c -+++ mkill.c 2009-03-13 18:01:55.276001810 +0100 -@@ -60,10 +60,19 @@ extern inline DIR * opendirat(int dirfd, - " %s [-SIG] [-u] /mnt1 [/mnt2...]\n"\ - " %s -l\n", we_are, we_are - -+typedef struct _s_shadow -+{ -+ struct _s_shadow *next; -+ struct _s_shadow *prev; -+ size_t nlen; -+ char * name; -+} shadow_t; -+ - typedef struct _s_mnt - { - struct _s_mnt *next; /* Pointer to next struct. */ - struct _s_mnt *prev; /* Pointer to previous st. */ -+ shadow_t *shadow; /* Pointer to shadows */ - size_t nlen; - char * name; - int order; /* Order of the mount point*/ -@@ -327,12 +336,8 @@ int main(int argc, char* argv[]) - sort_proc(); - - num = 0; -- this = procs; -- last = (proc_t*)0; - found = false; -- for (ptr = procs; this; ptr = this) { -- last = ptr->prev; -- this = ptr->next; -+ for (ptr = procs; ptr; ptr = ptr->next) { - if (nsig) { - if (stop) - kill(ptr->pid, SIGSTOP); -@@ -391,11 +396,7 @@ int main(int argc, char* argv[]) - if (!found) - goto out; - -- this = procs; -- last = (proc_t*)0; -- for (ptr = procs; this; ptr = this) { -- last = ptr->prev; -- this = ptr->next; -+ for (ptr = procs; ptr; ptr = ptr->next) { - kill(ptr->pid, SIGSTOP); - kill(ptr->pid, SIGKILL); - } -@@ -440,9 +441,10 @@ static void init_mnt(int argc, char* arg - error(100, "malloc(): %s\n", strerror(errno)); - ptr->order = order++; - ptr->name = ((char*)ptr)+alignof(mntent_t); -+ ptr->shadow = (shadow_t*)0; - - strcpy(ptr->name, ent->mnt_dir); -- ptr->nlen = strlen(ptr->name); -+ ptr->nlen = nlen; - if (mntent) - mntent->prev = ptr; - ptr->next = mntent; -@@ -451,6 +453,57 @@ static void init_mnt(int argc, char* arg - } - endmntent(mnt); - maxorder = order; -+ -+ if ((mnt = setmntent("/proc/mounts", "r")) == (FILE*)0) -+ error(100, "cannot open /proc/mounts: %s\n", strerror(errno)); -+ -+ while ((ent = getmntent(mnt))) { -+ mntent_t *p; -+ -+ for (p = mntent; p; p = p->next) { -+ shadow_t *restrict s; -+ size_t nlen; -+ -+ if (strcmp(ent->mnt_dir, p->name) == 0) -+ continue; -+ if (strncmp(ent->mnt_dir, p->name, p->nlen) != 0) -+ continue; -+ -+ nlen = strlen(ent->mnt_dir); -+ if (posix_memalign((void*)&s, sizeof(void*), alignof(shadow_t)+(nlen+1)) != 0) -+ error(100, "malloc(): %s\n", strerror(errno)); -+ s->name = ((char*)s)+alignof(shadow_t); -+ -+ strcpy(s->name, ent->mnt_dir); -+ s->nlen = nlen; -+ if (p->shadow) -+ p->shadow->prev = s; -+ s->next = p->shadow; -+ s->prev = (shadow_t*)0; -+ p->shadow = s; -+ } -+ } -+ endmntent(mnt); -+} -+ -+static void clear_shadow(shadow_t *restrict shadow) -+{ -+ shadow_t *s, *n, *l; -+ -+ n = shadow; -+ l = (shadow_t*)0; -+ for (s = shadow; n; s = n) { -+ l = s->prev; -+ n = s->next; -+ if (s == shadow) { -+ if (n) n->prev = (shadow_t*)0; -+ shadow = n; -+ } else if (l) { -+ if (n) n->prev = l; -+ l->next = n; -+ } -+ free(s); -+ } - } - - static void clear_mnt(const boolean lazy) -@@ -471,6 +524,8 @@ static void clear_mnt(const boolean lazy - if (n) n->prev = l; - l->next = n; - } -+ if (p->shadow) -+ clear_shadow(p->shadow); - free(p); - } - } -@@ -523,17 +578,39 @@ static void sort_proc(void) - procs = sort; - } - -+static boolean shadow(shadow_t *restrict this, const char *restrict name, const size_t nlen) -+{ -+ shadow_t *s; -+ -+ if (!this) -+ goto out; -+ for (s = this; s; s = s->next) { -+ if (nlen < s->nlen) -+ continue; -+ if (name[s->nlen] != '\0' && name[s->nlen] != '/') -+ continue; -+ if (strncmp(name, s->name, s->nlen) == 0) -+ return true; -+ } -+out: -+ return false; -+} -+ - static int check(const char *restrict name) - { -- mntent_t *p, *n, *l; -+ const size_t nlen = strlen(name); -+ mntent_t *p; - -- n = mntent; -- l = (mntent_t*)0; -- for (p = mntent; n; p = n) { -- l = p->prev; -- n = p->next; -- if (strncmp(name, p->name, p->nlen) == 0) -+ for (p = mntent; p; p = p->next) { -+ if (nlen < p->nlen) -+ continue; -+ if (name[p->nlen] != '\0' && name[p->nlen] != '/') -+ continue; -+ if (strncmp(name, p->name, p->nlen) == 0) { -+ if (shadow(p->shadow, name, nlen)) -+ continue; - return p->order; -+ } - } - return 0; - } diff --git a/killproc-2.14.tar.bz2 b/killproc-2.14.tar.bz2 deleted file mode 100644 index 0cbd85e..0000000 --- a/killproc-2.14.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2fb47ac91e1906275b4e3c609e53703f0707dc8ac15c0e25573cb45dedca46cf -size 36184 diff --git a/killproc-2.15.dif b/killproc-2.15.dif new file mode 100644 index 0000000..c2c37f9 --- /dev/null +++ b/killproc-2.15.dif @@ -0,0 +1,4 @@ +--- .empty ++++ .empty 2009-03-26 18:47:25.048001558 +0100 +@@ -0,0 +1 @@ ++remove if patch applied diff --git a/killproc-2.15.tar.bz2 b/killproc-2.15.tar.bz2 new file mode 100644 index 0000000..0440749 --- /dev/null +++ b/killproc-2.15.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:356a130e58e4b9fca3bdb64d6c1c3cafa64c64aad5587270d7da9a2caeeefb38 +size 37327 diff --git a/startpar-0.53.dif b/startpar-0.53.dif index d6c7459..21c1674 100644 --- a/startpar-0.53.dif +++ b/startpar-0.53.dif @@ -35,85 +35,3 @@ #endif /* mark all matching nodes */ if (ndirs >= 0) { ---- startpar.c -+++ startpar.c 2009-02-12 14:49:10.987760000 +0100 -@@ -29,6 +29,8 @@ - #include - #include - #include -+#include -+#include - #include - #include - #include -@@ -64,6 +66,8 @@ - static char *run_mode = NULL; - static struct makenode **nodevec; - -+static enum { Unknown, Preload, NoPreload } ispreload = Unknown; -+ - #define PBUF_SIZE 8192 - struct prg { - char *name; -@@ -248,6 +252,10 @@ - if (read_proc(&prcs_run, &prcs_blked)) - return par; - -+ /* if we have preload running, we expect I/O not to be a problem */ -+ if (ispreload == Preload) -+ prcs_blked = 0; -+ - newpar = (par*numcpu) - prcs_run + 1; /* +1 for startpar its self */ - newpar -= (int)(((double)prcs_blked)*iorate); /* I/O load reduction */ - -@@ -271,6 +279,8 @@ - return checksystem(par, start, false); - } - -+#define SOCK_PATH "/dev/shm/preload_sock" -+ - void run(struct prg *p) - { - char *m = 0; -@@ -341,6 +351,40 @@ - - closeall(); - -+ if (!strcmp(arg, "start")) -+ { -+ int s, t, len; -+ struct sockaddr_un remote; -+ char str[100]; -+ -+ s = socket(AF_UNIX, SOCK_STREAM, 0); -+ if (s != -1) -+ { -+ memset(&remote, 0, sizeof(struct sockaddr_un)); -+ remote.sun_family = AF_UNIX; -+ strcpy(remote.sun_path, SOCK_PATH); -+ len = strlen(remote.sun_path) + sizeof(remote.sun_family); -+ -+ t = connect(s, (struct sockaddr *)&remote, len); -+ if (t != -1) -+ { -+ ispreload = Preload; -+ send(s, p->name, strlen(p->name), 0); -+ recv(s, str, 100, 0); -+ } -+ else if ( ispreload == Unknown) -+ { -+ /* -+ * if we connected to preload once, we know it ran. -+ * In case we can't connect to it later, it means it did -+ * its job and we can guess I/O is no longer a problem. -+ */ -+ ispreload = NoPreload; -+ } -+ close(s); -+ } -+ } -+ - if (run_mode) - { - char path[128]; - diff --git a/startpar-bootchart.diff b/startpar-bootchart.diff index 5c710c6..8b03e45 100644 --- a/startpar-bootchart.diff +++ b/startpar-bootchart.diff @@ -12,20 +12,20 @@ kill(parent, SIGUSR2); } close(s); -+ /* -+ * if we use preload, we fork again to make bootcharts easier to read. -+ * The reason is that the name of the init script will otherwise be used -+ * when in reality the above code waited for preload. If we fork away -+ * before the exec, the waiting code will be folded into startpar -+ */ ++ /* ++ * if we use preload, we fork again to make bootcharts easier to read. ++ * The reason is that the name of the init script will otherwise be used ++ * when in reality the above code waited for preload. If we fork away ++ * before the exec, the waiting code will be folded into startpar ++ */ + child = fork(); -+ if (child) { ++ if (child) { + int status; + int ret = waitpid(child, &status, 0); + if (ret == -1) + perror("waitpid"); + exit(WEXITSTATUS(status)); -+ } ++ } } } diff --git a/startpar-preload.diff b/startpar-preload.diff index f988a88..d5c7025 100644 --- a/startpar-preload.diff +++ b/startpar-preload.diff @@ -1,6 +1,24 @@ ---- startpar.c 2009-03-25 16:16:59.308479056 +0100 -+++ startpar.c 2009-03-25 16:52:25.357391610 +0100 -@@ -85,6 +85,19 @@ +--- startpar.c ++++ startpar.c 2009-03-27 11:48:00.080002479 +0100 +@@ -29,6 +29,8 @@ + #include + #include + #include ++#include ++#include + #include + #include + #include +@@ -64,6 +66,8 @@ static struct timeval lastlim; + static char *run_mode = NULL; + static struct makenode **nodevec; + ++static enum { Unknown, Preload, NoPreload } ispreload = Unknown; ++ + #define PBUF_SIZE 8192 + struct prg { + char *name; +@@ -81,6 +85,19 @@ static int inpar, par; static int pidpipe[2]; static double iorate = 800.0; @@ -20,14 +38,14 @@ void *xcalloc(size_t nmemb, size_t size) { void *r; -@@ -253,14 +266,14 @@ +@@ -248,11 +265,15 @@ static int checksystem(const int par, co + if (read_proc(&prcs_run, &prcs_blked)) return par; - /* if we have preload running, we expect I/O not to be a problem */ -- if (ispreload == Preload) ++ /* if we have preload running, we expect I/O not to be a problem */ + if (ispreload != NoPreload) - prcs_blked = 0; - ++ prcs_blked = 0; ++ newpar = (par*numcpu) - prcs_run + 1; /* +1 for startpar its self */ newpar -= (int)(((double)prcs_blked)*iorate); /* I/O load reduction */ @@ -37,7 +55,12 @@ dump_status(); #endif if (newpar <= 0) -@@ -284,6 +297,7 @@ +@@ -271,9 +292,12 @@ static inline int checkpar(const int par + return checksystem(par, start, false); + } + ++#define SOCK_PATH "/dev/shm/preload_sock" ++ void run(struct prg *p) { char *m = 0; @@ -45,26 +68,49 @@ p->len = 0; p->pid = (pid_t)0; -@@ -368,7 +382,8 @@ - t = connect(s, (struct sockaddr *)&remote, len); - if (t != -1) - { -- ispreload = Preload; +@@ -341,6 +365,41 @@ void run(struct prg *p) + + closeall(); + ++ if (!strcmp(arg, "start")) ++ { ++ int s, t, len; ++ struct sockaddr_un remote; ++ char str[100]; ++ ++ s = socket(AF_UNIX, SOCK_STREAM, 0); ++ if (s != -1) ++ { ++ memset(&remote, 0, sizeof(struct sockaddr_un)); ++ remote.sun_family = AF_UNIX; ++ strcpy(remote.sun_path, SOCK_PATH); ++ len = strlen(remote.sun_path) + sizeof(remote.sun_family); ++ ++ t = connect(s, (struct sockaddr *)&remote, len); ++ if (t != -1) ++ { + if (ispreload != Preload) + kill(parent, SIGUSR1); - send(s, p->name, strlen(p->name), 0); - recv(s, str, 100, 0); - } -@@ -379,7 +394,7 @@ - * In case we can't connect to it later, it means it did - * its job and we can guess I/O is no longer a problem. - */ -- ispreload = NoPreload; ++ send(s, p->name, strlen(p->name), 0); ++ recv(s, str, 100, 0); ++ } ++ else if ( ispreload == Unknown) ++ { ++ /* ++ * if we connected to preload once, we know it ran. ++ * In case we can't connect to it later, it means it did ++ * its job and we can guess I/O is no longer a problem. ++ */ + kill(parent, SIGUSR2); - } - close(s); - } -@@ -601,6 +616,9 @@ ++ } ++ close(s); ++ } ++ } ++ + if (run_mode) + { + char path[128]; +@@ -557,6 +616,9 @@ int main(int argc, char **argv) char *run_level = getenv("RUNLEVEL"); char *splashopt = 0; @@ -74,4 +120,3 @@ (void)signal(SIGCHLD, SIG_DFL); numcpu = sysconf(_SC_NPROCESSORS_ONLN); myname = argv[0]; - diff --git a/sysvinit-2.86-fuse-no-kill.patch b/sysvinit-2.86-fuse-no-kill.patch index fe27d0c..d3732ea 100644 --- a/sysvinit-2.86-fuse-no-kill.patch +++ b/sysvinit-2.86-fuse-no-kill.patch @@ -1,5 +1,5 @@ --- src/killall5.c -+++ src/killall5.c 2009-01-27 16:32:40.048701097 +0100 ++++ src/killall5.c 2009-01-27 16:32:40.000000000 +0100 @@ -59,6 +59,8 @@ typedef struct proc { pid_t pid; /* Process ID. */ int sid; /* Session ID. */ @@ -9,7 +9,7 @@ char nfs; /* Binary is loacted on NFS part. */ struct proc *next; /* Pointer to next struct. */ } PROC; -@@ -283,6 +285,38 @@ int readarg(FILE *fp, char *buf, int sz) +@@ -410,6 +412,38 @@ int readarg(FILE *fp, char *buf, int sz) } /* @@ -48,7 +48,7 @@ * Read the proc filesystem. */ int readproc() -@@ -438,13 +472,19 @@ int readproc() +@@ -565,13 +599,19 @@ int readproc() /* Try to stat the executable. */ snprintf(path, sizeof(path), "/proc/%s/exe", d->d_name); @@ -69,9 +69,9 @@ /* Link it into the list. */ p->next = plist; plist = p; -@@ -779,14 +819,16 @@ int main(int argc, char **argv) - exit(1); +@@ -907,14 +947,16 @@ int main(int argc, char **argv) } + clear_mnt(); - /* Now kill all processes except our session. */ + /* Now kill all processes except init (pid 1), our session, and FUSE filesystems. */ diff --git a/sysvinit-2.86-nfs4pidof.patch b/sysvinit-2.86-nfs4pidof.patch index 212e0fa..893526c 100644 --- a/sysvinit-2.86-nfs4pidof.patch +++ b/sysvinit-2.86-nfs4pidof.patch @@ -1,5 +1,5 @@ --- src/killall5.c -+++ src/killall5.c 2009-03-11 14:13:21.708001809 +0100 ++++ src/killall5.c 2009-03-27 11:42:17.780766281 +0100 @@ -40,6 +40,8 @@ #include #include @@ -19,17 +19,32 @@ struct proc *next; /* Pointer to next struct. */ } PROC; -@@ -73,9 +76,20 @@ typedef struct { +@@ -73,9 +76,35 @@ typedef struct { PIDQ *next; } PIDQ_HEAD; ++typedef struct shadow ++{ ++ struct shadow *next; ++ struct shadow *prev; ++ size_t nlen; ++ char * name; ++} SHADOW; ++ +typedef struct nfs +{ + struct nfs *next; /* Pointer to next struct. */ + struct nfs *prev; /* Pointer to previous st. */ ++ SHADOW *shadow; /* Pointer to shadows */ + char * name; + size_t nlen; +} NFS; ++#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) ++# ifndef restrict ++# define restrict __restrict__ ++# endif ++#endif ++#define alignof(type) ((sizeof(type)+(sizeof(void*)-1)) & ~(sizeof(void*)-1)) + /* List of processes. */ PROC *plist; @@ -40,7 +55,26 @@ /* Did we stop all processes ? */ int sent_sigstop; -@@ -152,6 +166,116 @@ int mount_proc(void) +@@ -102,6 +131,18 @@ void *xmalloc(int bytes) + return p; + } + ++#ifdef __GNUC__ ++static inline void xmemalign(void **, size_t, size_t) __attribute__ ((nonnull (1))); ++#endif ++static inline void xmemalign(void **memptr, size_t alignment, size_t size) ++{ ++ if ((posix_memalign(memptr, alignment, size)) < 0) { ++ if (sent_sigstop) kill(-1, SIGCONT); ++ nsyslog(LOG_ERR, "out of memory"); ++ exit(1); ++ } ++} ++ + /* + * See if the proc filesystem is there. Mount if needed. + */ +@@ -152,6 +193,211 @@ int mount_proc(void) return did_mount; } @@ -72,10 +106,14 @@ + + while ((ent = getmntent(mnt))) { + if (isnetfs(ent->mnt_type)) { -+ NFS * p = (NFS*)xmalloc(sizeof(NFS)); -+ p->name = (char*)xmalloc(strlen(ent->mnt_dir)+1); ++ size_t nlen = strlen(ent->mnt_dir); ++ NFS *restrict p; ++ xmemalign((void*)&p, sizeof(void*), alignof(NFS)+(nlen+1)); ++ p->name = ((char*)p)+alignof(NFS); ++ p->nlen = nlen; ++ p->shadow = (SHADOW*)0; ++ + strcpy(p->name, ent->mnt_dir); -+ p->nlen = strlen(p->name); + if (nlist) + nlist->prev = p; + p->next = nlist; @@ -83,8 +121,100 @@ + nlist = p; + } + } -+ + endmntent(mnt); ++ ++ if ((mnt = setmntent("/proc/mounts", "r")) == (FILE*)0) ++ return; ++ ++ while ((ent = getmntent(mnt))) { ++ NFS *p; ++ ++ for (p = nlist; p; p = p->next) { ++ SHADOW * restrict s; ++ size_t nlen; ++ ++ if (strcmp(ent->mnt_dir, p->name) == 0) ++ continue; ++ if (strncmp(ent->mnt_dir, p->name, p->nlen) != 0) ++ continue; ++ ++ nlen = strlen(ent->mnt_dir); ++ xmemalign((void*)&s, sizeof(void*), alignof(SHADOW)+(nlen+1)); ++ s->name = ((char*)s)+alignof(SHADOW); ++ s->nlen = nlen; ++ ++ strcpy(s->name, ent->mnt_dir); ++ if (p->shadow) ++ p->shadow->prev = s; ++ s->next = p->shadow; ++ s->prev = (SHADOW*)0; ++ p->shadow = s; ++ } ++ } ++ endmntent(mnt); ++} ++ ++static void clear_shadow(SHADOW *restrict shadow) ++{ ++ SHADOW *s, *n, *l; ++ ++ n = shadow; ++ l = (SHADOW*)0; ++ for (s = shadow; n; s = n) { ++ l = s->prev; ++ n = s->next; ++ if (s == shadow) { ++ if (n) n->prev = (SHADOW*)0; ++ shadow = n; ++ } else if (l) { ++ if (n) n->prev = l; ++ l->next = n; ++ } ++ free(s); ++ } ++} ++ ++static void clear_mnt(void) ++{ ++ NFS *p, *n, *l; ++ ++ n = nlist; ++ l = (NFS*)0; ++ for (p = nlist; n; p = n) { ++ l = p->prev; ++ n = p->next; ++ if (p == nlist) { ++ if (n) n->prev = (NFS*)0; ++ nlist = n; ++ } else if (l) { ++ if (n) n->prev = l; ++ l->next = n; ++ } ++ if (p->shadow) ++ clear_shadow(p->shadow); ++ free(p); ++ } ++} ++ ++/* ++ * Check if path is ia shadow off a NFS partition. ++ */ ++static int shadow(SHADOW *restrict this, const char *restrict name, const size_t nlen) ++{ ++ SHADOW *s; ++ ++ if (!this) ++ goto out; ++ for (s = this; s; s = s->next) { ++ if (nlen < s->nlen) ++ continue; ++ if (name[s->nlen] != '\0' && name[s->nlen] != '/') ++ continue; ++ if (strncmp(name, s->name, s->nlen) == 0) ++ return 1; ++ } ++out: ++ return 0; +} + +/* @@ -136,18 +266,17 @@ + + if (errno == EINVAL) { + const size_t nlen = strlen(curr); -+ NFS *p, *n, *l; -+ n = nlist; -+ l = (NFS*)0; -+ for (p = nlist; n; p = n) { -+ l = p->prev; -+ n = p->next; ++ NFS *p; ++ for (p = nlist; p; p = p->next) { + if (nlen < p->nlen) + continue; + if (curr[p->nlen] != '\0' && curr[p->nlen] != '/') + continue; -+ if (!strncmp(curr, p->name, p->nlen)) ++ if (!strncmp(curr, p->name, p->nlen)) { ++ if (shadow(p->shadow, curr, nlen)) ++ continue; + return 1; ++ } + } + } + @@ -157,7 +286,7 @@ int readarg(FILE *fp, char *buf, int sz) { int c = 0, f = 0; -@@ -173,8 +297,8 @@ int readproc() +@@ -173,8 +419,8 @@ int readproc() PROC *p, *n; struct dirent *d; struct stat st; @@ -168,7 +297,7 @@ char *s, *q; unsigned long startcode, endcode; int pid, f; -@@ -191,6 +315,7 @@ int readproc() +@@ -191,6 +437,7 @@ int readproc() n = p->next; if (p->argv0) free(p->argv0); if (p->argv1) free(p->argv1); @@ -176,7 +305,7 @@ free(p); } plist = NULL; -@@ -225,6 +350,9 @@ int readproc() +@@ -225,6 +472,9 @@ int readproc() nsyslog(LOG_ERR, "can't get program name from %s\n", path); @@ -186,7 +315,7 @@ free(p); continue; } -@@ -248,6 +376,9 @@ int readproc() +@@ -248,6 +498,9 @@ int readproc() p->sid = 0; nsyslog(LOG_ERR, "can't read sid from %s\n", path); @@ -196,7 +325,7 @@ free(p); continue; } -@@ -256,6 +387,9 @@ int readproc() +@@ -256,6 +509,9 @@ int readproc() fclose(fp); } else { /* Process disappeared.. */ @@ -206,7 +335,7 @@ free(p); continue; } -@@ -300,13 +434,18 @@ int readproc() +@@ -300,13 +556,18 @@ int readproc() } else { /* Process disappeared.. */ @@ -226,7 +355,7 @@ p->dev = st.st_dev; p->ino = st.st_ino; } -@@ -374,12 +513,25 @@ PIDQ_HEAD *pidof(char *prog) +@@ -374,12 +635,25 @@ PIDQ_HEAD *pidof(char *prog) PIDQ_HEAD *q; struct stat st; char *s; @@ -253,7 +382,7 @@ /* Get basename of program. */ if ((s = strrchr(prog, '/')) == NULL) -@@ -393,10 +545,30 @@ PIDQ_HEAD *pidof(char *prog) +@@ -393,10 +667,30 @@ PIDQ_HEAD *pidof(char *prog) /* First try to find a match based on dev/ino pair. */ if (dostat) { for (p = plist; p; p = p->next) { @@ -288,7 +417,7 @@ } } -@@ -428,7 +600,7 @@ PIDQ_HEAD *pidof(char *prog) +@@ -428,7 +722,7 @@ PIDQ_HEAD *pidof(char *prog) if (ok) add_pid_to_q(q, p); } @@ -297,7 +426,7 @@ } /* Give usage message and exit. */ -@@ -477,6 +649,9 @@ int main_pidof(int argc, char **argv) +@@ -477,6 +771,9 @@ int main_pidof(int argc, char **argv) int first = 1; int i, oind, opt, flags = 0; @@ -307,7 +436,7 @@ for (oind = PIDOF_OMITSZ-1; oind > 0; oind--) opid[oind] = 0; opterr = 0; -@@ -561,6 +736,7 @@ int main(int argc, char **argv) +@@ -561,6 +858,7 @@ int main(int argc, char **argv) PROC *p; int pid, sid = -1; int sig = SIGKILL; @@ -315,7 +444,7 @@ /* Get program name. */ if ((progname = strrchr(argv[0], '/')) == NULL) -@@ -583,7 +759,10 @@ int main(int argc, char **argv) +@@ -583,7 +881,10 @@ int main(int argc, char **argv) } /* First get the /proc filesystem online. */ @@ -327,7 +456,12 @@ /* * Ignoring SIGKILL and SIGSTOP do not make sense, but -@@ -608,9 +787,13 @@ int main(int argc, char **argv) +@@ -604,13 +905,18 @@ int main(int argc, char **argv) + kill(-1, SIGCONT); + exit(1); + } ++ clear_mnt(); + /* Now kill all processes except our session. */ sid = (int)getsid(0); pid = (int)getpid(); diff --git a/sysvinit.changes b/sysvinit.changes index 87b3dd9..877ad77 100644 --- a/sysvinit.changes +++ b/sysvinit.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Fri Mar 27 13:08:59 CET 2009 - werner@suse.de + +- Update to killproc 2.15 + * New option -w for making startproc waiting on daemons parent + process (bnc#489473, bnc#482096 comment#21 ff) + * New option -W for making startproc waiting on files created + by the daemon (bnc#482096 comment#24 ff) +- Merge changes for preload code of startpar into one patch +- nfs4pidof: avoid nfs code for process which are on shadow mounts + points of NFS mounts + ------------------------------------------------------------------- Wed Mar 25 21:32:51 CET 2009 - coolo@suse.de @@ -46,7 +58,7 @@ Mon Mar 9 13:54:55 CET 2009 - werner@suse.de ------------------------------------------------------------------- Thu Mar 5 17:27:33 CET 2009 - werner@suse.de -- Updte to killproc 2.14 to include most of our patches and to +- Update to killproc 2.14 to include most of our patches and to use openat(2), readlinkat(2), and opendirat(2) system calls. - Remove /dev/initctl from file list, do not create blogd pipe /dev/blogd (bnc#475580) diff --git a/sysvinit.spec b/sysvinit.spec index 6de11d9..5efd26b 100644 --- a/sysvinit.spec +++ b/sysvinit.spec @@ -21,7 +21,7 @@ Name: sysvinit %define MGVER 0.9.6s %define PDVER 2.0.2 -%define KPVER 2.14 +%define KPVER 2.15 %define SCVER 1.09 %define SIVER 2.86 %define START 0.53 @@ -30,12 +30,12 @@ Group: System/Base PreReq: coreutils AutoReqProv: on Version: 2.86 -Release: 202 +Release: 203 Summary: SysV-Style init BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: libselinux-devel libsepol-devel Source: sysvinit-2.86.tar.bz2 -Source2: killproc-2.14.tar.bz2 +Source2: killproc-2.15.tar.bz2 Source3: powerd-2.0.2.tar.bz2 Source4: showconsole-1.09.tar.bz2 Source5: startpar-0.53.tar.bz2 @@ -47,7 +47,7 @@ Source10: mkinitrd-kill2.sh Patch: sysvinit-2.86.dif Patch1: sysvinit-2.86-nfs4pidof.patch Patch2: powerd-2.0.2.dif -Patch3: killproc-2.14.dif +Patch3: killproc-2.15.dif Patch5: sysvinit-2.86-sulogin.patch Patch6: sysvinit-2.82-startstop.patch Patch7: sysvinit-2.85-suse.patch @@ -327,6 +327,15 @@ rm -rf ${RPM_BUILD_ROOT} %doc %{_mandir}/man8/mkill.8.gz %changelog +* Fri Mar 27 2009 werner@suse.de +- Update to killproc 2.15 + * New option -w for making startproc waiting on daemons parent + process (bnc#489473, bnc#482096 comment#21 ff) + * New option -W for making startproc waiting on files created + by the daemon (bnc#482096 comment#24 ff) +- Merge changes for preload code of startpar into one patch +- nfs4pidof: avoid nfs code for process which are on shadow mounts + points of NFS mounts * Wed Mar 25 2009 coolo@suse.de - exec one more time so that the preload part does not appear under the name of the init script in bootcharts @@ -349,7 +358,7 @@ rm -rf ${RPM_BUILD_ROOT} * Mon Mar 09 2009 werner@suse.de - Add patch from Debian people to startpar and mode to version 0.53 * Thu Mar 05 2009 werner@suse.de -- Updte to killproc 2.14 to include most of our patches and to +- Update to killproc 2.14 to include most of our patches and to use openat(2), readlinkat(2), and opendirat(2) system calls. - Remove /dev/initctl from file list, do not create blogd pipe /dev/blogd (bnc#475580)