Lines Matching refs:ns

100 #define msg_ids(ns)	((ns)->ids[IPC_MSG_IDS])
102 static inline struct msg_queue *msq_obtain_object(struct ipc_namespace *ns, int id)
104 struct kern_ipc_perm *ipcp = ipc_obtain_object_idr(&msg_ids(ns), id);
112 static inline struct msg_queue *msq_obtain_object_check(struct ipc_namespace *ns,
115 struct kern_ipc_perm *ipcp = ipc_obtain_object_check(&msg_ids(ns), id);
123 static inline void msg_rmid(struct ipc_namespace *ns, struct msg_queue *s)
125 ipc_rmid(&msg_ids(ns), &s->q_perm);
139 * @ns: namespace
144 static int newque(struct ipc_namespace *ns, struct ipc_params *params)
168 msq->q_qbytes = ns->msg_ctlmnb;
175 retval = ipc_addid(&msg_ids(ns), &msq->q_perm, ns->msg_ctlmni);
273 static void freeque(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp)
283 msg_rmid(ns, msq);
289 percpu_counter_sub_local(&ns->percpu_msg_hdrs, 1);
292 percpu_counter_sub_local(&ns->percpu_msg_bytes, msq->q_cbytes);
300 struct ipc_namespace *ns;
307 ns = current->nsproxy->ipc_ns;
312 return ipcget(ns, &msg_ids(ns), &msg_ops, &msg_params);
401 static int msgctl_down(struct ipc_namespace *ns, int msqid, int cmd,
408 down_write(&msg_ids(ns).rwsem);
411 ipcp = ipcctl_obtain_check(ns, &msg_ids(ns), msqid, cmd,
428 freeque(ns, ipcp);
434 if (msg_qbytes > ns->msg_ctlmnb &&
473 up_write(&msg_ids(ns).rwsem);
477 static int msgctl_info(struct ipc_namespace *ns, int msqid,
493 msginfo->msgmni = ns->msg_ctlmni;
494 msginfo->msgmax = ns->msg_ctlmax;
495 msginfo->msgmnb = ns->msg_ctlmnb;
498 down_read(&msg_ids(ns).rwsem);
500 msginfo->msgpool = msg_ids(ns).in_use;
501 max_idx = ipc_get_maxidx(&msg_ids(ns));
502 up_read(&msg_ids(ns).rwsem);
505 percpu_counter_sum(&ns->percpu_msg_hdrs),
508 percpu_counter_sum(&ns->percpu_msg_bytes),
518 static int msgctl_stat(struct ipc_namespace *ns, int msqid,
528 msq = msq_obtain_object(ns, msqid);
534 msq = msq_obtain_object_check(ns, msqid);
546 if (ipcperms(ns, &msq->q_perm, S_IRUGO))
599 struct ipc_namespace *ns;
606 ns = current->nsproxy->ipc_ns;
612 err = msgctl_info(ns, msqid, cmd, &msginfo);
622 err = msgctl_stat(ns, msqid, cmd, &msqid64);
631 return msgctl_down(ns, msqid, cmd, &msqid64.msg_perm,
634 return msgctl_down(ns, msqid, cmd, NULL, 0);
734 struct ipc_namespace *ns;
738 ns = current->nsproxy->ipc_ns;
747 err = msgctl_info(ns, msqid, cmd, &msginfo);
757 err = msgctl_stat(ns, msqid, cmd, &msqid64);
766 return msgctl_down(ns, msqid, cmd, &msqid64.msg_perm, msqid64.msg_qbytes);
768 return msgctl_down(ns, msqid, cmd, NULL, 0);
854 struct ipc_namespace *ns;
857 ns = current->nsproxy->ipc_ns;
859 if (msgsz > ns->msg_ctlmax || (long) msgsz < 0 || msqid < 0)
872 msq = msq_obtain_object_check(ns, msqid);
884 if (ipcperms(ns, &msq->q_perm, S_IWUGO))
944 percpu_counter_add_local(&ns->percpu_msg_bytes, msgsz);
945 percpu_counter_add_local(&ns->percpu_msg_hdrs, 1);
1103 struct ipc_namespace *ns;
1107 ns = current->nsproxy->ipc_ns;
1115 copy = prepare_copy(buf, min_t(size_t, bufsz, ns->msg_ctlmax));
1122 msq = msq_obtain_object_check(ns, msqid);
1133 if (ipcperms(ns, &msq->q_perm, S_IRUGO))
1168 percpu_counter_sub_local(&ns->percpu_msg_bytes, msg->m_ts);
1169 percpu_counter_sub_local(&ns->percpu_msg_hdrs, 1);
1306 int msg_init_ns(struct ipc_namespace *ns)
1310 ns->msg_ctlmax = MSGMAX;
1311 ns->msg_ctlmnb = MSGMNB;
1312 ns->msg_ctlmni = MSGMNI;
1314 ret = percpu_counter_init(&ns->percpu_msg_bytes, 0, GFP_KERNEL);
1317 ret = percpu_counter_init(&ns->percpu_msg_hdrs, 0, GFP_KERNEL);
1320 ipc_init_ids(&ns->ids[IPC_MSG_IDS]);
1324 percpu_counter_destroy(&ns->percpu_msg_bytes);
1330 void msg_exit_ns(struct ipc_namespace *ns)
1332 free_ipcs(ns, &msg_ids(ns), freeque);
1333 idr_destroy(&ns->ids[IPC_MSG_IDS].ipcs_idr);
1334 rhashtable_destroy(&ns->ids[IPC_MSG_IDS].key_ht);
1335 percpu_counter_destroy(&ns->percpu_msg_bytes);
1336 percpu_counter_destroy(&ns->percpu_msg_hdrs);