aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/ipc.h
diff options
context:
space:
mode:
authorKirill Korotaev <dev@openvz.org>2006-10-02 05:18:19 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-02 10:57:22 -0400
commit25b21cb2f6d69b0475b134e0a3e8e269137270fa (patch)
treecd9c3966408c0ca5903249437c35ff35961de544 /include/linux/ipc.h
parentc0b2fc316599d6cd875b6b8cafa67f03b9512b4d (diff)
[PATCH] IPC namespace core
This patch set allows to unshare IPCs and have a private set of IPC objects (sem, shm, msg) inside namespace. Basically, it is another building block of containers functionality. This patch implements core IPC namespace changes: - ipc_namespace structure - new config option CONFIG_IPC_NS - adds CLONE_NEWIPC flag - unshare support [clg@fr.ibm.com: small fix for unshare of ipc namespace] [akpm@osdl.org: build fix] Signed-off-by: Pavel Emelianov <xemul@openvz.org> Signed-off-by: Kirill Korotaev <dev@openvz.org> Signed-off-by: Cedric Le Goater <clg@fr.ibm.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/ipc.h')
-rw-r--r--include/linux/ipc.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/include/linux/ipc.h b/include/linux/ipc.h
index b291189737e7..36027b10f283 100644
--- a/include/linux/ipc.h
+++ b/include/linux/ipc.h
@@ -2,6 +2,7 @@
2#define _LINUX_IPC_H 2#define _LINUX_IPC_H
3 3
4#include <linux/types.h> 4#include <linux/types.h>
5#include <linux/kref.h>
5 6
6#define IPC_PRIVATE ((__kernel_key_t) 0) 7#define IPC_PRIVATE ((__kernel_key_t) 0)
7 8
@@ -68,6 +69,41 @@ struct kern_ipc_perm
68 void *security; 69 void *security;
69}; 70};
70 71
72struct ipc_ids;
73struct ipc_namespace {
74 struct kref kref;
75 struct ipc_ids *ids[3];
76
77 int sem_ctls[4];
78 int used_sems;
79
80 int msg_ctlmax;
81 int msg_ctlmnb;
82 int msg_ctlmni;
83
84 size_t shm_ctlmax;
85 size_t shm_ctlall;
86 int shm_ctlmni;
87 int shm_tot;
88};
89
90extern struct ipc_namespace init_ipc_ns;
91extern void free_ipc_ns(struct kref *kref);
92extern int copy_ipcs(unsigned long flags, struct task_struct *tsk);
93extern int unshare_ipcs(unsigned long flags, struct ipc_namespace **ns);
94
95static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
96{
97 if (ns)
98 kref_get(&ns->kref);
99 return ns;
100}
101
102static inline void put_ipc_ns(struct ipc_namespace *ns)
103{
104 kref_put(&ns->kref, free_ipc_ns);
105}
106
71#endif /* __KERNEL__ */ 107#endif /* __KERNEL__ */
72 108
73#endif /* _LINUX_IPC_H */ 109#endif /* _LINUX_IPC_H */