Bug in write request flushing !!!

Pavel Krauz (kra@elanor.cz)
Tue, 1 Jul 1997 16:36:07 +0200 (MET DST)


Hi all

I'm currently working on small extension to monitor kernel activities.
I noticed that write disk requests successfully reach to the device driver
request queue but if there isn't generated any read request from the time
the write requests was put into queue, they stay in the queue and device
driver isn't kicked to process them. On my machine I discovered that write
requests could stay in device request queue forever, until some read request
or sync is made - Ohhh, Ahhh. These write requests are made by bdflush and
the sys_bdflush syscall. There is missing the kick to the device driver.

Here is a one line patch which solves this bug for 2.0.30. Probably similar
patch should be applied to 2.1.43 too.

Please reply personally

with regards
Pavel Krauz <kra@elanor.cz>

--- fs/buffer.c.bak Tue Jul 1 15:29:16 1997
+++ fs/buffer.c Tue Jul 1 15:31:36 1997
@@ -1529,6 +1529,7 @@
bh->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);