diff -urNp --exclude CVS --exclude BitKeeper x-ref/drivers/block/ll_rw_blk.c x/drivers/block/ll_rw_blk.c --- x-ref/drivers/block/ll_rw_blk.c 2003-07-17 05:23:59.000000000 +0200 +++ x/drivers/block/ll_rw_blk.c 2003-07-17 05:29:00.000000000 +0200 @@ -1263,7 +1263,7 @@ void __submit_bh(int rw, struct buffer_h /* fix race condition with wait_on_buffer() */ smp_mb(); /* spin_unlock may have inclusive semantics */ if (waitqueue_active(&bh->b_wait)) - wake_up(&bh->b_wait); + run_task_queue(&tq_disk); put_bh(bh); switch (rw) { diff -urNp --exclude CVS --exclude BitKeeper x-ref/mm/filemap.c x/mm/filemap.c --- x-ref/mm/filemap.c 2003-07-17 05:23:58.000000000 +0200 +++ x/mm/filemap.c 2003-07-17 05:29:35.000000000 +0200 @@ -788,7 +788,7 @@ void wakeup_page_waiters(struct page * p head = page_waitqueue(page); if (waitqueue_active(head)) - wake_up(head); + sync_page(page); } /* diff -urNp --exclude CVS --exclude BitKeeper x-ref/mm/swapfile.c x/mm/swapfile.c --- x-ref/mm/swapfile.c 2003-07-17 05:23:58.000000000 +0200 +++ x/mm/swapfile.c 2003-07-17 05:24:00.000000000 +0200 @@ -997,8 +997,10 @@ asmlinkage long sys_swapon(const char * goto bad_swap; } + get_page(virt_to_page(swap_header)); lock_page(virt_to_page(swap_header)); rw_swap_page_nolock(READ, SWP_ENTRY(type,0), (char *) swap_header); + put_page(virt_to_page(swap_header)); if (!memcmp("SWAP-SPACE",swap_header->magic.magic,10)) swap_header_version = 1;