Hi,
Under 2.2.17pre9, a process trying to free memory itself will queue IO
request(s) in case it finds a page which contain dirty buffers.
The problem is that this process will block in case the request queue is
full (high IO workloads), and wait until it finds a free request on the
queue.
This silly patch avoids that by making ll_rw_block() ignore the IO if the
request queue is full, causing the process to search for more freeable
pages instead blocking.
This patch does not affect stability with the huge MAP_SHARED case.
(note that I've tested this patch together with Andrea's
balance_dirty_state patch which causes kswapd to be waken up correctly.
This means if you try to run it with stock 2.2.17pre9 the huge MAP_SHARED
case may fail).
--- fs/buffer.c.orig Sat Jul 1 20:49:19 2000
+++ fs/buffer.c Sat Jul 1 20:28:36 2000
@@ -1517,7 +1517,7 @@
if (wait)
__wait_on_buffer(p);
} else if (buffer_dirty(p))
- ll_rw_block(WRITE, 1, &p);
+ ll_rw_block(WRITEA, 1, &p);
} while (tmp != bh);
do {
(sorry for not compressing it)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Fri Jul 07 2000 - 21:00:09 EST