diff -urNp --exclude CVS --exclude BitKeeper --exclude {arch} --exclude .arch-ids x-ref/drivers/block/ll_rw_blk.c x/drivers/block/ll_rw_blk.c --- x-ref/drivers/block/ll_rw_blk.c 2003-10-17 21:37:20.000000000 +0200 +++ x/drivers/block/ll_rw_blk.c 2003-10-17 21:38:14.000000000 +0200 @@ -1301,7 +1301,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); if (block_dump) printk(KERN_DEBUG "%s: %s block %lu/%u on %s\n", current->comm, rw == WRITE ? "WRITE" : "READ", bh->b_rsector, count, kdevname(bh->b_rdev)); diff -urNp --exclude CVS --exclude BitKeeper --exclude {arch} --exclude .arch-ids x-ref/mm/filemap.c x/mm/filemap.c --- x-ref/mm/filemap.c 2003-10-17 21:37:18.000000000 +0200 +++ x/mm/filemap.c 2003-10-17 21:37:22.000000000 +0200 @@ -800,7 +800,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 --exclude {arch} --exclude .arch-ids x-ref/mm/swapfile.c x/mm/swapfile.c --- x-ref/mm/swapfile.c 2003-10-17 21:37:18.000000000 +0200 +++ x/mm/swapfile.c 2003-10-17 21:37:22.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;