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()
588 msq->q_lrpid = task_pid_vnr(msr->r_tsk); in pipelined_send()
589 msq->q_rtime = get_seconds(); in pipelined_send()
612 struct msg_queue *msq; in do_msgsnd() local
632 msq = msq_obtain_object_check(ns, msqid); in do_msgsnd()
633 if (IS_ERR(msq)) { in do_msgsnd()
634 err = PTR_ERR(msq); in do_msgsnd()
638 ipc_lock_object(&msq->q_perm); in do_msgsnd()
644 if (ipcperms(ns, &msq->q_perm, S_IWUGO)) in do_msgsnd()
648 if (!ipc_valid_object(&msq->q_perm)) { in do_msgsnd()
653 err = security_msg_queue_msgsnd(msq, msg, msgflg); in do_msgsnd()
657 if (msgsz + msq->q_cbytes <= msq->q_qbytes && in do_msgsnd()
658 1 + msq->q_qnum <= msq->q_qbytes) { in do_msgsnd()
669 ss_add(msq, &s); in do_msgsnd()
671 if (!ipc_rcu_getref(msq)) { in do_msgsnd()
676 ipc_unlock_object(&msq->q_perm); in do_msgsnd()
681 ipc_lock_object(&msq->q_perm); in do_msgsnd()
683 ipc_rcu_putref(msq, ipc_rcu_free); in do_msgsnd()
685 if (!ipc_valid_object(&msq->q_perm)) { in do_msgsnd()
698 msq->q_lspid = task_tgid_vnr(current); in do_msgsnd()
699 msq->q_stime = get_seconds(); in do_msgsnd()
701 if (!pipelined_send(msq, msg)) { in do_msgsnd()
703 list_add_tail(&msg->m_list, &msq->q_messages); in do_msgsnd()
704 msq->q_cbytes += msgsz; in do_msgsnd()
705 msq->q_qnum++; in do_msgsnd()
714 ipc_unlock_object(&msq->q_perm); in do_msgsnd()
801 static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) in find_msg() argument
806 list_for_each_entry(msg, &msq->q_messages, m_list) { in find_msg()
808 !security_msg_queue_msgrcv(msq, msg, current, in find_msg()
829 struct msg_queue *msq; in do_msgrcv() local
848 msq = msq_obtain_object_check(ns, msqid); in do_msgrcv()
849 if (IS_ERR(msq)) { in do_msgrcv()
852 return PTR_ERR(msq); in do_msgrcv()
859 if (ipcperms(ns, &msq->q_perm, S_IRUGO)) in do_msgrcv()
862 ipc_lock_object(&msq->q_perm); in do_msgrcv()
865 if (!ipc_valid_object(&msq->q_perm)) { in do_msgrcv()
870 msg = find_msg(msq, &msgtyp, mode); in do_msgrcv()
890 msq->q_qnum--; in do_msgrcv()
891 msq->q_rtime = get_seconds(); in do_msgrcv()
892 msq->q_lrpid = task_tgid_vnr(current); in do_msgrcv()
893 msq->q_cbytes -= msg->m_ts; in do_msgrcv()
896 ss_wakeup(&msq->q_senders, 0); in do_msgrcv()
907 list_add_tail(&msr_d.r_list, &msq->q_receivers); in do_msgrcv()
918 ipc_unlock_object(&msq->q_perm); in do_msgrcv()
981 ipc_lock_object(&msq->q_perm); in do_msgrcv()
996 ipc_unlock_object(&msq->q_perm); in do_msgrcv()
1000 ipc_unlock_object(&msq->q_perm); in do_msgrcv()
1044 struct msg_queue *msq = it; in sysvipc_msg_proc_show() local
1048 msq->q_perm.key, in sysvipc_msg_proc_show()
1049 msq->q_perm.id, in sysvipc_msg_proc_show()
1050 msq->q_perm.mode, in sysvipc_msg_proc_show()
1051 msq->q_cbytes, in sysvipc_msg_proc_show()
1052 msq->q_qnum, in sysvipc_msg_proc_show()
1053 msq->q_lspid, in sysvipc_msg_proc_show()
1054 msq->q_lrpid, in sysvipc_msg_proc_show()
1055 from_kuid_munged(user_ns, msq->q_perm.uid), in sysvipc_msg_proc_show()
1056 from_kgid_munged(user_ns, msq->q_perm.gid), in sysvipc_msg_proc_show()
1057 from_kuid_munged(user_ns, msq->q_perm.cuid), in sysvipc_msg_proc_show()
1058 from_kgid_munged(user_ns, msq->q_perm.cgid), in sysvipc_msg_proc_show()
1059 msq->q_stime, in sysvipc_msg_proc_show()
1060 msq->q_rtime, in sysvipc_msg_proc_show()
1061 msq->q_ctime); in sysvipc_msg_proc_show()