rattrs: Attempted to merge mtree split commits
The idea here was to merge mtree split commits to try to minimize
redundant logic that only differs in whether or not we need to create
the initial mtree weight.
Surprisingly, this backfired, adding more code than it saved. I guess I
underestimated how effective the compiler is at deduplicating these two
paths of logic:
code stack ctx
before: 35316 2176 660
after: 35324 (+0.0%) 2176 (+0.0%) 660 (+0.0%)
code stack ctx
gbmap before: 38168 2192 772
gbmap after: 38172 (+0.0%) 2192 (+0.0%) 772 (+0.0%)
This commit is contained in:
@@ -9143,37 +9143,28 @@ 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
|
||||||
} else {
|
err = lfs3_mtree_commit(lfs3, &mtree_,
|
||||||
err = lfs3_mtree_commit(lfs3, &mtree_,
|
(lfs3->mtree.r.weight == 0)
|
||||||
lfs3_mbid(lfs3, mdir->mid), LFS3_RATTRS(
|
? 0
|
||||||
LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR),
|
: lfs3_mbid(lfs3, mdir->mid),
|
||||||
LFS3_RATTR_ARG(mdir_[0].r.blocks),
|
LFS3_RATTRS(
|
||||||
LFS3_RATTR(3, LFS3_TAG_MNAME, -2, LFS3_FROM_CAT, 1),
|
LFS3_RATTR(3, LFS3_TAG_MDIR, -2, LFS3_FROM_MPTR),
|
||||||
LFS3_RATTR_WEIGHT(+(1 << lfs3->mbits)),
|
LFS3_RATTR_WEIGHT(
|
||||||
LFS3_RATTR_ARG(&split_name),
|
(lfs3->mtree.r.weight == 0)
|
||||||
LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR),
|
? +(1 << lfs3->mbits)
|
||||||
LFS3_RATTR_ARG(mdir_[1].r.blocks),
|
: 0),
|
||||||
LFS3_RATTR_NULL));
|
LFS3_RATTR_ARG(mdir_[0].r.blocks),
|
||||||
if (err) {
|
LFS3_RATTR(3, LFS3_TAG_MNAME, -2, LFS3_FROM_CAT, 1),
|
||||||
goto failed;
|
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?
|
// need to drop?
|
||||||
@@ -9219,27 +9210,23 @@ 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
|
||||||
} else {
|
err = lfs3_mtree_commit(lfs3, &mtree_,
|
||||||
err = lfs3_mtree_commit(lfs3, &mtree_,
|
(lfs3->mtree.r.weight == 0)
|
||||||
lfs3_mbid(lfs3, mdir->mid), LFS3_RATTRS(
|
? 0
|
||||||
LFS3_RATTR(2, LFS3_TAG_MDIR, 0, LFS3_FROM_MPTR),
|
: lfs3_mbid(lfs3, mdir->mid),
|
||||||
LFS3_RATTR_ARG(mdir_[0].r.blocks),
|
LFS3_RATTRS(
|
||||||
LFS3_RATTR_NULL));
|
LFS3_RATTR(3, LFS3_TAG_MDIR, -2, LFS3_FROM_MPTR),
|
||||||
if (err) {
|
LFS3_RATTR_WEIGHT(
|
||||||
goto failed;
|
(lfs3->mtree.r.weight == 0)
|
||||||
}
|
? +(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