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.
This commit is contained in:
@@ -9143,28 +9143,37 @@ static int lfs3_mdir_commit_(lfs3_t *lfs3, lfs3_mdir_t *mdir,
|
|||||||
// new mtree?
|
// new mtree?
|
||||||
if (lfs3->mtree.r.weight == 0) {
|
if (lfs3->mtree.r.weight == 0) {
|
||||||
lfs3_btree_init(&mtree_);
|
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
|
// update our mtree
|
||||||
err = lfs3_mtree_commit(lfs3, &mtree_,
|
} else {
|
||||||
(lfs3->mtree.r.weight == 0)
|
err = lfs3_mtree_commit(lfs3, &mtree_,
|
||||||
? 0
|
lfs3_mbid(lfs3, mdir->mid), LFS3_RATTRS(
|
||||||
: lfs3_mbid(lfs3, mdir->mid),
|
LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR),
|
||||||
LFS3_RATTRS(
|
LFS3_RATTR_ARG(mdir_[0].r.blocks),
|
||||||
LFS3_RATTR(3, LFS3_TAG_MDIR, -2, LFS3_FROM_MPTR),
|
LFS3_RATTR(3, LFS3_TAG_MNAME, -2, LFS3_FROM_CAT, 1),
|
||||||
LFS3_RATTR_WEIGHT(
|
LFS3_RATTR_WEIGHT(+(1 << lfs3->mbits)),
|
||||||
(lfs3->mtree.r.weight == 0)
|
LFS3_RATTR_ARG(&split_name),
|
||||||
? +(1 << lfs3->mbits)
|
LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR),
|
||||||
: 0),
|
LFS3_RATTR_ARG(mdir_[1].r.blocks),
|
||||||
LFS3_RATTR_ARG(mdir_[0].r.blocks),
|
LFS3_RATTR_NULL));
|
||||||
LFS3_RATTR(3, LFS3_TAG_MNAME, -2, LFS3_FROM_CAT, 1),
|
if (err) {
|
||||||
LFS3_RATTR_WEIGHT(+(1 << lfs3->mbits)),
|
goto failed;
|
||||||
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?
|
// need to drop?
|
||||||
@@ -9210,23 +9219,27 @@ static int lfs3_mdir_commit_(lfs3_t *lfs3, lfs3_mdir_t *mdir,
|
|||||||
// new mtree?
|
// new mtree?
|
||||||
if (lfs3->mtree.r.weight == 0) {
|
if (lfs3->mtree.r.weight == 0) {
|
||||||
lfs3_btree_init(&mtree_);
|
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
|
// update our mtree
|
||||||
err = lfs3_mtree_commit(lfs3, &mtree_,
|
} else {
|
||||||
(lfs3->mtree.r.weight == 0)
|
err = lfs3_mtree_commit(lfs3, &mtree_,
|
||||||
? 0
|
lfs3_mbid(lfs3, mdir->mid), LFS3_RATTRS(
|
||||||
: lfs3_mbid(lfs3, mdir->mid),
|
LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR),
|
||||||
LFS3_RATTRS(
|
LFS3_RATTR_ARG(mdir_[0].r.blocks),
|
||||||
LFS3_RATTR(3, LFS3_TAG_MDIR, -2, LFS3_FROM_MPTR),
|
LFS3_RATTR_NULL));
|
||||||
LFS3_RATTR_WEIGHT(
|
if (err) {
|
||||||
(lfs3->mtree.r.weight == 0)
|
goto failed;
|
||||||
? +(1 << lfs3->mbits)
|
}
|
||||||
: 0),
|
|
||||||
LFS3_RATTR_ARG(mdir_[0].r.blocks),
|
|
||||||
LFS3_RATTR_NULL));
|
|
||||||
if (err) {
|
|
||||||
goto failed;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user