Adopted more single-char field names
Limited to nested struct fields where the names don't really matter:
- bptr.data -> bptr.d
- mdir.rbyd -> mdir.r
Ok it actually just ended up those two.
This is on the tail end of some optimization work that ended up
abandoned because of maintainability concerns. But it did highlight that
struct nesting gets a bit out-of-control when trying to both optimize
stack allocations and respect C99's strict aliasing.
Consider further fragmenting lfs3_rbyd_t for fine-grain stack
allocations:
typedef struct lfs3_rbyd {
struct lfs3_rtrunkcksum {
struct lfs3_rtrunk {
lfs3_rid_t weight;
struct lfs3_rtrunktrunk {
lfs3_block_t blocks[2];
lfs3_size_t trunk;
} rtrunktrunk;
} rtrunk;
uint32_t cksum;
} rtrunkcksum;
lfs3_size_t eoff;
} lfs3_rbyd_t;
Accessing fields just starts to get silly:
rbyd.rtrunkcksum.rtrunk.trunktrunk.trunk
At least single-char field names keeps a little bit of readability:
rbyd.ck.t.t.trunk
Or for some real examples:
- file->b.o.mdir.rbyd.weight -> file->b.o.mdir.r.weight
- bptr->data.u.disk.block -> bptr->d.u.disk.block
This commit is contained in:
@@ -655,7 +655,7 @@ typedef struct lfs3_bptr {
|
|||||||
// sign2(size)=0b00 => in-RAM buffer
|
// sign2(size)=0b00 => in-RAM buffer
|
||||||
// sign2(size)=0b10 => on-disk data
|
// sign2(size)=0b10 => on-disk data
|
||||||
// sign2(size)=0b11 => block pointer
|
// sign2(size)=0b11 => block pointer
|
||||||
lfs3_data_t data;
|
lfs3_data_t d;
|
||||||
#if !defined(LFS3_2BONLY) && !defined(LFS3_CKDATACKSUMREADS)
|
#if !defined(LFS3_2BONLY) && !defined(LFS3_CKDATACKSUMREADS)
|
||||||
// sign(cksize)=0 => block not erased
|
// sign(cksize)=0 => block not erased
|
||||||
// sign(cksize)=1 => block erased
|
// sign(cksize)=1 => block erased
|
||||||
@@ -687,7 +687,7 @@ typedef lfs3_rbyd_t lfs3_btree_t;
|
|||||||
// littlefs's atomic metadata log type
|
// littlefs's atomic metadata log type
|
||||||
typedef struct lfs3_mdir {
|
typedef struct lfs3_mdir {
|
||||||
lfs3_smid_t mid;
|
lfs3_smid_t mid;
|
||||||
lfs3_rbyd_t rbyd;
|
lfs3_rbyd_t r;
|
||||||
uint32_t gcksumdelta;
|
uint32_t gcksumdelta;
|
||||||
} lfs3_mdir_t;
|
} lfs3_mdir_t;
|
||||||
|
|
||||||
|
|||||||
+26
-26
@@ -198,18 +198,18 @@ code = '''
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tag == LFS3_TAG_MDIR) {
|
if (tag == LFS3_TAG_MDIR) {
|
||||||
lfs3_mdir_t *mdir = (lfs3_mdir_t*)bptr.data.u.buffer;
|
lfs3_mdir_t *mdir = (lfs3_mdir_t*)bptr.d.u.buffer;
|
||||||
printf("traversal: 0x%x mdir 0x{%x,%x}\n",
|
printf("traversal: 0x%x mdir 0x{%x,%x}\n",
|
||||||
tag,
|
tag,
|
||||||
mdir->rbyd.blocks[0],
|
mdir->r.blocks[0],
|
||||||
mdir->rbyd.blocks[1]);
|
mdir->r.blocks[1]);
|
||||||
|
|
||||||
// keep track of seen blocks
|
// keep track of seen blocks
|
||||||
seen[mdir->rbyd.blocks[1] / 8] |= 1 << (mdir->rbyd.blocks[1] % 8);
|
seen[mdir->r.blocks[1] / 8] |= 1 << (mdir->r.blocks[1] % 8);
|
||||||
seen[mdir->rbyd.blocks[0] / 8] |= 1 << (mdir->rbyd.blocks[0] % 8);
|
seen[mdir->r.blocks[0] / 8] |= 1 << (mdir->r.blocks[0] % 8);
|
||||||
|
|
||||||
} else if (tag == LFS3_TAG_BRANCH) {
|
} else if (tag == LFS3_TAG_BRANCH) {
|
||||||
lfs3_rbyd_t *rbyd = (lfs3_rbyd_t*)bptr.data.u.buffer;
|
lfs3_rbyd_t *rbyd = (lfs3_rbyd_t*)bptr.d.u.buffer;
|
||||||
printf("traversal: 0x%x btree 0x%x.%x\n",
|
printf("traversal: 0x%x btree 0x%x.%x\n",
|
||||||
tag,
|
tag,
|
||||||
rbyd->blocks[0], rbyd->trunk);
|
rbyd->blocks[0], rbyd->trunk);
|
||||||
@@ -369,18 +369,18 @@ code = '''
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tag == LFS3_TAG_MDIR) {
|
if (tag == LFS3_TAG_MDIR) {
|
||||||
lfs3_mdir_t *mdir = (lfs3_mdir_t*)bptr.data.u.buffer;
|
lfs3_mdir_t *mdir = (lfs3_mdir_t*)bptr.d.u.buffer;
|
||||||
printf("traversal: 0x%x mdir 0x{%x,%x}\n",
|
printf("traversal: 0x%x mdir 0x{%x,%x}\n",
|
||||||
tag,
|
tag,
|
||||||
mdir->rbyd.blocks[0],
|
mdir->r.blocks[0],
|
||||||
mdir->rbyd.blocks[1]);
|
mdir->r.blocks[1]);
|
||||||
|
|
||||||
// keep track of seen blocks
|
// keep track of seen blocks
|
||||||
seen[mdir->rbyd.blocks[1] / 8] |= 1 << (mdir->rbyd.blocks[1] % 8);
|
seen[mdir->r.blocks[1] / 8] |= 1 << (mdir->r.blocks[1] % 8);
|
||||||
seen[mdir->rbyd.blocks[0] / 8] |= 1 << (mdir->rbyd.blocks[0] % 8);
|
seen[mdir->r.blocks[0] / 8] |= 1 << (mdir->r.blocks[0] % 8);
|
||||||
|
|
||||||
} else if (tag == LFS3_TAG_BRANCH) {
|
} else if (tag == LFS3_TAG_BRANCH) {
|
||||||
lfs3_rbyd_t *rbyd = (lfs3_rbyd_t*)bptr.data.u.buffer;
|
lfs3_rbyd_t *rbyd = (lfs3_rbyd_t*)bptr.d.u.buffer;
|
||||||
printf("traversal: 0x%x btree 0x%x.%x\n",
|
printf("traversal: 0x%x btree 0x%x.%x\n",
|
||||||
tag,
|
tag,
|
||||||
rbyd->blocks[0], rbyd->trunk);
|
rbyd->blocks[0], rbyd->trunk);
|
||||||
@@ -391,11 +391,11 @@ code = '''
|
|||||||
} else if (tag == LFS3_TAG_BLOCK) {
|
} else if (tag == LFS3_TAG_BLOCK) {
|
||||||
printf("traversal: 0x%x block 0x%x\n",
|
printf("traversal: 0x%x block 0x%x\n",
|
||||||
tag,
|
tag,
|
||||||
bptr.data.u.disk.block);
|
bptr.d.u.disk.block);
|
||||||
|
|
||||||
// keep track of seen blocks
|
// keep track of seen blocks
|
||||||
seen[bptr.data.u.disk.block / 8]
|
seen[bptr.d.u.disk.block / 8]
|
||||||
|= 1 << (bptr.data.u.disk.block % 8);
|
|= 1 << (bptr.d.u.disk.block % 8);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// this shouldn't happen
|
// this shouldn't happen
|
||||||
@@ -526,20 +526,20 @@ code = '''
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tag == LFS3_TAG_MDIR) {
|
if (tag == LFS3_TAG_MDIR) {
|
||||||
lfs3_mdir_t *mdir = (lfs3_mdir_t*)bptr.data.u.buffer;
|
lfs3_mdir_t *mdir = (lfs3_mdir_t*)bptr.d.u.buffer;
|
||||||
printf("traversal: 0x%x mdir 0x{%x,%x}\n",
|
printf("traversal: 0x%x mdir 0x{%x,%x}\n",
|
||||||
tag,
|
tag,
|
||||||
mdir->rbyd.blocks[0],
|
mdir->r.blocks[0],
|
||||||
mdir->rbyd.blocks[1]);
|
mdir->r.blocks[1]);
|
||||||
|
|
||||||
// keep track of seen blocks
|
// keep track of seen blocks
|
||||||
seen[mdir->rbyd.blocks[1] / 8]
|
seen[mdir->r.blocks[1] / 8]
|
||||||
|= 1 << (mdir->rbyd.blocks[1] % 8);
|
|= 1 << (mdir->r.blocks[1] % 8);
|
||||||
seen[mdir->rbyd.blocks[0] / 8]
|
seen[mdir->r.blocks[0] / 8]
|
||||||
|= 1 << (mdir->rbyd.blocks[0] % 8);
|
|= 1 << (mdir->r.blocks[0] % 8);
|
||||||
|
|
||||||
} else if (tag == LFS3_TAG_BRANCH) {
|
} else if (tag == LFS3_TAG_BRANCH) {
|
||||||
lfs3_rbyd_t *rbyd = (lfs3_rbyd_t*)bptr.data.u.buffer;
|
lfs3_rbyd_t *rbyd = (lfs3_rbyd_t*)bptr.d.u.buffer;
|
||||||
printf("traversal: 0x%x btree 0x%x.%x\n",
|
printf("traversal: 0x%x btree 0x%x.%x\n",
|
||||||
tag,
|
tag,
|
||||||
rbyd->blocks[0], rbyd->trunk);
|
rbyd->blocks[0], rbyd->trunk);
|
||||||
@@ -551,11 +551,11 @@ code = '''
|
|||||||
} else if (tag == LFS3_TAG_BLOCK) {
|
} else if (tag == LFS3_TAG_BLOCK) {
|
||||||
printf("traversal: 0x%x block 0x%x\n",
|
printf("traversal: 0x%x block 0x%x\n",
|
||||||
tag,
|
tag,
|
||||||
bptr.data.u.disk.block);
|
bptr.d.u.disk.block);
|
||||||
|
|
||||||
// keep track of seen blocks
|
// keep track of seen blocks
|
||||||
seen[bptr.data.u.disk.block / 8]
|
seen[bptr.d.u.disk.block / 8]
|
||||||
|= 1 << (bptr.data.u.disk.block % 8);
|
|= 1 << (bptr.d.u.disk.block % 8);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// this shouldn't happen
|
// this shouldn't happen
|
||||||
|
|||||||
+30
-30
@@ -226,9 +226,9 @@ code = '''
|
|||||||
bid,
|
bid,
|
||||||
tag,
|
tag,
|
||||||
weight,
|
weight,
|
||||||
bptr.data.u.disk.block,
|
lfs3_bptr_block(&bptr),
|
||||||
bptr.data.u.disk.off,
|
lfs3_bptr_off(&bptr),
|
||||||
lfs3_data_size(bptr.data));
|
lfs3_bptr_size(&bptr));
|
||||||
|
|
||||||
// we disabled block crystallization so this shouldn't
|
// we disabled block crystallization so this shouldn't
|
||||||
// happen
|
// happen
|
||||||
@@ -375,9 +375,9 @@ code = '''
|
|||||||
bid,
|
bid,
|
||||||
tag,
|
tag,
|
||||||
weight,
|
weight,
|
||||||
bptr.data.u.disk.block,
|
lfs3_bptr_block(&bptr),
|
||||||
bptr.data.u.disk.off,
|
lfs3_bptr_off(&bptr),
|
||||||
lfs3_data_size(bptr.data));
|
lfs3_bptr_size(&bptr));
|
||||||
|
|
||||||
// keep track of how many data blocks we've seen
|
// keep track of how many data blocks we've seen
|
||||||
blocks += 1;
|
blocks += 1;
|
||||||
@@ -640,9 +640,9 @@ code = '''
|
|||||||
bid,
|
bid,
|
||||||
tag,
|
tag,
|
||||||
weight,
|
weight,
|
||||||
bptr.data.u.disk.block,
|
lfs3_bptr_block(&bptr),
|
||||||
bptr.data.u.disk.off,
|
lfs3_bptr_off(&bptr),
|
||||||
lfs3_data_size(bptr.data));
|
lfs3_bptr_size(&bptr));
|
||||||
|
|
||||||
// we disabled block crystallization so this shouldn't
|
// we disabled block crystallization so this shouldn't
|
||||||
// happen
|
// happen
|
||||||
@@ -804,9 +804,9 @@ code = '''
|
|||||||
bid,
|
bid,
|
||||||
tag,
|
tag,
|
||||||
weight,
|
weight,
|
||||||
bptr.data.u.disk.block,
|
lfs3_bptr_block(&bptr),
|
||||||
bptr.data.u.disk.off,
|
lfs3_bptr_off(&bptr),
|
||||||
lfs3_data_size(bptr.data));
|
lfs3_bptr_size(&bptr));
|
||||||
|
|
||||||
// keep track of how many data blocks we've seen
|
// keep track of how many data blocks we've seen
|
||||||
blocks += 1;
|
blocks += 1;
|
||||||
@@ -2131,9 +2131,9 @@ code = '''
|
|||||||
bid,
|
bid,
|
||||||
tag,
|
tag,
|
||||||
weight,
|
weight,
|
||||||
bptr.data.u.disk.block,
|
lfs3_bptr_block(&bptr),
|
||||||
bptr.data.u.disk.off,
|
lfs3_bptr_off(&bptr),
|
||||||
lfs3_data_size(bptr.data));
|
lfs3_bptr_size(&bptr));
|
||||||
|
|
||||||
// all blocks should have been fragmented
|
// all blocks should have been fragmented
|
||||||
assert(false);
|
assert(false);
|
||||||
@@ -2283,9 +2283,9 @@ code = '''
|
|||||||
bid,
|
bid,
|
||||||
tag,
|
tag,
|
||||||
weight,
|
weight,
|
||||||
bptr.data.u.disk.block,
|
lfs3_bptr_block(&bptr),
|
||||||
bptr.data.u.disk.off,
|
lfs3_bptr_off(&bptr),
|
||||||
lfs3_data_size(bptr.data));
|
lfs3_bptr_size(&bptr));
|
||||||
|
|
||||||
// all blocks should have been fragmented
|
// all blocks should have been fragmented
|
||||||
assert(false);
|
assert(false);
|
||||||
@@ -2582,9 +2582,9 @@ code = '''
|
|||||||
bid,
|
bid,
|
||||||
tag,
|
tag,
|
||||||
weight,
|
weight,
|
||||||
bptr.data.u.disk.block,
|
lfs3_bptr_block(&bptr),
|
||||||
bptr.data.u.disk.off,
|
lfs3_bptr_off(&bptr),
|
||||||
lfs3_data_size(bptr.data));
|
lfs3_bptr_size(&bptr));
|
||||||
|
|
||||||
// we disabled block crystallization so this shouldn't
|
// we disabled block crystallization so this shouldn't
|
||||||
// happen
|
// happen
|
||||||
@@ -2750,9 +2750,9 @@ code = '''
|
|||||||
bid,
|
bid,
|
||||||
tag,
|
tag,
|
||||||
weight,
|
weight,
|
||||||
bptr.data.u.disk.block,
|
lfs3_bptr_block(&bptr),
|
||||||
bptr.data.u.disk.off,
|
lfs3_bptr_off(&bptr),
|
||||||
lfs3_data_size(bptr.data));
|
lfs3_bptr_size(&bptr));
|
||||||
|
|
||||||
// keep track of how many data blocks we've seen
|
// keep track of how many data blocks we've seen
|
||||||
blocks += 1;
|
blocks += 1;
|
||||||
@@ -3042,9 +3042,9 @@ code = '''
|
|||||||
bid,
|
bid,
|
||||||
tag,
|
tag,
|
||||||
weight,
|
weight,
|
||||||
bptr.data.u.disk.block,
|
lfs3_bptr_block(&bptr),
|
||||||
bptr.data.u.disk.off,
|
lfs3_bptr_off(&bptr),
|
||||||
lfs3_data_size(bptr.data));
|
lfs3_bptr_size(&bptr));
|
||||||
|
|
||||||
// we disabled block crystallization so this shouldn't
|
// we disabled block crystallization so this shouldn't
|
||||||
// happen
|
// happen
|
||||||
@@ -3214,9 +3214,9 @@ code = '''
|
|||||||
bid,
|
bid,
|
||||||
tag,
|
tag,
|
||||||
weight,
|
weight,
|
||||||
bptr.data.u.disk.block,
|
lfs3_bptr_block(&bptr),
|
||||||
bptr.data.u.disk.off,
|
lfs3_bptr_off(&bptr),
|
||||||
lfs3_data_size(bptr.data));
|
lfs3_bptr_size(&bptr));
|
||||||
|
|
||||||
// keep track of how many data blocks we've seen
|
// keep track of how many data blocks we've seen
|
||||||
blocks += 1;
|
blocks += 1;
|
||||||
|
|||||||
+3
-3
@@ -184,7 +184,7 @@ code = '''
|
|||||||
|
|
||||||
// hack, don't use the internals like this
|
// hack, don't use the internals like this
|
||||||
uint8_t wbuf[SIZE];
|
uint8_t wbuf[SIZE];
|
||||||
while ((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file) => 0;
|
lfs3_file_rewind(&lfs3, &file) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -213,7 +213,7 @@ code = '''
|
|||||||
}
|
}
|
||||||
|
|
||||||
// mdir should have been compacted
|
// mdir should have been compacted
|
||||||
assert((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// check we can still read the file
|
// check we can still read the file
|
||||||
for (int remount = 0; remount < 2; remount++) {
|
for (int remount = 0; remount < 2; remount++) {
|
||||||
@@ -273,7 +273,7 @@ code = '''
|
|||||||
|
|
||||||
// hack, don't use the internals like this
|
// hack, don't use the internals like this
|
||||||
uint8_t wbuf[SIZE];
|
uint8_t wbuf[SIZE];
|
||||||
while ((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file) => 0;
|
lfs3_file_rewind(&lfs3, &file) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ code = '''
|
|||||||
|
|
||||||
// hack, don't use the internals like this
|
// hack, don't use the internals like this
|
||||||
uint8_t wbuf[SIZE];
|
uint8_t wbuf[SIZE];
|
||||||
while ((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file) => 0;
|
lfs3_file_rewind(&lfs3, &file) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -245,7 +245,7 @@ code = '''
|
|||||||
|
|
||||||
// mdir should have been compacted
|
// mdir should have been compacted
|
||||||
lfs3_file_open(&lfs3, &file, "jellyfish", LFS3_O_RDONLY) => 0;
|
lfs3_file_open(&lfs3, &file, "jellyfish", LFS3_O_RDONLY) => 0;
|
||||||
assert((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// check we can still read the file
|
// check we can still read the file
|
||||||
uint8_t rbuf[SIZE];
|
uint8_t rbuf[SIZE];
|
||||||
|
|||||||
+422
-422
File diff suppressed because it is too large
Load Diff
@@ -8021,7 +8021,7 @@ code = '''
|
|||||||
<= ((1+lfs3_popc(BOOKENDS)) << lfs3.mbits));
|
<= ((1+lfs3_popc(BOOKENDS)) << lfs3.mbits));
|
||||||
lfs3_mdir_t mdir;
|
lfs3_mdir_t mdir;
|
||||||
lfs3_mtree_lookup(&lfs3, 0, &mdir) => 0;
|
lfs3_mtree_lookup(&lfs3, 0, &mdir) => 0;
|
||||||
assert(mdir.rbyd.weight <= 1+lfs3_popc(BOOKENDS));
|
assert(mdir.r.weight <= 1+lfs3_popc(BOOKENDS));
|
||||||
|
|
||||||
// check that other files are unaffected
|
// check that other files are unaffected
|
||||||
for (int remount = 0; remount < 2; remount++) {
|
for (int remount = 0; remount < 2; remount++) {
|
||||||
@@ -8160,7 +8160,7 @@ code = '''
|
|||||||
<= ((1+lfs3_popc(BOOKENDS)) << lfs3.mbits));
|
<= ((1+lfs3_popc(BOOKENDS)) << lfs3.mbits));
|
||||||
lfs3_mdir_t mdir;
|
lfs3_mdir_t mdir;
|
||||||
lfs3_mtree_lookup(&lfs3, 0, &mdir) => 0;
|
lfs3_mtree_lookup(&lfs3, 0, &mdir) => 0;
|
||||||
assert(mdir.rbyd.weight <= 1+lfs3_popc(BOOKENDS));
|
assert(mdir.r.weight <= 1+lfs3_popc(BOOKENDS));
|
||||||
|
|
||||||
// check that other files are unaffected
|
// check that other files are unaffected
|
||||||
for (int remount = 0; remount < 2; remount++) {
|
for (int remount = 0; remount < 2; remount++) {
|
||||||
@@ -8313,7 +8313,7 @@ code = '''
|
|||||||
<= ((1+lfs3_popc(BOOKENDS)) << lfs3.mbits));
|
<= ((1+lfs3_popc(BOOKENDS)) << lfs3.mbits));
|
||||||
lfs3_mdir_t mdir;
|
lfs3_mdir_t mdir;
|
||||||
lfs3_mtree_lookup(&lfs3, 0, &mdir) => 0;
|
lfs3_mtree_lookup(&lfs3, 0, &mdir) => 0;
|
||||||
assert(mdir.rbyd.weight <= 1+lfs3_popc(BOOKENDS));
|
assert(mdir.r.weight <= 1+lfs3_popc(BOOKENDS));
|
||||||
|
|
||||||
// check that other files are unaffected
|
// check that other files are unaffected
|
||||||
for (int remount = 0; remount < 2; remount++) {
|
for (int remount = 0; remount < 2; remount++) {
|
||||||
@@ -8472,7 +8472,7 @@ code = '''
|
|||||||
<= ((1+lfs3_popc(BOOKENDS)) << lfs3.mbits));
|
<= ((1+lfs3_popc(BOOKENDS)) << lfs3.mbits));
|
||||||
lfs3_mdir_t mdir;
|
lfs3_mdir_t mdir;
|
||||||
lfs3_mtree_lookup(&lfs3, 0, &mdir) => 0;
|
lfs3_mtree_lookup(&lfs3, 0, &mdir) => 0;
|
||||||
assert(mdir.rbyd.weight <= 1+lfs3_popc(BOOKENDS));
|
assert(mdir.r.weight <= 1+lfs3_popc(BOOKENDS));
|
||||||
|
|
||||||
// check that other files are unaffected
|
// check that other files are unaffected
|
||||||
if (BOOKENDS & 0x1) {
|
if (BOOKENDS & 0x1) {
|
||||||
|
|||||||
+84
-84
@@ -3793,8 +3793,8 @@ code = '''
|
|||||||
assert(tinfo.block == 0 || tinfo.block == 1);
|
assert(tinfo.block == 0 || tinfo.block == 1);
|
||||||
|
|
||||||
// rewrite enough files for mroot to extend
|
// rewrite enough files for mroot to extend
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == 0
|
while (lfs3.mroot.r.blocks[0] == 0
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == 1) {
|
|| lfs3.mroot.r.blocks[0] == 1) {
|
||||||
lfs3_file_open(&lfs3, &file, "uloborus",
|
lfs3_file_open(&lfs3, &file, "uloborus",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -3899,8 +3899,8 @@ code = '''
|
|||||||
assert(tinfo.btype == LFS3_BTYPE_DATA);
|
assert(tinfo.btype == LFS3_BTYPE_DATA);
|
||||||
|
|
||||||
// rewrite enough files for mroot to extend
|
// rewrite enough files for mroot to extend
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == 0
|
while (lfs3.mroot.r.blocks[0] == 0
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == 1) {
|
|| lfs3.mroot.r.blocks[0] == 1) {
|
||||||
lfs3_file_open(&lfs3, &file, "uloborus",
|
lfs3_file_open(&lfs3, &file, "uloborus",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -3978,8 +3978,8 @@ code = '''
|
|||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
|
|
||||||
// rewrite enough files for mroot to extend
|
// rewrite enough files for mroot to extend
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == 0
|
while (lfs3.mroot.r.blocks[0] == 0
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == 1) {
|
|| lfs3.mroot.r.blocks[0] == 1) {
|
||||||
lfs3_file_open(&lfs3, &file, "uloborus",
|
lfs3_file_open(&lfs3, &file, "uloborus",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -4001,9 +4001,9 @@ code = '''
|
|||||||
assert(tinfo.block == 0 || tinfo.block == 1);
|
assert(tinfo.block == 0 || tinfo.block == 1);
|
||||||
|
|
||||||
// rewrite enough files for mroot to relocate
|
// rewrite enough files for mroot to relocate
|
||||||
lfs3_block_t orig = lfs3.mroot.rbyd.blocks[0];
|
lfs3_block_t orig = lfs3.mroot.r.blocks[0];
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == orig
|
while (lfs3.mroot.r.blocks[0] == orig
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == orig) {
|
|| lfs3.mroot.r.blocks[0] == orig) {
|
||||||
lfs3_file_open(&lfs3, &file, "uloborus",
|
lfs3_file_open(&lfs3, &file, "uloborus",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -4092,8 +4092,8 @@ code = '''
|
|||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
|
|
||||||
// rewrite enough files for mroot to extend
|
// rewrite enough files for mroot to extend
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == 0
|
while (lfs3.mroot.r.blocks[0] == 0
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == 1) {
|
|| lfs3.mroot.r.blocks[0] == 1) {
|
||||||
lfs3_file_open(&lfs3, &file, "uloborus",
|
lfs3_file_open(&lfs3, &file, "uloborus",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -4125,9 +4125,9 @@ code = '''
|
|||||||
assert(tinfo.btype == LFS3_BTYPE_DATA);
|
assert(tinfo.btype == LFS3_BTYPE_DATA);
|
||||||
|
|
||||||
// rewrite enough files for mroot to relocate
|
// rewrite enough files for mroot to relocate
|
||||||
lfs3_block_t orig = lfs3.mroot.rbyd.blocks[0];
|
lfs3_block_t orig = lfs3.mroot.r.blocks[0];
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == orig
|
while (lfs3.mroot.r.blocks[0] == orig
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == orig) {
|
|| lfs3.mroot.r.blocks[0] == orig) {
|
||||||
lfs3_file_open(&lfs3, &file, "uloborus",
|
lfs3_file_open(&lfs3, &file, "uloborus",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -4799,8 +4799,8 @@ code = '''
|
|||||||
assert(tinfo.block == 0 || tinfo.block == 1);
|
assert(tinfo.block == 0 || tinfo.block == 1);
|
||||||
|
|
||||||
// rewrite enough files for mroot to extend
|
// rewrite enough files for mroot to extend
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == 0
|
while (lfs3.mroot.r.blocks[0] == 0
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == 1) {
|
|| lfs3.mroot.r.blocks[0] == 1) {
|
||||||
lfs3_file_open(&lfs3, &file, "vulsor",
|
lfs3_file_open(&lfs3, &file, "vulsor",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -4997,8 +4997,8 @@ code = '''
|
|||||||
assert(tinfo.btype == LFS3_BTYPE_DATA);
|
assert(tinfo.btype == LFS3_BTYPE_DATA);
|
||||||
|
|
||||||
// rewrite enough files for mroot to extend
|
// rewrite enough files for mroot to extend
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == 0
|
while (lfs3.mroot.r.blocks[0] == 0
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == 1) {
|
|| lfs3.mroot.r.blocks[0] == 1) {
|
||||||
lfs3_file_open(&lfs3, &file, "vulsor",
|
lfs3_file_open(&lfs3, &file, "vulsor",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -5114,8 +5114,8 @@ code = '''
|
|||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
|
|
||||||
// rewrite enough files for mroot to extend
|
// rewrite enough files for mroot to extend
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == 0
|
while (lfs3.mroot.r.blocks[0] == 0
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == 1) {
|
|| lfs3.mroot.r.blocks[0] == 1) {
|
||||||
lfs3_file_open(&lfs3, &file, "vulsor",
|
lfs3_file_open(&lfs3, &file, "vulsor",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -5159,9 +5159,9 @@ code = '''
|
|||||||
assert(tinfo.block == 0 || tinfo.block == 1);
|
assert(tinfo.block == 0 || tinfo.block == 1);
|
||||||
|
|
||||||
// rewrite enough files for mroot to relocate
|
// rewrite enough files for mroot to relocate
|
||||||
orig = lfs3.mroot.rbyd.blocks[0];
|
orig = lfs3.mroot.r.blocks[0];
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == orig
|
while (lfs3.mroot.r.blocks[0] == orig
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == orig) {
|
|| lfs3.mroot.r.blocks[0] == orig) {
|
||||||
lfs3_file_open(&lfs3, &file, "vulsor",
|
lfs3_file_open(&lfs3, &file, "vulsor",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -5294,8 +5294,8 @@ code = '''
|
|||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
|
|
||||||
// rewrite enough files for mroot to extend
|
// rewrite enough files for mroot to extend
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == 0
|
while (lfs3.mroot.r.blocks[0] == 0
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == 1) {
|
|| lfs3.mroot.r.blocks[0] == 1) {
|
||||||
lfs3_file_open(&lfs3, &file, "vulsor",
|
lfs3_file_open(&lfs3, &file, "vulsor",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -5367,9 +5367,9 @@ code = '''
|
|||||||
assert(tinfo.btype == LFS3_BTYPE_DATA);
|
assert(tinfo.btype == LFS3_BTYPE_DATA);
|
||||||
|
|
||||||
// rewrite enough files for mroot to relocate
|
// rewrite enough files for mroot to relocate
|
||||||
orig = lfs3.mroot.rbyd.blocks[0];
|
orig = lfs3.mroot.r.blocks[0];
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == orig
|
while (lfs3.mroot.r.blocks[0] == orig
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == orig) {
|
|| lfs3.mroot.r.blocks[0] == orig) {
|
||||||
lfs3_file_open(&lfs3, &file, "vulsor",
|
lfs3_file_open(&lfs3, &file, "vulsor",
|
||||||
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_WRONLY | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
@@ -5456,7 +5456,7 @@ code = '''
|
|||||||
|
|
||||||
// hack, don't use the internals like this
|
// hack, don't use the internals like this
|
||||||
uint8_t wbuf[SIZE];
|
uint8_t wbuf[SIZE];
|
||||||
while ((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file) => 0;
|
lfs3_file_rewind(&lfs3, &file) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -5493,7 +5493,7 @@ code = '''
|
|||||||
lfs3_traversal_read(&lfs3, &t, &tinfo) => LFS3_ERR_NOENT;
|
lfs3_traversal_read(&lfs3, &t, &tinfo) => LFS3_ERR_NOENT;
|
||||||
|
|
||||||
// mdir should have been compacted
|
// mdir should have been compacted
|
||||||
assert((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// but because we mutated, we're still marked as uncompacted
|
// but because we mutated, we're still marked as uncompacted
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -5515,7 +5515,7 @@ code = '''
|
|||||||
lfs3_traversal_close(&lfs3, &t) => 0;
|
lfs3_traversal_close(&lfs3, &t) => 0;
|
||||||
|
|
||||||
// mdir should have been compacted
|
// mdir should have been compacted
|
||||||
assert((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// uncompacted flag should have been cleared
|
// uncompacted flag should have been cleared
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -5568,8 +5568,8 @@ code = '''
|
|||||||
LFS3_O_RDWR | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
LFS3_O_RDWR | LFS3_O_CREAT | LFS3_O_EXCL) => 0;
|
||||||
|
|
||||||
uint8_t wbuf[SIZE];
|
uint8_t wbuf[SIZE];
|
||||||
while (lfs3.mroot.rbyd.blocks[0] == 0
|
while (lfs3.mroot.r.blocks[0] == 0
|
||||||
|| lfs3.mroot.rbyd.blocks[0] == 1) {
|
|| lfs3.mroot.r.blocks[0] == 1) {
|
||||||
lfs3_file_rewind(&lfs3, &file) => 0;
|
lfs3_file_rewind(&lfs3, &file) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -5584,7 +5584,7 @@ code = '''
|
|||||||
lfs3_mdir_t mrootanchor;
|
lfs3_mdir_t mrootanchor;
|
||||||
lfs3_mdir_fetch(&lfs3, &mrootanchor,
|
lfs3_mdir_fetch(&lfs3, &mrootanchor,
|
||||||
-1, LFS3_MPTR_MROOTANCHOR()) => 0;
|
-1, LFS3_MPTR_MROOTANCHOR()) => 0;
|
||||||
if (lfs3_rbyd_eoff(&mrootanchor.rbyd) > GC_COMPACT_THRESH) {
|
if (lfs3_rbyd_eoff(&mrootanchor.r) > GC_COMPACT_THRESH) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5632,7 +5632,7 @@ code = '''
|
|||||||
lfs3_mdir_t mrootanchor;
|
lfs3_mdir_t mrootanchor;
|
||||||
lfs3_mdir_fetch(&lfs3, &mrootanchor,
|
lfs3_mdir_fetch(&lfs3, &mrootanchor,
|
||||||
-1, LFS3_MPTR_MROOTANCHOR()) => 0;
|
-1, LFS3_MPTR_MROOTANCHOR()) => 0;
|
||||||
assert(lfs3_rbyd_eoff(&mrootanchor.rbyd) <= GC_COMPACT_THRESH);
|
assert(lfs3_rbyd_eoff(&mrootanchor.r) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// but because we mutated, we're still marked as uncompacted
|
// but because we mutated, we're still marked as uncompacted
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -5656,7 +5656,7 @@ code = '''
|
|||||||
// mrootanchor should have been compacted
|
// mrootanchor should have been compacted
|
||||||
lfs3_mdir_fetch(&lfs3, &mrootanchor,
|
lfs3_mdir_fetch(&lfs3, &mrootanchor,
|
||||||
-1, LFS3_MPTR_MROOTANCHOR()) => 0;
|
-1, LFS3_MPTR_MROOTANCHOR()) => 0;
|
||||||
assert(lfs3_rbyd_eoff(&mrootanchor.rbyd) <= GC_COMPACT_THRESH);
|
assert(lfs3_rbyd_eoff(&mrootanchor.r) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// uncompacted flag should have been cleared
|
// uncompacted flag should have been cleared
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -5710,7 +5710,7 @@ code = '''
|
|||||||
|
|
||||||
// hack, don't use the internals like this
|
// hack, don't use the internals like this
|
||||||
uint8_t wbuf[SIZE];
|
uint8_t wbuf[SIZE];
|
||||||
while ((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file) => 0;
|
lfs3_file_rewind(&lfs3, &file) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -5749,7 +5749,7 @@ code = '''
|
|||||||
lfs3_traversal_read(&lfs3, &t, &tinfo) => LFS3_ERR_NOENT;
|
lfs3_traversal_read(&lfs3, &t, &tinfo) => LFS3_ERR_NOENT;
|
||||||
|
|
||||||
// mdir should have been compacted
|
// mdir should have been compacted
|
||||||
assert((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// but because we mutated, we're still marked as uncompacted
|
// but because we mutated, we're still marked as uncompacted
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -5771,7 +5771,7 @@ code = '''
|
|||||||
lfs3_traversal_close(&lfs3, &t) => 0;
|
lfs3_traversal_close(&lfs3, &t) => 0;
|
||||||
|
|
||||||
// mdir should have been compacted
|
// mdir should have been compacted
|
||||||
assert((file.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// uncompacted flag should have been cleared
|
// uncompacted flag should have been cleared
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -5847,7 +5847,7 @@ code = '''
|
|||||||
&file1.b.o.mdir, -1, -1,
|
&file1.b.o.mdir, -1, -1,
|
||||||
NULL);
|
NULL);
|
||||||
assert(estimate >= 0);
|
assert(estimate >= 0);
|
||||||
if ((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) > GC_COMPACT_THRESH
|
if ((file1.b.o.mdir.r.eoff & 0x7fffffff) > GC_COMPACT_THRESH
|
||||||
&& estimate > BLOCK_SIZE/2) {
|
&& estimate > BLOCK_SIZE/2) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -5902,8 +5902,8 @@ code = '''
|
|||||||
lfs3_traversal_read(&lfs3, &t, &tinfo) => LFS3_ERR_NOENT;
|
lfs3_traversal_read(&lfs3, &t, &tinfo) => LFS3_ERR_NOENT;
|
||||||
|
|
||||||
// mdirs should have been compacted
|
// mdirs should have been compacted
|
||||||
assert((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// but because we mutated, we're still marked as uncompacted
|
// but because we mutated, we're still marked as uncompacted
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -5925,8 +5925,8 @@ code = '''
|
|||||||
lfs3_traversal_close(&lfs3, &t) => 0;
|
lfs3_traversal_close(&lfs3, &t) => 0;
|
||||||
|
|
||||||
// mdirs should have been compacted
|
// mdirs should have been compacted
|
||||||
assert((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// uncompacted flag should have been cleared
|
// uncompacted flag should have been cleared
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -6036,7 +6036,7 @@ code = '''
|
|||||||
// write to each file until mdir >gc_compact_thresh full
|
// write to each file until mdir >gc_compact_thresh full
|
||||||
if (COMPACTSET & 0x1) {
|
if (COMPACTSET & 0x1) {
|
||||||
// hack, don't use the internals like this
|
// hack, don't use the internals like this
|
||||||
while ((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file1) => 0;
|
lfs3_file_rewind(&lfs3, &file1) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf1[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf1[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -6048,7 +6048,7 @@ code = '''
|
|||||||
|
|
||||||
if (COMPACTSET & 0x2) {
|
if (COMPACTSET & 0x2) {
|
||||||
// hack, don't use the internals like this
|
// hack, don't use the internals like this
|
||||||
while ((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file2) => 0;
|
lfs3_file_rewind(&lfs3, &file2) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf2[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf2[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -6060,7 +6060,7 @@ code = '''
|
|||||||
|
|
||||||
if (COMPACTSET & 0x4) {
|
if (COMPACTSET & 0x4) {
|
||||||
// hack, don't use the internals like this
|
// hack, don't use the internals like this
|
||||||
while ((file3.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file3.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file3) => 0;
|
lfs3_file_rewind(&lfs3, &file3) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf3[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf3[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -6117,9 +6117,9 @@ code = '''
|
|||||||
|
|
||||||
if (COMPACTSET) {
|
if (COMPACTSET) {
|
||||||
// mdirs should have been compacted
|
// mdirs should have been compacted
|
||||||
assert((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file3.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file3.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// but because we mutated, we're still marked as uncompacted
|
// but because we mutated, we're still marked as uncompacted
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -6142,9 +6142,9 @@ code = '''
|
|||||||
lfs3_traversal_close(&lfs3, &t) => 0;
|
lfs3_traversal_close(&lfs3, &t) => 0;
|
||||||
|
|
||||||
// mdirs should have been compacted
|
// mdirs should have been compacted
|
||||||
assert((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file3.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file3.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// uncompacted flag should have been cleared
|
// uncompacted flag should have been cleared
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -6279,7 +6279,7 @@ code = '''
|
|||||||
&file2.b.o.mdir, -1, -1,
|
&file2.b.o.mdir, -1, -1,
|
||||||
NULL);
|
NULL);
|
||||||
assert(estimate >= 0);
|
assert(estimate >= 0);
|
||||||
if ((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) > GC_COMPACT_THRESH
|
if ((file2.b.o.mdir.r.eoff & 0x7fffffff) > GC_COMPACT_THRESH
|
||||||
&& estimate > BLOCK_SIZE/2) {
|
&& estimate > BLOCK_SIZE/2) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -6344,10 +6344,10 @@ code = '''
|
|||||||
lfs3_traversal_read(&lfs3, &t, &tinfo) => LFS3_ERR_NOENT;
|
lfs3_traversal_read(&lfs3, &t, &tinfo) => LFS3_ERR_NOENT;
|
||||||
|
|
||||||
// mdirs should have been compacted
|
// mdirs should have been compacted
|
||||||
assert((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file3.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file3.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file4.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file4.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// but because we mutated, we're still marked as uncompacted
|
// but because we mutated, we're still marked as uncompacted
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -6369,10 +6369,10 @@ code = '''
|
|||||||
lfs3_traversal_close(&lfs3, &t) => 0;
|
lfs3_traversal_close(&lfs3, &t) => 0;
|
||||||
|
|
||||||
// mdirs should have been compacted
|
// mdirs should have been compacted
|
||||||
assert((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file3.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file3.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file4.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file4.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// uncompacted flag should have been cleared
|
// uncompacted flag should have been cleared
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -6536,8 +6536,8 @@ code = '''
|
|||||||
|
|
||||||
// which means there shouldn't be that many files left
|
// which means there shouldn't be that many files left
|
||||||
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
||||||
assert(file1.b.o.mdir.rbyd.weight <= 3);
|
assert(file1.b.o.mdir.r.weight <= 3);
|
||||||
assert(file2.b.o.mdir.rbyd.weight <= 3);
|
assert(file2.b.o.mdir.r.weight <= 3);
|
||||||
|
|
||||||
// and we should be marked as consistent
|
// and we should be marked as consistent
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -6845,8 +6845,8 @@ code = '''
|
|||||||
|
|
||||||
// which means there shouldn't be that many files left
|
// which means there shouldn't be that many files left
|
||||||
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
||||||
assert(file1.b.o.mdir.rbyd.weight <= 3);
|
assert(file1.b.o.mdir.r.weight <= 3);
|
||||||
assert(file2.b.o.mdir.rbyd.weight <= 3);
|
assert(file2.b.o.mdir.r.weight <= 3);
|
||||||
|
|
||||||
// and we should be marked as consistent
|
// and we should be marked as consistent
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -7009,8 +7009,8 @@ code = '''
|
|||||||
|
|
||||||
// which means there shouldn't be that many files left
|
// which means there shouldn't be that many files left
|
||||||
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
||||||
assert(file1.b.o.mdir.rbyd.weight <= 3);
|
assert(file1.b.o.mdir.r.weight <= 3);
|
||||||
assert(file2.b.o.mdir.rbyd.weight <= 3);
|
assert(file2.b.o.mdir.r.weight <= 3);
|
||||||
|
|
||||||
// and we should be marked as consistent
|
// and we should be marked as consistent
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -7182,8 +7182,8 @@ code = '''
|
|||||||
|
|
||||||
// which means there shouldn't be that many files left
|
// which means there shouldn't be that many files left
|
||||||
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
||||||
assert(file1.b.o.mdir.rbyd.weight <= 3);
|
assert(file1.b.o.mdir.r.weight <= 3);
|
||||||
assert(file2.b.o.mdir.rbyd.weight <= 3);
|
assert(file2.b.o.mdir.r.weight <= 3);
|
||||||
|
|
||||||
// and we should be marked as consistent
|
// and we should be marked as consistent
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -7355,8 +7355,8 @@ code = '''
|
|||||||
|
|
||||||
// which means there shouldn't be that many files left
|
// which means there shouldn't be that many files left
|
||||||
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
||||||
assert(file1.b.o.mdir.rbyd.weight <= 3);
|
assert(file1.b.o.mdir.r.weight <= 3);
|
||||||
assert(file2.b.o.mdir.rbyd.weight <= 3);
|
assert(file2.b.o.mdir.r.weight <= 3);
|
||||||
|
|
||||||
// and we should be marked as consistent
|
// and we should be marked as consistent
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -7456,7 +7456,7 @@ code = '''
|
|||||||
// write to our mdirs until >gc_compact_thresh full
|
// write to our mdirs until >gc_compact_thresh full
|
||||||
//
|
//
|
||||||
// hack, don't use the internals like this
|
// hack, don't use the internals like this
|
||||||
while ((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file1) => 0;
|
lfs3_file_rewind(&lfs3, &file1) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf1[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf1[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -7465,7 +7465,7 @@ code = '''
|
|||||||
lfs3_file_sync(&lfs3, &file1) => 0;
|
lfs3_file_sync(&lfs3, &file1) => 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file2) => 0;
|
lfs3_file_rewind(&lfs3, &file2) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf2[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf2[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -7524,12 +7524,12 @@ code = '''
|
|||||||
|
|
||||||
// which means there shouldn't be that many files left
|
// which means there shouldn't be that many files left
|
||||||
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
assert(lfs3.mtree.weight <= (2 << lfs3.mbits));
|
||||||
assert(file1.b.o.mdir.rbyd.weight <= 3);
|
assert(file1.b.o.mdir.r.weight <= 3);
|
||||||
assert(file2.b.o.mdir.rbyd.weight <= 3);
|
assert(file2.b.o.mdir.r.weight <= 3);
|
||||||
|
|
||||||
// mdirs should have been compacted
|
// mdirs should have been compacted
|
||||||
assert((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// we should be marked as consistent, but because we mutated, we're
|
// we should be marked as consistent, but because we mutated, we're
|
||||||
// still marked as uncompacted
|
// still marked as uncompacted
|
||||||
@@ -7552,8 +7552,8 @@ code = '''
|
|||||||
lfs3_traversal_close(&lfs3, &t) => 0;
|
lfs3_traversal_close(&lfs3, &t) => 0;
|
||||||
|
|
||||||
// mdirs should have been compacted
|
// mdirs should have been compacted
|
||||||
assert((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// uncompacted flag should have been cleared
|
// uncompacted flag should have been cleared
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
@@ -7631,7 +7631,7 @@ code = '''
|
|||||||
// write to our mdirs until >gc_compact_thresh full
|
// write to our mdirs until >gc_compact_thresh full
|
||||||
//
|
//
|
||||||
// hack, don't use the internals like this
|
// hack, don't use the internals like this
|
||||||
while ((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file1) => 0;
|
lfs3_file_rewind(&lfs3, &file1) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf1[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf1[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -7640,7 +7640,7 @@ code = '''
|
|||||||
lfs3_file_sync(&lfs3, &file1) => 0;
|
lfs3_file_sync(&lfs3, &file1) => 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
while ((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH) {
|
||||||
lfs3_file_rewind(&lfs3, &file2) => 0;
|
lfs3_file_rewind(&lfs3, &file2) => 0;
|
||||||
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
for (lfs3_size_t j = 0; j < SIZE; j++) {
|
||||||
wbuf2[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
wbuf2[j] = 'a' + (TEST_PRNG(&prng) % 26);
|
||||||
@@ -7723,8 +7723,8 @@ code = '''
|
|||||||
}
|
}
|
||||||
|
|
||||||
// mdirs should have been compacted
|
// mdirs should have been compacted
|
||||||
assert((file1.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file1.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
assert((file2.b.o.mdir.rbyd.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
assert((file2.b.o.mdir.r.eoff & 0x7fffffff) <= GC_COMPACT_THRESH);
|
||||||
|
|
||||||
// if we introduced actual orphans, we _must_ be marked as inconsistent
|
// if we introduced actual orphans, we _must_ be marked as inconsistent
|
||||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user