From owner-svn-src-head@freebsd.org Wed Nov 21 19:01:48 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5CAE5114235E; Wed, 21 Nov 2018 19:01:48 +0000 (UTC) (envelope-from freebsd@pdx.rh.CN85.dnsmgr.net) Received: from pdx.rh.CN85.dnsmgr.net (br1.CN84in.dnsmgr.net [69.59.192.140]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8A13070AAE; Wed, 21 Nov 2018 19:01:47 +0000 (UTC) (envelope-from freebsd@pdx.rh.CN85.dnsmgr.net) Received: from pdx.rh.CN85.dnsmgr.net (localhost [127.0.0.1]) by pdx.rh.CN85.dnsmgr.net (8.13.3/8.13.3) with ESMTP id wALJ1koe073354; Wed, 21 Nov 2018 11:01:46 -0800 (PST) (envelope-from freebsd@pdx.rh.CN85.dnsmgr.net) Received: (from freebsd@localhost) by pdx.rh.CN85.dnsmgr.net (8.13.3/8.13.3/Submit) id wALJ1k9U073353; Wed, 21 Nov 2018 11:01:46 -0800 (PST) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201811211901.wALJ1k9U073353@pdx.rh.CN85.dnsmgr.net> Subject: Re: svn commit: r340737 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs In-Reply-To: <201811211818.wALIIvtQ086486@repo.freebsd.org> To: Alexander Motin Date: Wed, 21 Nov 2018 11:01:46 -0800 (PST) CC: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Reply-To: rgrimes@freebsd.org X-Mailer: ELM [version 2.4ME+ PL121h (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 8A13070AAE X-Spamd-Result: default: False [2.28 / 15.00]; ARC_NA(0.00)[]; HAS_REPLYTO(0.00)[rgrimes@freebsd.org]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_SPAM_SHORT(0.50)[0.497,0]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[dnsmgr.net]; REPLYTO_DOM_NEQ_FROM_DOM(0.00)[]; TO_DN_SOME(0.00)[]; NEURAL_SPAM_MEDIUM(0.30)[0.301,0]; AUTH_NA(1.00)[]; RCVD_COUNT_THREE(0.00)[3]; IP_SCORE(-0.02)[country: US(-0.09)]; MX_GOOD(-0.01)[cached: pdx.rh.CN85.dnsmgr.net]; NEURAL_SPAM_LONG(0.61)[0.610,0]; R_SPF_NA(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:13868, ipnet:69.59.192.0/19, country:US]; MID_RHS_MATCH_FROM(0.00)[] X-Rspamd-Server: mx1.freebsd.org X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Nov 2018 19:01:48 -0000 > 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 rgrimes@freebsd.org