Akinobu Mita <[email protected]> wrote:
>
> This patch converts the combination of hlist_del(A) and hlist_add_head(A, B)
> to hlist_move_head(A, B).
>
> ...
>
> --- 2.6-git.orig/fs/nfsd/nfscache.c
> +++ 2.6-git/fs/nfsd/nfscache.c
> @@ -113,8 +113,7 @@ lru_put_end(struct svc_cacherep *rp)
> static void
> hash_refile(struct svc_cacherep *rp)
> {
> - hlist_del_init(&rp->c_hash);
> - hlist_add_head(&rp->c_hash, hash_list + REQHASH(rp->c_xid));
> + hlist_move_head(&rp->c_hash, hash_list + REQHASH(rp->c_xid));
> }
Just got an oops here.
BUG: unable to handle kernel NULL pointer dereference at virtual address 00000000
printing eip:
f8a06fde
*pde = 00000000
Oops: 0002 [#1]
SMP
last sysfs file: /devices/pci0000:00/0000:00:1f.3/i2c-0/0-0050/name
Modules linked in: usblp pcspkr nfsd exportfs lockd sunrpc parport_pc lp parport autofs video button battery ac
CPU: 0
EIP: 0060:[<f8a06fde>] Not tainted VLI
EFLAGS: 00010246 (2.6.17-rc1-mm2 #88)
EIP is at hash_refile+0x20/0x3a [nfsd]
eax: 00000000 ebx: f7c07e1c ecx: f77b3180 edx: 00000000
esi: 00000006 edi: f8a26d38 ebp: f73eff08 esp: f73eff04
ds: 007b es: 007b ss: 0068
Process nfsd (pid: 2545, threadinfo=f73ef000 task=f7201000)
Stack: <0>f77b3180 f73eff3c f8a07146 f7c19a00 f7c19a40 00000002 00000008 00000003
00000006 c6a1f621 00000000 f7c19a00 f7c19a00 f8a26d38 f73eff58 f89ff5b0
f8a26b40 f05a7018 f7c19a64 f7c19a00 f8a26d38 f73effa8 f89a740f 00000075
Call Trace:
<c0103379> show_stack_log_lvl+0x7d/0x99 <c01034fb> show_registers+0x127/0x182
<c01036e6> die+0x11a/0x1ea <c01121b6> do_page_fault+0x31c/0x607
<c010304f> error_code+0x4f/0x54 <f8a07146> nfsd_cache_lookup+0x14e/0x2d2 [nfsd]
<f89ff5b0> nfsd_dispatch+0x2a/0x1b2 [nfsd] <f89a740f> svc_process+0x490/0x5f5 [sunrpc]
<f89ff3e7> nfsd+0x174/0x313 [nfsd] <c0100e8d> kernel_thread_helper+0x5/0xb
Code: ec a2 f8 89 0a 89 51 04 5b 5d c3 55 89 c1 8b 15 84 ec a2 f8 89 e5 53 0f b6 40 27 33 41 24 83 e0 3f 8d 1c 82 8b 51 04 8b 01 85 c0 <89> 02 74 03 89 50 04 8b 03 85 c0 89 01 74 03 89 48 04 89 0b 89
EIP: [<f8a06fde>] hash_refile+0x20/0x3a [nfsd] SS:ESP 0068:f73eff04
I don't think you've made an equivalent transformation here.
hlist_del_init() won't call __hlist_del() if !n->pprev.
But if that was the problem, I'd have expected to see an access address of
0x00000004, not 0x00000000. Perhaps n->next is NULL as well.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]