From e29cc23acd5bb4889e651ce001365f6d0b1c5a6a Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Mon, 1 Dec 2025 15:17:28 -0600 Subject: [PATCH] rattrs: Reverted attempt at merged mtree split commits See previous commit for why. The merged commits surprisingly cost more than separate commit functions. I guess because the compiler is smart enough to deduplicate the two logic paths here: code stack ctx before: 35324 2176 660 after: 35316 (-0.0%) 2176 (+0.0%) 660 (+0.0%) code stack ctx gbmap before: 38172 2192 772 gbmap after: 38168 (-0.0%) 2192 (+0.0%) 772 (+0.0%) The good news is this is a win for readability, I think the separate conditions are easier to understand than a merged commit muddied with a bunch of lfs3->mtree.r.weight == 0 checks. --- lfs3.c | 83 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 35 deletions(-) diff --git a/lfs3.c b/lfs3.c index b5b39d11..63111ee8 100644 --- a/lfs3.c +++ b/lfs3.c @@ -9143,28 +9143,37 @@ static int lfs3_mdir_commit_(lfs3_t *lfs3, lfs3_mdir_t *mdir, // new mtree? if (lfs3->mtree.r.weight == 0) { lfs3_btree_init(&mtree_); - } + + err = lfs3_mtree_commit(lfs3, &mtree_, + 0, LFS3_RATTRS( + LFS3_RATTR(3, LFS3_TAG_MDIR, -2, LFS3_FROM_MPTR), + LFS3_RATTR_WEIGHT(+(1 << lfs3->mbits)), + LFS3_RATTR_ARG(mdir_[0].r.blocks), + LFS3_RATTR(3, LFS3_TAG_MNAME, -2, LFS3_FROM_CAT, 1), + LFS3_RATTR_WEIGHT(+(1 << lfs3->mbits)), + LFS3_RATTR_ARG(&split_name), + LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR), + LFS3_RATTR_ARG(mdir_[1].r.blocks), + LFS3_RATTR_NULL)); + if (err) { + goto failed; + } // update our mtree - err = lfs3_mtree_commit(lfs3, &mtree_, - (lfs3->mtree.r.weight == 0) - ? 0 - : lfs3_mbid(lfs3, mdir->mid), - LFS3_RATTRS( - LFS3_RATTR(3, LFS3_TAG_MDIR, -2, LFS3_FROM_MPTR), - LFS3_RATTR_WEIGHT( - (lfs3->mtree.r.weight == 0) - ? +(1 << lfs3->mbits) - : 0), - LFS3_RATTR_ARG(mdir_[0].r.blocks), - LFS3_RATTR(3, LFS3_TAG_MNAME, -2, LFS3_FROM_CAT, 1), - LFS3_RATTR_WEIGHT(+(1 << lfs3->mbits)), - LFS3_RATTR_ARG(&split_name), - LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR), - LFS3_RATTR_ARG(mdir_[1].r.blocks), - LFS3_RATTR_NULL)); - if (err) { - goto failed; + } else { + err = lfs3_mtree_commit(lfs3, &mtree_, + lfs3_mbid(lfs3, mdir->mid), LFS3_RATTRS( + LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR), + LFS3_RATTR_ARG(mdir_[0].r.blocks), + LFS3_RATTR(3, LFS3_TAG_MNAME, -2, LFS3_FROM_CAT, 1), + LFS3_RATTR_WEIGHT(+(1 << lfs3->mbits)), + LFS3_RATTR_ARG(&split_name), + LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR), + LFS3_RATTR_ARG(mdir_[1].r.blocks), + LFS3_RATTR_NULL)); + if (err) { + goto failed; + } } // need to drop? @@ -9210,23 +9219,27 @@ static int lfs3_mdir_commit_(lfs3_t *lfs3, lfs3_mdir_t *mdir, // new mtree? if (lfs3->mtree.r.weight == 0) { lfs3_btree_init(&mtree_); - } + + err = lfs3_mtree_commit(lfs3, &mtree_, + 0, LFS3_RATTRS( + LFS3_RATTR(3, LFS3_TAG_MDIR, -2, LFS3_FROM_MPTR), + LFS3_RATTR_WEIGHT(+(1 << lfs3->mbits)), + LFS3_RATTR_ARG(mdir_[0].r.blocks), + LFS3_RATTR_NULL)); + if (err) { + goto failed; + } // update our mtree - err = lfs3_mtree_commit(lfs3, &mtree_, - (lfs3->mtree.r.weight == 0) - ? 0 - : lfs3_mbid(lfs3, mdir->mid), - LFS3_RATTRS( - LFS3_RATTR(3, LFS3_TAG_MDIR, -2, LFS3_FROM_MPTR), - LFS3_RATTR_WEIGHT( - (lfs3->mtree.r.weight == 0) - ? +(1 << lfs3->mbits) - : 0), - LFS3_RATTR_ARG(mdir_[0].r.blocks), - LFS3_RATTR_NULL)); - if (err) { - goto failed; + } else { + err = lfs3_mtree_commit(lfs3, &mtree_, + lfs3_mbid(lfs3, mdir->mid), LFS3_RATTRS( + LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR), + LFS3_RATTR_ARG(mdir_[0].r.blocks), + LFS3_RATTR_NULL)); + if (err) { + goto failed; + } } }