preerase: Added test_mount_t_preerase, fixed several more bugs
- Fixed lfs3_alloc_cansyncgbmap ignoring known window changes.
Being able to just call lfs3_btree_cmp(b, b_p) would be nice, but this
ignores known window changes!
Fixed by comparing the on-disk encoding, which is heavy-handed, but
probably the safest approach.
lfs3_alloc_cansyncgbmap will probably never be on the stack hot-path,
and the added code is roughly one function call. The main cost is
CPU-cycles, but fortunately(?) that's not something we really care
about?
- Fixed lfs3_allocclaim accidentally returning lfs3_mdir_commit's return
value instead of the allocated block!
Probably caused by a copy-paste, resulted in lfs3_allocclaim returning
block 0, which is really not good!
- Fixed assert typo in lfs3_trv_open where we assert REVPERTURB in flags
instead of lfs3->flags.
Code changes:
code stack ctx
before: 35260 2136 660
after: 35260 (+0.0%) 2136 (+0.0%) 660 (+0.0%)
code stack ctx
gbmap before: 38560 2144 776
gbmap after: 38616 (+0.1%) 2144 (+0.0%) 776 (+0.0%)
code stack ctx
preerase before: 39168 2168 796
preerase after: 39232 (+0.2%) 2168 (+0.0%) 796 (+0.0%)
This commit is contained in:
+84
-13
@@ -1853,9 +1853,19 @@ code = '''
|
||||
lfs3_t lfs3;
|
||||
lfs3_format(&lfs3,
|
||||
LFS3_F_RDWR
|
||||
// note preerasing needs revperturb
|
||||
| ((PREERASE)
|
||||
? LFS3_IFDEF_PREERASE(LFS3_F_REVPERTURB, -1)
|
||||
: 0)
|
||||
| ((GBMAP) ? LFS3_IFDEF_GBMAP(LFS3_F_GBMAP, -1) : 0),
|
||||
CFG) => 0;
|
||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||
lfs3_mount(&lfs3,
|
||||
LFS3_M_RDWR
|
||||
// note preerasing needs revperturb
|
||||
| ((PREERASE)
|
||||
? LFS3_IFDEF_PREERASE(LFS3_M_REVPERTURB, -1)
|
||||
: 0),
|
||||
CFG) => 0;
|
||||
|
||||
// create an interesting filesystem
|
||||
uint32_t prng = 42;
|
||||
@@ -1877,13 +1887,22 @@ code = '''
|
||||
|
||||
// remount to reset flags
|
||||
lfs3_unmount(&lfs3) => 0;
|
||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||
lfs3_mount(&lfs3,
|
||||
LFS3_M_RDWR
|
||||
// note preerasing needs revperturb
|
||||
| ((PREERASE)
|
||||
? LFS3_IFDEF_PREERASE(LFS3_M_REVPERTURB, -1)
|
||||
: 0),
|
||||
CFG) => 0;
|
||||
|
||||
// check that flags were reset
|
||||
struct lfs3_fsinfo fsinfo;
|
||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||
assert(fsinfo.flags == (
|
||||
LFS3_IFYES_REVPERTURB(LFS3_I_REVPERTURB, 0, 0)
|
||||
LFS3_IFYES_REVPERTURB(
|
||||
LFS3_I_REVPERTURB,
|
||||
(PREERASE) ? LFS3_I_REVPERTURB : 0,
|
||||
0)
|
||||
| LFS3_IFYES_REVNOISE(LFS3_I_REVNOISE, 0, 0)
|
||||
| LFS3_I_MKCONSISTENT
|
||||
| ((!GBMAP || (fsinfo.flags & LFS3_I_LOOKAHEAD))
|
||||
@@ -1982,7 +2001,14 @@ code = '''
|
||||
// remount with gc flags
|
||||
} else if (AFTER == 3) {
|
||||
lfs3_unmount(&lfs3) => 0;
|
||||
lfs3_mount(&lfs3, LFS3_M_RDWR | GC_FLAGS, CFG) => 0;
|
||||
lfs3_mount(&lfs3,
|
||||
LFS3_M_RDWR
|
||||
// note preerasing needs revperturb
|
||||
| ((PREERASE)
|
||||
? LFS3_IFDEF_PREERASE(LFS3_M_REVPERTURB, -1)
|
||||
: 0)
|
||||
| GC_FLAGS,
|
||||
CFG) => 0;
|
||||
|
||||
} else {
|
||||
assert(false);
|
||||
@@ -1991,7 +2017,10 @@ code = '''
|
||||
// did these clear the right flags?
|
||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||
assert(fsinfo.flags == (
|
||||
LFS3_IFYES_REVPERTURB(LFS3_I_REVPERTURB, 0, 0)
|
||||
LFS3_IFYES_REVPERTURB(
|
||||
LFS3_I_REVPERTURB,
|
||||
(PREERASE) ? LFS3_I_REVPERTURB : 0,
|
||||
0)
|
||||
| LFS3_IFYES_REVNOISE(LFS3_I_REVNOISE, 0, 0)
|
||||
| ((!MKCONSISTENT) ? LFS3_I_MKCONSISTENT : 0)
|
||||
| ((!LOOKAHEAD
|
||||
@@ -2054,9 +2083,19 @@ code = '''
|
||||
lfs3_t lfs3;
|
||||
lfs3_format(&lfs3,
|
||||
LFS3_F_RDWR
|
||||
// note preerasing needs revperturb
|
||||
| ((PREERASE)
|
||||
? LFS3_IFDEF_PREERASE(LFS3_F_REVPERTURB, -1)
|
||||
: 0)
|
||||
| ((GBMAP) ? LFS3_IFDEF_GBMAP(LFS3_F_GBMAP, -1) : 0),
|
||||
CFG) => 0;
|
||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||
lfs3_mount(&lfs3,
|
||||
LFS3_M_RDWR
|
||||
// note preerasing needs revperturb
|
||||
| ((PREERASE)
|
||||
? LFS3_IFDEF_PREERASE(LFS3_M_REVPERTURB, -1)
|
||||
: 0),
|
||||
CFG) => 0;
|
||||
|
||||
// create an interesting filesystem
|
||||
uint32_t prng = 42;
|
||||
@@ -2078,13 +2117,22 @@ code = '''
|
||||
|
||||
// remount to reset flags
|
||||
lfs3_unmount(&lfs3) => 0;
|
||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||
lfs3_mount(&lfs3,
|
||||
LFS3_M_RDWR
|
||||
// note preerasing needs revperturb
|
||||
| ((PREERASE)
|
||||
? LFS3_IFDEF_PREERASE(LFS3_M_REVPERTURB, -1)
|
||||
: 0),
|
||||
CFG) => 0;
|
||||
|
||||
// check that flags were reset
|
||||
struct lfs3_fsinfo fsinfo;
|
||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||
assert(fsinfo.flags == (
|
||||
LFS3_IFYES_REVPERTURB(LFS3_I_REVPERTURB, 0, 0)
|
||||
LFS3_IFYES_REVPERTURB(
|
||||
LFS3_I_REVPERTURB,
|
||||
(PREERASE) ? LFS3_I_REVPERTURB : 0,
|
||||
0)
|
||||
| LFS3_IFYES_REVNOISE(LFS3_I_REVNOISE, 0, 0)
|
||||
| LFS3_I_MKCONSISTENT
|
||||
| ((!GBMAP || (fsinfo.flags & LFS3_I_LOOKAHEAD))
|
||||
@@ -2183,7 +2231,14 @@ code = '''
|
||||
// remount with gc flags
|
||||
} else if (AFTER == 3) {
|
||||
lfs3_unmount(&lfs3) => 0;
|
||||
lfs3_mount(&lfs3, LFS3_M_RDWR | GC_FLAGS, CFG) => 0;
|
||||
lfs3_mount(&lfs3,
|
||||
LFS3_M_RDWR
|
||||
// note preerasing needs revperturb
|
||||
| ((PREERASE)
|
||||
? LFS3_IFDEF_PREERASE(LFS3_M_REVPERTURB, -1)
|
||||
: 0)
|
||||
| GC_FLAGS,
|
||||
CFG) => 0;
|
||||
|
||||
} else {
|
||||
assert(false);
|
||||
@@ -2192,7 +2247,10 @@ code = '''
|
||||
// did these clear the right flags?
|
||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||
assert(fsinfo.flags == (
|
||||
LFS3_IFYES_REVPERTURB(LFS3_I_REVPERTURB, 0, 0)
|
||||
LFS3_IFYES_REVPERTURB(
|
||||
LFS3_I_REVPERTURB,
|
||||
(PREERASE) ? LFS3_I_REVPERTURB : 0,
|
||||
0)
|
||||
| LFS3_IFYES_REVNOISE(LFS3_I_REVNOISE, 0, 0)
|
||||
| ((!MKCONSISTENT) ? LFS3_I_MKCONSISTENT : 0)
|
||||
| ((!LOOKAHEAD
|
||||
@@ -2214,7 +2272,10 @@ code = '''
|
||||
// check that flags were reset
|
||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||
assert(fsinfo.flags == (
|
||||
LFS3_IFYES_REVPERTURB(LFS3_I_REVPERTURB, 0, 0)
|
||||
LFS3_IFYES_REVPERTURB(
|
||||
LFS3_I_REVPERTURB,
|
||||
(PREERASE) ? LFS3_I_REVPERTURB : 0,
|
||||
0)
|
||||
| LFS3_IFYES_REVNOISE(LFS3_I_REVNOISE, 0, 0)
|
||||
| LFS3_I_MKCONSISTENT
|
||||
| ((!GBMAP || (fsinfo.flags & LFS3_I_LOOKAHEAD))
|
||||
@@ -2317,7 +2378,14 @@ code = '''
|
||||
// remount with gc flags
|
||||
} else if (AFTER == 3) {
|
||||
lfs3_unmount(&lfs3) => 0;
|
||||
lfs3_mount(&lfs3, LFS3_M_RDWR | GC_FLAGS, CFG) => 0;
|
||||
lfs3_mount(&lfs3,
|
||||
LFS3_M_RDWR
|
||||
// note preerasing needs revperturb
|
||||
| ((PREERASE)
|
||||
? LFS3_IFDEF_PREERASE(LFS3_M_REVPERTURB, -1)
|
||||
: 0)
|
||||
| GC_FLAGS,
|
||||
CFG) => 0;
|
||||
|
||||
} else {
|
||||
assert(false);
|
||||
@@ -2326,7 +2394,10 @@ code = '''
|
||||
// did these clear the right flags?
|
||||
lfs3_fs_stat(&lfs3, &fsinfo) => 0;
|
||||
assert(fsinfo.flags == (
|
||||
LFS3_IFYES_REVPERTURB(LFS3_I_REVPERTURB, 0, 0)
|
||||
LFS3_IFYES_REVPERTURB(
|
||||
LFS3_I_REVPERTURB,
|
||||
(PREERASE) ? LFS3_I_REVPERTURB : 0,
|
||||
0)
|
||||
| LFS3_IFYES_REVNOISE(LFS3_I_REVNOISE, 0, 0)
|
||||
| ((!MKCONSISTENT) ? LFS3_I_MKCONSISTENT : 0)
|
||||
| ((!LOOKAHEAD
|
||||
|
||||
Reference in New Issue
Block a user