ZFS panic: solaris assert: BP_EQUAL(bp, &zio->io_bp_orig)

Garrett Wollman wollman at bimajority.org
Fri Apr 11 00:57:27 UTC 2014


I have a file server that has panic()ed twice today with the
following:

panic: solaris assert: BP_EQUAL(bp, &zio->io_bp_orig), file: /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c, line: 2955
cpuid = 20
KDB: stack backtrace:
db_trace_self_wrapper() at db_trace_self_wrapper+0x2a/frame 0xffffff98a38d2900
kdb_backtrace() at kdb_backtrace+0x37/frame 0xffffff98a38d29c0
panic() at panic+0x1ce/frame 0xffffff98a38d2ac0
assfail() at assfail+0x1a/frame 0xffffff98a38d2ad0
zio_done() at zio_done+0x120/frame 0xffffff98a38d2b30
zio_execute() at zio_execute+0xc3/frame 0xffffff98a38d2b70
taskqueue_run_locked() at taskqueue_run_locked+0x74/frame 0xffffff98a38d2bc0
taskqueue_thread_loop() at taskqueue_thread_loop+0x46/frame 0xffffff98a38d2be0
fork_exit() at fork_exit+0x11f/frame 0xffffff98a38d2c30
fork_trampoline() at fork_trampoline+0xe/frame 0xffffff98a38d2c30
--- trap 0, rip = 0, rsp = 0xffffff98a38d2cf0, rbp = 0 ---
Uptime: 11d15h27m51s
Automatic reboot in 15 seconds - press a key on the console to abort
--> Press a key on the console to reboot,
--> or switch off the system now.

(It also failed to reboot automatically, as if a character had been
sent to the console.)

Anyone have a guess about what's going on here?  I obviously can't
keep manually restarting a production file server every 14 hours.
Here's the code in question:

        if (bp != NULL) {
                ASSERT(bp->blk_pad[0] == 0);
                ASSERT(bp->blk_pad[1] == 0);
                ASSERT(bcmp(bp, &zio->io_bp_copy, sizeof (blkptr_t)) == 0 ||
                    (bp == zio_unique_parent(zio)->io_bp));
                if (zio->io_type == ZIO_TYPE_WRITE && !BP_IS_HOLE(bp) &&
                    zio->io_bp_override == NULL &&
                    !(zio->io_flags & ZIO_FLAG_IO_REPAIR)) {
                        ASSERT(!BP_SHOULD_BYTESWAP(bp));
                        ASSERT3U(zio->io_prop.zp_copies, <=, BP_GET_NDVAS(bp));
                        ASSERT(BP_COUNT_GANG(bp) == 0 ||
                            (BP_COUNT_GANG(bp) == BP_GET_NDVAS(bp)));
                }
                if (zio->io_flags & ZIO_FLAG_NOPWRITE)
                        VERIFY(BP_EQUAL(bp, &zio->io_bp_orig));
        }

And it just now panicked again.  Help!

-GAWollman


More information about the freebsd-fs mailing list