diff -urN 2.2.18pre9/fs/buffer.c IO-wait/fs/buffer.c --- 2.2.18pre9/fs/buffer.c Tue Sep 5 02:28:47 2000 +++ IO-wait/fs/buffer.c Sun Sep 17 03:49:10 2000 @@ -143,13 +143,13 @@ bh->b_count++; wait.task = tsk; add_wait_queue(&bh->b_wait, &wait); -repeat: - tsk->state = TASK_UNINTERRUPTIBLE; - run_task_queue(&tq_disk); - if (buffer_locked(bh)) { + do { + set_current_state(TASK_UNINTERRUPTIBLE); + run_task_queue(&tq_disk); + if (!buffer_locked(bh)) + break; schedule(); - goto repeat; - } + } while (buffer_locked(bh)); tsk->state = TASK_RUNNING; remove_wait_queue(&bh->b_wait, &wait); bh->b_count--; diff -urN 2.2.18pre9/mm/filemap.c IO-wait/mm/filemap.c --- 2.2.18pre9/mm/filemap.c Sun Sep 17 01:20:44 2000 +++ IO-wait/mm/filemap.c Sun Sep 17 03:49:28 2000 @@ -357,13 +357,13 @@ wait.task = tsk; add_wait_queue(&page->wait, &wait); -repeat: - tsk->state = TASK_UNINTERRUPTIBLE; - sync_page(page); - if (PageLocked(page)) { + do { + set_current_state(TASK_UNINTERRUPTIBLE); + sync_page(page); + if (!PageLocked(page)) + break; schedule(); - goto repeat; - } + } while (PageLocked(page)); tsk->state = TASK_RUNNING; remove_wait_queue(&page->wait, &wait); }