Dropped lfsr_mdir_bid/rid convenience functions

Much like the lfsr_o_* functions, I think we should avoid too many
convenience layers for what really are operations on struct fields.

Otherwise you quickly end up with a lot of boilerplate that just saves a
couple extra characters at invocation. Characters that also help convey
what is being accessed.
This commit is contained in:
Christopher Haster
2024-01-18 15:32:41 -06:00
parent 942427dc8c
commit 1db215309b
2 changed files with 39 additions and 46 deletions
+19 -26
View File
@@ -5009,14 +5009,6 @@ static inline bool lfsr_mdir_ismrootanchor(const lfsr_mdir_t *mdir) {
return lfsr_mptr_ismrootanchor(lfsr_mdir_mptr(mdir));
}
static inline lfsr_sbid_t lfsr_mdir_bid(lfs_t *lfs, const lfsr_mdir_t *mdir) {
return lfsr_mid_bid(lfs, mdir->mid);
}
static inline lfsr_srid_t lfsr_mdir_rid(lfs_t *lfs, const lfsr_mdir_t *mdir) {
return lfsr_mid_rid(lfs, mdir->mid);
}
// mdir operations
static int lfsr_mdir_fetch(lfs_t *lfs, lfsr_mdir_t *mdir,
lfsr_smid_t mid, const lfsr_mptr_t *mptr) {
@@ -5265,8 +5257,8 @@ static int lfsr_mtree_seek(lfs_t *lfs, lfsr_mdir_t *mdir, lfs_off_t off) {
while (true) {
// calculate new mid, be careful to avoid rid overflow
lfsr_bid_t bid = lfsr_mdir_bid(lfs, mdir);
lfsr_srid_t rid = lfsr_mdir_rid(lfs, mdir) + off;
lfsr_bid_t bid = lfsr_mid_bid(lfs, mdir->mid);
lfsr_srid_t rid = lfsr_mid_rid(lfs, mdir->mid) + off;
// lookup mdirs until we find our rid, we need to do this because
// we don't know how many rids are in each mdir until we fetch
while (rid >= mdir->rbyd.weight) {
@@ -5777,7 +5769,7 @@ static lfs_ssize_t lfsr_mdir_estimate__(lfs_t *lfs, const lfsr_mdir_t *mdir,
// belongs to our mdir + rid?
if (file->type != LFS_TYPE_REG
|| lfsr_mdir_cmp(&file->mdir, mdir) != 0
|| lfsr_mdir_rid(lfs, &file->mdir) != rid) {
|| lfsr_mid_rid(lfs, file->mdir.mid) != rid) {
continue;
}
@@ -5925,8 +5917,8 @@ static int lfsr_mdir_compact__(lfs_t *lfs, lfsr_mdir_t *mdir_,
// belongs to our mdir?
if (file->type != LFS_TYPE_REG
|| lfsr_mdir_cmp(&file->mdir, mdir) != 0
|| lfsr_mdir_rid(lfs, &file->mdir) < start_rid
|| (lfsr_rid_t)lfsr_mdir_rid(lfs, &file->mdir)
|| lfsr_mid_rid(lfs, file->mdir.mid) < start_rid
|| (lfsr_rid_t)lfsr_mid_rid(lfs, file->mdir.mid)
>= (lfsr_rid_t)end_rid) {
continue;
}
@@ -6288,7 +6280,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
LFS_ASSERT(mdir->mid == -1
|| lfsr_mtree_isnull(lfs)
|| mdir->rbyd.weight > 0);
LFS_ASSERT(lfsr_mdir_rid(lfs, mdir) <= mdir->rbyd.weight);
LFS_ASSERT(lfsr_mid_rid(lfs, mdir->mid) <= mdir->rbyd.weight);
// reset gdelta for new commit
lfsr_fs_flushgdelta(lfs);
@@ -6542,11 +6534,11 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
uint8_t mdir_buf[LFSR_MPTR_DSIZE];
uint8_t msibling_buf[LFSR_MPTR_DSIZE];
err = lfsr_mtree_commit_(lfs, LFSR_ATTRS(
LFSR_ATTR(lfsr_mdir_bid(lfs, &mdir_),
LFSR_ATTR(lfsr_mid_bid(lfs, mdir_.mid),
MDIR, 0, FROMMPTR(lfsr_mdir_mptr(&mdir_), mdir_buf)),
LFSR_ATTR(lfsr_mdir_bid(lfs, &mdir_)+1,
LFSR_ATTR(lfsr_mid_bid(lfs, mdir_.mid)+1,
NAME, +lfsr_mweight(lfs), DATA(split_data)),
LFSR_ATTR(lfsr_mdir_bid(lfs, &msibling_),
LFSR_ATTR(lfsr_mid_bid(lfs, msibling_.mid),
MDIR, 0,
FROMMPTR(lfsr_mdir_mptr(&msibling_), msibling_buf))));
if (err) {
@@ -6611,7 +6603,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
// update our mtree
err = lfsr_mtree_commit_(lfs, LFSR_ATTRS(
LFSR_ATTR(lfsr_mdir_bid(lfs, &mdir_),
LFSR_ATTR(lfsr_mid_bid(lfs, mdir_.mid),
RM, -lfsr_mweight(lfs), NULL())));
if (err) {
return err;
@@ -6646,7 +6638,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
// update our mtree
uint8_t mdir_buf[LFSR_MPTR_DSIZE];
err = lfsr_mtree_commit_(lfs, LFSR_ATTRS(
LFSR_ATTR(lfsr_mdir_bid(lfs, &mdir_),
LFSR_ATTR(lfsr_mid_bid(lfs, mdir_.mid),
MDIR, 0, FROMMPTR(lfsr_mdir_mptr(&mdir_), mdir_buf))));
if (err) {
return err;
@@ -6714,7 +6706,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
// update any opened mdirs if we had a split or drop
if (lfsr_mdir_cmp(&opened->mdir, mdir) == 0) {
if (mdelta > 0
&& lfsr_mdir_rid(lfs, &opened->mdir)
&& lfsr_mid_rid(lfs, opened->mdir.mid)
>= mdir_.rbyd.weight) {
opened->mdir.mid += lfsr_mweight(lfs)
- mdir_.rbyd.weight;
@@ -6772,7 +6764,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
if (mdir->mid == -1) {
mdir->rbyd = lfs->mroot.rbyd;
} else if (mdelta > 0
&& lfsr_mdir_rid(lfs, mdir) >= mdir_.rbyd.weight) {
&& lfsr_mid_rid(lfs, mdir->mid) >= mdir_.rbyd.weight) {
mdir->mid += lfsr_mweight(lfs) - mdir_.rbyd.weight;
mdir->rbyd = msibling_.rbyd;
} else {
@@ -6817,7 +6809,8 @@ static int lfsr_mdir_namelookup(lfs_t *lfs, const lfsr_mdir_t *mdir,
if (lfs_cmp(cmp) < 0) {
rid += 1;
}
lfsr_smid_t mid = lfsr_mdir_bid(lfs, mdir)-(lfsr_mweight(lfs)-1) + rid;
lfsr_smid_t mid = lfsr_mid_bid(lfs, mdir->mid)-(lfsr_mweight(lfs)-1)
+ rid;
// intercept pending grms here and pretend they're orphaned files
//
@@ -7365,7 +7358,7 @@ static int lfsr_traversal_read(lfs_t *lfs, lfsr_traversal_t *traversal,
// not traversing all blocks? have we exceeded our mdir's weight?
// return to mtree traversal
if (!lfsr_traversal_isall(traversal)
|| lfsr_mdir_rid(lfs, &traversal->file.mdir)
|| lfsr_mid_rid(lfs, traversal->file.mdir.mid)
>= traversal->file.mdir.rbyd.weight) {
traversal->state = LFSR_TRAVERSAL_MTREE;
continue;
@@ -8258,7 +8251,7 @@ static int lfsr_fs_fixgrm(lfs_t *lfs) {
lfsr_grm_poprm(&grm);
// make sure to adjust any remaining grms
if (lfsr_mid_bid(lfs, grm.rms[0]) == lfsr_mdir_bid(lfs, &mdir)
if (lfsr_mid_bid(lfs, grm.rms[0]) == lfsr_mid_bid(lfs, mdir.mid)
&& grm.rms[0] >= mdir.mid) {
LFS_ASSERT(grm.rms[0] != mdir.mid);
grm.rms[0] -= 1;
@@ -8603,7 +8596,7 @@ int lfsr_remove(lfs_t *lfs, const char *path) {
}
// adjust rid if grm is on the same mdir as our dir
if (lfsr_mid_bid(lfs, grm.rms[0]) == lfsr_mdir_bid(lfs, &mdir)
if (lfsr_mid_bid(lfs, grm.rms[0]) == lfsr_mid_bid(lfs, mdir.mid)
&& grm.rms[0] > mdir.mid) {
grm.rms[0] -= 1;
}
@@ -8694,7 +8687,7 @@ int lfsr_rename(lfs_t *lfs, const char *old_path, const char *new_path) {
}
// adjust old rid if grm is on the same mdir as new rid
if (lfsr_mid_bid(lfs, grm.rms[0]) == lfsr_mdir_bid(lfs, &new_mdir)
if (lfsr_mid_bid(lfs, grm.rms[0]) == lfsr_mid_bid(lfs, new_mdir.mid)
&& grm.rms[0] >= new_mdir.mid) {
grm.rms[0] += 1;
}
+20 -20
View File
@@ -439,7 +439,7 @@ code = '''
mid += lfsr_mweight(&lfs)) {
lfsr_mdir_t mdir;
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -470,7 +470,7 @@ code = '''
mid += lfsr_mweight(&lfs)) {
lfsr_mdir_t mdir;
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -517,7 +517,7 @@ code = '''
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
// limit our mid to our mdir's weight
mdir.mid = lfs_max32(
lfsr_mdir_bid(&lfs, &mdir)-(lfsr_mweight(&lfs)-1)
lfsr_mid_bid(&lfs, mdir.mid)-(lfsr_mweight(&lfs)-1)
+ (mdir.mid % (mdir.rbyd.weight+1)),
1);
@@ -551,7 +551,7 @@ code = '''
mid += lfsr_mweight(&lfs)) {
lfsr_mdir_t mdir;
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -586,7 +586,7 @@ code = '''
mid += lfsr_mweight(&lfs)) {
lfsr_mdir_t mdir;
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -1089,12 +1089,12 @@ code = '''
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
// limit our mid to our mdir's weight
mdir.mid = lfs_max32(
lfsr_mdir_bid(&lfs, &mdir)-(lfsr_mweight(&lfs)-1)
lfsr_mid_bid(&lfs, mdir.mid)-(lfsr_mweight(&lfs)-1)
+ (mdir.mid % (mdir.rbyd.weight+1)),
1);
// choose to create or delete, note we make sure to never delete to zero
uint8_t op = (lfsr_mdir_rid(&lfs, &mdir) == mdir.rbyd.weight
|| (lfsr_mdir_rid(&lfs, &mdir) == mdir.rbyd.weight-1
uint8_t op = (lfsr_mid_rid(&lfs, mdir.mid) == mdir.rbyd.weight
|| (lfsr_mid_rid(&lfs, mdir.mid) == mdir.rbyd.weight-1
&& lfsr_mtree_weight(&lfs) == lfsr_mweight(&lfs))
? 0
: TEST_PRNG(&prng) % 2);
@@ -1143,7 +1143,7 @@ code = '''
// drop should make sure we never have empty mdirs
assert(lfsr_mtree_ismptr(&lfs) || mdir.rbyd.weight > 0);
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -1182,7 +1182,7 @@ code = '''
// drop should make sure we never have empty mdirs
assert(lfsr_mtree_ismptr(&lfs) || mdir.rbyd.weight > 0);
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -2147,12 +2147,12 @@ code = '''
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
// limit our mid to our mdir's weight
mdir.mid = lfs_max32(
lfsr_mdir_bid(&lfs, &mdir)-(lfsr_mweight(&lfs)-1)
lfsr_mid_bid(&lfs, mdir.mid)-(lfsr_mweight(&lfs)-1)
+ (mdir.mid % (mdir.rbyd.weight+1)),
1);
// choose to create or delete, note we make sure to never delete to zero
uint8_t op = (lfsr_mdir_rid(&lfs, &mdir) == mdir.rbyd.weight
|| (lfsr_mdir_rid(&lfs, &mdir) == mdir.rbyd.weight-1
uint8_t op = (lfsr_mid_rid(&lfs, mdir.mid) == mdir.rbyd.weight
|| (lfsr_mid_rid(&lfs, mdir.mid) == mdir.rbyd.weight-1
&& lfsr_mtree_weight(&lfs) == lfsr_mweight(&lfs))
? 0
: TEST_PRNG(&prng) % 3);
@@ -2214,7 +2214,7 @@ code = '''
// drop should make sure we never have empty mdirs
assert(lfsr_mtree_ismptr(&lfs) || mdir.rbyd.weight > 0);
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -2253,7 +2253,7 @@ code = '''
// drop should make sure we never have empty mdirs
assert(lfsr_mtree_ismptr(&lfs) || mdir.rbyd.weight > 0);
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -3485,7 +3485,7 @@ code = '''
mid += lfsr_mweight(&lfs)) {
lfsr_mdir_t mdir;
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -3568,7 +3568,7 @@ code = '''
mid += lfsr_mweight(&lfs)) {
lfsr_mdir_t mdir;
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -3615,7 +3615,7 @@ code = '''
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
// limit our mid to our mdir's weight
mdir.mid = lfs_max32(
lfsr_mdir_bid(&lfs, &mdir)-(lfsr_mweight(&lfs)-1)
lfsr_mid_bid(&lfs, mdir.mid)-(lfsr_mweight(&lfs)-1)
+ (mdir.mid % (mdir.rbyd.weight+1)),
1);
@@ -3649,7 +3649,7 @@ code = '''
mid += lfsr_mweight(&lfs)) {
lfsr_mdir_t mdir;
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {
@@ -3737,7 +3737,7 @@ code = '''
mid += lfsr_mweight(&lfs)) {
lfsr_mdir_t mdir;
lfsr_mtree_lookup(&lfs, mid, &mdir) => 0;
for (; lfsr_mdir_rid(&lfs, &mdir) < mdir.rbyd.weight;
for (; lfsr_mid_rid(&lfs, mdir.mid) < mdir.rbyd.weight;
mdir.mid += 1) {
// skip the root bookmark
if (mdir.mid == 0) {