From: Chris Mason unlock_buffer() needs a barrier before the waitqueue_active() optimisation. 25-akpm/fs/buffer.c | 1 + 1 files changed, 1 insertion(+) diff -puN fs/buffer.c~unlock_buffer-barrier fs/buffer.c --- 25/fs/buffer.c~unlock_buffer-barrier Fri Jul 18 14:50:28 2003 +++ 25-akpm/fs/buffer.c Fri Jul 18 14:50:28 2003 @@ -91,6 +91,7 @@ void wake_up_buffer(struct buffer_head * { wait_queue_head_t *wq = bh_waitq_head(bh); + smp_mb(); if (waitqueue_active(wq)) wake_up_all(wq); } _