aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/ipc_namespace.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/ipc_namespace.h')
-rw-r--r--include/linux/ipc_namespace.h16
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
27struct ipc_namespace { 27struct 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 {
61extern struct ipc_namespace init_ipc_ns; 61extern struct ipc_namespace init_ipc_ns;
62extern atomic_t nr_ipc_ns; 62extern atomic_t nr_ipc_ns;
63 63
64extern 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
85extern void mq_init_ns(struct ipc_namespace *ns); 86extern 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) 93static 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)
96extern void free_ipc_ns(struct kref *kref); 97extern void free_ipc_ns(struct ipc_namespace *ns);
97extern struct ipc_namespace *copy_ipcs(unsigned long flags, 98extern struct ipc_namespace *copy_ipcs(unsigned long flags,
98 struct ipc_namespace *ns); 99 struct ipc_namespace *ns);
99extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids, 100extern 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,
103static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns) 104static 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
110static inline void put_ipc_ns(struct ipc_namespace *ns) 111extern void put_ipc_ns(struct ipc_namespace *ns);
111{
112 kref_put(&ns->kref, free_ipc_ns);
113}
114#else 112#else
115static inline struct ipc_namespace *copy_ipcs(unsigned long flags, 113static inline struct ipc_namespace *copy_ipcs(unsigned long flags,
116 struct ipc_namespace *ns) 114 struct ipc_namespace *ns)