+
+ msg = ERR_PTR(-EAGAIN);
+ tmp = msq->q_messages.next;
+ while (tmp != &msq->q_messages) {
+ struct msg_msg *walk_msg;
+
+ walk_msg = list_entry(tmp, struct msg_msg, m_list);
+ if (testmsg(walk_msg, msgtyp, mode) &&
+ !security_msg_queue_msgrcv(msq, walk_msg, current,
+ msgtyp, mode)) {
+
+ msg = walk_msg;
+ if (mode == SEARCH_LESSEQUAL &&
+ walk_msg->m_type != 1) {
+ msg = walk_msg;
+ msgtyp = walk_msg->m_type - 1;
+ } else {
+ msg = walk_msg;
+ break;
+ }
+ }
+ tmp = tmp->next;