ZFS RAID-Z panic on vdev failure + subsequent panics and hangs
Boris Kochergin
spawk at acm.poly.edu
Fri Aug 7 13:46:15 UTC 2009
Pawel Jakub Dawidek wrote:
> On Fri, Aug 07, 2009 at 09:37:38AM +0200, Pawel Jakub Dawidek wrote:
>
>> On Wed, Aug 05, 2009 at 09:33:06AM -0400, Boris Kochergin wrote:
>>
>>> Fatal trap 12: page fault while in kernel mode
>>> fault virtual address = 0xffffffffffffffe9
>>> fault code = supervisor read data, page not present
>>> instruction pointer = 0x20:0xffffffff8103a9e7
>>> stack pointer = 0x28:0xffffff8077f26430
>>> frame pointer = 0x28:0xffffff8077f26500
>>> code segment = base 0x0, limit 0xfffff, type 0x1b
>>> = DPL 0, pres 1, long 1, def32 0, gran 1
>>> processor eflags = interrupt enabled, resume, IOPL = 0
>>> current process = 972 (cp)
>>>
>> [...]
>>
>>> /usr/src/sys/amd64/amd64/trap.c:494
>>> #11 0xffffffff80854d73 in calltrap () at
>>> /usr/src/sys/amd64/amd64/exception.S:224
>>> #12 0xffffffff8103a9e7 in arc_evict (state=Variable "state" is not
>>> available.
>>> ) at
>>> /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c:1489
>>>
>> Could you tell me what do you have at this line in your source? I don't
>> think you use HEAD... What exact FreeBSD version are you using?
>>
>
> You already gave version number in your first mail, sorry about that.
> 8.0-BETA2 should be very close to HEAD (or it actually was HEAD), so I
> guess this is the code we are looking at:
>
> 1488: /* "lookahead" for better eviction candidate */
> 1489: if (recycle && ab->b_size != bytes &&
> 1490: ab_prev && ab_prev->b_size == bytes)
> 1491: continue;
>
> If 'ab' is corrupted it should panic earlier, so it seems ab_prev is
> corrupted, can you see what it points to in gdb?
>
>
Yeah, that's what the code looks like. For convenience, I've put the
source tree the system was built using up at:
http://acm.poly.edu/~spawk/src/
Maybe my kgdb chops aren't up to par, but I can't seem to see what
ab_prev points to:
(kgdb) up
#12 0xffffffff8103a9e7 in arc_evict (state=Variable "state" is not
available.
) at
/usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c:1489
1489 if (recycle && ab->b_size != bytes &&
Current language: auto; currently c
(kgdb) list
1484 LBOLT - ab->b_arc_access <
arc_min_prefetch_lifespan)) {
1485 skipped++;
1486 continue;
1487 }
1488 /* "lookahead" for better eviction candidate */
1489 if (recycle && ab->b_size != bytes &&
1490 ab_prev && ab_prev->b_size == bytes)
1491 continue;
1492 hash_lock = HDR_LOCK(ab);
1493 have_lock = MUTEX_HELD(hash_lock);
(kgdb) print ab
$13 = (arc_buf_hdr_t *) 0xffffff0003ebc410
(kgdb) print ab->b_size
$14 = 1
(kgdb) print bytes
$15 = 16384
(kgdb) print ab_prev
No symbol "ab_prev" in current context.
-Boris
More information about the freebsd-fs
mailing list