@@ -761,16 +761,18 @@ repeat:
wqh = bit_waitqueue(&bh->b_state, BH_Unshadow);
JBUFFER_TRACE(jh, "on shadow: sleep");
- jbd_unlock_bh_state(bh);
/* commit wakes up all shadow buffers after IO */
- for ( ; ; ) {
- prepare_to_wait(wqh, &wait.wait,
- TASK_UNINTERRUPTIBLE);
+ do {
if (jh->b_jlist != BJ_Shadow)
break;
+ prepare_to_wait(wqh, &wait.wait,
+ TASK_UNINTERRUPTIBLE);
+ jbd_unlock_bh_state(bh);
schedule();
- }
- finish_wait(wqh, &wait.wait);
+ finish_wait(wqh, &wait.wait);
+ jbd_lock_bh_state(bh);
+ } while (1);
+ jbd_unlock_bh_state(bh);
goto repeat;
}