diff options
author | Kirill Korotaev <dev@openvz.org> | 2006-10-02 05:18:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-02 10:57:22 -0400 |
commit | 73ea41302bab5e02c9e86ab15c509494a550f1db (patch) | |
tree | 10971a839dd53a9e18d6c866c9be93517fe8de25 /include | |
parent | 25b21cb2f6d69b0475b134e0a3e8e269137270fa (diff) |
[PATCH] IPC namespace - utils
This patch adds basic IPC namespace functionality to
IPC utils:
- init_ipc_ns
- copy/clone/unshare/free IPC ns
- /proc preparations
Signed-off-by: Pavel Emelianov <xemul@openvz.org>
Signed-off-by: Kirill Korotaev <dev@openvz.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Cedric Le Goater <clg@fr.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/init_task.h | 3 | ||||
-rw-r--r-- | include/linux/ipc.h | 18 |
2 files changed, 20 insertions, 1 deletions
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index ceecf69dfa39..33c5daacc743 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -6,6 +6,7 @@ | |||
6 | #include <linux/irqflags.h> | 6 | #include <linux/irqflags.h> |
7 | #include <linux/utsname.h> | 7 | #include <linux/utsname.h> |
8 | #include <linux/lockdep.h> | 8 | #include <linux/lockdep.h> |
9 | #include <linux/ipc.h> | ||
9 | 10 | ||
10 | #define INIT_FDTABLE \ | 11 | #define INIT_FDTABLE \ |
11 | { \ | 12 | { \ |
@@ -74,8 +75,8 @@ extern struct nsproxy init_nsproxy; | |||
74 | .count = ATOMIC_INIT(1), \ | 75 | .count = ATOMIC_INIT(1), \ |
75 | .nslock = SPIN_LOCK_UNLOCKED, \ | 76 | .nslock = SPIN_LOCK_UNLOCKED, \ |
76 | .uts_ns = &init_uts_ns, \ | 77 | .uts_ns = &init_uts_ns, \ |
77 | .ipc_ns = &init_ipc_ns, \ | ||
78 | .namespace = NULL, \ | 78 | .namespace = NULL, \ |
79 | INIT_IPC_NS(ipc_ns) \ | ||
79 | } | 80 | } |
80 | 81 | ||
81 | #define INIT_SIGHAND(sighand) { \ | 82 | #define INIT_SIGHAND(sighand) { \ |
diff --git a/include/linux/ipc.h b/include/linux/ipc.h index 36027b10f283..d9e2b3f36c35 100644 --- a/include/linux/ipc.h +++ b/include/linux/ipc.h | |||
@@ -88,20 +88,38 @@ struct ipc_namespace { | |||
88 | }; | 88 | }; |
89 | 89 | ||
90 | extern struct ipc_namespace init_ipc_ns; | 90 | extern struct ipc_namespace init_ipc_ns; |
91 | |||
92 | #ifdef CONFIG_SYSVIPC | ||
93 | #define INIT_IPC_NS(ns) .ns = &init_ipc_ns, | ||
94 | #else | ||
95 | #define INIT_IPC_NS(ns) | ||
96 | #endif | ||
97 | |||
98 | #ifdef CONFIG_IPC_NS | ||
91 | extern void free_ipc_ns(struct kref *kref); | 99 | extern void free_ipc_ns(struct kref *kref); |
92 | extern int copy_ipcs(unsigned long flags, struct task_struct *tsk); | 100 | extern int copy_ipcs(unsigned long flags, struct task_struct *tsk); |
93 | extern int unshare_ipcs(unsigned long flags, struct ipc_namespace **ns); | 101 | extern int unshare_ipcs(unsigned long flags, struct ipc_namespace **ns); |
102 | #else | ||
103 | static inline int copy_ipcs(unsigned long flags, struct task_struct *tsk) | ||
104 | { | ||
105 | return 0; | ||
106 | } | ||
107 | #endif | ||
94 | 108 | ||
95 | static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns) | 109 | static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns) |
96 | { | 110 | { |
111 | #ifdef CONFIG_IPC_NS | ||
97 | if (ns) | 112 | if (ns) |
98 | kref_get(&ns->kref); | 113 | kref_get(&ns->kref); |
114 | #endif | ||
99 | return ns; | 115 | return ns; |
100 | } | 116 | } |
101 | 117 | ||
102 | static inline void put_ipc_ns(struct ipc_namespace *ns) | 118 | static inline void put_ipc_ns(struct ipc_namespace *ns) |
103 | { | 119 | { |
120 | #ifdef CONFIG_IPC_NS | ||
104 | kref_put(&ns->kref, free_ipc_ns); | 121 | kref_put(&ns->kref, free_ipc_ns); |
122 | #endif | ||
105 | } | 123 | } |
106 | 124 | ||
107 | #endif /* __KERNEL__ */ | 125 | #endif /* __KERNEL__ */ |