aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
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
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')
-rw-r--r--include/linux/init_task.h1
-rw-r--r--include/linux/ipc.h36
-rw-r--r--include/linux/nsproxy.h2
-rw-r--r--include/linux/sched.h1
4 files changed, 40 insertions, 0 deletions
diff --git a/include/linux/init_task.h b/include/linux/init_task.h
index e08531ec32f0..ceecf69dfa39 100644
--- a/include/linux/init_task.h
+++ b/include/linux/init_task.h
@@ -74,6 +74,7 @@ extern struct nsproxy init_nsproxy;
74 .count = ATOMIC_INIT(1), \ 74 .count = ATOMIC_INIT(1), \
75 .nslock = SPIN_LOCK_UNLOCKED, \ 75 .nslock = SPIN_LOCK_UNLOCKED, \
76 .uts_ns = &init_uts_ns, \ 76 .uts_ns = &init_uts_ns, \
77 .ipc_ns = &init_ipc_ns, \
77 .namespace = NULL, \ 78 .namespace = NULL, \
78} 79}
79 80
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 */
diff --git a/include/linux/nsproxy.h b/include/linux/nsproxy.h
index 9c2e0ad508db..f6baecdeecd6 100644
--- a/include/linux/nsproxy.h
+++ b/include/linux/nsproxy.h
@@ -6,6 +6,7 @@
6 6
7struct namespace; 7struct namespace;
8struct uts_namespace; 8struct uts_namespace;
9struct ipc_namespace;
9 10
10/* 11/*
11 * A structure to contain pointers to all per-process 12 * A structure to contain pointers to all per-process
@@ -23,6 +24,7 @@ struct nsproxy {
23 atomic_t count; 24 atomic_t count;
24 spinlock_t nslock; 25 spinlock_t nslock;
25 struct uts_namespace *uts_ns; 26 struct uts_namespace *uts_ns;
27 struct ipc_namespace *ipc_ns;
26 struct namespace *namespace; 28 struct namespace *namespace;
27}; 29};
28extern struct nsproxy init_nsproxy; 30extern struct nsproxy init_nsproxy;
diff --git a/include/linux/sched.h b/include/linux/sched.h
index a973e7012315..9ba959e34266 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -25,6 +25,7 @@
25#define CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */ 25#define CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */
26#define CLONE_STOPPED 0x02000000 /* Start in stopped state */ 26#define CLONE_STOPPED 0x02000000 /* Start in stopped state */
27#define CLONE_NEWUTS 0x04000000 /* New utsname group? */ 27#define CLONE_NEWUTS 0x04000000 /* New utsname group? */
28#define CLONE_NEWIPC 0x08000000 /* New ipcs */
28 29
29/* 30/*
30 * Scheduling policies 31 * Scheduling policies