--- 2.4.19pre8aa4/fs/buffer.c.~1~ Fri May 24 04:46:11 2002 +++ 2.4.19pre8aa4/fs/buffer.c Fri May 24 05:17:57 2002 @@ -2692,6 +2692,7 @@ static int sync_page_buffers(struct buff int try_to_free_buffers(struct page * page, unsigned int gfp_mask) { struct buffer_head * tmp, * bh = page->buffers; + int was_uptodate = 1; cleaned_buffers_try_again: spin_lock(&lru_list_lock); @@ -2715,6 +2716,8 @@ cleaned_buffers_try_again: if (p->b_dev == B_FREE) BUG(); + if (!buffer_uptodate(p)) + was_uptodate = 0; remove_inode_queue(p); __remove_from_queues(p); __put_unused_buffer_head(p); @@ -2724,6 +2727,12 @@ cleaned_buffers_try_again: /* Wake up anyone waiting for buffer heads */ wake_up(&buffer_wait); + /* + * Make sure we don't read buffers again when they are reattached. + */ + if (was_uptodate) + SetPageUptodate(page); + /* And free the page */ page->buffers = NULL; page_cache_release(page);