Renamed mblocks -> mptr

Since we need an bptr type internally, a block pointer, which is a bit
more complicated than just a single address, calling our mdir pairs
mptrs makes sense.
This commit is contained in:
Christopher Haster
2023-10-14 14:11:20 -05:00
parent 173de4388b
commit 1d5946b5ea
2 changed files with 28 additions and 28 deletions
+27 -27
View File
@@ -4929,9 +4929,9 @@ static int lfsr_btraversal_read(lfs_t *lfs, const lfsr_btree_t *btree,
/// Metadata pair operations /// /// Metadata pair operations ///
// the mroot anchor, mdir 0x{0,1} is the entry point into the filesystem // the mroot anchor, mdir 0x{0,1} is the entry point into the filesystem
#define LFSR_MBLOCKS_MROOTANCHOR() ((const lfs_block_t[2]){0, 1}) #define LFSR_MPTR_MROOTANCHOR() ((const lfs_block_t[2]){0, 1})
static inline int lfsr_mblocks_cmp( static inline int lfsr_mptr_cmp(
const lfs_block_t a[static 2], const lfs_block_t a[static 2],
const lfs_block_t b[static 2]) { const lfs_block_t b[static 2]) {
// note these can be in either order // note these can be in either order
@@ -4942,7 +4942,7 @@ static inline int lfsr_mblocks_cmp(
} }
} }
static inline bool lfsr_mblocks_ismrootanchor( static inline bool lfsr_mptr_ismrootanchor(
const lfs_block_t blocks[static 2]) { const lfs_block_t blocks[static 2]) {
// mrootanchor is always at 0x{0,1} // mrootanchor is always at 0x{0,1}
// just check that the first block is in mroot anchor range // just check that the first block is in mroot anchor range
@@ -4950,11 +4950,11 @@ static inline bool lfsr_mblocks_ismrootanchor(
} }
static inline int lfsr_mdir_cmp(const lfsr_mdir_t *a, const lfsr_mdir_t *b) { static inline int lfsr_mdir_cmp(const lfsr_mdir_t *a, const lfsr_mdir_t *b) {
return lfsr_mblocks_cmp(a->u.m.blocks, b->u.m.blocks); return lfsr_mptr_cmp(a->u.m.blocks, b->u.m.blocks);
} }
static inline bool lfsr_mdir_ismrootanchor(const lfsr_mdir_t *mdir) { static inline bool lfsr_mdir_ismrootanchor(const lfsr_mdir_t *mdir) {
return lfsr_mblocks_ismrootanchor(mdir->u.m.blocks); return lfsr_mptr_ismrootanchor(mdir->u.m.blocks);
} }
static inline void lfsr_mdir_unerase(lfsr_mdir_t *mdir) { static inline void lfsr_mdir_unerase(lfsr_mdir_t *mdir) {
@@ -4964,10 +4964,10 @@ static inline void lfsr_mdir_unerase(lfsr_mdir_t *mdir) {
// 2 leb128 => 10 bytes (worst case) // 2 leb128 => 10 bytes (worst case)
#define LFSR_MDIR_DSIZE (5+5) #define LFSR_MDIR_DSIZE (5+5)
#define LFSR_DATA_FROMMBLOCKS(_blocks, _buffer) \ #define LFSR_DATA_FROMMPTR(_blocks, _buffer) \
lfsr_data_frommblocks(_blocks, _buffer) lfsr_data_frommptr(_blocks, _buffer)
static lfsr_data_t lfsr_data_frommblocks(const lfs_block_t blocks[static 2], static lfsr_data_t lfsr_data_frommptr(const lfs_block_t blocks[static 2],
uint8_t buffer[static LFSR_MDIR_DSIZE]) { uint8_t buffer[static LFSR_MDIR_DSIZE]) {
lfs_ssize_t d = 0; lfs_ssize_t d = 0;
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
@@ -4979,7 +4979,7 @@ static lfsr_data_t lfsr_data_frommblocks(const lfs_block_t blocks[static 2],
return LFSR_DATA_BUF(buffer, d); return LFSR_DATA_BUF(buffer, d);
} }
static int lfsr_data_readmblocks(lfs_t *lfs, lfsr_data_t *data, static int lfsr_data_readmptr(lfs_t *lfs, lfsr_data_t *data,
lfs_block_t blocks[static 2]) { lfs_block_t blocks[static 2]) {
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
int err = lfsr_data_readleb128(lfs, data, (int32_t*)&blocks[i]); int err = lfsr_data_readleb128(lfs, data, (int32_t*)&blocks[i]);
@@ -5208,7 +5208,7 @@ static int lfsr_mtree_lookup(lfs_t *lfs, lfsr_smid_t mid, lfsr_mdir_t *mdir_) {
LFS_ASSERT(tag == LFSR_TAG_MDIR); LFS_ASSERT(tag == LFSR_TAG_MDIR);
// decode mdir // decode mdir
err = lfsr_data_readmblocks(lfs, &data, mdir_->u.m.blocks); err = lfsr_data_readmptr(lfs, &data, mdir_->u.m.blocks);
if (err) { if (err) {
return err; return err;
} }
@@ -5221,12 +5221,12 @@ static int lfsr_mtree_lookup(lfs_t *lfs, lfsr_smid_t mid, lfsr_mdir_t *mdir_) {
static int lfsr_mtree_parent(lfs_t *lfs, const lfs_block_t blocks[static 2], static int lfsr_mtree_parent(lfs_t *lfs, const lfs_block_t blocks[static 2],
lfsr_mdir_t *mparent_) { lfsr_mdir_t *mparent_) {
// we only call this when we actually have parents // we only call this when we actually have parents
LFS_ASSERT(!lfsr_mblocks_ismrootanchor(blocks)); LFS_ASSERT(!lfsr_mptr_ismrootanchor(blocks));
// scan list of mroots for our requested pair // scan list of mroots for our requested pair
lfs_block_t blocks_[2] = { lfs_block_t blocks_[2] = {
LFSR_MBLOCKS_MROOTANCHOR()[0], LFSR_MPTR_MROOTANCHOR()[0],
LFSR_MBLOCKS_MROOTANCHOR()[1]}; LFSR_MPTR_MROOTANCHOR()[1]};
while (true) { while (true) {
// fetch next possible superblock // fetch next possible superblock
lfsr_mdir_t mdir; lfsr_mdir_t mdir;
@@ -5244,13 +5244,13 @@ static int lfsr_mtree_parent(lfs_t *lfs, const lfs_block_t blocks[static 2],
} }
// decode mdir // decode mdir
err = lfsr_data_readmblocks(lfs, &data, blocks_); err = lfsr_data_readmptr(lfs, &data, blocks_);
if (err) { if (err) {
return err; return err;
} }
// found our child? // found our child?
if (lfsr_mblocks_cmp(blocks_, blocks) == 0) { if (lfsr_mptr_cmp(blocks_, blocks) == 0) {
*mparent_ = mdir; *mparent_ = mdir;
return 0; return 0;
} }
@@ -6209,11 +6209,11 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
uint8_t msibling_buf[LFSR_MDIR_DSIZE]; uint8_t msibling_buf[LFSR_MDIR_DSIZE];
err = lfsr_btree_commit(lfs, &mtree_, LFSR_ATTRS( err = lfsr_btree_commit(lfs, &mtree_, LFSR_ATTRS(
LFSR_ATTR(mdir_.mid | lfsr_midrmask(lfs), LFSR_ATTR(mdir_.mid | lfsr_midrmask(lfs),
MDIR, 0, FROMMBLOCKS(mdir_.u.m.blocks, mdir_buf)), MDIR, 0, FROMMPTR(mdir_.u.m.blocks, mdir_buf)),
LFSR_ATTR((mdir_.mid | lfsr_midrmask(lfs))+1, LFSR_ATTR((mdir_.mid | lfsr_midrmask(lfs))+1,
BRANCH, +lfsr_mleafweight(lfs), DATA(split_data)), BRANCH, +lfsr_mleafweight(lfs), DATA(split_data)),
LFSR_ATTR(msibling_.mid | lfsr_midrmask(lfs), LFSR_ATTR(msibling_.mid | lfsr_midrmask(lfs),
MDIR, 0, FROMMBLOCKS(msibling_.u.m.blocks, msibling_buf)))); MDIR, 0, FROMMPTR(msibling_.u.m.blocks, msibling_buf))));
if (err) { if (err) {
return err; return err;
} }
@@ -6260,7 +6260,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
uint8_t mdir_buf[LFSR_MDIR_DSIZE]; uint8_t mdir_buf[LFSR_MDIR_DSIZE];
err = lfsr_btree_commit(lfs, &mtree_, LFSR_ATTRS( err = lfsr_btree_commit(lfs, &mtree_, LFSR_ATTRS(
LFSR_ATTR(mdir_.mid | lfsr_midrmask(lfs), LFSR_ATTR(mdir_.mid | lfsr_midrmask(lfs),
MDIR, 0, FROMMBLOCKS(mdir_.u.m.blocks, mdir_buf)))); MDIR, 0, FROMMPTR(mdir_.u.m.blocks, mdir_buf))));
if (err) { if (err) {
return err; return err;
} }
@@ -6370,7 +6370,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
uint8_t mrootchild_buf[LFSR_MDIR_DSIZE]; uint8_t mrootchild_buf[LFSR_MDIR_DSIZE];
err = lfsr_mdir_commit_(lfs, &mrootparent_, -1, -1, NULL, LFSR_ATTRS( err = lfsr_mdir_commit_(lfs, &mrootparent_, -1, -1, NULL, LFSR_ATTRS(
LFSR_ATTR(-1, LFSR_ATTR(-1,
MROOT, 0, FROMMBLOCKS(mrootchild_.u.m.blocks, MROOT, 0, FROMMPTR(mrootchild_.u.m.blocks,
mrootchild_buf)))); mrootchild_buf))));
if (err) { if (err) {
LFS_ASSERT(err != LFS_ERR_RANGE); LFS_ASSERT(err != LFS_ERR_RANGE);
@@ -6438,7 +6438,7 @@ static int lfsr_mdir_commit(lfs_t *lfs, lfsr_mdir_t *mdir,
uint8_t mrootchild_buf[LFSR_MDIR_DSIZE]; uint8_t mrootchild_buf[LFSR_MDIR_DSIZE];
err = lfsr_mdir_commit__(lfs, &mrootparent_, -1, -1, LFSR_ATTRS( err = lfsr_mdir_commit__(lfs, &mrootparent_, -1, -1, LFSR_ATTRS(
LFSR_ATTR(-1, LFSR_ATTR(-1,
WIDE(MROOT), 0, FROMMBLOCKS(mrootchild_.u.m.blocks, WIDE(MROOT), 0, FROMMPTR(mrootchild_.u.m.blocks,
mrootchild_buf)))); mrootchild_buf))));
if (err) { if (err) {
LFS_ASSERT(err != LFS_ERR_NOENT); LFS_ASSERT(err != LFS_ERR_NOENT);
@@ -6646,7 +6646,7 @@ static int lfsr_mtree_namelookup(lfs_t *lfs,
LFS_ASSERT(weight == lfsr_mleafweight(lfs)); LFS_ASSERT(weight == lfsr_mleafweight(lfs));
// decode mdir // decode mdir
err = lfsr_data_readmblocks(lfs, &data, mdir.u.m.blocks); err = lfsr_data_readmptr(lfs, &data, mdir.u.m.blocks);
if (err) { if (err) {
return err; return err;
} }
@@ -6902,7 +6902,7 @@ static int lfsr_traversal_read(lfs_t *lfs, lfsr_traversal_t *traversal,
case LFSR_TRAVERSAL_MROOTANCHOR:; case LFSR_TRAVERSAL_MROOTANCHOR:;
// fetch the first mroot 0x{0,1} // fetch the first mroot 0x{0,1}
int err = lfsr_mdir_fetch(lfs, &traversal->mdir, int err = lfsr_mdir_fetch(lfs, &traversal->mdir,
-1, LFSR_MBLOCKS_MROOTANCHOR()); -1, LFSR_MPTR_MROOTANCHOR());
if (err) { if (err) {
return err; return err;
} }
@@ -6936,7 +6936,7 @@ static int lfsr_traversal_read(lfs_t *lfs, lfsr_traversal_t *traversal,
// found a new mroot // found a new mroot
if (tag == LFSR_TAG_MROOT) { if (tag == LFSR_TAG_MROOT) {
err = lfsr_data_readmblocks(lfs, &data, err = lfsr_data_readmptr(lfs, &data,
traversal->mdir.u.m.blocks); traversal->mdir.u.m.blocks);
if (err) { if (err) {
return err; return err;
@@ -6948,7 +6948,7 @@ static int lfsr_traversal_read(lfs_t *lfs, lfsr_traversal_t *traversal,
// inner nodes require checksums of their pointers, so creating // inner nodes require checksums of their pointers, so creating
// a valid cycle is actually quite difficult // a valid cycle is actually quite difficult
// //
if (lfsr_mblocks_cmp( if (lfsr_mptr_cmp(
traversal->mdir.u.m.blocks, traversal->mdir.u.m.blocks,
traversal->u.mtortoise.blocks) == 0) { traversal->u.mtortoise.blocks) == 0) {
LFS_ERROR("Cycle detected during mtree traversal " LFS_ERROR("Cycle detected during mtree traversal "
@@ -6983,7 +6983,7 @@ static int lfsr_traversal_read(lfs_t *lfs, lfsr_traversal_t *traversal,
// found an mdir? // found an mdir?
} else if (tag == LFSR_TAG_MDIR) { } else if (tag == LFSR_TAG_MDIR) {
// fetch this mdir // fetch this mdir
err = lfsr_data_readmblocks(lfs, &data, err = lfsr_data_readmptr(lfs, &data,
tinfo->u.mdir.u.m.blocks); tinfo->u.mdir.u.m.blocks);
if (err) { if (err) {
return err; return err;
@@ -7092,7 +7092,7 @@ static int lfsr_traversal_read(lfs_t *lfs, lfsr_traversal_t *traversal,
// fetch mdir if we're on a leaf // fetch mdir if we're on a leaf
} else if (binfo.tag == LFSR_TAG_MDIR) { } else if (binfo.tag == LFSR_TAG_MDIR) {
err = lfsr_data_readmblocks(lfs, &binfo.u.data, err = lfsr_data_readmptr(lfs, &binfo.u.data,
traversal->mdir.u.m.blocks); traversal->mdir.u.m.blocks);
if (err) { if (err) {
return err; return err;
@@ -7751,7 +7751,7 @@ static int lfsr_mountinited(lfs_t *lfs) {
err = lfsr_btree_commit(lfs, &lfs->mtree, LFSR_ATTRS( err = lfsr_btree_commit(lfs, &lfs->mtree, LFSR_ATTRS(
LFSR_ATTR(0, LFSR_ATTR(0,
MDIR, +lfsr_mleafweight(lfs), MDIR, +lfsr_mleafweight(lfs),
FROMMBLOCKS(tinfo.u.mdir.u.m.blocks, FROMMPTR(tinfo.u.mdir.u.m.blocks,
mdir_buf)))); mdir_buf))));
LFS_ASSERT(!err); LFS_ASSERT(!err);
} }
+1 -1
View File
@@ -4186,7 +4186,7 @@ code = '''
uint8_t buf[LFSR_MDIR_DSIZE]; uint8_t buf[LFSR_MDIR_DSIZE];
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS( lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
LFSR_ATTR(-1, LFSR_ATTR(-1,
MROOT, 0, FROMMBLOCKS(LFSR_MBLOCKS_MROOTANCHOR(), buf)))) => 0; MROOT, 0, FROMMPTR(LFSR_MPTR_MROOTANCHOR(), buf)))) => 0;
// technically, cycle detection only needs to work when we're validating // technically, cycle detection only needs to work when we're validating
lfsr_traversal_t traversal = LFSR_TRAVERSAL(LFSR_TRAVERSAL_VALIDATE); lfsr_traversal_t traversal = LFSR_TRAVERSAL(LFSR_TRAVERSAL_VALIDATE);