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:
+19
-3
@@ -1772,15 +1772,28 @@ 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;
|
||||
|
||||
// check flags before
|
||||
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) ? LFS3_I_LOOKAHEAD : 0)
|
||||
@@ -1821,7 +1834,10 @@ code = '''
|
||||
// check flags after
|
||||
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 && !GBMAP) ? LFS3_I_LOOKAHEAD : 0)
|
||||
|
||||
Reference in New Issue
Block a user