diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ipc_namespace.h | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/include/linux/ipc_namespace.h b/include/linux/ipc_namespace.h index 3e6fcacebe8a..3392d50de351 100644 --- a/include/linux/ipc_namespace.h +++ b/include/linux/ipc_namespace.h | |||
@@ -25,7 +25,7 @@ struct ipc_ids { | |||
25 | }; | 25 | }; |
26 | 26 | ||
27 | struct ipc_namespace { | 27 | struct ipc_namespace { |
28 | struct kref kref; | 28 | atomic_t count; |
29 | struct ipc_ids ids[3]; | 29 | struct ipc_ids ids[3]; |
30 | 30 | ||
31 | int sem_ctls[4]; | 31 | int sem_ctls[4]; |
@@ -61,6 +61,7 @@ struct ipc_namespace { | |||
61 | extern struct ipc_namespace init_ipc_ns; | 61 | extern struct ipc_namespace init_ipc_ns; |
62 | extern atomic_t nr_ipc_ns; | 62 | extern atomic_t nr_ipc_ns; |
63 | 63 | ||
64 | extern spinlock_t mq_lock; | ||
64 | #if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC) | 65 | #if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC) |
65 | #define INIT_IPC_NS(ns) .ns = &init_ipc_ns, | 66 | #define INIT_IPC_NS(ns) .ns = &init_ipc_ns, |
66 | #else | 67 | #else |
@@ -82,18 +83,18 @@ static inline int ipcns_notify(unsigned long l) { return 0; } | |||
82 | #endif /* CONFIG_SYSVIPC */ | 83 | #endif /* CONFIG_SYSVIPC */ |
83 | 84 | ||
84 | #ifdef CONFIG_POSIX_MQUEUE | 85 | #ifdef CONFIG_POSIX_MQUEUE |
85 | extern void mq_init_ns(struct ipc_namespace *ns); | 86 | extern int mq_init_ns(struct ipc_namespace *ns); |
86 | /* default values */ | 87 | /* default values */ |
87 | #define DFLT_QUEUESMAX 256 /* max number of message queues */ | 88 | #define DFLT_QUEUESMAX 256 /* max number of message queues */ |
88 | #define DFLT_MSGMAX 10 /* max number of messages in each queue */ | 89 | #define DFLT_MSGMAX 10 /* max number of messages in each queue */ |
89 | #define HARD_MSGMAX (131072/sizeof(void *)) | 90 | #define HARD_MSGMAX (131072/sizeof(void *)) |
90 | #define DFLT_MSGSIZEMAX 8192 /* max message size */ | 91 | #define DFLT_MSGSIZEMAX 8192 /* max message size */ |
91 | #else | 92 | #else |
92 | #define mq_init_ns(ns) ((void) 0) | 93 | static inline int mq_init_ns(struct ipc_namespace *ns) { return 0; } |
93 | #endif | 94 | #endif |
94 | 95 | ||
95 | #if defined(CONFIG_IPC_NS) | 96 | #if defined(CONFIG_IPC_NS) |
96 | extern void free_ipc_ns(struct kref *kref); | 97 | extern void free_ipc_ns(struct ipc_namespace *ns); |
97 | extern struct ipc_namespace *copy_ipcs(unsigned long flags, | 98 | extern struct ipc_namespace *copy_ipcs(unsigned long flags, |
98 | struct ipc_namespace *ns); | 99 | struct ipc_namespace *ns); |
99 | extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids, | 100 | extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids, |
@@ -103,14 +104,11 @@ extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids, | |||
103 | static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns) | 104 | static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns) |
104 | { | 105 | { |
105 | if (ns) | 106 | if (ns) |
106 | kref_get(&ns->kref); | 107 | atomic_inc(&ns->count); |
107 | return ns; | 108 | return ns; |
108 | } | 109 | } |
109 | 110 | ||
110 | static inline void put_ipc_ns(struct ipc_namespace *ns) | 111 | extern void put_ipc_ns(struct ipc_namespace *ns); |
111 | { | ||
112 | kref_put(&ns->kref, free_ipc_ns); | ||
113 | } | ||
114 | #else | 112 | #else |
115 | static inline struct ipc_namespace *copy_ipcs(unsigned long flags, | 113 | static inline struct ipc_namespace *copy_ipcs(unsigned long flags, |
116 | struct ipc_namespace *ns) | 114 | struct ipc_namespace *ns) |