[patch] LIST_POISON with rcu

Trond Myklebust (trond.myklebust@fys.uio.no)
Thu, 12 Jun 2003 08:15:37 -0700


>>>>> " " == Maneesh Soni <maneesh@in.ibm.com> writes:

> LIST_POISON will not work with RCU based lists as we depend on
> the fact the deleted list element can still point to the
> existing list.

Then you have a clear problem: you'll need some way of marking the
node as hashed or unhashed, other than testing those pointers.

> Trond, I am not sure if you are seeing the d_move() oops
> because of this. It will be nice if you can post the oops
> message also.

The d_move Oops is not a direct consequence of the hlist_del_rcu
poisoning since d_drop now uses hlist_del_rcu_init. The effect is
the same though, as you can see below.

printing eip:
c019221c
*pde = 00000000
Oops: 0002 [#1]
CPU: 0
EIP: 0060:[<c019221c>] Not tainted
EFLAGS: 00010246
EIP is at d_move+0x1e8/0x8b2
eax: 00000000 ebx: de8935c0 ecx: de893648 edx: 00000000
esi: de54129c edi: d6414a80 ebp: d4b01e24 esp: d4b01de8
ds: 007b es: 007b ss: 0068
Process mv (pid: 1496, threadinfo=d4b00000 task=dacd1e80)
Stack: 14380000 3ee795f2 d9780000 3ee795f2 d9780000 d4b01e10 c01531b3 d6414b3c
00000000 ffffffff d4b01e24 0005aad1 d4b01e40 de54129c d6414a80 d4b01e94
e1a7f254 de8935c0 de54129c d6414a80 d4b01e78 00000002 73666e2e 32313030
Call Trace:
[<c01531b3>] invalidate_inode_pages+0x21/0x26
[<e1a7f254>] nfs_sillyrename+0x198/0x214 [nfs]
[<e1a80585>] nfs_rename+0x41d/0x59c [nfs]
[<c0185c86>] vfs_rename_other+0xd6/0xda
[<c0185dcc>] vfs_rename+0x142/0x3a8
[<c01861db>] sys_rename+0x1a9/0x1d6
[<c017d0d7>] sys_lstat64+0x35/0x38
[<c010bdd7>] syscall_call+0x7/0xb

Code: 89 02 74 03 89 50 04 c7 83 88 00 00 00 00 01 10 00 c7 41 04

Cheers,
Trond
-
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/