We don't trust bh->b_page across all filesystems. --- 25-akpm/fs/buffer.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletion(-) diff -puN fs/buffer.c~blk_run_page-sync_buffer-revert fs/buffer.c --- 25/fs/buffer.c~blk_run_page-sync_buffer-revert 2004-05-12 18:16:03.072229008 -0700 +++ 25-akpm/fs/buffer.c 2004-05-12 18:16:18.645861456 -0700 @@ -113,7 +113,12 @@ static int bh_wake_function(wait_queue_t static void sync_buffer(struct buffer_head *bh) { - blk_run_page(bh->b_page); + struct block_device *bd; + + smp_mb(); + bd = bh->b_bdev; + if (bd) + blk_run_address_space(bd->bd_inode->i_mapping); } void fastcall __lock_buffer(struct buffer_head *bh) _