diff --git a/lfs.c b/lfs.c index 4ecd5806..4e19fdc8 100644 --- a/lfs.c +++ b/lfs.c @@ -450,19 +450,25 @@ static inline lfs_size_t lfs_tag_dsize(lfs_tag_t tag) { // 16-bit metadata tags enum lfsr_tag_type { LFSR_TAG_UNR = 0x0002, + LFSR_TAG_MKUNR = 0x0006, // in-device only LFSR_TAG_NAME = 0x1000, LFSR_TAG_BNAME = 0x1000, + LFSR_TAG_MKBNAME = 0x1004, // in-device only LFSR_TAG_REG = 0x1010, + LFSR_TAG_MKREG = 0x1014, // in-device only LFSR_TAG_DIR = 0x1020, + LFSR_TAG_MKDIR = 0x1024, // in-device only LFSR_TAG_STRUCT = 0x3000, LFSR_TAG_INLINED = 0x3000, LFSR_TAG_BLOCK = 0x3100, LFSR_TAG_BRANCH = 0x3200, + LFSR_TAG_MKBRANCH = 0x3204, // in-device only LFSR_TAG_BTREE = 0x3300, LFSR_TAG_UATTR = 0x4000, + LFSR_TAG_MKUATTR = 0x4004, // in-device only LFSR_TAG_RMUATTR = 0x4002, LFSR_TAG_ALT = 0x0008, @@ -475,15 +481,9 @@ enum lfsr_tag_type { LFSR_TAG_FCRC = 0x1004, // in-device only - LFSR_TAG_MKBNAME = 0x1004, - LFSR_TAG_MKREG = 0x1014, - LFSR_TAG_MKDIR = 0x1024, - - LFSR_TAG_MKUATTR = 0x4004, - - LFSR_TAG_GROW = 0x0006, - LFSR_TAG_SHRINK = 0x0016, - LFSR_TAG_FROM = 0x0026, + LFSR_TAG_GROW = 0xf000, + LFSR_TAG_SHRINK = 0xf010, + LFSR_TAG_FROM = 0xf020, }; #define LFSR_TAG_ALT_(color, dir, key) \ @@ -1964,21 +1964,14 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd, // 0 tags shouldn't be written to disk, use unr if tag is unreachable LFS_ASSERT(tag != 0); - // we can't do anything if we're not erased - if (!rbyd->erased) { - return LFS_ERR_RANGE; - } - // ignore noops - if (tag == LFSR_TAG_UNR && delta == 0) { + if (lfsr_tag_setnomk(tag) == LFSR_TAG_UNR && delta == 0) { return 0; } - // treat weightless mks the same as non-mks, easier to just clear - // the bit here than make sure the following logic works out - if (lfsr_tag_ismk(tag) && delta <= 0) { - LFS_ASSERT(delta >= 0); - tag = lfsr_tag_setnomk(tag); + // we can't do anything if we're not erased + if (!rbyd->erased) { + return LFS_ERR_RANGE; } // make sure every rbyd starts with its revision count @@ -1993,6 +1986,47 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd, } } + // figure out the range of tags we're operating on + lfs_ssize_t id_; + lfs_ssize_t other_id_; + lfsr_tag_t tag_; + lfsr_tag_t other_tag_; + if (lfsr_tag_ismk(tag) && delta > 0) { + LFS_ASSERT(id <= rbyd->weight); + + // it's a bit ugly, but adjusting the id here makes the following + // logic work out more consistently + id -= 1; + id_ = id + 1; + other_id_ = id + 1; + tag_ = 0; + other_tag_ = 0; + } else if (lfsr_tag_ismk(tag) && delta < 0) { + LFS_ASSERT(id < rbyd->weight); + + // it's a bit ugly, but adjusting the id here makes the following + // logic work out more consistently + id += 1; + id_ = id - lfs_smax32(-delta, 0); + other_id_ = id; + tag_ = 0; + other_tag_ = 0; + } else if (lfsr_tag_isrm(tag)) { + LFS_ASSERT(id < rbyd->weight); + + id_ = id - lfs_smax32(-delta, 0); + other_id_ = id; + tag_ = tag & ~0x2; + other_tag_ = (tag & ~0x2) + 0x10; + } else { + LFS_ASSERT(id < rbyd->weight); + + id_ = id - lfs_smax32(-delta, 0); + other_id_ = id; + tag_ = tag; + other_tag_ = tag; + } + // keep track of bounds as we descend down the tree // // this gets a bit confusing as we also may need to keep @@ -2004,47 +2038,6 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd, lfsr_tag_t lower_tag = 0; lfsr_tag_t upper_tag = 0xffff; - // figure out the range of tags we're operating on and go ahead and - // update the rbyd's weight - // - // note lfsr_rbyd_commit will throw out this copy of the rbyd if an - // error occurs - lfs_ssize_t id_; - lfs_ssize_t other_id_; - lfsr_tag_t tag_; - lfsr_tag_t other_tag_; - if (lfsr_tag_ismk(tag) && delta > 0) { - LFS_ASSERT(id < rbyd->weight+delta); - LFS_ASSERT(delta >= -(lfs_ssize_t)rbyd->weight); - rbyd->weight += delta; - - // it's a bit ugly, but adjusting the id here makes the following - // logic work out more consistently - id -= delta; - id_ = id + 1; - other_id_ = id + 1; - tag_ = 0; - other_tag_ = 0; - } else if (lfsr_tag_isrm(tag)) { - LFS_ASSERT(id <= rbyd->weight); - LFS_ASSERT(delta >= -(lfs_ssize_t)rbyd->weight); - rbyd->weight += delta; - - id_ = id - lfs_smax32(-delta, 0); - other_id_ = id; - tag_ = tag & ~0x2; - other_tag_ = (tag & ~0x2) + 0x10; - } else { - LFS_ASSERT(id < rbyd->weight); - LFS_ASSERT(delta >= -(lfs_ssize_t)rbyd->weight); - rbyd->weight += delta; - - id_ = id - lfs_smax32(-delta, 0); - other_id_ = id; - tag_ = tag; - other_tag_ = tag; - } - // diverged state in case we are removing a range from the tree // // this is a second copy of the search path state, used to keep track @@ -2066,6 +2059,11 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd, lfsr_tag_t other_lower_tag = 0; lfsr_tag_t other_upper_tag = 0; + // go ahead and update the rbyd's weight, note that lfsr_rbyd_commit + // will through out this copy of the rbyd if an error occurs + LFS_ASSERT(delta >= -(lfs_ssize_t)rbyd->weight); + rbyd->weight += delta; + // assume we'll update our trunk rbyd->trunk = rbyd->off; @@ -2343,7 +2341,7 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd, } else if (id_ < id-lfs_smax32(-delta, 0) || (id_ == id-lfs_smax32(-delta, 0) - && (lfsr_tag_ismk(tag) + && ((lfsr_tag_ismk(tag) && delta > 0) || lfsr_tag_key(tag_) < lfsr_tag_key(tag)))) { if (lfsr_tag_isrm(tag)) { // if removed make our tag unreachable @@ -2357,7 +2355,7 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd, } else if (id_ > id || (id_ == id - && (lfsr_tag_ismk(tag) + && ((lfsr_tag_ismk(tag) && delta > 0) || lfsr_tag_key(tag_) > lfsr_tag_key(tag)))) { if (lfsr_tag_isrm(tag)) { // if removed make our tag unreachable diff --git a/tests/test_rbyd.toml b/tests/test_rbyd.toml index e540175d..1c43d860 100644 --- a/tests/test_rbyd.toml +++ b/tests/test_rbyd.toml @@ -6723,7 +6723,7 @@ code = ''' LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4, LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, NULL))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 1+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 1, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 1); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4; @@ -6743,7 +6743,7 @@ code = ''' LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4, LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, NULL))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 1); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4; @@ -6764,7 +6764,7 @@ code = ''' LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 2+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 2, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 2); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4; @@ -6787,7 +6787,7 @@ code = ''' LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 2); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4; @@ -6810,7 +6810,7 @@ code = ''' LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 1+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 1, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 2); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4; @@ -6853,7 +6853,7 @@ code = ''' LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, LFSD_ATTR(UATTR(1), 1, 0, "\xbb\xbb", 2, NULL))))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 1+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 1, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 1); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -6889,7 +6889,7 @@ code = ''' LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, LFSD_ATTR(UATTR(1), 1, 0, "\xbb\xbb", 2, NULL))))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 1); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -6927,7 +6927,7 @@ code = ''' LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, LFSD_ATTR(UATTR(1), 2, 0, "\xcc\xcc", 2, NULL))))))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 2+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 2, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 2); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) => 4; @@ -6976,7 +6976,7 @@ code = ''' LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, LFSD_ATTR(UATTR(1), 2, 0, "\xcc\xcc", 2, NULL))))))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 2); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7026,7 +7026,7 @@ code = ''' LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, LFSD_ATTR(UATTR(1), 2, 0, "\xcc\xcc", 2, NULL))))))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 1+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 1, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 2); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7160,7 +7160,7 @@ code = ''' lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, j+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, j, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == N-1); lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, @@ -7325,7 +7325,7 @@ code = ''' lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, j+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, j, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == N-1); lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, @@ -7513,7 +7513,7 @@ code = ''' lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, j+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, j, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == N-1); // try traversing over the tags @@ -7648,7 +7648,7 @@ code = ''' lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, j+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, j, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == N-1); // try traversing over the tags @@ -7723,7 +7723,7 @@ code = ''' lfsr_rbyd_commit(&lfs, &rbyd, LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4, NULL)) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 0); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7741,8 +7741,8 @@ code = ''' LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4, LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, NULL))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL))) => 0; + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL))) => 0; assert(rbyd.weight == 0); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7760,8 +7760,8 @@ code = ''' LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4, LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, NULL))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 1+1, -1, NULL, 0, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL))) => 0; + LFSD_ATTR(MKUNR, 1, -1, NULL, 0, + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL))) => 0; assert(rbyd.weight == 0); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7780,9 +7780,9 @@ code = ''' LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)))) => 0; + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)))) => 0; assert(rbyd.weight == 0); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7801,9 +7801,9 @@ code = ''' LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, NULL)))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 2+1, -1, NULL, 0, - LFSD_ATTR(UNR, 1+1, -1, NULL, 0, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)))) => 0; + LFSD_ATTR(MKUNR, 2, -1, NULL, 0, + LFSD_ATTR(MKUNR, 1, -1, NULL, 0, + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)))) => 0; assert(rbyd.weight == 0); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7840,7 +7840,7 @@ code = ''' LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4, LFSD_ATTR(UATTR(1), 0, 0, "\xaa\xaa", 2, NULL))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == 0); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7860,8 +7860,8 @@ code = ''' LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, LFSD_ATTR(UATTR(1), 1, 0, "\xbb\xbb", 2, NULL))))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL))) => 0; + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL))) => 0; assert(rbyd.weight == 0); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7881,8 +7881,8 @@ code = ''' LFSD_ATTR(MKREG, 1, +1, "\xbb\xbb\xbb\xbb", 4, LFSD_ATTR(UATTR(1), 1, 0, "\xbb\xbb", 2, NULL))))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 1+1, -1, NULL, 0, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL))) => 0; + LFSD_ATTR(MKUNR, 1, -1, NULL, 0, + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL))) => 0; assert(rbyd.weight == 0); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7904,9 +7904,9 @@ code = ''' LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, LFSD_ATTR(UATTR(1), 2, 0, "\xcc\xcc", 2, NULL))))))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)))) => 0; + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)))) => 0; assert(rbyd.weight == 0); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -7928,9 +7928,9 @@ code = ''' LFSD_ATTR(MKREG, 2, +1, "\xcc\xcc\xcc\xcc", 4, LFSD_ATTR(UATTR(1), 2, 0, "\xcc\xcc", 2, NULL))))))) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 2+1, -1, NULL, 0, - LFSD_ATTR(UNR, 1+1, -1, NULL, 0, - LFSD_ATTR(UNR, 0+1, -1, NULL, 0, NULL)))) => 0; + LFSD_ATTR(MKUNR, 2, -1, NULL, 0, + LFSD_ATTR(MKUNR, 1, -1, NULL, 0, + LFSD_ATTR(MKUNR, 0, -1, NULL, 0, NULL)))) => 0; assert(rbyd.weight == 0); lfsr_rbyd_get(&lfs, &rbyd, LFSR_TAG_REG, 0, buffer, 4) @@ -8035,7 +8035,7 @@ code = ''' lfs_size_t rbyd_weight_before = rbyd.weight; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, id+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, id, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == rbyd_weight_before-1); } @@ -8187,7 +8187,7 @@ code = ''' lfs_size_t rbyd_weight_before = rbyd.weight; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, id+1, -1, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, id, -1, NULL, 0, NULL)) => 0; assert(rbyd.weight == rbyd_weight_before-1); } @@ -8340,7 +8340,7 @@ code = ''' count -= 1; // update our rbyd lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, id+1, -1, NULL, 0, + LFSD_ATTR(MKUNR, id, -1, NULL, 0, NULL)) => 0; } } @@ -8431,7 +8431,7 @@ code = ''' // delete the last two lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, 2+1, -2, NULL, 0, + LFSD_ATTR(MKUNR, 2, -2, NULL, 0, NULL)) => 0; // create some new ids, if unconditional altgts are used this @@ -8525,7 +8525,7 @@ code = ''' // make id2 with weight w2 lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, 2, +2, "\xbb\xbb\xbb\xbb", 4, + LFSD_ATTR(MKREG, 1, +2, "\xbb\xbb\xbb\xbb", 4, NULL)) => 0; lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG_REG, 0, @@ -8557,7 +8557,7 @@ code = ''' // make id5 with weight w3 lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, 5, +3, "\xcc\xcc\xcc\xcc", 4, + LFSD_ATTR(MKREG, 3, +3, "\xcc\xcc\xcc\xcc", 4, NULL)) => 0; lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG_REG, 0, @@ -8601,7 +8601,7 @@ code = ''' // make id9 with weight w4 lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, 9, +4, "\xdd\xdd\xdd\xdd", 4, + LFSD_ATTR(MKREG, 6, +4, "\xdd\xdd\xdd\xdd", 4, NULL)) => 0; lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG_REG, 0, @@ -8657,7 +8657,7 @@ code = ''' // make id14 with weight w5 lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, 14, +5, "\xee\xee\xee\xee", 4, + LFSD_ATTR(MKREG, 10, +5, "\xee\xee\xee\xee", 4, NULL)) => 0; lfsr_rbyd_lookup(&lfs, &rbyd, LFSR_TAG_REG, 0, @@ -8752,13 +8752,13 @@ code = ''' // make id0 with weight w1 LFSD_ATTR(MKREG, 0, +1, "\xaa\xaa\xaa\xaa", 4, // make id2 with weight w2 - LFSD_ATTR(MKREG, 2, +2, "\xbb\xbb\xbb\xbb", 4, + LFSD_ATTR(MKREG, 1, +2, "\xbb\xbb\xbb\xbb", 4, // make id5 with weight w3 - LFSD_ATTR(MKREG, 5, +3, "\xcc\xcc\xcc\xcc", 4, + LFSD_ATTR(MKREG, 3, +3, "\xcc\xcc\xcc\xcc", 4, // make id9 with weight w4 - LFSD_ATTR(MKREG, 9, +4, "\xdd\xdd\xdd\xdd", 4, + LFSD_ATTR(MKREG, 6, +4, "\xdd\xdd\xdd\xdd", 4, // make id14 with weight w5 - LFSD_ATTR(MKREG, 14, +5, "\xee\xee\xee\xee", 4, + LFSD_ATTR(MKREG, 10, +5, "\xee\xee\xee\xee", 4, NULL)))))) => 0; // traverse, finding tags and weights @@ -8900,7 +8900,7 @@ code = ''' } lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4, + LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4, NULL)) => 0; } @@ -8990,7 +8990,7 @@ code = ''' } lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4, + LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4, NULL)) => 0; } @@ -10256,7 +10256,7 @@ code = ''' } lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4, + LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4, NULL)) => 0; } assert(rbyd.weight == N*W); @@ -10388,7 +10388,7 @@ code = ''' } lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4, + LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4, NULL)) => 0; } assert(rbyd.weight == N*W); @@ -10528,7 +10528,7 @@ code = ''' } lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKUATTR(2), id*W+W-1, +W, names[perm[j] % 6], 4, + LFSD_ATTR(MKUATTR(2), id*W, +W, names[perm[j] % 6], 4, NULL)) => 0; } assert(rbyd.weight == N*W); @@ -10676,7 +10676,7 @@ code = ''' } lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4, + LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4, NULL)) => 0; } assert(rbyd.weight == N*W); @@ -10807,7 +10807,7 @@ code = ''' } lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4, + LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4, NULL)) => 0; } assert(rbyd.weight == N*W); @@ -10947,7 +10947,7 @@ code = ''' } lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKUATTR(2), id*W+W-1, +W, names[perm[j] % 6], 4, + LFSD_ATTR(MKUATTR(2), id*W, +W, names[perm[j] % 6], 4, NULL)) => 0; } assert(rbyd.weight == N*W); @@ -11094,7 +11094,7 @@ code = ''' } lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4, + LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4, NULL)) => 0; } assert(rbyd.weight == N*W); @@ -11117,7 +11117,7 @@ code = ''' lfs_bd_flush(&lfs, &lfs.pcache, &lfs.rcache, false) => 0; lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, j*W+W-1+1, -W, NULL, 0, NULL)) => 0; + LFSD_ATTR(MKUNR, j*W+W-1, -W, NULL, 0, NULL)) => 0; assert(rbyd.weight == (N-1)*W); lfsr_rbyd_fetch(&lfs, &rbyd, rbyd.block, @@ -11150,7 +11150,7 @@ code = ''' // try recreating the id to make sure things still work printf("--- create: %d ---\n", j); lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, j*W+W-1, +W, names[j % 6], 6, + LFSD_ATTR(MKREG, j*W, +W, names[j % 6], 6, NULL)) => 0; assert(rbyd.weight == N*W); @@ -11254,7 +11254,7 @@ code = ''' } lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, id*W+W-1, +W, names[perm[j] % 6], 4, + LFSD_ATTR(MKREG, id*W, +W, names[perm[j] % 6], 4, NULL)) => 0; } assert(rbyd.weight == N*W); @@ -11469,7 +11469,7 @@ code = ''' count -= 1; // update our rbyd lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, id+1, -1, NULL, 0, + LFSD_ATTR(MKUNR, id, -1, NULL, 0, NULL)) => 0; } else if (op == 2) { // update our sim @@ -11664,7 +11664,7 @@ code = ''' count += 1; // update our rbyd lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(MKREG, weighted_id+weight-1, + LFSD_ATTR(MKREG, weighted_id, +weight, &alpha[i % 26], 1, NULL)) => 0; } else if (op == 1) { @@ -11677,7 +11677,7 @@ code = ''' count -= 1; // update our rbyd lfsr_rbyd_commit(&lfs, &rbyd, - LFSD_ATTR(UNR, weighted_id+weight_-1+1, + LFSD_ATTR(MKUNR, weighted_id+weight_-1, -weight_, NULL, 0, NULL)) => 0; } else if (op == 2) {