From 0690a86f1d1f317b052b2e0f756c654a1b497318 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Mon, 19 Jun 2023 17:01:56 -0500 Subject: [PATCH] Removed revision count from lfsr_rbyd_t Now we read the revision count on-demand, trading off some extra reads for a smaller lfsr_rbyd_t struct. I believe this is worth it because: 1. We're created a lot of lfsr_rbyd_t structs as a part of the relatively complicated mdir/btree commit logic in order to safely fallback on errors. 2. We don't really need the revision count for our Cow btrees, so we only need to read the revision count on mdir fetch (which we were already reading too many times), on mdir compact, and on rbyd fetch as a part of checksum calculation. This really only adds a O(1) cost when we are compacting, which is rather small. Current measurements: code: 8980 -> 9036 (+0.6%) stack: 1024 -> 1000 (-2.3%) Though note this is currently without any mdir/btree commit code being dragged in. --- lfs.c | 136 +++++++++++++++++++++++++++++-------------- lfs.h | 1 - tests/test_rbyd.toml | 94 ------------------------------ 3 files changed, 92 insertions(+), 139 deletions(-) diff --git a/lfs.c b/lfs.c index 13aee002..c92db4cf 100644 --- a/lfs.c +++ b/lfs.c @@ -1585,8 +1585,8 @@ static bool lfsr_rbyd_isfetched(const lfsr_rbyd_t *rbyd) { // allocate an rbyd block -static int lfsr_rbyd_alloc(lfs_t *lfs, lfsr_rbyd_t *rbyd, uint32_t rev) { - *rbyd = (lfsr_rbyd_t){.rev=rev, .weight=0, .trunk=0, .off=0, .crc=0}; +static int lfsr_rbyd_alloc(lfs_t *lfs, lfsr_rbyd_t *rbyd) { + *rbyd = (lfsr_rbyd_t){.weight=0, .trunk=0, .off=0, .crc=0}; int err = lfs_alloc(lfs, &rbyd->block); if (err) { return err; @@ -1602,20 +1602,16 @@ static int lfsr_rbyd_alloc(lfs_t *lfs, lfsr_rbyd_t *rbyd, uint32_t rev) { static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd, lfs_block_t block, lfs_size_t trunk) { - // read the revision count and get the crc started - uint32_t rev; + // checksum the revision count to get the crc started uint32_t crc = 0; - int err = lfsr_bd_readcsum(lfs, block, 0, lfs->cfg->block_size, - &rev, sizeof(uint32_t), - &crc); + int err = lfsr_bd_csum(lfs, block, 0, lfs->cfg->block_size, + sizeof(uint32_t), &crc); if (err) { return err; } - rev = lfs_fromle32_(&rev); rbyd->block = block; rbyd->off = 0; - rbyd->rev = rev; // temporary state until we validate a crc lfs_off_t off = sizeof(uint32_t); @@ -1904,6 +1900,33 @@ static lfs_ssize_t lfsr_rbyd_get(lfs_t *lfs, const lfsr_rbyd_t *rbyd, } +// append a revision count +// +// this is optional, if not called revision count defaults to 0 (for btrees) +static int lfsr_rbyd_appendrev(lfs_t *lfs, lfsr_rbyd_t *rbyd, uint32_t rev) { + // should only be called before any tags are written + LFS_ASSERT(rbyd->off == 0); + + // revision count stored as le32, we don't use a leb128 encoding as we + // intentionally allow the revision count to overflow + uint8_t buf[sizeof(uint32_t)]; + lfs_tole32_(rev, &buf); + int err = lfsr_bd_prog(lfs, rbyd->block, rbyd->off, + &buf, sizeof(uint32_t), &rbyd->crc); + if (err) { + goto failed; + } + rbyd->off += sizeof(uint32_t); + + return 0; + +failed: + // if we fail mark the rbyd as unerased and release the pcache + lfs_cache_zero(lfs, &lfs->pcache); + rbyd->off = lfs->cfg->block_size; + return err; +} + // helper functions for managing the 3-element fifo used in lfsr_rbyd_append static int lfsr_rbyd_p_flush(lfs_t *lfs, lfsr_rbyd_t *rbyd, lfsr_tag_t p_alts[static 3], @@ -2033,16 +2056,12 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd, return 0; } - // make sure every rbyd starts with its revision count + // make sure every rbyd starts with a revision count if (rbyd->off == 0) { - uint8_t buf[sizeof(uint32_t)]; - lfs_tole32_(rbyd->rev, &buf); - err = lfsr_bd_prog(lfs, rbyd->block, rbyd->off, - &buf, sizeof(uint32_t), &rbyd->crc); + err = lfsr_rbyd_appendrev(lfs, rbyd, 0); if (err) { goto failed; } - rbyd->off += sizeof(uint32_t); } // figure out the range of tags we're operating on @@ -2593,19 +2612,16 @@ static int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd, goto failed; } - // setup commit state + // setup commit state, use a separate rbyd so we have a fallback in + // case of error lfsr_rbyd_t rbyd_ = *rbyd; // make sure every rbyd starts with its revision count if (rbyd_.off == 0) { - uint8_t buf[sizeof(uint32_t)]; - lfs_tole32_(rbyd_.rev, &buf); - err = lfsr_bd_prog(lfs, rbyd_.block, rbyd_.off, - &buf, sizeof(uint32_t), &rbyd_.crc); + err = lfsr_rbyd_appendrev(lfs, &rbyd_, 0); if (err) { goto failed; } - rbyd_.off += sizeof(uint32_t); } // append each tag to the tree @@ -3598,9 +3614,8 @@ static int lfsr_btree_commit(lfs_t *lfs, goto split; } - // TODO were we doing something funky with rev? // allocate a new rbyd - err = lfsr_rbyd_alloc(lfs, &rbyd_, rbyd->rev+1); + err = lfsr_rbyd_alloc(lfs, &rbyd_); if (err) { return err; } @@ -3692,16 +3707,15 @@ static int lfsr_btree_commit(lfs_t *lfs, return split_id; } - // TODO were we doing something funky with rev? // allocate a new rbyd - err = lfsr_rbyd_alloc(lfs, &rbyd_, rbyd->rev+1); + err = lfsr_rbyd_alloc(lfs, &rbyd_); if (err) { return err; } // allocate a sibling lfsr_rbyd_t sibling; - err = lfsr_rbyd_alloc(lfs, &sibling, rbyd->rev+1); + err = lfsr_rbyd_alloc(lfs, &sibling); if (err) { return err; } @@ -3787,7 +3801,7 @@ static int lfsr_btree_commit(lfs_t *lfs, // no parent? introduce a new trunk if (pid == -1) { - int err = lfsr_rbyd_alloc(lfs, &parent, 1); + int err = lfsr_rbyd_alloc(lfs, &parent); if (err) { return err; } @@ -4067,7 +4081,7 @@ static int lfsr_btree_push(lfs_t *lfs, lfsr_btree_t *btree, // inlined btree, need to expand into an rbyd } else if (lfsr_btree_isinlined(btree)) { lfsr_rbyd_t rbyd; - int err = lfsr_rbyd_alloc(lfs, &rbyd, 1); + int err = lfsr_rbyd_alloc(lfs, &rbyd); if (err) { return err; } @@ -4307,7 +4321,7 @@ static int lfsr_btree_split(lfs_t *lfs, lfsr_btree_t *btree, // inlined btree, need to expand into an rbyd if (lfsr_btree_isinlined(btree)) { lfsr_rbyd_t rbyd; - int err = lfsr_rbyd_alloc(lfs, &rbyd, 1); + int err = lfsr_rbyd_alloc(lfs, &rbyd); if (err) { return err; } @@ -4670,7 +4684,6 @@ static int lfsr_mdir_alloc(lfs_t *lfs, lfsr_mdir_t *mdir, lfs_ssize_t mid) { // mark mdir as needing compaction mdir->rbyd.off = lfs->cfg->block_size; mdir->rbyd.trunk = 0; - mdir->rbyd.rev = rev; return 0; } @@ -4829,27 +4842,50 @@ static int lfsr_mdir_compact_(lfs_t *lfs, lfsr_mdir_t *mdir, const lfsr_mdir_t *source, const lfsr_attr_t *attr1s, lfs_size_t attr1_count, const lfsr_attr_t *attr2s, lfs_size_t attr2_count) { - // TODO different indicator? // note mid indicates some special cases: // - mid = manchor => never alloc (mroot anchor) // - mid = wl => only alloc if mdir is tired (wear-leveling) // - otherwise => always alloc, use this mid (new mdir) - if (mid != LFSR_MID_MANCHOR && (mid != LFSR_MID_WL || ( - lfs->cfg->block_cycles > 0 - && (mdir->rbyd.rev+1) % lfs->cfg->block_cycles == 0))) { - // allocate a new mdir for relocation - int err = lfsr_mdir_alloc(lfs, mdir, - (mid != LFSR_MID_WL ? mid : mdir->mid)); - if (err) { + uint32_t rev; + if (mid != LFSR_MID_MANCHOR) { + // first thing we need to do is read our current revision count + int err = lfsr_bd_read(lfs, source->rbyd.block, 0, sizeof(uint32_t), + &rev, sizeof(uint32_t)); + if (err && err != LFS_ERR_CORRUPT) { return err; } + // note we allow corrupt errors here, as long as they are consistent + rev = (err != LFS_ERR_CORRUPT ? lfs_fromle32_(&rev) : 0); + + // decide if we need to relocate + if (mid != LFSR_MID_WL || ( + lfs->cfg->block_cycles > 0 + // TODO rev things + && (rev + 1) % lfs->cfg->block_cycles == 0)) { + // allocate a new mdir for relocation + err = lfsr_mdir_alloc(lfs, mdir, + (mid != LFSR_MID_WL ? mid : mdir->mid)); + if (err) { + return err; + } + + // read the new revision count + // + // we use whatever is on-disk to avoid needing to rewrite the + // redund block + err = lfsr_bd_read(lfs, mdir->rbyd.block, 0, sizeof(uint32_t), + &rev, sizeof(uint32_t)); + if (err && err != LFS_ERR_CORRUPT) { + return err; + } + // note we allow corrupt errors here, as long as they are consistent + rev = (err != LFS_ERR_CORRUPT ? lfs_fromle32_(&rev) : 0); + } } // swap our rbyds lfs_swap32(&mdir->rbyd.block, &mdir->other_block); // update our revision count - // TODO rev things - mdir->rbyd.rev += 1; mdir->rbyd.off = 0; mdir->rbyd.trunk = 0; mdir->rbyd.weight = 0; @@ -4861,6 +4897,13 @@ static int lfsr_mdir_compact_(lfs_t *lfs, lfsr_mdir_t *mdir, return err; } + // increment our revision count and write it to our rbyd + // TODO rev things + err = lfsr_rbyd_appendrev(lfs, &mdir->rbyd, rev + 1); + if (err) { + return err; + } + // copy over attrs err = lfsr_rbyd_compact(lfs, &mdir->rbyd, start_id, end_id, false, &source->rbyd); @@ -4891,7 +4934,7 @@ static int lfsr_mdir_compact_(lfs_t *lfs, lfsr_mdir_t *mdir, // drop commit if weight goes to zero if (mdir->mid >= 0 && mdir->rbyd.weight == 0) { - lfs_cache_drop(lfs, &lfs->pcache); + lfs_cache_zero(lfs, &lfs->pcache); // finalize commit } else { @@ -4921,7 +4964,7 @@ static int lfsr_mdir_commit_(lfs_t *lfs, lfsr_mdir_t *mdir, // drop commit if weight goes to zero if (mdir_.mid >= 0 && mdir_.rbyd.weight == 0) { - lfs_cache_drop(lfs, &lfs->pcache); + lfs_cache_zero(lfs, &lfs->pcache); // finalize commit } else { @@ -6151,16 +6194,21 @@ static int lfsr_formatinited(lfs_t *lfs) { return d; } - for (int i = 0; i < 2; i++) { + for (uint32_t i = 0; i < 2; i++) { // write superblock to both rbyds in the root mroot to hopefully // avoid mounting an older filesystem on disk - lfsr_rbyd_t rbyd = {.block=i, .rev=i-1, .off=0, .trunk=0}; + lfsr_rbyd_t rbyd = {.block=i, .off=0, .trunk=0}; int err = lfsr_bd_erase(lfs, rbyd.block); if (err) { return err; } + err = lfsr_rbyd_appendrev(lfs, &rbyd, (uint32_t)i - 1); + if (err) { + return err; + } + err = lfsr_rbyd_commit(lfs, &rbyd, LFSR_ATTRS( LFSR_ATTR(-1, SUPERMAGIC, 0, "littlefs", 8), LFSR_ATTR(-1, SUPERCONFIG, 0, buf, d))); diff --git a/lfs.h b/lfs.h index 5af32386..18e4beb8 100644 --- a/lfs.h +++ b/lfs.h @@ -340,7 +340,6 @@ typedef struct lfsr_rbyd { // off=block_size => rbyd not erased/needs compaction lfs_off_t off; lfs_off_t trunk; - uint32_t rev; uint32_t crc; } lfsr_rbyd_t; diff --git a/tests/test_rbyd.toml b/tests/test_rbyd.toml index 0890e311..d2c38b7a 100644 --- a/tests/test_rbyd.toml +++ b/tests/test_rbyd.toml @@ -21,7 +21,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -59,7 +58,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -98,7 +96,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -132,7 +129,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -255,7 +251,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -380,7 +375,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -472,7 +466,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -566,7 +559,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -630,7 +622,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -696,7 +687,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -776,7 +766,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -920,7 +909,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -1092,7 +1080,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -1264,7 +1251,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -1444,7 +1430,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -1652,7 +1637,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -1819,7 +1803,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2007,7 +1990,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2099,7 +2081,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2181,7 +2162,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2271,7 +2251,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2367,7 +2346,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2440,7 +2418,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2512,7 +2489,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2623,7 +2599,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2686,7 +2661,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2799,7 +2773,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -2950,7 +2923,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -3045,7 +3017,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -3195,7 +3166,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -3431,7 +3401,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -3520,7 +3489,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -3647,7 +3615,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -3783,7 +3750,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -3931,7 +3897,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -4093,7 +4058,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -4196,7 +4160,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -4290,7 +4253,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -4397,7 +4359,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -4510,7 +4471,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -4603,7 +4563,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -4691,7 +4650,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -4760,7 +4718,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -4995,7 +4952,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -5257,7 +5213,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -5372,7 +5327,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -5477,7 +5431,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -5644,7 +5597,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -5822,7 +5774,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -5933,7 +5884,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -6043,7 +5993,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -6172,7 +6121,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -6367,7 +6315,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -6492,7 +6439,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -6584,7 +6530,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -6724,7 +6669,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -6881,7 +6825,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -7008,7 +6951,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -7255,7 +7197,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -7410,7 +7351,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -7601,7 +7541,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -7726,7 +7665,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -7865,7 +7803,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -7980,7 +7917,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -8114,7 +8050,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -8257,7 +8192,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -8418,7 +8352,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -8553,7 +8486,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -8791,7 +8723,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -8901,7 +8832,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -8988,7 +8918,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -9074,7 +9003,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -9747,7 +9675,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -10004,7 +9931,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -10116,7 +10042,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -10238,7 +10163,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -10365,7 +10289,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -10501,7 +10424,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -10650,7 +10572,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -10777,7 +10698,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -10913,7 +10833,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -11061,7 +10980,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -11215,7 +11133,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -11395,7 +11312,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -11578,7 +11494,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -11802,7 +11717,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -11890,7 +11804,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -12028,7 +11941,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -12168,7 +12080,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -12257,7 +12168,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -12403,7 +12313,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -12551,7 +12460,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -12638,7 +12546,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0, @@ -12778,7 +12685,6 @@ code = ''' lfsr_rbyd_t init_rbyd = { .block = 0, - .rev = 1, .off = 0, .crc = 0, .trunk = 0,