The patch titled AIO completion signal notification fixes and cleanups has been added to the -mm tree. Its filename is aio-completion-signal-notification-fixes-and-cleanups.patch *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: AIO completion signal notification fixes and cleanups From: u=Sébastien Dugué <sebastien.dugue@xxxxxxxx> Clean up the notification path and fixes a possible release on a task ref that was not taken in aio_setup_sigevent(). Signed-off-by: Sébastien Dugué <sebastien.dugue@xxxxxxxx> Cc: Laurent Vivier <laurent.vivier@xxxxxxxx> Cc: Bharata B Rao <bharata@xxxxxxxxxx> Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx> Cc: Suparna Bhattacharya <suparna@xxxxxxxxxx> Cc: Zach Brown <zach.brown@xxxxxxxxxx> Cc: Oleg Nesterov <oleg@xxxxxxxxxx> Cc: Badari Pulavarty <pbadari@xxxxxxxxxx> Cc: Benjamin LaHaise <bcrl@xxxxxxxxxxxxxxx> Cc: Jean Pierre Dion <jean-pierre.dion@xxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/aio.c | 15 ++++++++++----- 1 files changed, 10 insertions(+), 5 deletions(-) diff -puN fs/aio.c~aio-completion-signal-notification-fixes-and-cleanups fs/aio.c --- a/fs/aio.c~aio-completion-signal-notification-fixes-and-cleanups +++ a/fs/aio.c @@ -468,8 +468,7 @@ static inline void really_put_req(struct kfree(req->ki_iovec); /* Release task ref */ - if (req->ki_notify.notify == SIGEV_THREAD_ID || - req->ki_notify.notify == SIGEV_SIGNAL) + if (req->ki_notify.notify != SIGEV_NONE) put_task_struct(req->ki_notify.target); kmem_cache_free(kiocb_cachep, req); @@ -969,8 +968,14 @@ static long aio_setup_sigevent(struct ai rcu_read_lock(); target = sigevent_find_task(&event); - if (unlikely(!target)) + if (unlikely(!target)) { + /* + * Revert notify to SIGEV_NONE so that really_put_req() + * knows that no ref has been taken on a task. + */ + notify->notify = SIGEV_NONE; goto out_unlock; + } /* * At this point, we know that notify is either SIGEV_SIGNAL or @@ -995,7 +1000,7 @@ static long aio_setup_sigevent(struct ai return 0; out_unlock: - read_unlock(&tasklist_lock); + rcu_read_unlock(); return -EINVAL; } @@ -1691,7 +1696,7 @@ int fastcall io_submit_one(struct kioctx (struct sigevent __user *)(unsigned long) iocb->aio_sigeventp); if (ret) - goto out_put_req; + goto out_sigqfree; } ret = aio_setup_iocb(req); _ Patches currently in -mm which might be from sebastien.dugue@xxxxxxxx are rework-compat_sys_io_submit.patch fix-aioh-includes.patch fix-access_ok-checks.patch make-good_sigevent-non-static.patch make-good_sigevent-non-static-fix.patch make-__sigqueue_free-and.patch aio-completion-signal-notification.patch aio-completion-signal-notification-fix.patch aio-completion-signal-notification-fixes-and-cleanups.patch add-listio-syscall-support.patch aio-completion-signal-notification-small-cleanup.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