Lines Matching refs:msg
3 * linux/ipc/msg.c
12 * /proc/sysvipc/msg support (c) 1999 Dragos Acostachioaie <dragos@iname.com>
27 #include <linux/msg.h>
138 * newque - Create a new msg queue
263 struct msg_msg *msg, *t;
274 list_for_each_entry_safe(msg, t, &msq->q_messages, m_list)
277 free_msg(msg);
605 case MSG_STAT: /* msqid is an index rather than a msg queue id */
790 static int testmsg(struct msg_msg *msg, long type, int mode)
797 if (msg->m_type <= type) {
802 if (msg->m_type == type) {
807 if (msg->m_type != type) {
815 static inline int pipelined_send(struct msg_queue *msq, struct msg_msg *msg, struct wake_q_head *wake_q)
821 if (testmsg(msg, msr->r_msgtype, msr->r_mode) &&
822 !security_msg_queue_msgrcv(&msq->q_perm, msg, msr->r_tsk, msr->r_msgtype, msr->r_mode)) {
824 if (msr->r_maxsize < msg->m_ts) {
836 smp_store_release(&msr->r_msg, msg);
848 struct msg_msg *msg;
862 msg = load_msg(mtext, msgsz);
863 if (IS_ERR(msg)) {
864 return PTR_ERR(msg);
867 msg->m_type = mtype;
868 msg->m_ts = msgsz;
893 err = security_msg_queue_msgsnd(&msq->q_perm, msg, msgflg);
940 if (!pipelined_send(msq, msg, &wake_q)) {
942 list_add_tail(&msg->m_list, &msq->q_messages);
950 msg = NULL;
957 if (msg != NULL) {
958 free_msg(msg);
1030 static long do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
1035 if (put_user(msg->m_type, &msgp->mtype)) {
1039 msgsz = (bufsz > msg->m_ts) ? msg->m_ts : bufsz;
1040 if (store_msg(msgp->mtext, msg, msgsz)) {
1084 struct msg_msg *msg, *found = NULL;
1087 list_for_each_entry(msg, &msq->q_messages, m_list)
1089 if (testmsg(msg, *msgtyp, mode) && !security_msg_queue_msgrcv(&msq->q_perm, msg, current, *msgtyp, mode)) {
1090 if (mode == SEARCH_LESSEQUAL && msg->m_type != 1) {
1091 *msgtyp = msg->m_type - 1;
1092 found = msg;
1095 return msg;
1098 return msg;
1113 struct msg_msg *msg, *copy = NULL;
1144 msg = ERR_PTR(-EACCES);
1153 msg = ERR_PTR(-EIDRM);
1157 msg = find_msg(msq, &msgtyp, mode);
1158 if (!IS_ERR(msg)) {
1163 if ((bufsz < msg->m_ts) && !(msgflg & MSG_NOERROR)) {
1164 msg = ERR_PTR(-E2BIG);
1172 msg = copy_msg(msg, copy);
1176 list_del(&msg->m_list);
1180 msq->q_cbytes -= msg->m_ts;
1181 atomic_sub(msg->m_ts, &ns->msg_bytes);
1190 msg = ERR_PTR(-ENOMSG);
1235 msg = READ_ONCE(msr_d.r_msg);
1236 if (msg != ERR_PTR(-EAGAIN)) {
1249 msg = READ_ONCE(msr_d.r_msg);
1250 if (msg != ERR_PTR(-EAGAIN)) {
1256 msg = ERR_PTR(-ERESTARTNOHAND);
1268 if (IS_ERR(msg)) {
1270 return PTR_ERR(msg);
1273 bufsz = msg_handler(buf, msg, bufsz);
1274 free_msg(msg);
1290 static long compat_do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
1295 if (put_user(msg->m_type, &msgp->mtype)) {
1299 msgsz = (bufsz > msg->m_ts) ? msg->m_ts : bufsz;
1300 if (store_msg(msgp->mtext, msg, msgsz)) {
1360 ipc_init_proc_interface("sysvipc/msg",