Commit a464adeb authored by Zach Brown's avatar Zach Brown Committed by Linus Torvalds

[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: default avatarZach Brown <zach.brown@oracle.com>
Acked-by: default avatarBenjamin LaHaise <bcrl@linux.intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 8ac2120d
...@@ -562,6 +562,7 @@ static inline void lock_kiocb(struct kiocb *iocb) ...@@ -562,6 +562,7 @@ static inline void lock_kiocb(struct kiocb *iocb)
static inline void unlock_kiocb(struct kiocb *iocb) static inline void unlock_kiocb(struct kiocb *iocb)
{ {
kiocbClearLocked(iocb); kiocbClearLocked(iocb);
smp_mb__after_clear_bit();
wake_up_bit(&iocb->ki_flags, KIF_LOCKED); wake_up_bit(&iocb->ki_flags, KIF_LOCKED);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment