Print this page
6842 Fix empty xattr dir causing lockup
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>

*** 573,583 **** uint64_t idx, blk; int err; ASSERT(zap->zap_dbuf == NULL || zap_f_phys(zap) == zap->zap_dbuf->db_data); ! ASSERT3U(zap_f_phys(zap)->zap_magic, ==, ZAP_MAGIC); idx = ZAP_HASH_IDX(h, zap_f_phys(zap)->zap_ptrtbl.zt_shift); err = zap_idx_to_blk(zap, idx, &blk); if (err != 0) return (err); err = zap_get_leaf_byblk(zap, blk, tx, lt, lp); --- 573,590 ---- uint64_t idx, blk; int err; ASSERT(zap->zap_dbuf == NULL || zap_f_phys(zap) == zap->zap_dbuf->db_data); ! ! /* Reality check for corrupt zap objects (leaf or header). */ ! if ((zap_f_phys(zap)->zap_block_type != ZBT_LEAF && ! zap_f_phys(zap)->zap_block_type != ZBT_HEADER) || ! zap_f_phys(zap)->zap_magic != ZAP_MAGIC) { ! return (SET_ERROR(EIO)); ! } ! idx = ZAP_HASH_IDX(h, zap_f_phys(zap)->zap_ptrtbl.zt_shift); err = zap_idx_to_blk(zap, idx, &blk); if (err != 0) return (err); err = zap_get_leaf_byblk(zap, blk, tx, lt, lp);