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); |
