> Author: mav > Date: Wed Nov 21 18:18:57 2018 > New Revision: 340737 > URL: https://svnweb.freebsd.org/changeset/base/340737 > > Log: > Revert r340096: 9952 Block size change during zfs receive drops spill block > > It was reported, and I easily reproduced it, that this change triggers panic > when receiving replication stream with enabled embedded blocks, when short > file compressing into one embedded block changes its block size. I am not > sure that the problem is in this particuler patch, not just triggered by it, > but since investigation and fix will take some time, I've decided to revert > this for now. > > PR: 198457, 233277
Is there any impact to stable/12, and more specifically, releng/12? Thanks, Rod > Modified: > head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c > > Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c > ============================================================================== > --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Wed Nov > 21 17:47:40 2018 (r340736) > +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Wed Nov > 21 18:18:57 2018 (r340737) > @@ -2143,7 +2143,6 @@ receive_object(struct receive_writer_arg *rwa, struct > { > dmu_object_info_t doi; > dmu_tx_t *tx; > - dmu_buf_t *db; > uint64_t object; > int err; > > @@ -2191,14 +2190,12 @@ receive_object(struct receive_writer_arg *rwa, struct > > tx = dmu_tx_create(rwa->os); > dmu_tx_hold_bonus(tx, object); > - dmu_tx_hold_write(tx, object, 0, 0); > err = dmu_tx_assign(tx, TXG_WAIT); > if (err != 0) { > dmu_tx_abort(tx); > return (err); > } > > - db = NULL; > if (object == DMU_NEW_OBJECT) { > /* currently free, want to be allocated */ > err = dmu_object_claim_dnsize(rwa->os, drro->drr_object, > @@ -2206,33 +2203,15 @@ receive_object(struct receive_writer_arg *rwa, struct > drro->drr_bonustype, drro->drr_bonuslen, > drro->drr_dn_slots << DNODE_SHIFT, tx); > } else if (drro->drr_type != doi.doi_type || > - (drro->drr_blksz != doi.doi_data_block_size && > - doi.doi_max_offset > doi.doi_data_block_size)) { > + drro->drr_blksz != doi.doi_data_block_size || > + drro->drr_bonustype != doi.doi_bonus_type || > + drro->drr_bonuslen != doi.doi_bonus_size) { > /* currently allocated, but with different properties */ > err = dmu_object_reclaim(rwa->os, drro->drr_object, > drro->drr_type, drro->drr_blksz, > drro->drr_bonustype, drro->drr_bonuslen, tx); > - } else { > - /* > - * Currently allocated, but with slightly different properties, > - * that may change live, like block size or bonus buffer. > - * Change those specifically to not loose the spill block, etc. > - */ > - if (drro->drr_bonustype != doi.doi_bonus_type || > - drro->drr_bonuslen != doi.doi_bonus_size) > - VERIFY0(dmu_bonus_hold(rwa->os, drro->drr_object, FTAG, > - &db)); > - if (drro->drr_bonustype != doi.doi_bonus_type) > - VERIFY0(dmu_set_bonustype(db, drro->drr_bonustype, tx)); > - if (drro->drr_bonuslen != doi.doi_bonus_size) > - VERIFY0(dmu_set_bonus(db, drro->drr_bonuslen, tx)); > - if (drro->drr_blksz != doi.doi_data_block_size) > - err = dmu_object_set_blocksize(rwa->os, > drro->drr_object, > - drro->drr_blksz, 0, tx); > } > if (err != 0) { > - if (db != NULL) > - dmu_buf_rele(db, FTAG); > dmu_tx_commit(tx); > return (SET_ERROR(EINVAL)); > } > @@ -2243,9 +2222,9 @@ receive_object(struct receive_writer_arg *rwa, struct > drro->drr_compress, tx); > > if (data != NULL) { > - if (db == NULL) > - VERIFY0(dmu_bonus_hold(rwa->os, drro->drr_object, FTAG, > - &db)); > + dmu_buf_t *db; > + > + VERIFY0(dmu_bonus_hold(rwa->os, drro->drr_object, FTAG, &db)); > dmu_buf_will_dirty(db, tx); > > ASSERT3U(db->db_size, >=, drro->drr_bonuslen); > @@ -2256,9 +2235,8 @@ receive_object(struct receive_writer_arg *rwa, struct > dmu_ot_byteswap[byteswap].ob_func(db->db_data, > drro->drr_bonuslen); > } > - } > - if (db != NULL) > dmu_buf_rele(db, FTAG); > + } > dmu_tx_commit(tx); > > return (0); > > -- Rod Grimes rgri...@freebsd.org _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"