Lines Matching refs:ns
99 #define msg_ids(ns) ((ns)->ids[IPC_MSG_IDS])
101 static inline struct msg_queue *msq_obtain_object(struct ipc_namespace *ns, int id)
103 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, int id)
114 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)
169 msq->q_qbytes = ns->msg_ctlmnb;
176 retval = ipc_addid(&msg_ids(ns), &msq->q_perm, ns->msg_ctlmni);
261 static void freeque(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp) __releases(RCU) __releases(&msq->q_perm)
269 msg_rmid(ns, msq);
276 atomic_dec(&ns->msg_hdrs);
279 atomic_sub(msq->q_cbytes, &ns->msg_bytes);
287 struct ipc_namespace *ns;
294 ns = current->nsproxy->ipc_ns;
299 return ipcget(ns, &msg_ids(ns), &msg_ops, &msg_params);
390 static int msgctl_down(struct ipc_namespace *ns, int msqid, int cmd, struct ipc64_perm *perm, int msg_qbytes)
396 down_write(&msg_ids(ns).rwsem);
399 ipcp = ipcctl_obtain_check(ns, &msg_ids(ns), msqid, cmd, perm, msg_qbytes);
416 freeque(ns, ipcp);
421 if (msg_qbytes > ns->msg_ctlmnb && !capable(CAP_SYS_RESOURCE)) {
460 up_write(&msg_ids(ns).rwsem);
464 static int msgctl_info(struct ipc_namespace *ns, int msqid, int cmd, struct msginfo *msginfo)
480 msginfo->msgmni = ns->msg_ctlmni;
481 msginfo->msgmax = ns->msg_ctlmax;
482 msginfo->msgmnb = ns->msg_ctlmnb;
485 down_read(&msg_ids(ns).rwsem);
487 msginfo->msgpool = msg_ids(ns).in_use;
488 msginfo->msgmap = atomic_read(&ns->msg_hdrs);
489 msginfo->msgtql = atomic_read(&ns->msg_bytes);
495 max_idx = ipc_get_maxidx(&msg_ids(ns));
496 up_read(&msg_ids(ns).rwsem);
500 static int msgctl_stat(struct ipc_namespace *ns, int msqid, int cmd, struct msqid64_ds *p)
509 msq = msq_obtain_object(ns, msqid);
515 msq = msq_obtain_object_check(ns, msqid);
527 if (ipcperms(ns, &msq->q_perm, S_IRUGO)) {
582 struct ipc_namespace *ns;
590 ns = current->nsproxy->ipc_ns;
596 err = msgctl_info(ns, msqid, cmd, &msginfo);
608 err = msgctl_stat(ns, msqid, cmd, &msqid64);
620 return msgctl_down(ns, msqid, cmd, &msqid64.msg_perm, msqid64.msg_qbytes);
622 return msgctl_down(ns, msqid, cmd, NULL, 0);
724 struct ipc_namespace *ns;
728 ns = current->nsproxy->ipc_ns;
738 err = msgctl_info(ns, msqid, cmd, &msginfo);
750 err = msgctl_stat(ns, msqid, cmd, &msqid64);
762 return msgctl_down(ns, msqid, cmd, &msqid64.msg_perm, msqid64.msg_qbytes);
764 return msgctl_down(ns, msqid, cmd, NULL, 0);
850 struct ipc_namespace *ns;
853 ns = current->nsproxy->ipc_ns;
855 if (msgsz > ns->msg_ctlmax || (long)msgsz < 0 || msqid < 0) {
871 msq = msq_obtain_object_check(ns, msqid);
883 if (ipcperms(ns, &msq->q_perm, S_IWUGO)) {
945 atomic_add(msgsz, &ns->msg_bytes);
946 atomic_inc(&ns->msg_hdrs);
1112 struct ipc_namespace *ns;
1116 ns = current->nsproxy->ipc_ns;
1126 copy = prepare_copy(buf, min_t(size_t, bufsz, ns->msg_ctlmax));
1134 msq = msq_obtain_object_check(ns, msqid);
1145 if (ipcperms(ns, &msq->q_perm, S_IRUGO)) {
1181 atomic_sub(msg->m_ts, &ns->msg_bytes);
1182 atomic_dec(&ns->msg_hdrs);
1318 void msg_init_ns(struct ipc_namespace *ns)
1320 ns->msg_ctlmax = MSGMAX;
1321 ns->msg_ctlmnb = MSGMNB;
1322 ns->msg_ctlmni = MSGMNI;
1324 atomic_set(&ns->msg_bytes, 0);
1325 atomic_set(&ns->msg_hdrs, 0);
1326 ipc_init_ids(&ns->ids[IPC_MSG_IDS]);
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);