Gavin,

Please file a bug on this.

Thanks,
-Mark

Gavin Maltby wrote:
Hi,

My desktop paniced last night during a zfs receive operation.  This
is a dual opteron system running snv_47 and bfu'd to DEBUG project bits that
are in sync with the onnv gate as of two days ago.  The project bits
are for Opteron FMA and don't appear at all active in the panic.
I'll log a bug unless someone reconises this as a known issue:

 > ::status
debugging crash dump vmcore.0 (64-bit) from enogas
operating system: 5.11 onnv-dev (i86pc)
panic message:
assertion failed: ((&dnp->dn_blkptr[0])->blk_birth == 0) || list_head(&dn->dn_dirty_dbufs[txgoff]) != 0L || dn->dn_next_blksz[txgoff] >> 9 == dnp->dn_datablkszsec, file: ../../common/fs/zfs/dnode_syn
dump content: kernel pages only

 > $c
vpanic()
assfail+0x7e(fffffffff06daa80, fffffffff06daa58, 220)
dnode_sync+0x5ef(ffffffff8e0ce3f8, 0, ffffffff8e0c81c0, ffffffff8adde1c0)
dmu_objset_sync_dnodes+0xa4(ffffffff8be25340, ffffffff8be25480, ffffffff8adde1c0)
dmu_objset_sync+0xfd(ffffffff8be25340, ffffffff8adde1c0)
dsl_dataset_sync+0x4a(ffffffff8e2286c0, ffffffff8adde1c0)
dsl_pool_sync+0xa7(ffffffff89ef3900, 248bbb)
spa_sync+0x1d5(ffffffff82ea2700, 248bbb)
txg_sync_thread+0x221(ffffffff89ef3900)
thread_start+8()

dnode_sync(dnode_t *dn, int level, zio_t *zio, dmu_tx_t *tx)
{
    free_range_t *rp;
    int txgoff = tx->tx_txg & TXG_MASK;
    dnode_phys_t *dnp = dn->dn_phys;
...
    if (dn->dn_next_blksz[txgoff]) {
        ASSERT(P2PHASE(dn->dn_next_blksz[txgoff],
            SPA_MINBLOCKSIZE) == 0);
        ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[0]) ||
            list_head(&dn->dn_dirty_dbufs[txgoff]) != NULL ||
            dn->dn_next_blksz[txgoff] >> SPA_MINBLOCKSHIFT ==
            dnp->dn_datablkszsec);
        ...
    }
...
}


We get

    txgoff = 0x248bbb & 0x3 = 0x3
    dnp = 0xfffffe80e648b400

 > 0xfffffe80e648b400::print dnode_phys_t
{
     dn_type = 0x16
     dn_indblkshift = 0xe
     dn_nlevels = 0x1
     dn_nblkptr = 0x3
     dn_bonustype = 0
     dn_checksum = 0
     dn_compress = 0
     dn_flags = 0x1
     dn_datablkszsec = 0x1c
     dn_bonuslen = 0
     dn_pad2 = [ 0, 0, 0, 0 ]
     dn_maxblkid = 0
     dn_used = 0x800
     dn_pad3 = [ 0, 0, 0, 0 ]
     dn_blkptr = [
         {
             blk_dva = [
                 {
                     dva_word = [ 0x2, 0x3015472 ]
                 }
                 {
                     dva_word = [ 0x2, 0x4613b32 ]
                 }
                 {
                     dva_word = [ 0, 0 ]
                 }
             ]
             blk_prop = 0x801607030001001b
             blk_pad = [ 0, 0, 0 ]
             blk_birth = 0x221478
             blk_fill = 0x1
             blk_cksum = {
zc_word = [ 0x4b4b88c4e6, 0x39c18ca2a5a1, 0x16ea3555d00431,
0x640a1f2b2c8b322 ]
             }
         }
     ]
dn_bonus = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... ]
}

So regarding the assertion we have dnp->dn_blkptr[0])->blk_birth == 0x221478

 > ffffffff8e0ce3f8::print -at dnode_t dn_dirty_dbufs[3]
{
     ffffffff8e0ce510 size_t dn_dirty_dbufs[3].list_size = 0x198
     ffffffff8e0ce518 size_t dn_dirty_dbufs[3].list_offset = 0x120
     ffffffff8e0ce520 struct list_node dn_dirty_dbufs[3].list_head = {
         ffffffff8e0ce520 struct list_node *list_next = 0xffffffff8e0ce520
         ffffffff8e0ce528 struct list_node *list_prev = 0xffffffff8e0ce520
     }
}

So we have list_empty() for that list (list_next above points to list_head)
and list_head() will have returned NULL.  So we're relying on the
3rd component of the assertion to pass:

 > ffffffff8e0ce3f8::print dnode_t dn_next_blksz
dn_next_blksz = [ 0, 0, 0, 0x4a00 ]

We're using the 0x4a00 from that.  0x4a00 >> 9 = 0x25; from the
dnode_phys_t above we have dnp->dn_datablkszsec of 0x1c.  Boom.

Sun folks can login to enogas.uk and /var/crash/enogas/*,0 is
accessible.

Gavin







_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to