This code is generating false warnings when called from __block_prepare_write(). It is legal to wait on a zero-ref buffer when its page is locked. The page lock keeps try_to_free_buffers() away. 25-akpm/fs/buffer.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) diff -puN fs/buffer.c~wait_on_buffer-debug-fix fs/buffer.c --- 25/fs/buffer.c~wait_on_buffer-debug-fix Wed Apr 2 16:12:02 2003 +++ 25-akpm/fs/buffer.c Wed Apr 2 16:12:02 2003 @@ -123,7 +123,8 @@ void __wait_on_buffer(struct buffer_head wait_queue_head_t *wqh = bh_waitq_head(bh); DEFINE_WAIT(wait); - if (atomic_read(&bh->b_count) == 0) + if (atomic_read(&bh->b_count) == 0 && + (!bh->b_page || !PageLocked(bh->b_page))) buffer_error(); do { _