diff options
Diffstat (limited to 'ipc')
| -rw-r--r-- | ipc/Makefile | 3 | ||||
| -rw-r--r-- | ipc/ipcns_notifier.c | 2 | ||||
| -rw-r--r-- | ipc/namespace.c | 12 |
3 files changed, 15 insertions, 2 deletions
diff --git a/ipc/Makefile b/ipc/Makefile index 388e4d259f02..65c384395801 100644 --- a/ipc/Makefile +++ b/ipc/Makefile | |||
| @@ -3,8 +3,7 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-$(CONFIG_SYSVIPC_COMPAT) += compat.o | 5 | obj-$(CONFIG_SYSVIPC_COMPAT) += compat.o |
| 6 | obj_mem-$(CONFIG_MEMORY_HOTPLUG) += ipcns_notifier.o | 6 | obj-$(CONFIG_SYSVIPC) += util.o msgutil.o msg.o sem.o shm.o ipcns_notifier.o |
| 7 | obj-$(CONFIG_SYSVIPC) += util.o msgutil.o msg.o sem.o shm.o $(obj_mem-y) | ||
| 8 | obj-$(CONFIG_SYSVIPC_SYSCTL) += ipc_sysctl.o | 7 | obj-$(CONFIG_SYSVIPC_SYSCTL) += ipc_sysctl.o |
| 9 | obj_mq-$(CONFIG_COMPAT) += compat_mq.o | 8 | obj_mq-$(CONFIG_COMPAT) += compat_mq.o |
| 10 | obj-$(CONFIG_POSIX_MQUEUE) += mqueue.o msgutil.o $(obj_mq-y) | 9 | obj-$(CONFIG_POSIX_MQUEUE) += mqueue.o msgutil.o $(obj_mq-y) |
diff --git a/ipc/ipcns_notifier.c b/ipc/ipcns_notifier.c index 0786af6ce3ec..c7974609defc 100644 --- a/ipc/ipcns_notifier.c +++ b/ipc/ipcns_notifier.c | |||
| @@ -29,6 +29,8 @@ static int ipcns_callback(struct notifier_block *self, | |||
| 29 | 29 | ||
| 30 | switch (action) { | 30 | switch (action) { |
| 31 | case IPCNS_MEMCHANGED: /* amount of lowmem has changed */ | 31 | case IPCNS_MEMCHANGED: /* amount of lowmem has changed */ |
| 32 | case IPCNS_CREATED: | ||
| 33 | case IPCNS_REMOVED: | ||
| 32 | /* | 34 | /* |
| 33 | * It's time to recompute msgmni | 35 | * It's time to recompute msgmni |
| 34 | */ | 36 | */ |
diff --git a/ipc/namespace.c b/ipc/namespace.c index f7a35be2e771..9171d948751e 100644 --- a/ipc/namespace.c +++ b/ipc/namespace.c | |||
| @@ -26,6 +26,12 @@ static struct ipc_namespace *clone_ipc_ns(struct ipc_namespace *old_ns) | |||
| 26 | msg_init_ns(ns); | 26 | msg_init_ns(ns); |
| 27 | shm_init_ns(ns); | 27 | shm_init_ns(ns); |
| 28 | 28 | ||
| 29 | /* | ||
| 30 | * msgmni has already been computed for the new ipc ns. | ||
| 31 | * Thus, do the ipcns creation notification before registering that | ||
| 32 | * new ipcns in the chain. | ||
| 33 | */ | ||
| 34 | ipcns_notify(IPCNS_CREATED); | ||
| 29 | register_ipcns_notifier(ns); | 35 | register_ipcns_notifier(ns); |
| 30 | 36 | ||
| 31 | kref_init(&ns->kref); | 37 | kref_init(&ns->kref); |
| @@ -97,4 +103,10 @@ void free_ipc_ns(struct kref *kref) | |||
| 97 | shm_exit_ns(ns); | 103 | shm_exit_ns(ns); |
| 98 | kfree(ns); | 104 | kfree(ns); |
| 99 | atomic_dec(&nr_ipc_ns); | 105 | atomic_dec(&nr_ipc_ns); |
| 106 | |||
| 107 | /* | ||
| 108 | * Do the ipcns removal notification after decrementing nr_ipc_ns in | ||
| 109 | * order to have a correct value when recomputing msgmni. | ||
| 110 | */ | ||
| 111 | ipcns_notify(IPCNS_REMOVED); | ||
| 100 | } | 112 | } |
