The patch titled Subject: ipc/sem: do not call wake_sem_queue_do() prematurely has been added to the -mm tree. Its filename is ipc-sem-do-not-call-wake_sem_queue_do-prematurely.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/ipc-sem-do-not-call-wake_sem_queue_do-prematurely.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/ipc-sem-do-not-call-wake_sem_queue_do-prematurely.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Davidlohr Bueso <dave@xxxxxxxxxxxx> Subject: ipc/sem: do not call wake_sem_queue_do() prematurely ... as this call should obviously be paired with its _prepare() counterpart. At least whenever possible, as there is no harm in calling it bogusly as we do now in a few places. Immediate error semop(2) paths that are far from ever having the task block can be simplified and avoid a few unnecessary loads on their way out of the call as it is not deeply nested. Link: http://lkml.kernel.org/r/1474225896-10066-2-git-send-email-dave@xxxxxxxxxxxx Signed-off-by: Davidlohr Bueso <dbueso@xxxxxxx> Cc: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- ipc/sem.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff -puN ipc/sem.c~ipc-sem-do-not-call-wake_sem_queue_do-prematurely ipc/sem.c --- a/ipc/sem.c~ipc-sem-do-not-call-wake_sem_queue_do-prematurely +++ a/ipc/sem.c @@ -1904,16 +1904,22 @@ SYSCALL_DEFINE4(semtimedop, int, semid, } error = -EFBIG; - if (max >= sma->sem_nsems) - goto out_rcu_wakeup; + if (max >= sma->sem_nsems) { + rcu_read_unlock(); + goto out_free; + } error = -EACCES; - if (ipcperms(ns, &sma->sem_perm, alter ? S_IWUGO : S_IRUGO)) - goto out_rcu_wakeup; + if (ipcperms(ns, &sma->sem_perm, alter ? S_IWUGO : S_IRUGO)) { + rcu_read_unlock(); + goto out_free; + } error = security_sem_semop(sma, sops, nsops, alter); - if (error) - goto out_rcu_wakeup; + if (error) { + rcu_read_unlock(); + goto out_free; + } error = -EIDRM; locknum = sem_lock(sma, sops, nsops); @@ -2056,7 +2062,6 @@ sleep_again: out_unlock_free: sem_unlock(sma, locknum); -out_rcu_wakeup: rcu_read_unlock(); wake_up_sem_queue_do(&tasks); out_free: _ Patches currently in -mm which might be from dave@xxxxxxxxxxxx are ipc-sem-do-not-call-wake_sem_queue_do-prematurely.patch ipc-sem-rework-task-wakeups.patch ipc-sem-optimize-perform_atomic_semop.patch ipc-sem-explicitly-inline-check_restart.patch ipc-sem-use-proper-list-api-for-pending_list-wakeups.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html