Initial exploration of B-trees, but ran into issues composing with rbyds
The original idea was weighted B-trees composed out of weighted rbyds, with the two weight systems being independent. Descent down the B-tree uses the same technique in the current metadata data-structure of searching for which branch to take during fetch, basically getting the search for free (well, on top of the already required O(m) fetch operation). But this is fundamentally flawed. While file names provide an absolute reference for finding matches, weights are relative references. So we don't have enough information to do weight-based lookup during fetch. This smells just like the relative-vs-absolute key issues that led to rbyd vs rbd trees in the first place... One option is to do rbyd traversals at each B-tree node to build the necessary information to figure out the weights. But with rbyd traversals taking O(m log m), this makes B-tree lookups O(log n * m log m), and B-tree traversals a messy O(n log n * m log m), which is acceptable, but disapointing for what will likely be the most common operation in the filesystem. But the rbyd trees _are_ already weighted. A better solution might be to go back and rethink the seperation of B-tree weights and rbyd ids. Unfortunately, with only 16-bits available for rbyd ids, this would likely require a rewrite of how rbyd tags are encoded...
This commit is contained in:
@@ -455,24 +455,26 @@ typedef uint32_t lfsr_tag_t;
|
||||
typedef int32_t lfsr_stag_t;
|
||||
|
||||
enum lfsr_tag_type {
|
||||
LFSR_TAG_MK = 0x0800,
|
||||
LFSR_TAG_RM = 0x0801,
|
||||
LFSR_TAG_MKREG = 0x0800,
|
||||
LFSR_TAG_MKDIR = 0x0808,
|
||||
LFSR_TAG_MK = 0x0800,
|
||||
LFSR_TAG_RM = 0x0801,
|
||||
LFSR_TAG_MKREG = 0x0800,
|
||||
LFSR_TAG_MKDIR = 0x0808,
|
||||
LFSR_TAG_MKBRANCH = 0x0ff8,
|
||||
|
||||
LFSR_TAG_UATTR = 0x1000,
|
||||
LFSR_TAG_RMUATTR = 0x1001,
|
||||
LFSR_TAG_UATTR = 0x1000,
|
||||
LFSR_TAG_RMUATTR = 0x1001,
|
||||
LFSR_TAG_BTREE = 0x2010,
|
||||
|
||||
LFSR_TAG_CRC = 0x0002,
|
||||
LFSR_TAG_CRC0 = 0x0002,
|
||||
LFSR_TAG_CRC1 = 0x0003,
|
||||
LFSR_TAG_FCRC = 0x000a,
|
||||
LFSR_TAG_CRC = 0x0002,
|
||||
LFSR_TAG_CRC0 = 0x0002,
|
||||
LFSR_TAG_CRC1 = 0x0003,
|
||||
LFSR_TAG_FCRC = 0x000a,
|
||||
|
||||
LFSR_TAG_ALT = 0x0004,
|
||||
LFSR_TAG_ALTBLT = 0x0004,
|
||||
LFSR_TAG_ALTRLT = 0x0005,
|
||||
LFSR_TAG_ALTBGT = 0x0006,
|
||||
LFSR_TAG_ALTRGT = 0x0007,
|
||||
LFSR_TAG_ALT = 0x0004,
|
||||
LFSR_TAG_ALTBLT = 0x0004,
|
||||
LFSR_TAG_ALTRLT = 0x0005,
|
||||
LFSR_TAG_ALTBGT = 0x0006,
|
||||
LFSR_TAG_ALTRGT = 0x0007,
|
||||
};
|
||||
|
||||
#define LFSR_TAG_(type, id) \
|
||||
@@ -517,10 +519,10 @@ enum lfsr_tag_type {
|
||||
// LFS_TYPE1_ALT = 0x0004,
|
||||
//};
|
||||
|
||||
enum lfsr_tag_pat {
|
||||
LFS_PAT_GET = 0x0000,
|
||||
LFS_PAT_FIND = 0x0001,
|
||||
};
|
||||
//enum lfsr_tag_pat {
|
||||
// LFS_PAT_GET = 0x0000,
|
||||
// LFS_PAT_FIND = 0x0001,
|
||||
//};
|
||||
|
||||
//#define LFS_ALT_B false
|
||||
//#define LFS_ALT_R true
|
||||
@@ -582,6 +584,26 @@ static inline bool lfsr_tag_isrm(lfsr_tag_t tag) {
|
||||
return tag & 0x1;
|
||||
}
|
||||
|
||||
static inline uint8_t lfsr_tag_pat(lfsr_tag_t tag) {
|
||||
// note that this is only for driver bookkeeping and never
|
||||
// exists on disk
|
||||
return tag & 0x4;
|
||||
}
|
||||
|
||||
static inline bool lfsr_tag_isfound(lfsr_tag_t tag) {
|
||||
// note that this is only for driver bookkeeping and never
|
||||
// exists on disk
|
||||
return tag & 0x2;
|
||||
}
|
||||
|
||||
static inline lfsr_tag_t lfsr_tag_mkfound(lfsr_tag_t tag) {
|
||||
return tag | 0x2;
|
||||
}
|
||||
|
||||
static inline lfsr_tag_t lfsr_tag_mknotfound(lfsr_tag_t tag) {
|
||||
return tag & ~0x2;
|
||||
}
|
||||
|
||||
static inline uint16_t lfsr_tag_suptype(lfsr_tag_t tag) {
|
||||
return tag & 0x7807;
|
||||
}
|
||||
@@ -723,41 +745,67 @@ struct lfsr_attr {
|
||||
// NULL, 0, next})
|
||||
|
||||
|
||||
// operations on pattern lists
|
||||
struct lfsr_pat {
|
||||
lfsr_tag_t tag;
|
||||
union {
|
||||
struct {
|
||||
void *buffer;
|
||||
lfs_size_t size;
|
||||
} get;
|
||||
struct {
|
||||
const void *buffer;
|
||||
lfs_size_t size;
|
||||
} find;
|
||||
} u;
|
||||
struct lfsr_pat *next;
|
||||
|
||||
// patterns we can look for during fetch
|
||||
enum lfsr_tag_pat {
|
||||
LFSR_PAT_LEB128 = 0x0000,
|
||||
LFSR_PAT_NAME = 0x0004,
|
||||
};
|
||||
|
||||
#define LFS_MKRGETPAT_(tag, buffer, size, next) \
|
||||
(&(struct lfsr_pat){ \
|
||||
.tag = LFS_PAT_GET | (tag), \
|
||||
.u.get.buffer = buffer, \
|
||||
.u.get.size = size, \
|
||||
.next = next})
|
||||
struct lfsr_pat {
|
||||
// set the lower bits of predicted with the pattern type
|
||||
lfsr_tag_t predicted;
|
||||
|
||||
#define LFS_MKRGETPAT(type1, type2, buffer, size, next) \
|
||||
LFS_MKRGET_(LFS_MKRTAG(type1, type2, 0), buffer, size, next)
|
||||
// the result will be placed in found, if the tag is not found,
|
||||
// the id will at least contain where you should insert
|
||||
lfsr_tag_t found;
|
||||
|
||||
#define LFS_MKRFINDPAT_(tag, buffer, size, next) \
|
||||
(&(struct lfsr_pat){ \
|
||||
.tag = LFS_PAT_FIND | (tag), \
|
||||
.u.find.buffer = buffer, \
|
||||
.u.find.size = size, \
|
||||
.next = next})
|
||||
// what to search for
|
||||
union {
|
||||
uint32_t leb128;
|
||||
struct {
|
||||
const char *name;
|
||||
lfs_size_t size;
|
||||
} name;
|
||||
} u;
|
||||
};
|
||||
|
||||
#define LFS_MKRFINDPAT(type1, type2, buffer, size, next) \
|
||||
LFS_MKRFIND_(LFS_MKRTAG(type1, type2, 0), buffer, size, next)
|
||||
|
||||
//// operations on pattern lists
|
||||
//struct lfsr_pat {
|
||||
// lfsr_tag_t tag;
|
||||
// union {
|
||||
// struct {
|
||||
// void *buffer;
|
||||
// lfs_size_t size;
|
||||
// } get;
|
||||
// struct {
|
||||
// const void *buffer;
|
||||
// lfs_size_t size;
|
||||
// } find;
|
||||
// } u;
|
||||
// struct lfsr_pat *next;
|
||||
//};
|
||||
//
|
||||
//#define LFS_MKRGETPAT_(tag, buffer, size, next)
|
||||
// (&(struct lfsr_pat){
|
||||
// .tag = LFS_PAT_GET | (tag),
|
||||
// .u.get.buffer = buffer,
|
||||
// .u.get.size = size,
|
||||
// .next = next})
|
||||
//
|
||||
//#define LFS_MKRGETPAT(type1, type2, buffer, size, next)
|
||||
// LFS_MKRGET_(LFS_MKRTAG(type1, type2, 0), buffer, size, next)
|
||||
//
|
||||
//#define LFS_MKRFINDPAT_(tag, buffer, size, next)
|
||||
// (&(struct lfsr_pat){
|
||||
// .tag = LFS_PAT_FIND | (tag),
|
||||
// .u.find.buffer = buffer,
|
||||
// .u.find.size = size,
|
||||
// .next = next})
|
||||
//
|
||||
//#define LFS_MKRFINDPAT(type1, type2, buffer, size, next)
|
||||
// LFS_MKRFIND_(LFS_MKRTAG(type1, type2, 0), buffer, size, next)
|
||||
|
||||
|
||||
// operations on global state
|
||||
@@ -827,15 +875,20 @@ static void lfs_fcrc_tole32(struct lfs_fcrc *fcrc) {
|
||||
}
|
||||
#endif
|
||||
|
||||
// fcrc on-disk encoding
|
||||
struct lfsr_fcrc {
|
||||
uint32_t crc;
|
||||
lfs_size_t size;
|
||||
};
|
||||
|
||||
static lfs_ssize_t lfsr_fcrc_todisk(struct lfsr_fcrc *fcrc) {
|
||||
lfs_tole32_(fcrc->crc, &fcrc->crc);
|
||||
#define LFSR_FCRC_DSIZE 8
|
||||
|
||||
lfs_ssize_t delta = lfs_toleb128(fcrc->size, (uint8_t*)&fcrc->size, 4);
|
||||
static lfs_ssize_t lfsr_fcrc_todisk(
|
||||
const struct lfsr_fcrc *fcrc,
|
||||
uint8_t buf[static LFSR_FCRC_DSIZE]) {
|
||||
lfs_tole32_(fcrc->crc, &buf[0]);
|
||||
|
||||
lfs_ssize_t delta = lfs_toleb128(fcrc->size, &buf[4], 4);
|
||||
if (delta < 0) {
|
||||
return delta;
|
||||
}
|
||||
@@ -843,10 +896,12 @@ static lfs_ssize_t lfsr_fcrc_todisk(struct lfsr_fcrc *fcrc) {
|
||||
return sizeof(uint32_t) + delta;
|
||||
}
|
||||
|
||||
static lfs_ssize_t lfsr_fcrc_fromdisk(struct lfsr_fcrc *fcrc) {
|
||||
fcrc->crc = lfs_fromle32_(&fcrc->crc);
|
||||
static lfs_ssize_t lfsr_fcrc_fromdisk(
|
||||
struct lfsr_fcrc *fcrc,
|
||||
const uint8_t buf[static LFSR_FCRC_DSIZE]) {
|
||||
fcrc->crc = lfs_fromle32_(&buf[0]);
|
||||
|
||||
lfs_ssize_t delta = lfs_fromleb128(&fcrc->size, (uint8_t*)&fcrc->size, 4);
|
||||
lfs_ssize_t delta = lfs_fromleb128(&fcrc->size, &buf[4], 4);
|
||||
if (delta < 0) {
|
||||
return delta;
|
||||
}
|
||||
@@ -854,6 +909,59 @@ static lfs_ssize_t lfsr_fcrc_fromdisk(struct lfsr_fcrc *fcrc) {
|
||||
return sizeof(uint32_t) + delta;
|
||||
}
|
||||
|
||||
// btree on-disk encoding
|
||||
#define LFSR_BTREE_DSIZE 14
|
||||
|
||||
static lfs_ssize_t lfsr_btree_todisk(
|
||||
const lfsr_btree_t *btree,
|
||||
uint8_t buf[static LFSR_BTREE_DSIZE]) {
|
||||
lfs_ssize_t delta = 0;
|
||||
lfs_ssize_t delta_ = lfs_toleb128(btree->block, &buf[delta], 5);
|
||||
if (delta_ < 0) {
|
||||
return delta_;
|
||||
}
|
||||
delta += delta_;
|
||||
|
||||
delta_ = lfs_toleb128(btree->limit, &buf[delta], 4);
|
||||
if (delta_ < 0) {
|
||||
return delta_;
|
||||
}
|
||||
delta += delta_;
|
||||
|
||||
delta_ = lfs_toleb128(btree->weight, &buf[delta], 5);
|
||||
if (delta_ < 0) {
|
||||
return delta_;
|
||||
}
|
||||
delta += delta_;
|
||||
|
||||
return delta;
|
||||
}
|
||||
|
||||
static lfs_ssize_t lfsr_btree_fromdisk(
|
||||
lfsr_btree_t *btree,
|
||||
const uint8_t buf[static LFSR_BTREE_DSIZE]) {
|
||||
lfs_ssize_t delta = 0;
|
||||
lfs_ssize_t delta_ = lfs_fromleb128(&btree->block, &buf[delta], 5);
|
||||
if (delta_ < 0) {
|
||||
return delta_;
|
||||
}
|
||||
delta += delta_;
|
||||
|
||||
delta_ = lfs_fromleb128(&btree->limit, &buf[delta], 4);
|
||||
if (delta_ < 0) {
|
||||
return delta_;
|
||||
}
|
||||
delta += delta_;
|
||||
|
||||
delta_ = lfs_fromleb128(&btree->weight, &buf[delta], 5);
|
||||
if (delta_ < 0) {
|
||||
return delta_;
|
||||
}
|
||||
delta += delta_;
|
||||
|
||||
return delta;
|
||||
}
|
||||
|
||||
// other endianness operations
|
||||
static void lfs_ctz_fromle32(struct lfs_ctz *ctz) {
|
||||
ctz->head = lfs_fromle32(ctz->head);
|
||||
@@ -1109,21 +1217,19 @@ static lfs_ssize_t lfsr_rbyd_readtag(lfs_t *lfs,
|
||||
return i;
|
||||
}
|
||||
|
||||
static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
lfs_block_t block,
|
||||
struct lfsr_pat *patterns) {
|
||||
// TODO this
|
||||
// first mark patterns as invalid until we find matches
|
||||
for (struct lfsr_pat *pattern = patterns;
|
||||
pattern;
|
||||
pattern = pattern->next) {
|
||||
pattern->tag = lfsr_tag_mkinvalid(pattern->tag);
|
||||
static lfsr_stag_t lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
lfs_block_t block, lfs_size_t limit,
|
||||
struct lfsr_pat *pattern) {
|
||||
// clear any previous state in pattern
|
||||
if (pattern) {
|
||||
pattern->predicted &= 0x1;
|
||||
pattern->found = 0;
|
||||
}
|
||||
|
||||
// read the revision count and get the crc started
|
||||
uint32_t rev;
|
||||
int err = lfs_bd_read(lfs,
|
||||
NULL, &lfs->rcache, lfs->cfg->block_size,
|
||||
NULL, &lfs->rcache, limit,
|
||||
block, 0, &rev, sizeof(uint32_t));
|
||||
if (err) {
|
||||
return err;
|
||||
@@ -1153,7 +1259,7 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
lfsr_tag_t tag;
|
||||
lfs_size_t size;
|
||||
lfs_ssize_t delta = lfsr_rbyd_readtag(lfs,
|
||||
NULL, &lfs->rcache, lfs->cfg->block_size,
|
||||
NULL, &lfs->rcache, limit-off,
|
||||
block, off, &tag, &size, &crc);
|
||||
if (delta < 0) {
|
||||
if (delta == LFS_ERR_INVAL
|
||||
@@ -1182,7 +1288,7 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
wastrunk = false;
|
||||
|
||||
// tag goes out of range?
|
||||
if (off + size > lfs->cfg->block_size) {
|
||||
if (off + size > limit) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1193,7 +1299,7 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
|
||||
// crc the entry first, hopefully leaving it in the cache
|
||||
err = lfs_bd_crc32c(lfs,
|
||||
NULL, &lfs->rcache, lfs->cfg->block_size,
|
||||
NULL, &lfs->rcache, limit-off,
|
||||
block, off, size, &crc);
|
||||
if (err) {
|
||||
if (err == LFS_ERR_CORRUPT) {
|
||||
@@ -1218,10 +1324,10 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
count -= 1;
|
||||
// found an fcrc? save for later
|
||||
} else if (lfsr_tag_xsuptype(tag) == LFSR_TAG_FCRC) {
|
||||
uint8_t fbuf[LFSR_FCRC_DSIZE];
|
||||
err = lfs_bd_read(lfs,
|
||||
NULL, &lfs->rcache, lfs->cfg->block_size,
|
||||
block, off, &fcrc,
|
||||
lfs_min(size, sizeof(struct lfsr_fcrc)));
|
||||
NULL, &lfs->rcache, limit-off,
|
||||
block, off, fbuf, lfs_min(size, LFSR_FCRC_DSIZE));
|
||||
if (err) {
|
||||
if (err == LFS_ERR_CORRUPT) {
|
||||
break;
|
||||
@@ -1229,17 +1335,63 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
return err;
|
||||
}
|
||||
|
||||
lfs_ssize_t delta = lfsr_fcrc_fromdisk(&fcrc);
|
||||
lfs_ssize_t delta = lfsr_fcrc_fromdisk(&fcrc, fbuf);
|
||||
if (delta < 0) {
|
||||
return delta;
|
||||
}
|
||||
hasfcrc = true;
|
||||
}
|
||||
|
||||
// test if pattern matches?
|
||||
if (pattern && lfsr_tag_suptype(tag) == LFSR_TAG_MK) {
|
||||
int cmp;
|
||||
if (lfsr_tag_pat(pattern->predicted) == LFSR_PAT_LEB128) {
|
||||
uint8_t buf[5];
|
||||
err = lfs_bd_read(lfs,
|
||||
NULL, &lfs->rcache, limit-off,
|
||||
block, off, buf, lfs_min(size, 5));
|
||||
if (err) {
|
||||
if (err == LFS_ERR_CORRUPT) {
|
||||
break;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
uint32_t found;
|
||||
lfs_ssize_t delta = lfs_fromleb128(&found, buf, 5);
|
||||
if (delta < 0) {
|
||||
return delta;
|
||||
}
|
||||
|
||||
cmp = pattern->u.leb128 - found;
|
||||
} else if (lfsr_tag_pat(pattern->predicted) == LFSR_PAT_NAME) {
|
||||
// TODO handle names
|
||||
LFS_ASSERT(false);
|
||||
}
|
||||
|
||||
// note this already handles the shifting of ids
|
||||
if (cmp == 0) {
|
||||
pattern->predicted = lfsr_tag_mkfound(
|
||||
tag | lfsr_tag_pat(pattern->predicted));
|
||||
} else if (cmp < 0) {
|
||||
pattern->predicted += 0x8000;
|
||||
}
|
||||
|
||||
} else if (pattern && lfsr_tag_suptype(tag) == LFSR_TAG_RM) {
|
||||
// update any found tags
|
||||
if (lfsr_tag_id(tag) == lfsr_tag_id(pattern->predicted)) {
|
||||
pattern->predicted = lfsr_tag_mknotfound(
|
||||
pattern->predicted);
|
||||
} else if (lfsr_tag_id(tag) < lfsr_tag_id(pattern->predicted)) {
|
||||
pattern->predicted -= 0x8000;
|
||||
}
|
||||
}
|
||||
|
||||
// is an end-of-commit crc
|
||||
} else {
|
||||
uint32_t crc_ = 0;
|
||||
err = lfs_bd_read(lfs,
|
||||
NULL, &lfs->rcache, lfs->cfg->block_size,
|
||||
NULL, &lfs->rcache, limit-off,
|
||||
block, off, &crc_, sizeof(uint32_t));
|
||||
if (err) {
|
||||
if (err == LFS_ERR_CORRUPT) {
|
||||
@@ -1265,6 +1417,10 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
rbyd->off = off + size;
|
||||
rbyd->crc = crc;
|
||||
rbyd->count = count;
|
||||
|
||||
if (pattern) {
|
||||
pattern->found = pattern->predicted;
|
||||
}
|
||||
}
|
||||
|
||||
off += size;
|
||||
@@ -1281,9 +1437,11 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
// check for an fcrc matching the next prog's erased state, if
|
||||
// this failed most likely a previous prog was interrupted, we
|
||||
// need a new erase
|
||||
//
|
||||
// note this does go beyond limit
|
||||
uint32_t fcrc_ = 0;
|
||||
int err = lfs_bd_crc32c(lfs,
|
||||
NULL, &lfs->rcache, lfs->cfg->block_size,
|
||||
NULL, &lfs->rcache, limit-lfs_min(off, limit),
|
||||
rbyd->block, rbyd->off, fcrc.size, &fcrc_);
|
||||
if (err && err != LFS_ERR_CORRUPT) {
|
||||
return err;
|
||||
@@ -1293,7 +1451,16 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
rbyd->erased = (fcrc_ == fcrc.crc);
|
||||
}
|
||||
|
||||
return 0;
|
||||
if (pattern) {
|
||||
LFS_ASSERT(lfsr_tag_isvalid(pattern->found));
|
||||
if (lfsr_tag_isfound(pattern->found)) {
|
||||
return pattern->found;
|
||||
} else {
|
||||
return LFS_ERR_NOENT;
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static lfsr_stag_t lfsr_rbyd_lookup(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
|
||||
@@ -1617,7 +1784,7 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd_,
|
||||
while (true) {
|
||||
// do we need to flip bounds?
|
||||
if (diverged
|
||||
&& !(upper_tag_ & 0x2)
|
||||
&& !lfsr_tag_isfound(upper_tag_)
|
||||
&& (!p_alts[0] || lfsr_tag_isblack(p_alts[0]))) {
|
||||
lfs_swap(&lower_tag_, &upper_tag_);
|
||||
lfs_swap(&lower_branch, &upper_branch);
|
||||
@@ -1805,12 +1972,12 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd_,
|
||||
// found end of tree?
|
||||
} else {
|
||||
// update the tag id, marking as found
|
||||
lower_tag_ = LFSR_TAG_(
|
||||
lfsr_tag_type(alt) | 0x2,
|
||||
lfsr_tag_id(lower_upper-1));
|
||||
lower_tag_ = lfsr_tag_mkfound(LFSR_TAG_(
|
||||
lfsr_tag_type(alt),
|
||||
lfsr_tag_id(lower_upper-1)));
|
||||
|
||||
// if we diverged, we also need to find the other bound
|
||||
if (diverged && !(upper_tag_ & 0x2)) {
|
||||
if (diverged && !lfsr_tag_isfound(upper_tag_)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1937,7 +2104,10 @@ leaf:;
|
||||
|
||||
int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
const struct lfsr_attr *attrs) {
|
||||
LFS_ASSERT(rbyd->erased);
|
||||
// we can't make progress if we're not erased
|
||||
if (!rbyd->erased) {
|
||||
return LFS_ERR_RANGE;
|
||||
}
|
||||
|
||||
// mark as unerased in case we fail
|
||||
rbyd->erased = false;
|
||||
@@ -2014,7 +2184,8 @@ int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
return err;
|
||||
}
|
||||
|
||||
lfs_size_t fcrc_delta = lfsr_fcrc_todisk(&fcrc);
|
||||
uint8_t fbuf[LFSR_FCRC_DSIZE];
|
||||
lfs_size_t fcrc_delta = lfsr_fcrc_todisk(&fcrc, fbuf);
|
||||
err = lfsr_rbyd_progtag(lfs, &rbyd_,
|
||||
LFSR_TAG(FCRC, -1), fcrc_delta, &rbyd_.crc);
|
||||
if (err) {
|
||||
@@ -2022,7 +2193,7 @@ int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
}
|
||||
|
||||
err = lfsr_rbyd_prog(lfs, &rbyd_,
|
||||
&fcrc, fcrc_delta, &rbyd_.crc);
|
||||
fbuf, fcrc_delta, &rbyd_.crc);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
@@ -2091,6 +2262,121 @@ int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||
}
|
||||
|
||||
|
||||
/// Rbyd B-Tree operations ///
|
||||
|
||||
static int lfsr_btree_alloc(lfs_t *lfs, lfsr_btree_t *btree,
|
||||
lfs_size_t weight, const struct lfsr_attr *attrs) {
|
||||
// create an rbyd block to act as the root of the tree
|
||||
//
|
||||
// note that for littlefs this should really only be called
|
||||
// when we have at least two entries, otherwise a smaller representation
|
||||
// should be used
|
||||
lfs_block_t block;
|
||||
int err = lfs_alloc(lfs, &block);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
// read revision count so we make sure to change the contents of the block,
|
||||
// this is important if erase is a noop
|
||||
uint32_t rev;
|
||||
err = lfs_bd_read(lfs,
|
||||
NULL, &lfs->rcache, 0,
|
||||
block, 0, &rev, sizeof(uint32_t));
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
// go ahead and erase the block
|
||||
err = lfs_bd_erase(lfs, block);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
// write the new root of our tree
|
||||
lfsr_rbyd_t rbyd = {
|
||||
.block = block,
|
||||
.trunk = 0,
|
||||
.off = 0,
|
||||
.rev = rev + 1,
|
||||
.crc = 0,
|
||||
.count = 0,
|
||||
.erased = true
|
||||
};
|
||||
|
||||
err = lfsr_rbyd_commit(lfs, &rbyd, attrs);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
btree->block = block;
|
||||
btree->limit = rbyd.off;
|
||||
btree->weight = weight;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static lfsr_stag_t lfsr_btree_lookup(lfs_t *lfs, const lfsr_btree_t *btree,
|
||||
lfsr_rbyd_t *rbyd, struct lfsr_pat *pattern) {
|
||||
// most of the work here is done by lfsr_rbyd_fetch, we just descend
|
||||
// down the tree until it fails
|
||||
lfsr_btree_t branch = *btree;
|
||||
while (true) {
|
||||
lfsr_stag_t tag = lfsr_rbyd_fetch(lfs, rbyd,
|
||||
branch.block, branch.limit,
|
||||
pattern);
|
||||
if (tag < 0 && tag != LFS_ERR_NOENT) {
|
||||
return tag;
|
||||
}
|
||||
|
||||
// found?
|
||||
if (tag != LFS_ERR_NOENT && lfsr_tag_type(tag) != LFSR_TAG_MKBRANCH) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// TODO do we?
|
||||
// TODO also can the pattern found on ENOENT be formed better for this?
|
||||
//
|
||||
// we always find ids <= our pattern, so if it's not found we descend
|
||||
// down the left branch, but we need to make sure this is actually a
|
||||
// btree branch
|
||||
if (tag == LFS_ERR_NOENT) {
|
||||
tag = lfsr_rbyd_lookup(lfs, rbyd,
|
||||
LFSR_TAG(MK, lfsr_tag_id(pattern->found)
|
||||
- lfs_min(1, lfsr_tag_id(pattern->found))),
|
||||
NULL, NULL);
|
||||
if (tag < 0) {
|
||||
return tag;
|
||||
}
|
||||
|
||||
if (lfsr_tag_type(tag) != LFSR_TAG_MKBRANCH) {
|
||||
return LFS_ERR_NOENT;
|
||||
}
|
||||
}
|
||||
|
||||
// continue search down tree
|
||||
uint8_t bbuf[LFSR_BTREE_DSIZE];
|
||||
lfs_ssize_t delta = lfsr_rbyd_get(lfs, rbyd,
|
||||
LFSR_TAG(BTREE, lfsr_tag_id(tag)),
|
||||
bbuf, LFSR_BTREE_DSIZE);
|
||||
if (delta < 0) {
|
||||
return delta;
|
||||
}
|
||||
|
||||
delta = lfsr_btree_fromdisk(&branch, bbuf);
|
||||
if (delta < 0) {
|
||||
return delta;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int lfsr_btree_insert(lfs_t *lfs, lfsr_btree_t *btree,
|
||||
lfsr_rbyd_t *rbyd, const struct lfsr_attr *attrs) {
|
||||
// TODO
|
||||
LFS_ASSERT(false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/// Metadata pair operations ///
|
||||
|
||||
//static int lfsr_mdir_fetch(lfs_t *lfs, lfsr_mdir_t mdir,
|
||||
|
||||
@@ -339,6 +339,12 @@ typedef struct lfsr_rbyd {
|
||||
bool erased;
|
||||
} lfsr_rbyd_t;
|
||||
|
||||
typedef struct lfsr_btree {
|
||||
lfs_block_t block;
|
||||
lfs_size_t limit;
|
||||
lfs_size_t weight;
|
||||
} lfsr_btree_t;
|
||||
|
||||
typedef struct lfs_mdir {
|
||||
lfs_block_t pair[2];
|
||||
uint32_t rev;
|
||||
|
||||
+118
-112
@@ -25,14 +25,14 @@ code = '''
|
||||
rbyd = init_rbyd;
|
||||
lfs_bd_erase(&lfs, rbyd.block) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
|
||||
// commit with one attribute
|
||||
rbyd = init_rbyd;
|
||||
lfs_bd_erase(&lfs, rbyd.block) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL)) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
|
||||
// commit with two attributes
|
||||
rbyd = init_rbyd;
|
||||
@@ -40,7 +40,7 @@ code = '''
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL))) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
'''
|
||||
|
||||
[cases.test_rbyd_multi_commit]
|
||||
@@ -65,14 +65,14 @@ code = '''
|
||||
rbyd = init_rbyd;
|
||||
lfs_bd_erase(&lfs, rbyd.block) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
|
||||
// commit with one attribute
|
||||
rbyd = init_rbyd;
|
||||
lfs_bd_erase(&lfs, rbyd.block) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL)) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
|
||||
// commit with two attributes
|
||||
rbyd = init_rbyd;
|
||||
@@ -81,7 +81,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL)) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL)) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
'''
|
||||
|
||||
[cases.test_rbyd_commit_fetch_commit]
|
||||
@@ -107,12 +107,12 @@ code = '''
|
||||
lfs_bd_erase(&lfs, rbyd.block) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL)) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
|
||||
// commit with the second attribute
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL)) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
'''
|
||||
|
||||
# [cases.test_rbyd_fetchmatch]
|
||||
@@ -147,7 +147,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
@@ -162,7 +162,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -182,7 +182,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 3, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -219,7 +219,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
@@ -234,7 +234,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -255,7 +255,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 3, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -290,7 +290,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
@@ -306,7 +306,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), buffer, 4)
|
||||
=> 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -327,7 +327,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 3, -1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), buffer, 4)
|
||||
=> 4;
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), buffer, 4)
|
||||
@@ -363,7 +363,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
@@ -379,7 +379,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), buffer, 4)
|
||||
=> 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -401,7 +401,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 3, -1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), buffer, 4)
|
||||
=> 4;
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), buffer, 4)
|
||||
@@ -446,7 +446,7 @@ code = '''
|
||||
tag = lfsr_rbyd_lookup(&lfs, &rbyd, lfsr_tag_next(tag), &off, &size);
|
||||
assert(tag == LFS_ERR_NOENT);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
tag = lfsr_rbyd_lookup(&lfs, &rbyd, 0, &off, &size);
|
||||
assert(tag == LFSR_TAG2(UATTR, 1, -1));
|
||||
tag = lfsr_rbyd_lookup(&lfs, &rbyd, lfsr_tag_next(tag), &off, &size);
|
||||
@@ -493,7 +493,7 @@ code = '''
|
||||
tag = lfsr_rbyd_lookup(&lfs, &rbyd, lfsr_tag_next(tag), &off, &size);
|
||||
assert(tag == LFS_ERR_NOENT);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
tag = lfsr_rbyd_lookup(&lfs, &rbyd, 0, &off, &size);
|
||||
assert(tag == LFSR_TAG2(UATTR, 1, -1));
|
||||
tag = lfsr_rbyd_lookup(&lfs, &rbyd, lfsr_tag_next(tag), &off, &size);
|
||||
@@ -531,7 +531,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -547,7 +547,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -584,7 +584,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL)))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -601,7 +601,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL)))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -640,7 +640,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -661,7 +661,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL)))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -704,7 +704,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -726,7 +726,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -748,7 +748,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -770,7 +770,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -814,7 +814,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -840,7 +840,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -866,7 +866,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -892,7 +892,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -938,7 +938,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4,
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -964,7 +964,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4,
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -990,7 +990,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1016,7 +1016,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4,
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4, NULL))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1065,7 +1065,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4,
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4, NULL)))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1094,7 +1094,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4,
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4, NULL)))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1121,7 +1121,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL)))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1148,7 +1148,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL)))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1199,7 +1199,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 4, -1, "\xdd\xdd\xdd\xdd", 4,
|
||||
LFSR_ATTR2(UATTR, 5, -1, "\xee\xee\xee\xee", 4, NULL)))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1232,7 +1232,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 5, -1, "\xee\xee\xee\xee", 4,
|
||||
LFSR_ATTR2(UATTR, 3, -1, "\xcc\xcc\xcc\xcc", 4, NULL)))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1263,7 +1263,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 5, -1, "\xee\xee\xee\xee", 4,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL)))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1294,7 +1294,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 5, -1, "\xee\xee\xee\xee", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL)))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1348,7 +1348,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 5, -1, "\xee\xee\xee\xee", 4,
|
||||
LFSR_ATTR2(UATTR, 5, -1, "\xee\xee\xee\xee", 4, NULL))))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1382,7 +1382,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 5, -1, "\xee\xee\xee\xee", 4,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL))))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1416,7 +1416,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 5, -1, "\xee\xee\xee\xee", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL))))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1472,7 +1472,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 5, -1, "\xee\xee\xee\xee", 4,
|
||||
LFSR_ATTR2(UATTR, 6, -1, "\xff\xff\xff\xff", 4, NULL))))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1508,7 +1508,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 6, -1, "\xff\xff\xff\xff", 4,
|
||||
LFSR_ATTR2(UATTR, 2, -1, "\xbb\xbb\xbb\xbb", 4, NULL))))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1544,7 +1544,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 6, -1, "\xff\xff\xff\xff", 4,
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa", 4, NULL))))))) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1616,7 +1616,7 @@ code = '''
|
||||
lfs_bd_erase(&lfs, rbyd.block) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd, attrs) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
for (unsigned j = 0; j < N; j++) {
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd,
|
||||
LFSR_TAG2(UATTR, j+1, -1), &off, &size)
|
||||
@@ -1712,7 +1712,7 @@ code = '''
|
||||
NULL)) => 0;
|
||||
}
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
for (unsigned j = 0; j < N; j++) {
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd,
|
||||
LFSR_TAG2(UATTR, j+1, -1), &off, &size)
|
||||
@@ -1808,7 +1808,7 @@ code = '''
|
||||
|
||||
// check that we can still lookup all the tags
|
||||
prng = 42;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
for (lfs_size_t i = 0; i < count; i++) {
|
||||
uint8_t x
|
||||
= (ORDER == 0) ? (uint8_t)i
|
||||
@@ -1856,7 +1856,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1878,7 +1878,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 3, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 2, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1902,7 +1902,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 3, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -1985,7 +1985,8 @@ code = '''
|
||||
lfsr_rbyd_commit(&lfs, &rbyd,
|
||||
LFSR_ATTR2(RMUATTR, j+1, -1, NULL, 0, NULL)) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block,
|
||||
cfg->block_size, NULL) => 0;
|
||||
for (unsigned k = 0; k < N; k++) {
|
||||
lfsr_stag_t tag = lfsr_rbyd_lookup(&lfs, &rbyd,
|
||||
LFSR_TAG2(UATTR, k+1, -1), &off, &size);
|
||||
@@ -2115,7 +2116,7 @@ code = '''
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
// one last fetch to make sure nothing was broken
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 2, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -2257,7 +2258,7 @@ code = '''
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
// one last fetch to make sure nothing was broken
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 2, -1);
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -2303,7 +2304,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -2324,7 +2325,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -2345,7 +2346,7 @@ code = '''
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFS_ERR_NOENT;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG2(UATTR, 2, -1), &off, &size)
|
||||
@@ -2426,7 +2427,7 @@ code = '''
|
||||
}
|
||||
|
||||
// check that all tags are now removed
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
for (unsigned j = 0; j < N; j++) {
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd,
|
||||
LFSR_TAG2(UATTR, j+1, -1), &off, &size)
|
||||
@@ -2438,7 +2439,7 @@ code = '''
|
||||
LFSR_ATTR2(UATTR, 1, -1, "\xaa\xaa\xaa\xaa\xaa\xaa", 6,
|
||||
NULL)) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd,
|
||||
LFSR_TAG2(UATTR, 1, -1), &off, &size)
|
||||
=> LFSR_TAG2(UATTR, 1, -1);
|
||||
@@ -2566,7 +2567,8 @@ code = '''
|
||||
"\xaa\xaa\xaa\xaa\xaa\xaa", 6,
|
||||
NULL)) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block,
|
||||
cfg->block_size, NULL) => 0;
|
||||
for (unsigned k = 0; k < N; k++) {
|
||||
lfsr_stag_t tag = lfsr_rbyd_lookup(&lfs, &rbyd,
|
||||
LFSR_TAG2(UATTR, k+1, -1), &off, &size);
|
||||
@@ -2654,7 +2656,7 @@ code = '''
|
||||
=> 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -2673,7 +2675,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 1), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xbb\xbb\xbb\xbb", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -2693,7 +2695,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 1), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xbb\xbb\xbb\xbb", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -2716,7 +2718,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 2), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xcc\xcc\xcc\xcc", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 3);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -2741,7 +2743,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 2), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xcc\xcc\xcc\xcc", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 3);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -2766,7 +2768,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 2), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xcc\xcc\xcc\xcc", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 3);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -2806,7 +2808,7 @@ code = '''
|
||||
=> 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -2826,7 +2828,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 1), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xbb\xbb\xbb\xbb", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -2847,7 +2849,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 1), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xbb\xbb\xbb\xbb", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -2872,7 +2874,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 2), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xcc\xcc\xcc\xcc", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 3);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -2899,7 +2901,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 2), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xcc\xcc\xcc\xcc", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 3);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -2926,7 +2928,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 2), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xcc\xcc\xcc\xcc", 4) == 0);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 3);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4) => 4;
|
||||
assert(memcmp(buffer, "\xaa\xaa\xaa\xaa", 4) == 0);
|
||||
@@ -3008,7 +3010,7 @@ code = '''
|
||||
lfs_bd_erase(&lfs, rbyd.block) => 0;
|
||||
lfsr_rbyd_commit(&lfs, &rbyd, attrs) => 0;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == N);
|
||||
for (unsigned j = 0; j < N; j++) {
|
||||
lfsr_rbyd_get(&lfs, &rbyd,
|
||||
@@ -3120,7 +3122,7 @@ code = '''
|
||||
NULL)) => 0;
|
||||
}
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == N);
|
||||
for (unsigned j = 0; j < N; j++) {
|
||||
lfsr_rbyd_get(&lfs, &rbyd,
|
||||
@@ -3224,7 +3226,7 @@ code = '''
|
||||
// check that we can at least lookup all the tags
|
||||
lfs_off_t off;
|
||||
lfs_size_t size;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
for (uint16_t x = 0; x < rbyd.count; x++) {
|
||||
lfsr_rbyd_lookup(&lfs, &rbyd,
|
||||
LFSR_TAG(MKREG, x), &off, &size)
|
||||
@@ -3270,7 +3272,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -3294,7 +3296,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -3322,7 +3324,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 2), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -3353,7 +3355,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 2), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -3384,7 +3386,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 2), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -3438,7 +3440,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, 1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -3474,7 +3476,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, 1), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -3518,7 +3520,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, 2), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -3568,7 +3570,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, 2), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -3618,7 +3620,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG2(UATTR, 1, 2), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 2);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> 4;
|
||||
@@ -3729,7 +3731,8 @@ code = '''
|
||||
LFSR_ATTR(RM, j, NULL, 0, NULL)) => 0;
|
||||
assert(rbyd.count == N-1);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block,
|
||||
cfg->block_size, NULL) => 0;
|
||||
for (unsigned k = 0; k < N-1; k++) {
|
||||
lfsr_rbyd_get(&lfs, &rbyd,
|
||||
LFSR_TAG(MKREG, k), buffer, 4) => 4;
|
||||
@@ -3880,7 +3883,8 @@ code = '''
|
||||
LFSR_ATTR(RM, j, NULL, 0, NULL)) => 0;
|
||||
assert(rbyd.count == N-1);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block,
|
||||
cfg->block_size, NULL) => 0;
|
||||
for (unsigned k = 0; k < N-1; k++) {
|
||||
lfsr_rbyd_get(&lfs, &rbyd,
|
||||
LFSR_TAG(MKREG, k), buffer, 4) => 4;
|
||||
@@ -3974,7 +3978,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
@@ -3993,7 +3997,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
@@ -4012,7 +4016,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
@@ -4033,7 +4037,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
@@ -4054,7 +4058,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
@@ -4092,7 +4096,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
@@ -4113,7 +4117,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
@@ -4134,7 +4138,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
@@ -4158,7 +4162,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
@@ -4182,7 +4186,7 @@ code = '''
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
=> LFS_ERR_NOENT;
|
||||
@@ -4283,7 +4287,7 @@ code = '''
|
||||
}
|
||||
|
||||
// check that all tags are now removed
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd,
|
||||
LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
@@ -4295,7 +4299,7 @@ code = '''
|
||||
NULL)) => 0;
|
||||
assert(rbyd.count == 1);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd,
|
||||
LFSR_TAG(MKREG, 0), buffer, 6)
|
||||
@@ -4442,7 +4446,7 @@ code = '''
|
||||
}
|
||||
|
||||
// check that all tags are now removed
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 0);
|
||||
lfsr_rbyd_get(&lfs, &rbyd,
|
||||
LFSR_TAG(MKREG, 0), buffer, 4)
|
||||
@@ -4459,7 +4463,7 @@ code = '''
|
||||
}
|
||||
assert(rbyd.count == 1);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, cfg->block_size, NULL) => 0;
|
||||
assert(rbyd.count == 1);
|
||||
lfsr_rbyd_get(&lfs, &rbyd,
|
||||
LFSR_TAG(MKREG, 0), buffer, 6)
|
||||
@@ -4614,7 +4618,8 @@ code = '''
|
||||
NULL)) => 0;
|
||||
assert(rbyd.count == N);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block,
|
||||
cfg->block_size, NULL) => 0;
|
||||
for (unsigned k = 0; k < N; k++) {
|
||||
lfs_ssize_t size = lfsr_rbyd_get(&lfs, &rbyd,
|
||||
LFSR_TAG(MKREG, k), buffer, 6);
|
||||
@@ -4787,7 +4792,8 @@ code = '''
|
||||
}
|
||||
assert(rbyd.count == N);
|
||||
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, NULL) => 0;
|
||||
lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block,
|
||||
cfg->block_size, NULL) => 0;
|
||||
for (unsigned k = 0; k < N; k++) {
|
||||
lfs_ssize_t size = lfsr_rbyd_get(&lfs, &rbyd,
|
||||
LFSR_TAG(MKREG, k), buffer, 6);
|
||||
|
||||
Reference in New Issue
Block a user