Reverted best-effort fsinfo.known_free/inuse prototype
See previous commit for motivation.
I can't think of how you could easily find this information from the
gbmap during/after mount, short of a O(d log_b d) scan through the
gbmap. Maybe useful, but probably not a great tradeoff for what is only
debug/diagnostic information.
So reverting, but maybe interesting to explore in the future with other
debug APIs.
Code changes:
code stack ctx
before: 35220 2136 660
after: 35160 (-0.2%) 2136 (+0.0%) 660 (+0.0%)
code stack ctx
gbmap before: 38116 2152 776
gbmap after: 38020 (-0.3%) 2152 (+0.0%) 772 (-0.5%)
This commit is contained in:
@@ -10459,8 +10459,6 @@ eot:;
|
|||||||
static void lfs3_gbmap_init(lfs3_gbmap_t *gbmap) {
|
static void lfs3_gbmap_init(lfs3_gbmap_t *gbmap) {
|
||||||
gbmap->window = 0;
|
gbmap->window = 0;
|
||||||
gbmap->known = 0;
|
gbmap->known = 0;
|
||||||
// we lazily populate this during lookahead scans
|
|
||||||
gbmap->known_free = -1;
|
|
||||||
lfs3_btree_init(&gbmap->b);
|
lfs3_btree_init(&gbmap->b);
|
||||||
lfs3_btree_init(&gbmap->b_p);
|
lfs3_btree_init(&gbmap->b_p);
|
||||||
}
|
}
|
||||||
@@ -16102,34 +16100,6 @@ int lfs3_fs_stat(lfs3_t *lfs3, struct lfs3_fsinfo *fsinfo) {
|
|||||||
fsinfo->name_limit = lfs3->name_limit;
|
fsinfo->name_limit = lfs3->name_limit;
|
||||||
fsinfo->file_limit = lfs3->file_limit;
|
fsinfo->file_limit = lfs3->file_limit;
|
||||||
|
|
||||||
// return best effort knowledge of block usage
|
|
||||||
|
|
||||||
// if we have a gbmap, we choose whichever allocator has more
|
|
||||||
// information, otherwise we fall back to the lookahead buffer
|
|
||||||
if (LFS3_IFDEF_GBMAP(
|
|
||||||
lfs3_f_isgbmap(lfs3->flags)
|
|
||||||
// known_free=-1 indicates we don't know the free/inuse
|
|
||||||
// breakdown yet
|
|
||||||
&& lfs3->gbmap.known_free != -1
|
|
||||||
&& lfs3->gbmap.known >= lfs3->lookahead.known,
|
|
||||||
false)) {
|
|
||||||
#ifdef LFS3_GBMAP
|
|
||||||
fsinfo->known_free = lfs3->gbmap.known_free;
|
|
||||||
fsinfo->known_inuse = lfs3->gbmap.known - lfs3->gbmap.known_free;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} else {
|
|
||||||
lfs3_block_t free = 0;
|
|
||||||
for (lfs3_size_t i = 0; i < lfs3->lookahead.known; i++) {
|
|
||||||
if (!(lfs3->lookahead.buffer[(lfs3->lookahead.off+i) / 8]
|
|
||||||
& (1 << ((lfs3->lookahead.off+i) % 8)))) {
|
|
||||||
free += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fsinfo->known_free = free;
|
|
||||||
fsinfo->known_inuse = lfs3->lookahead.known - free;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -687,16 +687,6 @@ struct lfs3_fsinfo {
|
|||||||
|
|
||||||
// Upper limit on the size of files in bytes.
|
// Upper limit on the size of files in bytes.
|
||||||
lfs3_off_t file_limit;
|
lfs3_off_t file_limit;
|
||||||
|
|
||||||
// Number of known free blocks
|
|
||||||
//
|
|
||||||
// Note this is limited by lookahead/gbmap
|
|
||||||
lfs3_block_t known_free;
|
|
||||||
|
|
||||||
// Number of known in-use blocks
|
|
||||||
//
|
|
||||||
// Note this is limited by lookahead/gbmap
|
|
||||||
lfs3_block_t known_inuse;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Traversal info structure
|
// Traversal info structure
|
||||||
@@ -1231,7 +1221,6 @@ typedef struct lfs3_grm {
|
|||||||
typedef struct lfs3_gbmap {
|
typedef struct lfs3_gbmap {
|
||||||
lfs3_block_t window;
|
lfs3_block_t window;
|
||||||
lfs3_block_t known;
|
lfs3_block_t known;
|
||||||
lfs3_sblock_t known_free;
|
|
||||||
lfs3_btree_t b;
|
lfs3_btree_t b;
|
||||||
lfs3_btree_t b_p;
|
lfs3_btree_t b_p;
|
||||||
} lfs3_gbmap_t;
|
} lfs3_gbmap_t;
|
||||||
@@ -1287,7 +1276,7 @@ typedef struct lfs3 {
|
|||||||
struct lfs3_lookahead {
|
struct lfs3_lookahead {
|
||||||
lfs3_block_t window;
|
lfs3_block_t window;
|
||||||
lfs3_block_t off;
|
lfs3_block_t off;
|
||||||
lfs3_size_t known;
|
lfs3_block_t known;
|
||||||
lfs3_block_t ckpoint;
|
lfs3_block_t ckpoint;
|
||||||
uint8_t *buffer;
|
uint8_t *buffer;
|
||||||
} lookahead;
|
} lookahead;
|
||||||
|
|||||||
Reference in New Issue
Block a user