IMHO this was a missing statement in fs/buffer.c . See pre-patch-2.0.31-6
[...]
@@ -1527,8 +1551,10 @@
#endif
ll_rw_block(WRITE, 1, &bh);
bh->b_count--;
+ next->b_count--;
}
}
+ run_task_queue(&tq_disk);
#ifdef DEBUG
if (ncount) printk("sync_old_buffers: %d dirty buffers not on dirty list\n", ncount);
printk("Wrote %d/%d buffers\n", nwritten, ndirty);
@@ -1633,6 +1659,7 @@
[...]
The run_task_queue() seems to be important one. Therefore the problem should
be solved ... I hope.
Werner