Messages in this thread Patch in this message | | | Date | Thu, 07 Aug 1997 11:11:55 -0400 | From | Bill Hawes <> | Subject | Re: Getting nutt... |
| |
Philippe Strauss wrote: > > Ahem, still for this oops-o-matic kernel that I have..
One possible cause for your oopses would be two async IOs started on the same page. This should never happen, but if it did you would expect exactly the synptoms you report.
Could you try applying the attached patch to your oops-o-matic (TM) kernel and see if you can make an oops? If it triggers the tested conditions, a fix will be easy; otherwise I can rule out these cases.
Regards, Bill--- linux-2.0.31/fs/buffer.c.old Wed Aug 6 10:18:22 1997 +++ linux-2.0.31/fs/buffer.c Thu Aug 7 08:24:49 1997 @@ -1274,7 +1281,13 @@ unsigned long block; int *p, nr[PAGE_SIZE/512]; int i; + static int oopsed = 0; + if (test_bit(PG_locked, &page->flags)) { + printk("generic_readpage: page already locked!\n"); + if (!oopsed++) + *(int *) 0x12345678 = 0; + } page->count++; set_bit(PG_locked, &page->flags); set_bit(PG_free_after, &page->flags); --- linux-2.0.31/mm/page_alloc.c.old Wed Aug 6 10:18:25 1997 +++ linux-2.0.31/mm/page_alloc.c Thu Aug 7 08:24:32 1997 @@ -126,6 +126,13 @@ { if (!PageReserved(page) && atomic_dec_and_test(&page->count)) { unsigned long map_nr = page->map_nr; + static int oopsed = 0; + + if (test_bit(PG_locked, &page->flags)) { + printk("__free_page: page still locked!\n"); + if (!oopsed++) + *(int *) 0x12345678 = 0; + } delete_from_swap_cache(map_nr); free_pages_ok(map_nr, 0); } | |