summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Brown <zach.brown@oracle.com>2005-09-17 02:28:09 (GMT)
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-17 18:50:02 (GMT)
commita464adeb7e8f1cd65ca911e20a7c02e452dc2c17 (patch)
treef55ea0606247dd2fef36905c9ae817060cfae149
parent8ac2120d90273c590cf7662f03d103519101685b (diff)
downloadlinux-3.10-a464adeb7e8f1cd65ca911e20a7c02e452dc2c17.zip
linux-3.10-a464adeb7e8f1cd65ca911e20a7c02e452dc2c17.tar.gz
linux-3.10-a464adeb7e8f1cd65ca911e20a7c02e452dc2c17.tar.bz2
[PATCH] Add smp_mb__after_clear_bit() to unlock_kiocb()
Add smp_mb__after_clear_bit() to unlock_kiocb() AIO's use of wait_on_bit_lock()/wake_up_bit() forgot to add a barrier between clearing its lock bit and calling wake_up_bit() so wake_up_bit()'s unlocked waitqueue_active() can race. This puts AIO's use in line with the others and the comment above wake_up_bit(). Signed-off-by: Zach Brown <zach.brown@oracle.com> Acked-by: Benjamin LaHaise <bcrl@linux.intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--fs/aio.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/aio.c b/fs/aio.c
index 38f6268..0e11e31 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -562,6 +562,7 @@ static inline void lock_kiocb(struct kiocb *iocb)
static inline void unlock_kiocb(struct kiocb *iocb)
{
kiocbClearLocked(iocb);
+ smp_mb__after_clear_bit();
wake_up_bit(&iocb->ki_flags, KIF_LOCKED);
}