Lines Matching refs:msq
106 struct msg_queue *msq = ipc_rcu_to_struct(p); in msg_rcu_free() local
108 security_msg_queue_free(msq); in msg_rcu_free()
121 struct msg_queue *msq; in newque() local
126 msq = ipc_rcu_alloc(sizeof(*msq)); in newque()
127 if (!msq) in newque()
130 msq->q_perm.mode = msgflg & S_IRWXUGO; in newque()
131 msq->q_perm.key = key; in newque()
133 msq->q_perm.security = NULL; in newque()
134 retval = security_msg_queue_alloc(msq); in newque()
136 ipc_rcu_putref(msq, ipc_rcu_free); in newque()
140 msq->q_stime = msq->q_rtime = 0; in newque()
141 msq->q_ctime = get_seconds(); in newque()
142 msq->q_cbytes = msq->q_qnum = 0; in newque()
143 msq->q_qbytes = ns->msg_ctlmnb; in newque()
144 msq->q_lspid = msq->q_lrpid = 0; in newque()
145 INIT_LIST_HEAD(&msq->q_messages); in newque()
146 INIT_LIST_HEAD(&msq->q_receivers); in newque()
147 INIT_LIST_HEAD(&msq->q_senders); in newque()
150 id = ipc_addid(&msg_ids(ns), &msq->q_perm, ns->msg_ctlmni); in newque()
152 ipc_rcu_putref(msq, msg_rcu_free); in newque()
156 ipc_unlock_object(&msq->q_perm); in newque()
159 return msq->q_perm.id; in newque()
162 static inline void ss_add(struct msg_queue *msq, struct msg_sender *mss) in ss_add() argument
166 list_add_tail(&mss->list, &msq->q_senders); in ss_add()
186 static void expunge_all(struct msg_queue *msq, int res) in expunge_all() argument
190 list_for_each_entry_safe(msr, t, &msq->q_receivers, r_list) { in expunge_all()
215 struct msg_queue *msq = container_of(ipcp, struct msg_queue, q_perm); in freeque() local
217 expunge_all(msq, -EIDRM); in freeque()
218 ss_wakeup(&msq->q_senders, 1); in freeque()
219 msg_rmid(ns, msq); in freeque()
220 ipc_unlock_object(&msq->q_perm); in freeque()
223 list_for_each_entry_safe(msg, t, &msq->q_messages, m_list) { in freeque()
227 atomic_sub(msq->q_cbytes, &ns->msg_bytes); in freeque()
228 ipc_rcu_putref(msq, msg_rcu_free); in freeque()
236 struct msg_queue *msq = container_of(ipcp, struct msg_queue, q_perm); in msg_security() local
238 return security_msg_queue_associate(msq, msgflg); in msg_security()
344 struct msg_queue *msq; in msgctl_down() local
362 msq = container_of(ipcp, struct msg_queue, q_perm); in msgctl_down()
364 err = security_msg_queue_msgctl(msq, cmd); in msgctl_down()
370 ipc_lock_object(&msq->q_perm); in msgctl_down()
381 ipc_lock_object(&msq->q_perm); in msgctl_down()
386 msq->q_qbytes = msqid64.msg_qbytes; in msgctl_down()
388 msq->q_ctime = get_seconds(); in msgctl_down()
392 expunge_all(msq, -EAGAIN); in msgctl_down()
396 ss_wakeup(&msq->q_senders, 0); in msgctl_down()
404 ipc_unlock_object(&msq->q_perm); in msgctl_down()
416 struct msg_queue *msq; in msgctl_nolock() local
473 msq = msq_obtain_object(ns, msqid); in msgctl_nolock()
474 if (IS_ERR(msq)) { in msgctl_nolock()
475 err = PTR_ERR(msq); in msgctl_nolock()
478 success_return = msq->q_perm.id; in msgctl_nolock()
480 msq = msq_obtain_object_check(ns, msqid); in msgctl_nolock()
481 if (IS_ERR(msq)) { in msgctl_nolock()
482 err = PTR_ERR(msq); in msgctl_nolock()
489 if (ipcperms(ns, &msq->q_perm, S_IRUGO)) in msgctl_nolock()
492 err = security_msg_queue_msgctl(msq, cmd); in msgctl_nolock()
496 kernel_to_ipc64_perm(&msq->q_perm, &tbuf.msg_perm); in msgctl_nolock()
497 tbuf.msg_stime = msq->q_stime; in msgctl_nolock()
498 tbuf.msg_rtime = msq->q_rtime; in msgctl_nolock()
499 tbuf.msg_ctime = msq->q_ctime; in msgctl_nolock()
500 tbuf.msg_cbytes = msq->q_cbytes; in msgctl_nolock()
501 tbuf.msg_qnum = msq->q_qnum; in msgctl_nolock()
502 tbuf.msg_qbytes = msq->q_qbytes; in msgctl_nolock()
503 tbuf.msg_lspid = msq->q_lspid; in msgctl_nolock()
504 tbuf.msg_lrpid = msq->q_lrpid; in msgctl_nolock()
569 static inline int pipelined_send(struct msg_queue *msq, struct msg_msg *msg) in pipelined_send() argument
573 list_for_each_entry_safe(msr, t, &msq->q_receivers, r_list) { in pipelined_send()
575 !security_msg_queue_msgrcv(msq, msg, msr->r_tsk, in pipelined_send()
587 msq->q_lrpid = task_pid_vnr(msr->r_tsk); in pipelined_send()
588 msq->q_rtime = get_seconds(); in pipelined_send()
610 struct msg_queue *msq; in do_msgsnd() local
630 msq = msq_obtain_object_check(ns, msqid); in do_msgsnd()
631 if (IS_ERR(msq)) { in do_msgsnd()
632 err = PTR_ERR(msq); in do_msgsnd()
636 ipc_lock_object(&msq->q_perm); in do_msgsnd()
642 if (ipcperms(ns, &msq->q_perm, S_IWUGO)) in do_msgsnd()
646 if (!ipc_valid_object(&msq->q_perm)) { in do_msgsnd()
651 err = security_msg_queue_msgsnd(msq, msg, msgflg); in do_msgsnd()
655 if (msgsz + msq->q_cbytes <= msq->q_qbytes && in do_msgsnd()
656 1 + msq->q_qnum <= msq->q_qbytes) { in do_msgsnd()
667 ss_add(msq, &s); in do_msgsnd()
669 if (!ipc_rcu_getref(msq)) { in do_msgsnd()
674 ipc_unlock_object(&msq->q_perm); in do_msgsnd()
679 ipc_lock_object(&msq->q_perm); in do_msgsnd()
681 ipc_rcu_putref(msq, ipc_rcu_free); in do_msgsnd()
683 if (!ipc_valid_object(&msq->q_perm)) { in do_msgsnd()
696 msq->q_lspid = task_tgid_vnr(current); in do_msgsnd()
697 msq->q_stime = get_seconds(); in do_msgsnd()
699 if (!pipelined_send(msq, msg)) { in do_msgsnd()
701 list_add_tail(&msg->m_list, &msq->q_messages); in do_msgsnd()
702 msq->q_cbytes += msgsz; in do_msgsnd()
703 msq->q_qnum++; in do_msgsnd()
712 ipc_unlock_object(&msq->q_perm); in do_msgsnd()
799 static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) in find_msg() argument
804 list_for_each_entry(msg, &msq->q_messages, m_list) { in find_msg()
806 !security_msg_queue_msgrcv(msq, msg, current, in find_msg()
827 struct msg_queue *msq; in do_msgrcv() local
846 msq = msq_obtain_object_check(ns, msqid); in do_msgrcv()
847 if (IS_ERR(msq)) { in do_msgrcv()
850 return PTR_ERR(msq); in do_msgrcv()
857 if (ipcperms(ns, &msq->q_perm, S_IRUGO)) in do_msgrcv()
860 ipc_lock_object(&msq->q_perm); in do_msgrcv()
863 if (!ipc_valid_object(&msq->q_perm)) { in do_msgrcv()
868 msg = find_msg(msq, &msgtyp, mode); in do_msgrcv()
888 msq->q_qnum--; in do_msgrcv()
889 msq->q_rtime = get_seconds(); in do_msgrcv()
890 msq->q_lrpid = task_tgid_vnr(current); in do_msgrcv()
891 msq->q_cbytes -= msg->m_ts; in do_msgrcv()
894 ss_wakeup(&msq->q_senders, 0); in do_msgrcv()
905 list_add_tail(&msr_d.r_list, &msq->q_receivers); in do_msgrcv()
916 ipc_unlock_object(&msq->q_perm); in do_msgrcv()
953 ipc_lock_object(&msq->q_perm); in do_msgrcv()
968 ipc_unlock_object(&msq->q_perm); in do_msgrcv()
972 ipc_unlock_object(&msq->q_perm); in do_msgrcv()
1016 struct msg_queue *msq = it; in sysvipc_msg_proc_show() local
1020 msq->q_perm.key, in sysvipc_msg_proc_show()
1021 msq->q_perm.id, in sysvipc_msg_proc_show()
1022 msq->q_perm.mode, in sysvipc_msg_proc_show()
1023 msq->q_cbytes, in sysvipc_msg_proc_show()
1024 msq->q_qnum, in sysvipc_msg_proc_show()
1025 msq->q_lspid, in sysvipc_msg_proc_show()
1026 msq->q_lrpid, in sysvipc_msg_proc_show()
1027 from_kuid_munged(user_ns, msq->q_perm.uid), in sysvipc_msg_proc_show()
1028 from_kgid_munged(user_ns, msq->q_perm.gid), in sysvipc_msg_proc_show()
1029 from_kuid_munged(user_ns, msq->q_perm.cuid), in sysvipc_msg_proc_show()
1030 from_kgid_munged(user_ns, msq->q_perm.cgid), in sysvipc_msg_proc_show()
1031 msq->q_stime, in sysvipc_msg_proc_show()
1032 msq->q_rtime, in sysvipc_msg_proc_show()
1033 msq->q_ctime); in sysvipc_msg_proc_show()