Messages in this thread | | | Date | Thu, 4 Apr 96 20:49 GMT+0100 | From | (Torsten Neumann) | Subject | Kernels >= 1.3.78 : problems unmounting zip drive |
| |
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
| |