=========================================================================== Index: linux/fs/buffer.c =========================================================================== --- /usr/tmp/TmpDir.12499-0/linux/fs/buffer.c_1.96 Tue Dec 11 13:33:26 2001 +++ linux/fs/buffer.c Tue Dec 11 13:31:17 2001 @@ -224,6 +224,7 @@ unlock_buffer(bh); put_bh(bh); } +EXPORT_SYMBOL(end_buffer_io_sync); /* * The buffers have been marked clean and locked. Just submit the dang @@ -2538,7 +2539,7 @@ /* * Can the buffer be thrown out? */ -#define BUFFER_BUSY_BITS ((1<b_count) | ((bh)->b_state & BUFFER_BUSY_BITS)) /* =========================================================================== Index: linux/fs/pagebuf/page_buf_io.c =========================================================================== --- /usr/tmp/TmpDir.12499-0/linux/fs/pagebuf/page_buf_io.c_1.102 Tue Dec 11 13:33:26 2001 +++ linux/fs/pagebuf/page_buf_io.c Tue Dec 11 10:22:58 2001 @@ -1337,10 +1337,12 @@ head = bh; do { lock_buffer(bh); - set_buffer_async_io(bh); - set_bit(BH_Uptodate, &bh->b_state); - clear_bit(BH_Dirty, &bh->b_state); clear_bit(BH_Delay, &bh->b_state); + if (atomic_set_buffer_clean(bh)) { + get_bh(bh); + bh->b_end_io = end_buffer_io_sync; + refile_buffer(bh); + } bh = bh->b_this_page; } while (bh != head); @@ -1350,6 +1352,7 @@ } while (bh != head); SetPageUptodate(page); + UnlockPage(page); page_cache_release(page); }