]> err.no Git - linux-2.6/commit
[PATCH] aio: lock around kiocbTryKick()
authorZach Brown <zach.brown@oracle.com>
Fri, 30 Sep 2005 18:58:54 +0000 (11:58 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 30 Sep 2005 19:41:17 +0000 (12:41 -0700)
commit998765e5588b197737d457e16f72832d8036190f
tree3a87877bffebc776a7102ab1b5f247a45d1c4ab3
parent6e3254c4e2927c117044a02acf5f5b56e1373053
[PATCH] aio: lock around kiocbTryKick()

Only one of the run or kick path is supposed to put an iocb on the run
list.  If both of them do it than one of them can end up referencing a
freed iocb.  The kick patch could set the Kicked bit before acquiring the
ctx_lock and putting the iocb on the run list.  The run path, while holding
the ctx_lock, could see this partial kick and mistake it for a kick that
was deferred while it was doing work with the run_list NULLed out.  It
would then race with the kick thread to add the iocb to the run list.

This patch moves the kick setting under the ctx_lock so that only one of
the kick or run path queues the iocb on the run list, as intended.

Signed-off-by: Zach Brown <zach.brown@oracle.com>
Signed-off-by: Benjamin LaHaise <bcrl@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/aio.c