diff options
Diffstat (limited to 'ipc/msg.c')
-rw-r--r-- | ipc/msg.c | 26 |
1 files changed, 4 insertions, 22 deletions
@@ -67,9 +67,7 @@ struct msg_sender { | |||
67 | #define SEARCH_NOTEQUAL 3 | 67 | #define SEARCH_NOTEQUAL 3 |
68 | #define SEARCH_LESSEQUAL 4 | 68 | #define SEARCH_LESSEQUAL 4 |
69 | 69 | ||
70 | static struct ipc_ids init_msg_ids; | 70 | #define msg_ids(ns) ((ns)->ids[IPC_MSG_IDS]) |
71 | |||
72 | #define msg_ids(ns) (*((ns)->ids[IPC_MSG_IDS])) | ||
73 | 71 | ||
74 | #define msg_unlock(msq) ipc_unlock(&(msq)->q_perm) | 72 | #define msg_unlock(msq) ipc_unlock(&(msq)->q_perm) |
75 | #define msg_buildid(id, seq) ipc_buildid(id, seq) | 73 | #define msg_buildid(id, seq) ipc_buildid(id, seq) |
@@ -80,30 +78,17 @@ static int newque(struct ipc_namespace *, struct ipc_params *); | |||
80 | static int sysvipc_msg_proc_show(struct seq_file *s, void *it); | 78 | static int sysvipc_msg_proc_show(struct seq_file *s, void *it); |
81 | #endif | 79 | #endif |
82 | 80 | ||
83 | static void __msg_init_ns(struct ipc_namespace *ns, struct ipc_ids *ids) | 81 | void msg_init_ns(struct ipc_namespace *ns) |
84 | { | 82 | { |
85 | ns->ids[IPC_MSG_IDS] = ids; | ||
86 | ns->msg_ctlmax = MSGMAX; | 83 | ns->msg_ctlmax = MSGMAX; |
87 | ns->msg_ctlmnb = MSGMNB; | 84 | ns->msg_ctlmnb = MSGMNB; |
88 | ns->msg_ctlmni = MSGMNI; | 85 | ns->msg_ctlmni = MSGMNI; |
89 | atomic_set(&ns->msg_bytes, 0); | 86 | atomic_set(&ns->msg_bytes, 0); |
90 | atomic_set(&ns->msg_hdrs, 0); | 87 | atomic_set(&ns->msg_hdrs, 0); |
91 | ipc_init_ids(ids); | 88 | ipc_init_ids(&ns->ids[IPC_MSG_IDS]); |
92 | } | 89 | } |
93 | 90 | ||
94 | #ifdef CONFIG_IPC_NS | 91 | #ifdef CONFIG_IPC_NS |
95 | int msg_init_ns(struct ipc_namespace *ns) | ||
96 | { | ||
97 | struct ipc_ids *ids; | ||
98 | |||
99 | ids = kmalloc(sizeof(struct ipc_ids), GFP_KERNEL); | ||
100 | if (ids == NULL) | ||
101 | return -ENOMEM; | ||
102 | |||
103 | __msg_init_ns(ns, ids); | ||
104 | return 0; | ||
105 | } | ||
106 | |||
107 | void msg_exit_ns(struct ipc_namespace *ns) | 92 | void msg_exit_ns(struct ipc_namespace *ns) |
108 | { | 93 | { |
109 | struct msg_queue *msq; | 94 | struct msg_queue *msq; |
@@ -126,15 +111,12 @@ void msg_exit_ns(struct ipc_namespace *ns) | |||
126 | } | 111 | } |
127 | 112 | ||
128 | up_write(&msg_ids(ns).rw_mutex); | 113 | up_write(&msg_ids(ns).rw_mutex); |
129 | |||
130 | kfree(ns->ids[IPC_MSG_IDS]); | ||
131 | ns->ids[IPC_MSG_IDS] = NULL; | ||
132 | } | 114 | } |
133 | #endif | 115 | #endif |
134 | 116 | ||
135 | void __init msg_init(void) | 117 | void __init msg_init(void) |
136 | { | 118 | { |
137 | __msg_init_ns(&init_ipc_ns, &init_msg_ids); | 119 | msg_init_ns(&init_ipc_ns); |
138 | ipc_init_proc_interface("sysvipc/msg", | 120 | ipc_init_proc_interface("sysvipc/msg", |
139 | " key msqid perms cbytes qnum lspid lrpid uid gid cuid cgid stime rtime ctime\n", | 121 | " key msqid perms cbytes qnum lspid lrpid uid gid cuid cgid stime rtime ctime\n", |
140 | IPC_MSG_IDS, sysvipc_msg_proc_show); | 122 | IPC_MSG_IDS, sysvipc_msg_proc_show); |