Re: System hangs when reading or writing many or large files

From: Juan J. Quintela (
Date: Wed Apr 26 2000 - 09:01:24 EST


>>> EIP; c0138799 <__free_pages_ok+49/324> <=====
ralf> Trace; c021a8c8 <tvecs+2e40/14ef8>
ralf> Trace; c021ab55 <tvecs+30cd/14ef8>
ralf> Trace; c012dc2b <shrink_mmap+457/5c8>
ralf> Trace; c013823b <do_try_to_free_pages+33/98>
ralf> Trace; c0138333 <kswapd+93/1b0>
ralf> Trace; c010907b <kernel_thread+23/30>

      I get here similar Oops. They happened after a BUG in
      page_alloc.c. Is that your case also? I am very interested in
      knowing the answer. Are you using a pre6-x, x<6? In the case
      that your Oops are very easily reproducible, could you try this
      small patch and tell me if it solves the problem. It solves the
      problem here, (yes I know that it is not the proper solution,
      but I am interested in knowing if it solves your problems also).

Thanks, Juan.

diff -u -urN --exclude=CVS --exclude=*~ --exclude=.#* 2.3.99-pre6-5/mm/filemap.c 2.3.99-pre6-boot/mm/filemap.c
--- 2.3.99-pre6-5/mm/filemap.c Tue Apr 4 01:18:56 2000
+++ 2.3.99-pre6-boot/mm/filemap.c Sun Apr 23 17:48:42 2000
@@ -467,8 +467,9 @@
         struct page *alias;
         unsigned long flags;
+ LockPage(page);
         flags = page->flags & ~((1 << PG_uptodate) | (1 << PG_error) | (1 << PG_dirty));
- page->flags = flags | (1 << PG_locked) | (1 << PG_referenced);
+ page->flags = flags | (1 << PG_referenced);
         page->index = offset;
         add_page_to_inode_queue(mapping, page);

In theory, practice and theory are the same, but in practice they 
are different -- Larry McVoy

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to Please read the FAQ at

This archive was generated by hypermail 2b29 : Sun Apr 30 2000 - 21:00:11 EST