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 {

_