View Incident:
http://co-op.engr.sgi.com/BugWorks/code/bwxquery.cgi?search=Search&wlong=1&view_type=Bug&wi=800850
Status : open Priority : 2
Assigned Engineer : lord Submitter : dxm
*Modified User : lord *Modified User Domain : sgi.com
*Description :
Enabling CONFIG_HIGHMEM4GB on bruce (a 1400), then
running QA trips the following BUG() in QA 001:
kernel BUG at highmem.c:231!
Entering kdb (0xf6eec000) on processor 0 Panic: invalid operand
due to panic @ 0xc013077b
eax = 0x0000001d ebx = 0xfe268000 ecx = 0xc02b406c edx = 0x00000028
esi = 0x00000000 edi = 0xc2055790 esp = 0xf6eedda0 eip = 0xc013077b
ebp = 0xf6eeddb4 ss = 0x00000018 cs = 0x00000010 eflags = 0x00010246
.....
==========================
ADDITIONAL INFORMATION (ADD)
From: lord@xxxxxxx (BugWorks)
Date: Sep 06 2000 09:45:10AM
==========================
In theory I though I had dealt with this, in the latest code
base, when we ask for a metadata pagebuf, we pass the MAPPABLE
flag into pagebuf, this translates into it asking for a page
which is not highmem by controlling the gfp_mask passed into
alloc_pages. There must be some way we are getting around
this, possibly there are some calls getting through without
this flag, but I do not see it right now. Also this particular
call is not the creation of an inode cluster - i.e. we have used
this location as an inode cluster before, if we are recreating
the page due to flush activity then it looks like the gfp_mask
is not a guarantee - which I doubt.
Try with this code in page_buf.c and see if this goes off first:
===========================================================================
Index: linux/fs/pagebuf/page_buf.c
===========================================================================
--- /usr/tmp/TmpDir.15256-0/linux/fs/pagebuf/page_buf.c_1.30 Wed Sep 6
11:44:53 2000
+++ linux/fs/pagebuf/page_buf.c Wed Sep 6 11:43:33 2000
@@ -573,6 +573,11 @@
all_mapped = 0;
continue;
}
+
+if ((flags & PBF_MAPPABLE) && (page_address(cached_page) == NULL)) {
+ printk("Unexpected highmem page 0x%p\n, cached_page);
+ BUG();
+}
}
cp = cached_page;
if (add_to_page_cache_unique(cp,
|