Kernels >= 1.3.78 : problems unmounting zip drive

Torsten Neumann (linux-kernel@infodrom.north.de)
Thu, 4 Apr 96 20:49 GMT+0100


Since the release of Kernel 1.3.78 (tested up to 1.3.83) I can't unmount my
zip-drive during shutdown. With Kernels Releases <= 1.3.77 I didn't have
any problems. All I found was the following :
The umount -a call in my reboot scripts leeds to the following
Kernel-Calls :
The function sys_umount is called. This one calls fsync_dev, therein is
a statement return sync_buffers(dev,1). sync_buffers then
called wait_on_buffer. ( During shutdown this will always executed for my
zip-drive, on a normal umount never ). And then comes code which I didn't
understand :

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