void __wait_on_buffer(struct buffer_head * bh)
{
struct wait_queue wait = { current, NULL };
bh->b_count++;
add_wait_queue(&bh->b_wait, &wait);
repeat:
current->state = TASK_UNINTERRUPTIBLE;
if (buffer_locked(bh)) {
schedule();
goto repeat;
}
remove_wait_queue(&bh->b_wait, &wait);
bh->b_count--;
current->state = TASK_RUNNING;
}
Actually I guess it should do the following
Check if the buffer is locked, if so then wait some time and try it again.
But during unmounting my zip-drive the buffer_locked(bh) returns a
value != 0 , an schedule() call is made, but that never returns. Therefor
the goto repeat Statement is never executed.
Is anybody out there who could tell me why that happens (and maybe how to
fix it) ?
Greetings
Torsten