tag-returning: Adopted tag-returns in lfs3_mtree_pathlookup

Last but not least, this adopts tag-returns in lfs3_mtree_pathlookup,
and indirectly in all of lfs3_mtree_pathlookup's callers (which is
almost every top-level filesystem function -- anything that needs to
look up a path).

At this level, the muxed tag/err type really shows its versatility. Take
the LFS3_ERR_NOENT and LFS3_TAG_ORPHAN tags/errs for example.
Conceptually, these take very different code paths, but after calling
lfs3_mtree_pathlookup, it's easy to switch on both as though they
represent the same file-not-found condition.

We have to be a bit more careful now to not confuse err and tag
variables in these functions, and `goto failed` is now a bit of a
landmine, but the end result is another nice chunk of code savings:

                       code          stack          ctx
  before:             36216           2336          656
  after:              36084 (-0.4%)   2336 (+0.0%)  656 (+0.0%)

---

I believe this finishes the tag-returning refactor, which means we can
take a step back and look at how effective tag/err muxing is as a code
size optimization:

                       code          stack          ctx
  before tag-returns: 36828           2368          656
  after tag-returns:  36084 (-2.0%)   2336 (-1.4%)  656 (+0.0%)

A free 744 bytes is not bad! Especially considering there's no real
downside to this.

The 32 bytes of stack savings is nice too, and suggests we had ~8
unnecessary tag out-pointers sitting on the stack hot-path.
This commit is contained in:
Christopher Haster
2025-07-17 17:20:01 -05:00
parent f9d7885edc
commit 35d8c36dd1
3 changed files with 105 additions and 110 deletions
+9 -9
View File
@@ -1147,7 +1147,7 @@ code = '''
lfs3_mdir_t mdir;
lfs3_did_t did;
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => 0;
&mdir, &did) => LFS3_TAG_REG;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
@@ -1234,7 +1234,7 @@ code = '''
lfs3_mdir_t mdir;
lfs3_did_t did;
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => 0;
&mdir, &did) => LFS3_TAG_REG;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
@@ -1340,7 +1340,7 @@ code = '''
lfs3_mdir_t mdir;
lfs3_did_t did;
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => 0;
&mdir, &did) => LFS3_TAG_REG;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
@@ -1449,7 +1449,7 @@ code = '''
lfs3_mdir_t mdir;
lfs3_did_t did;
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => 0;
&mdir, &did) => LFS3_TAG_REG;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
@@ -1558,7 +1558,7 @@ code = '''
lfs3_mdir_t mdir;
lfs3_did_t did;
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => 0;
&mdir, &did) => LFS3_TAG_REG;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
@@ -1566,7 +1566,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "c";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => 0;
&mdir, &did) => LFS3_TAG_REG;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
@@ -1675,7 +1675,7 @@ code = '''
lfs3_mdir_t mdir;
lfs3_did_t did;
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => 0;
&mdir, &did) => LFS3_TAG_REG;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
@@ -1784,7 +1784,7 @@ code = '''
lfs3_mdir_t mdir;
lfs3_did_t did;
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => 0;
&mdir, &did) => LFS3_TAG_REG;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
@@ -1893,7 +1893,7 @@ code = '''
lfs3_mdir_t mdir;
lfs3_did_t did;
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => 0;
&mdir, &did) => LFS3_TAG_REG;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
+30 -30
View File
@@ -4564,7 +4564,7 @@ code = '''
lfs3_did_t did;
path = "coffee/drip";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4572,7 +4572,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/coldbrew";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4580,7 +4580,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/turkish";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4588,7 +4588,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/tubruk";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4596,7 +4596,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/vietnamese";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4604,7 +4604,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/thai";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4738,7 +4738,7 @@ code = '''
lfs3_did_t did;
path = "drip";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4746,7 +4746,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coldbrew";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4754,7 +4754,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "turkish";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4762,7 +4762,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "tubruk";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4770,7 +4770,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "vietnamese";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -4778,7 +4778,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "thai";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5034,7 +5034,7 @@ code = '''
lfs3_did_t did;
path = "coffee/drip";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5042,7 +5042,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/coldbrew";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5050,7 +5050,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/turkish";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5058,7 +5058,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/tubruk";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5066,7 +5066,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/vietnamese";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5074,7 +5074,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/thai";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5276,7 +5276,7 @@ code = '''
lfs3_did_t did;
path = "coffee/drip";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5284,7 +5284,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/coldbrew";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5292,7 +5292,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/turkish";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5300,7 +5300,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/tubruk";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5308,7 +5308,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/vietnamese";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5316,7 +5316,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/thai";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5518,7 +5518,7 @@ code = '''
lfs3_did_t did;
path = "coffee/drip";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5526,7 +5526,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/coldbrew";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5534,7 +5534,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/turkish";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5542,7 +5542,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/tubruk";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5550,7 +5550,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/vietnamese";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,
@@ -5558,7 +5558,7 @@ code = '''
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
path = "coffee/thai";
lfs3_mtree_pathlookup(&lfs3, &path,
&mdir, NULL, &did) => LFS3_ERR_NOENT;
&mdir, &did) => LFS3_ERR_NOENT;
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
LFS3_RATTR_CAT(
LFS3_TAG_NAME + 0x13, +1,