Added lfsr_cat_t to represent concatenated data
So now, instead of one data type trying to do everything, we have two:
1. lfsr_data_t - Readable data, either in-RAM or on-disk
2. lfsr_cat_t - Concatenated data for progging, may be either a simple
in-RAM buffer or an indirect list of lfsr_data_ts
This comes from an observation that most lfsr_attr_t datas were either
simple buffers, NULL, or required the indirect concatenated datas
anyways (concatendated file fragments). By separating lfsr_cat_t and
lfsr_data_t, maybe we can save RAM in lfsr_attr_t by not needing the
three words necessary for the less-common disk references.
Note the interesting tradeoff:
Simple in-RAM buffers/NULL decrease by 1 word (4 bytes):
lfsr_data_t lfsr_cat_t
.---+---+---+---. .---+---+---+---.
|0| size | => |0| size |
+---+---+---+---+ +---+---+---+---+
| ptr | | ptr |
+---+---+---+---+ '---+---+---+---'
| (unused) |
'---+---+---+---'
'-------.-------' '-------.-------'
12 bytes 8 bytes
While on-disk references increase by 2 words (8 bytes):
lfsr_data_t lfsr_cat_t lfsr_data_t
.---+---+---+---. .---+---+---+---. .---+---+---+---.
|1| size | => |1| size | .>|1| size |
+---+---+---+---+ +---+---+---+---+ | +---+---+---+---+
| block | | ptr -------' | block |
+---+---+---+---+ '---+---+---+---' +---+---+---+---+
| off | | off |
'---+---+---+---' '---+---+---+---'
'-------.-------' '-----------------.-----------------'
12 bytes 20 bytes
Unless the on-disk references also need concatenation, in which case
this still saves 1 word (4 bytes).
Note I'm not sure this type split is generalizable to other systems. In
littlefs we can't use recursion, so progging concatenated datas already
required two nested functions, and we happen to never need to read
concatenated data, allowing us to completely omit that functionality. In
other systems, where maybe disk-reference attrs are more common, this
tradeoff may not make sense.
Some other things to note:
- We're also losing the inlined-data representation in this change.
Unfortunately earlier lfsr_data_t measurements showed that this didn't
really contribute much. It saved RAM in name attrs but added quite a
bit of complexity to lfsr_data_t operations.
- By separating simple/cat and RAM/disk, we reduce the abused size bits
from 2-bits down to 1-bit. This doesn't really matter for our current
31/28-bit littlefs impl, but is nice in that it reenables the
theoretical 31/31-bit littlefs impl without in-RAM data-structure
changes.
There are a few temporary hacks that need to be figured out, but this is
already showing code/stack savings. Which is fascinating considering the
new lfsr_cat_* functions and increased temporary allocations:
code stack
before: 33856 2824
after: 33812 (-0.1%) 2800 (-0.8%)
This commit is contained in:
@@ -393,18 +393,10 @@ typedef struct lfs_mdir {
|
||||
lfs_block_t tail[2];
|
||||
} lfs_mdir_t;
|
||||
|
||||
// Either an on-disk or in-device data pointer
|
||||
//
|
||||
// The top 2 bits of data's size indicates the actual encoding
|
||||
// 0b00 => in-RAM buffer
|
||||
// 0b01 => a single leb128
|
||||
// 0b10 => on-disk reference
|
||||
// 0b11 => concatenated datas
|
||||
//
|
||||
// Note concatenated datas can only be 1 level deep. Concatenating
|
||||
// concatenated datas would require recursion to resolve.
|
||||
//
|
||||
// either an on-disk or in-device data pointer
|
||||
typedef struct lfsr_data {
|
||||
// sign(size)=0 => in-RAM buffer
|
||||
// sign(size)=1 => on-disk reference
|
||||
union {
|
||||
lfs_size_t size;
|
||||
struct {
|
||||
@@ -416,14 +408,6 @@ typedef struct lfsr_data {
|
||||
lfs_size_t size;
|
||||
const uint8_t *buffer;
|
||||
} buf;
|
||||
struct {
|
||||
lfs_size_t size;
|
||||
uint8_t buf[8];
|
||||
} imm;
|
||||
struct {
|
||||
lfs_size_t size;
|
||||
const struct lfsr_data *datas;
|
||||
} cat;
|
||||
} u;
|
||||
} lfsr_data_t;
|
||||
|
||||
|
||||
+181
-204
File diff suppressed because it is too large
Load Diff
+124
-124
@@ -28,7 +28,7 @@ code = '''
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(
|
||||
LFSR_TAG_UATTR(i), 0,
|
||||
LFSR_DATA_BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
LFSR_CAT_BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
}
|
||||
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
@@ -73,7 +73,7 @@ code = '''
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(
|
||||
LFSR_TAG_UATTR(i), 0,
|
||||
LFSR_DATA_BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
LFSR_CAT_BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
}
|
||||
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
@@ -115,7 +115,7 @@ code = '''
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(
|
||||
LFSR_TAG_UATTR(1), 0,
|
||||
LFSR_DATA_BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
LFSR_CAT_BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
uint8_t buffer[4];
|
||||
@@ -162,13 +162,13 @@ code = '''
|
||||
uint8_t buffer[SIZE];
|
||||
memset(buffer, 'a', SIZE);
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer, 'b', SIZE);
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, &lfs.mtree, 0, &mdir) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -232,14 +232,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -308,14 +308,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -332,7 +332,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// force mdir to compact
|
||||
@@ -420,7 +420,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
uint8_t buffer[256];
|
||||
@@ -510,7 +510,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// double check
|
||||
@@ -593,14 +593,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -617,7 +617,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
assert(mdir.rbyd.weight == 0);
|
||||
|
||||
// assert mdir was dropped
|
||||
@@ -670,14 +670,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -696,7 +696,7 @@ code = '''
|
||||
// force mdir to compact while we're removing
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
assert(mdir.rbyd.weight == 0);
|
||||
|
||||
// assert mdir was dropped
|
||||
@@ -749,14 +749,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// remove an entry, forcing the mdir to be dropped
|
||||
@@ -767,7 +767,7 @@ code = '''
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// assert split/drop worked out
|
||||
@@ -820,14 +820,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -844,7 +844,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// remove an entry, forcing the mdir to be dropped
|
||||
@@ -854,7 +854,7 @@ code = '''
|
||||
// force mdir to compact while we're removing
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
assert(mdir.rbyd.weight == 1);
|
||||
|
||||
// assert split/drop worked out
|
||||
@@ -919,14 +919,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -943,7 +943,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// remove an entry, forcing the mdir to be dropped
|
||||
@@ -953,7 +953,7 @@ code = '''
|
||||
// force mdir to compact while we're removing
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
assert(mdir.rbyd.weight == 1);
|
||||
|
||||
// assert split/drop worked out
|
||||
@@ -1045,7 +1045,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// double check
|
||||
@@ -1074,7 +1074,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1149,13 +1149,13 @@ code = '''
|
||||
uint8_t buffer[SIZE];
|
||||
memset(buffer, 'a', SIZE);
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer, 'b', SIZE);
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, &lfs.mtree, 0, &mdir) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -1171,10 +1171,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
|
||||
@@ -1238,14 +1238,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -1264,10 +1264,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
|
||||
@@ -1335,14 +1335,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -1361,10 +1361,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
|
||||
@@ -1432,7 +1432,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
@@ -1489,7 +1489,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
@@ -1557,7 +1557,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
@@ -1620,14 +1620,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -1649,10 +1649,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
// assert mroot relocated
|
||||
@@ -1722,14 +1722,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -1746,7 +1746,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// setup mroot to compact and relocate on next commit
|
||||
@@ -1756,10 +1756,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
// assert mroot relocated
|
||||
@@ -1841,14 +1841,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -1870,11 +1870,11 @@ code = '''
|
||||
// force mdir to compact twice, this should relocate
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
// force mdir to compact while we're removing
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
assert(mdir.rbyd.weight == 0);
|
||||
// assert mroot relocated
|
||||
assert(lfsr_mdir_cmp(&old_mroot, &lfs.mroot) != 0);
|
||||
@@ -1932,13 +1932,13 @@ code = '''
|
||||
uint8_t buffer[SIZE];
|
||||
memset(buffer, 'a', SIZE);
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer, 'b', SIZE);
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, &lfs.mtree, 0, &mdir) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact, this should both uninline and relocate
|
||||
lfsr_mdir_t old_mroot = lfs.mroot;
|
||||
@@ -2012,14 +2012,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact, this should both split and relocate
|
||||
@@ -2120,7 +2120,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// double check
|
||||
@@ -2150,7 +2150,7 @@ code = '''
|
||||
// we can't really change metadata names, but commits still
|
||||
// trigger writes to the mdir
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// double check
|
||||
@@ -2179,7 +2179,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2249,7 +2249,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(left.mdir.rbyd.weight == 2);
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
@@ -2257,7 +2257,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "c", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0c", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0c", 2)))) => 0;
|
||||
assert(right.mdir.rbyd.weight == 3);
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
@@ -2266,7 +2266,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0b", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0b", 2)))) => 0;
|
||||
assert(mdir.rbyd.weight == 4);
|
||||
lfsr_data_t data;
|
||||
|
||||
@@ -2308,7 +2308,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(left.mdir.rbyd.weight == 2);
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
@@ -2316,7 +2316,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0b", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0b", 2)))) => 0;
|
||||
assert(right.mdir.rbyd.weight == 3);
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
@@ -2325,7 +2325,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&mdir, NULL, NULL) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// assert neighbor was removed
|
||||
@@ -2358,7 +2358,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(left.mdir.rbyd.weight == 2);
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
@@ -2366,7 +2366,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0b", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0b", 2)))) => 0;
|
||||
assert(right.mdir.rbyd.weight == 3);
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
@@ -2375,7 +2375,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
&mdir, NULL, NULL) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// assert neighbor was removed
|
||||
@@ -2410,7 +2410,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(left.mdir.rbyd.weight == 2);
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
@@ -2418,7 +2418,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "d", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0d", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0d", 2)))) => 0;
|
||||
assert(right.mdir.rbyd.weight == 3);
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
@@ -2430,14 +2430,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 4);
|
||||
|
||||
memset(buffer+1, 'c', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 5);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -2483,7 +2483,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(left.mdir.rbyd.weight == 2);
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
@@ -2491,7 +2491,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "e", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0e", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0e", 2)))) => 0;
|
||||
assert(right.mdir.rbyd.weight == 3);
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
@@ -2503,14 +2503,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 4);
|
||||
|
||||
memset(buffer+1, 'd', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 5);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -2522,7 +2522,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 4);
|
||||
|
||||
// force mdir to compact
|
||||
@@ -2568,7 +2568,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(left.mdir.rbyd.weight == 2);
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
@@ -2576,7 +2576,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0b", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0b", 2)))) => 0;
|
||||
assert(right.mdir.rbyd.weight == 3);
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
@@ -2626,7 +2626,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(left.mdir.rbyd.weight == 2);
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
@@ -2634,7 +2634,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "d", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0d", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0d", 2)))) => 0;
|
||||
assert(right.mdir.rbyd.weight == 3);
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
@@ -2646,14 +2646,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 4);
|
||||
|
||||
memset(buffer+1, 'c', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 5);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -2672,10 +2672,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
|
||||
@@ -2715,7 +2715,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(left.mdir.rbyd.weight == 2);
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
@@ -2723,7 +2723,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "d", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0d", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0d", 2)))) => 0;
|
||||
assert(right.mdir.rbyd.weight == 3);
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
@@ -2735,14 +2735,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 4);
|
||||
|
||||
memset(buffer+1, 'c', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 5);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -2761,10 +2761,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
|
||||
@@ -2802,7 +2802,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(left.mdir.rbyd.weight == 2);
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
@@ -2810,7 +2810,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "f", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0f", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0f", 2)))) => 0;
|
||||
assert(right.mdir.rbyd.weight == 3);
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
@@ -2822,14 +2822,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 4);
|
||||
|
||||
memset(buffer+1, 'e', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 5);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -2841,7 +2841,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 4);
|
||||
|
||||
// force mdir to compact
|
||||
@@ -2858,7 +2858,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// force mdir to compact
|
||||
@@ -2904,7 +2904,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(left.mdir.rbyd.weight == 2);
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
@@ -2912,7 +2912,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "e", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0e", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0e", 2)))) => 0;
|
||||
assert(right.mdir.rbyd.weight == 3);
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
@@ -2924,14 +2924,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 4);
|
||||
|
||||
memset(buffer+1, 'd', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 5);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -2943,7 +2943,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 4);
|
||||
|
||||
// force mdir to compact
|
||||
@@ -2957,7 +2957,7 @@ code = '''
|
||||
|
||||
// now remove the middle entry, forcing a drop
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_CAT_NULL()))) => 0;
|
||||
assert(mdir.rbyd.weight == 0);
|
||||
|
||||
// assert mdir was dropped correctly
|
||||
@@ -3002,7 +3002,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// test that we can traverse the tree, keeping track of all blocks we see
|
||||
@@ -3102,13 +3102,13 @@ code = '''
|
||||
uint8_t buffer[SIZE];
|
||||
memset(buffer, 'a', SIZE);
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer, 'b', SIZE);
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, &lfs.mtree, 0, &mdir) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -3236,14 +3236,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -3376,14 +3376,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 3);
|
||||
|
||||
// force mroot to compact
|
||||
@@ -3400,7 +3400,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// force mdir to compact
|
||||
@@ -3541,7 +3541,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF("\0a", 2)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
@@ -3660,7 +3660,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
uint8_t buffer[256];
|
||||
@@ -3808,7 +3808,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// double check
|
||||
@@ -3942,7 +3942,7 @@ code = '''
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(
|
||||
LFSR_TAG_MROOT, 0,
|
||||
LFSR_DATA_FROMMPTR(&LFSR_MPTR_MROOTANCHOR())))) => 0;
|
||||
LFSR_CAT_MPTR(&LFSR_MPTR_MROOTANCHOR())))) => 0;
|
||||
|
||||
// technically, cycle detection only needs to work when we're validating
|
||||
lfsr_traversal_t traversal = LFSR_TRAVERSAL(LFSR_TRAVERSAL_VALIDATE);
|
||||
@@ -4020,7 +4020,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
@@ -4077,7 +4077,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_CAT_BUF(buffer, SIZE)))) => 0;
|
||||
assert(mdir.rbyd.weight == 2);
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
|
||||
+830
-830
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user