Re: [2.5.20-BUG] 3c59x + highmem + acpi + nfs -> kernel panic

Trond Myklebust (trond.myklebust@fys.uio.no)
03 Jun 2002 13:32:56 +0200


>>>>> " " == Andrew Morton <akpm@zip.com.au> writes:

> Anton Altaparmakov wrote:
>>
>> Hi,
>>
>> Just got this (reproducible) kernel panic (BUG in
>> asm-i386/highmem.h::kmap_atomic(), the if
>> (!pte_none(*(kmap_pte-idx))) BUG(); triggers). It happens every
>> time I boot and on an NFS mount do a ./configure.

> Dunno about this one. I'm seeing some (totally different) NFS
> funnies at present - pagecache data on the client is coming up
> zeroes under memory pressure. Trond mentioned that NFS
> recently went to kmap_atomic, so there is a common thread
> there.

Following an off-list chat with David, I believe that the appended
patch should fix the problem reported by Anton. It replaces the
obsolete km_type "KM_SKB_DATA" with an entry that the RPC layer can
use in the socket bottom half.

I'm less sure whether or not it will fix your problem, Andrew, but I'm
hoping you'll find time to give it a brief test ;-)...

Cheers,
Trond

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# ChangeSet 1.413 -> 1.414
# include/asm-ppc/kmap_types.h 1.7 -> 1.8
# include/asm-x86_64/kmap_types.h 1.1 -> 1.2
# include/asm-sparc/kmap_types.h 1.5 -> 1.6
# net/sunrpc/xdr.c 1.7 -> 1.8
# include/asm-i386/kmap_types.h 1.6 -> 1.7
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/06/03 trond.myklebust@fys.uio.no 1.414
# include/asm-*/kmap_types.h:
# Replace the obsolete km_type KM_SKB_DATA with KM_SKB_SUNRPC_DATA.
#
# net/sunrpc/xdr.c:
# Replace KM_USER0 with KM_SKB_SUNRPC_DATA in xdr_partial_copy_from_skb
# --------------------------------------------
#
diff -Nru a/include/asm-i386/kmap_types.h b/include/asm-i386/kmap_types.h
--- a/include/asm-i386/kmap_types.h Tue Feb 19 16:27:39 2002
+++ b/include/asm-i386/kmap_types.h Mon Jun 3 12:39:12 2002
@@ -11,7 +11,7 @@

enum km_type {
D(0) KM_BOUNCE_READ,
-D(1) KM_SKB_DATA,
+D(1) KM_SKB_SUNRPC_DATA,
D(2) KM_SKB_DATA_SOFTIRQ,
D(3) KM_USER0,
D(4) KM_USER1,
diff -Nru a/include/asm-ppc/kmap_types.h b/include/asm-ppc/kmap_types.h
--- a/include/asm-ppc/kmap_types.h Sat Mar 2 10:03:46 2002
+++ b/include/asm-ppc/kmap_types.h Mon Jun 3 12:39:12 2002
@@ -7,7 +7,7 @@

enum km_type {
KM_BOUNCE_READ,
- KM_SKB_DATA,
+ KM_SKB_SUNRPC_DATA,
KM_SKB_DATA_SOFTIRQ,
KM_USER0,
KM_USER1,
diff -Nru a/include/asm-sparc/kmap_types.h b/include/asm-sparc/kmap_types.h
--- a/include/asm-sparc/kmap_types.h Tue Feb 5 16:21:48 2002
+++ b/include/asm-sparc/kmap_types.h Mon Jun 3 12:39:12 2002
@@ -3,7 +3,7 @@

enum km_type {
KM_BOUNCE_READ,
- KM_SKB_DATA,
+ KM_SKB_SUNRPC_DATA,
KM_SKB_DATA_SOFTIRQ,
KM_USER0,
KM_USER1,
diff -Nru a/include/asm-x86_64/kmap_types.h b/include/asm-x86_64/kmap_types.h
--- a/include/asm-x86_64/kmap_types.h Thu Feb 7 15:27:25 2002
+++ b/include/asm-x86_64/kmap_types.h Mon Jun 3 12:39:12 2002
@@ -3,7 +3,7 @@

enum km_type {
KM_BOUNCE_READ,
- KM_SKB_DATA,
+ KM_SKB_SUNRPC_DATA,
KM_SKB_DATA_SOFTIRQ,
KM_USER0,
KM_USER1,
diff -Nru a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c
--- a/net/sunrpc/xdr.c Sat May 25 21:16:06 2002
+++ b/net/sunrpc/xdr.c Mon Jun 3 13:13:30 2002
@@ -290,7 +290,7 @@
char *kaddr;

len = PAGE_CACHE_SIZE;
- kaddr = kmap_atomic(*ppage, KM_USER0);
+ kaddr = kmap_atomic(*ppage, KM_SKB_SUNRPC_DATA);
if (base) {
len -= base;
if (pglen < len)
@@ -302,7 +302,7 @@
len = pglen;
ret = copy_actor(desc, kaddr, len);
}
- kunmap_atomic(kaddr, KM_USER0);
+ kunmap_atomic(kaddr, KM_SKB_SUNRPC_DATA);
if (ret != len || !desc->count)
return;
ppage++;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/