Moved post-compaction mdir commits into lfsr_mdir_compact__

Since we need access to the pending attr-list in lfsr_mdir_compact__
now, we might as well just do the pending commit. Worst case, a call to
lfsr_mdir_compact__ can provide a NULL attr-list for the previous
behavior (though we always follow up compaction with a commit).

The only downside is that this behavior is now a bit different from
lfsr_rbyd_compact. Need to revisit lfsr_rbyd_compact and see if it
should do the same.

This had a tiny improvement to code size, which I think is just the cost
of two function calls:

            code          stack
  before:  31716           2776
  after:   31676 (-0.1%)   2776 (+0.0%)
This commit is contained in:
Christopher Haster
2023-12-06 21:00:14 -06:00
parent 0026121bc3
commit 43270ed50f
+17 -31
View File
@@ -6007,6 +6007,17 @@ static int lfsr_mdir_compact__(lfs_t *lfs, lfsr_mdir_t *mdir_,
} }
} }
// once we've compacted, finish our commit
//
// upper layers should make sure this can't fail by limiting the
// maximum commit size
err = lfsr_mdir_commit__(lfs, mdir_, start_rid, end_rid,
attrs, attr_count);
if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE);
return err;
}
return 0; return 0;
} }
@@ -6050,25 +6061,14 @@ compact:;
} }
// compact our mdir // compact our mdir
err = lfsr_mdir_compact__(lfs, &mdir_, start_rid, end_rid, mdir, err = lfsr_mdir_compact__(lfs, &mdir_, start_rid, end_rid,
attrs, attr_count); mdir, attrs, attr_count);
if (err) { if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE); LFS_ASSERT(err != LFS_ERR_RANGE);
return err; return err;
} }
// we've compacted, try to commit again
//
// upper layers should make sure this can't fail by limiting the
// maximum commit size
*mdir = mdir_; *mdir = mdir_;
err = lfsr_mdir_commit__(lfs, mdir, start_rid, end_rid,
attrs, attr_count);
if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE);
return err;
}
return 0; return 0;
} }
@@ -6542,15 +6542,8 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
return err; return err;
} }
err = lfsr_mdir_compact__(lfs, &mdir_, 0, split_rid, mdir, err = lfsr_mdir_compact__(lfs, &mdir_, 0, split_rid,
attrs, attr_count); mdir, attrs, attr_count);
if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE);
return err;
}
err = lfsr_mdir_commit__(lfs, &mdir_, 0, split_rid,
attrs, attr_count);
if (err) { if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE); LFS_ASSERT(err != LFS_ERR_RANGE);
return err; return err;
@@ -6562,15 +6555,8 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
return err; return err;
} }
err = lfsr_mdir_compact__(lfs, &msibling_, split_rid, -1, mdir, err = lfsr_mdir_compact__(lfs, &msibling_, split_rid, -1,
attrs, attr_count); mdir, attrs, attr_count);
if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE);
return err;
}
err = lfsr_mdir_commit__(lfs, &msibling_, split_rid, -1,
attrs, attr_count);
if (err) { if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE); LFS_ASSERT(err != LFS_ERR_RANGE);
return err; return err;