bmap: Enabled at least opportunistic bmap allocations
This doesn't fully replace the lookahead buffer, but at least augments it with known bmap state when available. To be honest, this is a minimal effort hack to try to get something benchmarkable without dealing with all the catch-22 issues that a self-support bmap allocator would encounter (allocating blocks for the bmap requires a bmap, oh no). Though now that I'm writing this, maybe this is a reasonable long-term solution? Having the lookahead buffer to fall back on solves a lot of problems, and, realistically, it's unlikely to be a performance bottleneck unless the user has extreme write requests (>available storage?). --- Also tweaked field naming to be consistent between the bmap and lookahead buffer.
This commit is contained in:
@@ -7785,6 +7785,12 @@ static int lfs3_rbyd_appendgdelta(lfs3_t *lfs3, lfs3_rbyd_t *rbyd) {
|
|||||||
|
|
||||||
// pending gbmap state?
|
// pending gbmap state?
|
||||||
#ifdef LFS3_BMAP
|
#ifdef LFS3_BMAP
|
||||||
|
// TODO is this the right place?
|
||||||
|
// try to update to most recent lookahead window
|
||||||
|
lfs3->gbmap.window = (lfs3->lookahead.window + lfs3->lookahead.off)
|
||||||
|
% lfs3->cfg->block_count;
|
||||||
|
lfs3->gbmap.known = lfs3->lookahead.bmapped;
|
||||||
|
|
||||||
uint8_t gbmapdelta_[LFS3_GBMAP_DSIZE];
|
uint8_t gbmapdelta_[LFS3_GBMAP_DSIZE];
|
||||||
lfs3_data_fromgbmap(lfs3, gbmapdelta_);
|
lfs3_data_fromgbmap(lfs3, gbmapdelta_);
|
||||||
lfs3_memxor(gbmapdelta_, lfs3->gbmap_p, LFS3_GBMAP_DSIZE);
|
lfs3_memxor(gbmapdelta_, lfs3->gbmap_p, LFS3_GBMAP_DSIZE);
|
||||||
@@ -10282,8 +10288,8 @@ static lfs3_stag_t lfs3_mtree_traverse_(lfs3_t *lfs3, lfs3_trv_t *trv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// needed in lfs3_mtree_traverse
|
// needed in lfs3_mtree_traverse
|
||||||
static void lfs3_alloc_markinuse(lfs3_t *lfs3,
|
static void lfs3_alloc_markbptr(lfs3_t *lfs3,
|
||||||
lfs3_tag_t tag, const lfs3_bptr_t *bptr_);
|
lfs3_tag_t tag, const lfs3_bptr_t *bptr);
|
||||||
|
|
||||||
// high-level immutable traversal, handle extra features here,
|
// high-level immutable traversal, handle extra features here,
|
||||||
// but no mutation! (we're called in lfs3_alloc, so things would end up
|
// but no mutation! (we're called in lfs3_alloc, so things would end up
|
||||||
@@ -10412,7 +10418,7 @@ eot:;
|
|||||||
|
|
||||||
// needed in lfs3_mtree_gc
|
// needed in lfs3_mtree_gc
|
||||||
static int lfs3_mdir_mkconsistent(lfs3_t *lfs3, lfs3_mdir_t *mdir);
|
static int lfs3_mdir_mkconsistent(lfs3_t *lfs3, lfs3_mdir_t *mdir);
|
||||||
static void lfs3_alloc_markfree(lfs3_t *lfs3);
|
static void lfs3_alloc_markfree(lfs3_t *lfs3, lfs3_block_t known);
|
||||||
|
|
||||||
// high-level mutating traversal, handle extra features that require
|
// high-level mutating traversal, handle extra features that require
|
||||||
// mutation here, upper layers should call lfs3_alloc_ckpoint as needed
|
// mutation here, upper layers should call lfs3_alloc_ckpoint as needed
|
||||||
@@ -10439,7 +10445,7 @@ dropped:;
|
|||||||
// track in-use blocks?
|
// track in-use blocks?
|
||||||
#ifndef LFS3_2BONLY
|
#ifndef LFS3_2BONLY
|
||||||
if (lfs3_t_islookahead(trv->b.h.flags)) {
|
if (lfs3_t_islookahead(trv->b.h.flags)) {
|
||||||
lfs3_alloc_markinuse(lfs3, tag, bptr_);
|
lfs3_alloc_markbptr(lfs3, tag, bptr_);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -10516,7 +10522,7 @@ eot:;
|
|||||||
&& !lfs3_t_ismtreeonly(trv->b.h.flags)
|
&& !lfs3_t_ismtreeonly(trv->b.h.flags)
|
||||||
&& !lfs3_t_isdirty(trv->b.h.flags)
|
&& !lfs3_t_isdirty(trv->b.h.flags)
|
||||||
&& !lfs3_t_ismutated(trv->b.h.flags)) {
|
&& !lfs3_t_ismutated(trv->b.h.flags)) {
|
||||||
lfs3_alloc_markfree(lfs3);
|
lfs3_alloc_markfree(lfs3, lfs3->lookahead.ckpoint);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -10546,8 +10552,8 @@ eot:;
|
|||||||
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY) && defined(LFS3_BMAP)
|
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY) && defined(LFS3_BMAP)
|
||||||
static lfs3_data_t lfs3_data_fromgbmap(const lfs3_t *lfs3,
|
static lfs3_data_t lfs3_data_fromgbmap(const lfs3_t *lfs3,
|
||||||
uint8_t buffer[static LFS3_GBMAP_DSIZE]) {
|
uint8_t buffer[static LFS3_GBMAP_DSIZE]) {
|
||||||
// cursor should not exceed 31-bits
|
// window should not exceed 31-bits
|
||||||
LFS3_ASSERT(lfs3->gbmap.cursor <= 0x7fffffff);
|
LFS3_ASSERT(lfs3->gbmap.window <= 0x7fffffff);
|
||||||
// known should not exceed 31-bits
|
// known should not exceed 31-bits
|
||||||
LFS3_ASSERT(lfs3->gbmap.known <= 0x7fffffff);
|
LFS3_ASSERT(lfs3->gbmap.known <= 0x7fffffff);
|
||||||
|
|
||||||
@@ -10555,7 +10561,7 @@ static lfs3_data_t lfs3_data_fromgbmap(const lfs3_t *lfs3,
|
|||||||
lfs3_memset(buffer, 0, LFS3_GBMAP_DSIZE);
|
lfs3_memset(buffer, 0, LFS3_GBMAP_DSIZE);
|
||||||
|
|
||||||
lfs3_ssize_t d = 0;
|
lfs3_ssize_t d = 0;
|
||||||
lfs3_ssize_t d_ = lfs3_toleb128(lfs3->gbmap.cursor, &buffer[d], 5);
|
lfs3_ssize_t d_ = lfs3_toleb128(lfs3->gbmap.window, &buffer[d], 5);
|
||||||
if (d_ < 0) {
|
if (d_ < 0) {
|
||||||
LFS3_UNREACHABLE();
|
LFS3_UNREACHABLE();
|
||||||
}
|
}
|
||||||
@@ -10576,7 +10582,7 @@ static lfs3_data_t lfs3_data_fromgbmap(const lfs3_t *lfs3,
|
|||||||
|
|
||||||
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY) && defined(LFS3_BMAP)
|
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY) && defined(LFS3_BMAP)
|
||||||
static int lfs3_data_readgbmap(lfs3_t *lfs3, lfs3_data_t *data) {
|
static int lfs3_data_readgbmap(lfs3_t *lfs3, lfs3_data_t *data) {
|
||||||
int err = lfs3_data_readleb128(lfs3, data, &lfs3->gbmap.cursor);
|
int err = lfs3_data_readleb128(lfs3, data, &lfs3->gbmap.window);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -10778,14 +10784,14 @@ static inline void lfs3_alloc_ckpoint(lfs3_t *lfs3) {
|
|||||||
// discard any lookahead state, this is necessary if block_count changes
|
// discard any lookahead state, this is necessary if block_count changes
|
||||||
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
||||||
static inline void lfs3_alloc_discard(lfs3_t *lfs3) {
|
static inline void lfs3_alloc_discard(lfs3_t *lfs3) {
|
||||||
lfs3->lookahead.size = 0;
|
lfs3->lookahead.known = 0;
|
||||||
lfs3_memset(lfs3->lookahead.buffer, 0, lfs3->cfg->lookahead_size);
|
lfs3_memset(lfs3->lookahead.buffer, 0, lfs3->cfg->lookahead_size);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// mark a block as in-use
|
// mark a block as in-use
|
||||||
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
||||||
static void lfs3_alloc_markinuse_(lfs3_t *lfs3, lfs3_block_t block) {
|
static void lfs3_alloc_markinuse(lfs3_t *lfs3, lfs3_block_t block) {
|
||||||
// translate to lookahead-relative
|
// translate to lookahead-relative
|
||||||
lfs3_block_t block_ = ((
|
lfs3_block_t block_ = ((
|
||||||
(lfs3_sblock_t)(block
|
(lfs3_sblock_t)(block
|
||||||
@@ -10808,19 +10814,19 @@ static void lfs3_alloc_markinuse_(lfs3_t *lfs3, lfs3_block_t block) {
|
|||||||
|
|
||||||
// mark some filesystem object as in-use
|
// mark some filesystem object as in-use
|
||||||
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
||||||
static void lfs3_alloc_markinuse(lfs3_t *lfs3,
|
static void lfs3_alloc_markbptr(lfs3_t *lfs3,
|
||||||
lfs3_tag_t tag, const lfs3_bptr_t *bptr) {
|
lfs3_tag_t tag, const lfs3_bptr_t *bptr) {
|
||||||
if (tag == LFS3_TAG_MDIR) {
|
if (tag == LFS3_TAG_MDIR) {
|
||||||
lfs3_mdir_t *mdir = (lfs3_mdir_t*)bptr->d.u.buffer;
|
lfs3_mdir_t *mdir = (lfs3_mdir_t*)bptr->d.u.buffer;
|
||||||
lfs3_alloc_markinuse_(lfs3, mdir->r.blocks[0]);
|
lfs3_alloc_markinuse(lfs3, mdir->r.blocks[0]);
|
||||||
lfs3_alloc_markinuse_(lfs3, mdir->r.blocks[1]);
|
lfs3_alloc_markinuse(lfs3, mdir->r.blocks[1]);
|
||||||
|
|
||||||
} else if (tag == LFS3_TAG_BRANCH) {
|
} else if (tag == LFS3_TAG_BRANCH) {
|
||||||
lfs3_rbyd_t *rbyd = (lfs3_rbyd_t*)bptr->d.u.buffer;
|
lfs3_rbyd_t *rbyd = (lfs3_rbyd_t*)bptr->d.u.buffer;
|
||||||
lfs3_alloc_markinuse_(lfs3, rbyd->blocks[0]);
|
lfs3_alloc_markinuse(lfs3, rbyd->blocks[0]);
|
||||||
|
|
||||||
} else if (tag == LFS3_TAG_BLOCK) {
|
} else if (tag == LFS3_TAG_BLOCK) {
|
||||||
lfs3_alloc_markinuse_(lfs3, lfs3_bptr_block(bptr));
|
lfs3_alloc_markinuse(lfs3, lfs3_bptr_block(bptr));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
LFS3_UNREACHABLE();
|
LFS3_UNREACHABLE();
|
||||||
@@ -10828,17 +10834,50 @@ static void lfs3_alloc_markinuse(lfs3_t *lfs3,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// mark lookahead buffer to match bmap
|
||||||
|
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY) && defined(LFS3_BMAP)
|
||||||
|
static int lfs3_alloc_markbmap(lfs3_t *lfs3, lfs3_btree_t *bmap,
|
||||||
|
lfs3_block_t known) {
|
||||||
|
lfs3_block_t block = lfs3->lookahead.window + lfs3->lookahead.off;
|
||||||
|
while (block < lfs3->lookahead.window + lfs3->lookahead.off + known) {
|
||||||
|
lfs3_block_t block_ = block % lfs3->block_count;
|
||||||
|
lfs3_block_t block__;
|
||||||
|
lfs3_stag_t tag = lfs3_bmap_lookupnext(lfs3, bmap, block_,
|
||||||
|
&block__, NULL);
|
||||||
|
if (tag < 0) {
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
lfs3_block_t d = (block__+1) - block_;
|
||||||
|
|
||||||
|
// in-use? bad? etc? mark as in-use
|
||||||
|
if (tag != LFS3_TAG_BMFREE) {
|
||||||
|
// this could probably be more efficient, but cpu usage is
|
||||||
|
// not a big priority at the moment
|
||||||
|
for (lfs3_block_t i = 0; i < d; i++) {
|
||||||
|
lfs3_alloc_markinuse(lfs3, block_+i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
block += d;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// needed in lfs3_alloc_markfree
|
// needed in lfs3_alloc_markfree
|
||||||
static lfs3_sblock_t lfs3_alloc_findfree(lfs3_t *lfs3);
|
static lfs3_sblock_t lfs3_alloc_findfree(lfs3_t *lfs3);
|
||||||
|
|
||||||
// mark any not-in-use blocks as free
|
// mark any not-in-use blocks as free
|
||||||
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
||||||
static void lfs3_alloc_markfree(lfs3_t *lfs3) {
|
static void lfs3_alloc_markfree(lfs3_t *lfs3, lfs3_block_t known) {
|
||||||
// make lookahead buffer usable
|
// make lookahead buffer usable
|
||||||
lfs3->lookahead.size = lfs3_min(
|
lfs3->lookahead.known = lfs3_min(
|
||||||
8*lfs3->cfg->lookahead_size,
|
8*lfs3->cfg->lookahead_size,
|
||||||
lfs3->lookahead.ckpoint);
|
known);
|
||||||
|
|
||||||
|
// TODO how does this interact with the bmap?
|
||||||
|
//
|
||||||
// signal that lookahead is full, this may be cleared by
|
// signal that lookahead is full, this may be cleared by
|
||||||
// lfs3_alloc_findfree
|
// lfs3_alloc_findfree
|
||||||
lfs3->flags &= ~LFS3_I_LOOKAHEAD;
|
lfs3->flags &= ~LFS3_I_LOOKAHEAD;
|
||||||
@@ -10852,7 +10891,7 @@ static void lfs3_alloc_markfree(lfs3_t *lfs3) {
|
|||||||
// increment lookahead buffer
|
// increment lookahead buffer
|
||||||
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
||||||
static void lfs3_alloc_inc(lfs3_t *lfs3) {
|
static void lfs3_alloc_inc(lfs3_t *lfs3) {
|
||||||
LFS3_ASSERT(lfs3->lookahead.size > 0);
|
LFS3_ASSERT(lfs3->lookahead.known > 0);
|
||||||
|
|
||||||
// clear lookahead as we increment
|
// clear lookahead as we increment
|
||||||
lfs3->lookahead.buffer[lfs3->lookahead.off / 8]
|
lfs3->lookahead.buffer[lfs3->lookahead.off / 8]
|
||||||
@@ -10871,16 +10910,20 @@ static void lfs3_alloc_inc(lfs3_t *lfs3) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// decrement size
|
// decrement size
|
||||||
lfs3->lookahead.size -= 1;
|
lfs3->lookahead.known -= 1;
|
||||||
// decrement ckpoint
|
// decrement ckpoint
|
||||||
lfs3->lookahead.ckpoint -= 1;
|
lfs3->lookahead.ckpoint -= 1;
|
||||||
|
// decrement bmap airspace
|
||||||
|
#ifdef LFS3_BMAP
|
||||||
|
lfs3->lookahead.bmapped = lfs3_smax(lfs3->lookahead.bmapped-1, 0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// find next free block in lookahead buffer, if there is one
|
// find next free block in lookahead buffer, if there is one
|
||||||
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
||||||
static lfs3_sblock_t lfs3_alloc_findfree(lfs3_t *lfs3) {
|
static lfs3_sblock_t lfs3_alloc_findfree(lfs3_t *lfs3) {
|
||||||
while (lfs3->lookahead.size > 0) {
|
while (lfs3->lookahead.known > 0) {
|
||||||
if (!(lfs3->lookahead.buffer[lfs3->lookahead.off / 8]
|
if (!(lfs3->lookahead.buffer[lfs3->lookahead.off / 8]
|
||||||
& (1 << (lfs3->lookahead.off % 8)))) {
|
& (1 << (lfs3->lookahead.off % 8)))) {
|
||||||
// found a free block
|
// found a free block
|
||||||
@@ -10936,7 +10979,7 @@ static lfs3_sblock_t lfs3_alloc(lfs3_t *lfs3, uint32_t flags) {
|
|||||||
LFS3_DEBUG("Allocated block 0x%"PRIx32", "
|
LFS3_DEBUG("Allocated block 0x%"PRIx32", "
|
||||||
"lookahead %"PRId32"/%"PRId32"/%"PRId32,
|
"lookahead %"PRId32"/%"PRId32"/%"PRId32,
|
||||||
block,
|
block,
|
||||||
lfs3->lookahead.size,
|
lfs3->lookahead.known,
|
||||||
lfs3->lookahead.ckpoint,
|
lfs3->lookahead.ckpoint,
|
||||||
lfs3->cfg->block_count);
|
lfs3->cfg->block_count);
|
||||||
#endif
|
#endif
|
||||||
@@ -10953,7 +10996,7 @@ static lfs3_sblock_t lfs3_alloc(lfs3_t *lfs3, uint32_t flags) {
|
|||||||
if (lfs3->lookahead.ckpoint <= 0) {
|
if (lfs3->lookahead.ckpoint <= 0) {
|
||||||
LFS3_ERROR("No more free space "
|
LFS3_ERROR("No more free space "
|
||||||
"(lookahead %"PRId32"/%"PRId32"/%"PRId32")",
|
"(lookahead %"PRId32"/%"PRId32"/%"PRId32")",
|
||||||
lfs3->lookahead.size,
|
lfs3->lookahead.known,
|
||||||
lfs3->lookahead.ckpoint,
|
lfs3->lookahead.ckpoint,
|
||||||
lfs3->cfg->block_count);
|
lfs3->cfg->block_count);
|
||||||
return LFS3_ERR_NOSPC;
|
return LFS3_ERR_NOSPC;
|
||||||
@@ -10961,6 +11004,27 @@ static lfs3_sblock_t lfs3_alloc(lfs3_t *lfs3, uint32_t flags) {
|
|||||||
|
|
||||||
// no blocks in our lookahead buffer?
|
// no blocks in our lookahead buffer?
|
||||||
|
|
||||||
|
// known blocks in our bmap?
|
||||||
|
#ifdef LFS3_YES_BMAPCACHE
|
||||||
|
if (lfs3->lookahead.bmapped > 0) {
|
||||||
|
int err = lfs3_alloc_markbmap(lfs3, &lfs3->gbmap.b, lfs3_min(
|
||||||
|
lfs3->lookahead.bmapped,
|
||||||
|
lfs3->lookahead.ckpoint));
|
||||||
|
if (err) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO should markinuse, etc, take the lookahead buffer?
|
||||||
|
|
||||||
|
// with known blocks we can trust the block state to be
|
||||||
|
// exact
|
||||||
|
lfs3_alloc_markfree(lfs3, lfs3_min(
|
||||||
|
lfs3->lookahead.bmapped,
|
||||||
|
lfs3->lookahead.ckpoint));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// // controlled airspace in our bmap?
|
// // controlled airspace in our bmap?
|
||||||
// #ifdef LFS3_BMAP
|
// #ifdef LFS3_BMAP
|
||||||
// if (lfs3->gbmap.ctrled > 0) {
|
// if (lfs3->gbmap.ctrled > 0) {
|
||||||
@@ -11054,18 +11118,18 @@ static lfs3_sblock_t lfs3_alloc(lfs3_t *lfs3, uint32_t flags) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// track in-use blocks
|
// track in-use blocks
|
||||||
lfs3_alloc_markinuse(lfs3, tag, &bptr);
|
lfs3_alloc_markbptr(lfs3, tag, &bptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// mask out any in-flight graft state
|
// mask out any in-flight graft state
|
||||||
for (lfs3_size_t i = 0;
|
for (lfs3_size_t i = 0;
|
||||||
i < lfs3_graft_count(lfs3->graft_count);
|
i < lfs3_graft_count(lfs3->graft_count);
|
||||||
i++) {
|
i++) {
|
||||||
lfs3_alloc_markinuse_(lfs3, lfs3->graft[i].u.disk.block);
|
lfs3_alloc_markinuse(lfs3, lfs3->graft[i].u.disk.block);
|
||||||
}
|
}
|
||||||
|
|
||||||
// mark anything not seen as free
|
// mark anything not seen as free
|
||||||
lfs3_alloc_markfree(lfs3);
|
lfs3_alloc_markfree(lfs3, lfs3->lookahead.ckpoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
// //// bmap fast algorithm ////
|
// //// bmap fast algorithm ////
|
||||||
@@ -15039,8 +15103,11 @@ static int lfs3_init(lfs3_t *lfs3, uint32_t flags,
|
|||||||
}
|
}
|
||||||
lfs3->lookahead.window = 0;
|
lfs3->lookahead.window = 0;
|
||||||
lfs3->lookahead.off = 0;
|
lfs3->lookahead.off = 0;
|
||||||
lfs3->lookahead.size = 0;
|
lfs3->lookahead.known = 0;
|
||||||
lfs3->lookahead.ckpoint = 0;
|
lfs3->lookahead.ckpoint = 0;
|
||||||
|
#ifdef LFS3_BMAP
|
||||||
|
lfs3->lookahead.bmapped = 0;
|
||||||
|
#endif
|
||||||
lfs3_alloc_discard(lfs3);
|
lfs3_alloc_discard(lfs3);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -15211,7 +15278,7 @@ static int lfs3_init(lfs3_t *lfs3, uint32_t flags,
|
|||||||
// TODO is this actually needed?
|
// TODO is this actually needed?
|
||||||
#ifdef LFS3_BMAP
|
#ifdef LFS3_BMAP
|
||||||
lfs3_btree_init(&lfs3->gbmap.b);
|
lfs3_btree_init(&lfs3->gbmap.b);
|
||||||
lfs3->gbmap.cursor = 0;
|
lfs3->gbmap.window = 0;
|
||||||
lfs3->gbmap.known = 0;
|
lfs3->gbmap.known = 0;
|
||||||
lfs3_memset(lfs3->gbmap_p, 0, LFS3_GBMAP_DSIZE);
|
lfs3_memset(lfs3->gbmap_p, 0, LFS3_GBMAP_DSIZE);
|
||||||
lfs3_memset(lfs3->gbmap_d, 0, LFS3_GBMAP_DSIZE);
|
lfs3_memset(lfs3->gbmap_d, 0, LFS3_GBMAP_DSIZE);
|
||||||
@@ -15766,16 +15833,6 @@ static int lfs3_mountinited(lfs3_t *lfs3) {
|
|||||||
lfs3->gcksum_p = lfs3->gcksum;
|
lfs3->gcksum_p = lfs3->gcksum;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// once we've mounted and derived a pseudo-random seed, initialize our
|
|
||||||
// block allocator
|
|
||||||
//
|
|
||||||
// the purpose of this is to avoid bad wear patterns such as always
|
|
||||||
// allocating blocks near the beginning of disk after a power-loss
|
|
||||||
//
|
|
||||||
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
|
||||||
lfs3->lookahead.window = lfs3->gcksum % lfs3->block_count;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// TODO should the consumegdelta above take gstate/gdelta as a parameter?
|
// TODO should the consumegdelta above take gstate/gdelta as a parameter?
|
||||||
// keep track of the current gstate on disk
|
// keep track of the current gstate on disk
|
||||||
#ifndef LFS3_RDONLY
|
#ifndef LFS3_RDONLY
|
||||||
@@ -15806,6 +15863,7 @@ static int lfs3_mountinited(lfs3_t *lfs3) {
|
|||||||
lfs3_dbgmrid(lfs3, lfs3->grm.queue[0]));
|
lfs3_dbgmrid(lfs3, lfs3->grm.queue[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(LFS3_RDONLY) && !defined(LFS3_2BONLY)
|
||||||
#ifdef LFS3_BMAP
|
#ifdef LFS3_BMAP
|
||||||
// decode the global block-map
|
// decode the global block-map
|
||||||
err = lfs3_data_readgbmap(lfs3,
|
err = lfs3_data_readgbmap(lfs3,
|
||||||
@@ -15814,6 +15872,20 @@ static int lfs3_mountinited(lfs3_t *lfs3) {
|
|||||||
// TODO switch to read-only?
|
// TODO switch to read-only?
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if we have a bmap, position our lookahead buffer at the last
|
||||||
|
// known bmap window
|
||||||
|
lfs3->lookahead.window = lfs3->gbmap.window;
|
||||||
|
lfs3->lookahead.bmapped = lfs3->gbmap.known;
|
||||||
|
#else
|
||||||
|
// if we _don't_ have a bmap, position our lookahead buffer
|
||||||
|
// pseudo-randomly using our gcksum as a prng
|
||||||
|
//
|
||||||
|
// the purpose of this is to avoid bad wear patterns such as always
|
||||||
|
// allocating blocks near the beginning of disk after a power-loss
|
||||||
|
//
|
||||||
|
lfs3->lookahead.window = lfs3->gcksum % lfs3->block_count;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -15989,7 +16061,7 @@ static int lfs3_formatbmap(lfs3_t *lfs3) {
|
|||||||
|
|
||||||
// TODO should we try multiple blocks?
|
// TODO should we try multiple blocks?
|
||||||
// assume we can write bmap to block 2
|
// assume we can write bmap to block 2
|
||||||
lfs3->gbmap.cursor = 3;
|
lfs3->gbmap.window = 3;
|
||||||
lfs3->gbmap.known = lfs3->cfg->block_count;
|
lfs3->gbmap.known = lfs3->cfg->block_count;
|
||||||
lfs3->gbmap.b.r.blocks[0] = 2;
|
lfs3->gbmap.b.r.blocks[0] = 2;
|
||||||
lfs3->gbmap.b.r.trunk = 0;
|
lfs3->gbmap.b.r.trunk = 0;
|
||||||
|
|||||||
@@ -843,8 +843,8 @@ typedef struct lfs3_grm {
|
|||||||
} lfs3_grm_t;
|
} lfs3_grm_t;
|
||||||
|
|
||||||
// gbmap encoding:
|
// gbmap encoding:
|
||||||
// .---+- -+- -+- -+- -. cursor: 1 leb128 <=5 bytes
|
// .---+- -+- -+- -+- -. window: 1 leb128 <=5 bytes
|
||||||
// | cursor | known: 1 leb128 <=5 bytes
|
// | window | known: 1 leb128 <=5 bytes
|
||||||
// +---+- -+- -+- -+- -+ block: 1 leb128 <=5 bytes
|
// +---+- -+- -+- -+- -+ block: 1 leb128 <=5 bytes
|
||||||
// | known | trunk: 1 leb128 <=4 bytes
|
// | known | trunk: 1 leb128 <=4 bytes
|
||||||
// +---+- -+- -+- -+- -+ cksum: 1 le32 4 bytes
|
// +---+- -+- -+- -+- -+ cksum: 1 le32 4 bytes
|
||||||
@@ -857,7 +857,7 @@ typedef struct lfs3_grm {
|
|||||||
#define LFS3_GBMAP_DSIZE (5+5+5+4+4)
|
#define LFS3_GBMAP_DSIZE (5+5+5+4+4)
|
||||||
|
|
||||||
typedef struct lfs3_gbmap {
|
typedef struct lfs3_gbmap {
|
||||||
lfs3_block_t cursor;
|
lfs3_block_t window;
|
||||||
lfs3_block_t known;
|
lfs3_block_t known;
|
||||||
lfs3_btree_t b;
|
lfs3_btree_t b;
|
||||||
} lfs3_gbmap_t;
|
} lfs3_gbmap_t;
|
||||||
@@ -916,8 +916,11 @@ 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_block_t size;
|
lfs3_block_t known;
|
||||||
lfs3_block_t ckpoint;
|
lfs3_block_t ckpoint;
|
||||||
|
#ifdef LFS3_BMAP
|
||||||
|
lfs3_block_t bmapped;
|
||||||
|
#endif
|
||||||
uint8_t *buffer;
|
uint8_t *buffer;
|
||||||
} lookahead;
|
} lookahead;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2011,7 +2011,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3968,7 +3968,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
|
|||||||
+50
-50
@@ -15,7 +15,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -142,7 +142,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -194,7 +194,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -254,7 +254,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -317,7 +317,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -369,7 +369,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -423,7 +423,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -507,7 +507,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -577,7 +577,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -715,7 +715,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -762,7 +762,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -822,7 +822,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -896,7 +896,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -955,7 +955,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1043,7 +1043,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1118,7 +1118,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1263,7 +1263,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1321,7 +1321,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1395,7 +1395,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1469,7 +1469,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1562,7 +1562,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1643,7 +1643,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1727,7 +1727,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1817,7 +1817,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -1925,7 +1925,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2077,7 +2077,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2138,7 +2138,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2229,7 +2229,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2291,7 +2291,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2471,7 +2471,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2542,7 +2542,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2616,7 +2616,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2683,7 +2683,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2767,7 +2767,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -2875,7 +2875,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3042,7 +3042,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3074,7 +3074,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3133,7 +3133,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3209,7 +3209,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3302,7 +3302,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3396,7 +3396,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3473,7 +3473,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3591,7 +3591,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3669,7 +3669,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -3828,7 +3828,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -4008,7 +4008,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -4236,7 +4236,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
@@ -4364,7 +4364,7 @@ code = '''
|
|||||||
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
memset(lfs3.lookahead.buffer, 0, CFG->lookahead_size);
|
||||||
lfs3.lookahead.window = 2;
|
lfs3.lookahead.window = 2;
|
||||||
lfs3.lookahead.off = 0;
|
lfs3.lookahead.off = 0;
|
||||||
lfs3.lookahead.size = lfs3_min(8*CFG->lookahead_size,
|
lfs3.lookahead.known = lfs3_min(8*CFG->lookahead_size,
|
||||||
CFG->block_count-2);
|
CFG->block_count-2);
|
||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user