diff options
author | Chris Mason <chris.mason@fusionio.com> | 2013-09-21 10:44:55 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@fusionio.com> | 2013-09-21 10:44:55 -0400 |
commit | 07f0e62e7f2533918f28e780ab3cfeea1a63145d (patch) | |
tree | cb64b7cf275f1a5fd7f121f4f434e77dc6769e37 /ipc/msg.c | |
parent | d7396f07358a7c6e22c238d36d1d85f9d652a414 (diff) | |
parent | 6e4664525b1db28f8c4e1130957f70a94c19213e (diff) |
Merge tag 'v3.11' into for-linus
Linux 3.11
Diffstat (limited to 'ipc/msg.c')
-rw-r--r-- | ipc/msg.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/ipc/msg.c b/ipc/msg.c index bd60d7e159e8..9f29d9e89bac 100644 --- a/ipc/msg.c +++ b/ipc/msg.c @@ -839,7 +839,7 @@ static inline void free_copy(struct msg_msg *copy) static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) { - struct msg_msg *msg; + struct msg_msg *msg, *found = NULL; long count = 0; list_for_each_entry(msg, &msq->q_messages, m_list) { @@ -848,6 +848,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) *msgtyp, mode)) { if (mode == SEARCH_LESSEQUAL && msg->m_type != 1) { *msgtyp = msg->m_type - 1; + found = msg; } else if (mode == SEARCH_NUMBER) { if (*msgtyp == count) return msg; @@ -857,7 +858,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) } } - return ERR_PTR(-EAGAIN); + return found ?: ERR_PTR(-EAGAIN); } long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, int msgflg, |