Lines Matching refs:pair

286 static inline void lfs_pair_swap(lfs_block_t pair[2]) {
287 lfs_block_t t = pair[0];
288 pair[0] = pair[1];
289 pair[1] = t;
292 static inline bool lfs_pair_isnull(const lfs_block_t pair[2]) {
293 return pair[0] == LFS_BLOCK_NULL || pair[1] == LFS_BLOCK_NULL;
310 static inline void lfs_pair_fromle32(lfs_block_t pair[2]) {
311 pair[0] = lfs_fromle32(pair[0]);
312 pair[1] = lfs_fromle32(pair[1]);
316 static inline void lfs_pair_tole32(lfs_block_t pair[2]) {
317 pair[0] = lfs_tole32(pair[0]);
318 pair[1] = lfs_tole32(pair[1]);
425 const lfs_block_t *pair) {
426 return lfs_tag_type1(a->tag) && lfs_pair_cmp(a->pair, pair) == 0;
431 a->pair[0] = lfs_fromle32(a->pair[0]);
432 a->pair[1] = lfs_fromle32(a->pair[1]);
438 a->pair[0] = lfs_tole32(a->pair[0]);
439 a->pair[1] = lfs_tole32(a->pair[1]);
562 uint16_t id, const lfs_block_t pair[2]);
685 /// Metadata pair and directory operations ///
693 if (lfs_gstate_hasmovehere(&lfs->gdisk, dir->pair) &&
706 dir->pair[0], off, &ntag, sizeof(ntag));
734 dir->pair[0], off+sizeof(tag)+goff, gbuffer, diff);
899 dir->pair[0], off, &tag, sizeof(tag));
905 disk.block = dir->pair[0];
1073 lfs_mdir_t *dir, const lfs_block_t pair[2],
1081 // otherwise later writes to the pair could fail
1083 && (pair[0] >= lfs->block_count || pair[1] >= lfs->block_count)) {
1093 pair[i], 0, &revs[i], sizeof(revs[i]));
1105 dir->pair[0] = pair[(r+0)%2];
1106 dir->pair[1] = pair[(r+1)%2];
1135 dir->pair[0], off, &tag, sizeof(tag));
1164 dir->pair[0], off+sizeof(tag), &dcrc, sizeof(dcrc));
1203 dir->pair[0], off+sizeof(tag),
1233 dir->pair[0], off+sizeof(tag), &temptail, 8);
1244 dir->pair[0], off+sizeof(tag),
1259 dir->pair[0], off+sizeof(tag)});
1286 lfs_pair_swap(dir->pair);
1312 dir->pair[0], dir->off, fcrc.size, &fcrc_);
1323 if (lfs_gstate_hasmovehere(&lfs->gdisk, dir->pair)) {
1346 LFS_ERROR("Corrupted dir pair at {0x%"PRIx32", 0x%"PRIx32"}",
1347 dir->pair[0], dir->pair[1]);
1352 lfs_mdir_t *dir, const lfs_block_t pair[2]) {
1355 return (int)lfs_dir_fetchmatch(lfs, dir, pair,
1765 // allocate pair of dir blocks (backwards, so we write block 1 first)
1767 int err = lfs_alloc(lfs, &dir->pair[(i+1)%2]);
1780 dir->pair[0], 0, &dir->rev, sizeof(dir->rev));
1832 // create tail metadata pair
1849 dir->tail[0] = tail.pair[0];
1850 dir->tail[1] = tail.pair[1];
1854 if (lfs_pair_cmp(dir->pair, lfs->root) == 0 && split == 0) {
1855 lfs->root[0] = tail.pair[0];
1856 lfs->root[1] = tail.pair[1];
1890 // this is how littlefs wear-levels at the metadata-pair level. Note that we
1894 // one metadata block in the pair, effectively making this useless
1923 if (tired && lfs_pair_cmp(dir->pair, (const lfs_block_t[2]){0, 1}) != 0) {
1933 .block = dir->pair[1],
1944 int err = lfs_bd_erase(lfs, dir->pair[1]);
2030 // successful compaction, swap dir pair to indicate most recent
2032 lfs_pair_swap(dir->pair);
2049 LFS_DEBUG("Bad block at 0x%"PRIx32, dir->pair[1]);
2053 if (lfs_pair_cmp(dir->pair, (const lfs_block_t[2]){0, 1}) == 0) {
2055 dir->pair[1]);
2059 // relocate half of pair
2060 int err = lfs_alloc(lfs, &dir->pair[1]);
2138 dir->pair[0], dir->pair[1]);
2146 && lfs_pair_cmp(dir->pair, (const lfs_block_t[2]){0, 1}) == 0) {
2180 const lfs_block_t pair[2],
2205 int err = lfs_fs_pred(lfs, dir->pair, pdir);
2219 .block = dir->pair[0],
2306 // we need to copy the pair so they don't get clobbered if we refetch
2308 lfs_block_t oldpair[2] = {pair[0], pair[1]};
2310 if (lfs_pair_cmp(d->m.pair, oldpair) == 0) {
2312 if (d->m.pair != pair) {
2316 d->m.pair[0] = LFS_BLOCK_NULL;
2317 d->m.pair[1] = LFS_BLOCK_NULL;
2355 if (dir != &f->m && lfs_pair_cmp(f->m.pair, dir->pair) == 0 &&
2370 lfs_block_t lpair[2] = {dir->pair[0], dir->pair[1]};
2373 int state = lfs_dir_relocatingcommit(lfs, &ldir, dir->pair,
2381 if (lfs_pair_cmp(dir->pair, lpair) == 0) {
2398 lpair[0] = pdir.pair[0];
2399 lpair[1] = pdir.pair[1];
2418 lpair[0], lpair[1], ldir.pair[0], ldir.pair[1]);
2423 lfs->root[0] = ldir.pair[0];
2424 lfs->root[1] = ldir.pair[1];
2429 if (lfs_pair_cmp(lpair, d->m.pair) == 0) {
2430 d->m.pair[0] = ldir.pair[0];
2431 d->m.pair[1] = ldir.pair[1];
2436 ((lfs_dir_t*)d)->head[0] = ldir.pair[0];
2437 ((lfs_dir_t*)d)->head[1] = ldir.pair[1];
2456 // fix pending move in this pair? this looks like an optimization but
2459 if (lfs_gstate_hasmovehere(&lfs->gstate, pdir.pair)) {
2463 pdir.pair[0], pdir.pair[1], moveid);
2470 lfs_block_t ppair[2] = {pdir.pair[0], pdir.pair[1]};
2471 lfs_pair_tole32(ldir.pair);
2475 {tag, ldir.pair}),
2477 lfs_pair_fromle32(ldir.pair);
2508 // fix pending move in this pair? this looks like an optimization
2511 if (lfs_gstate_hasmovehere(&lfs->gstate, pdir.pair)) {
2515 pdir.pair[0], pdir.pair[1], moveid);
2519 // replace bad pair, either we clean up desync, or no desync occured
2520 lpair[0] = pdir.pair[0];
2521 lpair[1] = pdir.pair[1];
2522 lfs_pair_tole32(ldir.pair);
2527 ldir.pair}),
2529 lfs_pair_fromle32(ldir.pair);
2630 lfs_pair_tole32(dir.pair);
2632 {LFS_MKTAG(LFS_TYPE_SOFTTAIL, 0x3ff, 8), dir.pair}));
2633 lfs_pair_fromle32(dir.pair);
2647 lfs_pair_tole32(dir.pair);
2651 {LFS_MKTAG(LFS_TYPE_DIRSTRUCT, id, 8), dir.pair},
2653 LFS_TYPE_SOFTTAIL, 0x3ff, 8), dir.pair}));
2654 lfs_pair_fromle32(dir.pair);
2673 lfs_block_t pair[2];
2676 pair[0] = lfs->root[0];
2677 pair[1] = lfs->root[1];
2679 // get dir pair from parent
2681 LFS_MKTAG(LFS_TYPE_STRUCT, lfs_tag_id(tag), 8), pair);
2685 lfs_pair_fromle32(pair);
2688 // fetch first pair
2689 int err = lfs_dir_fetch(lfs, &dir->m, pair);
2695 dir->head[0] = dir->m.pair[0];
2696 dir->head[1] = dir->m.pair[1];
3381 !lfs_pair_isnull(file->m.pair)) {
3836 lfs_block_t pair[2];
3838 LFS_MKTAG(LFS_TYPE_STRUCT, lfs_tag_id(tag), 8), pair);
3842 lfs_pair_fromle32(pair);
3844 err = lfs_dir_fetch(lfs, &dir.m, pair);
3882 err = lfs_fs_pred(lfs, dir.m.pair, &cwd);
3921 // if we're in the same pair there's a few special cases...
3922 bool samepair = (lfs_pair_cmp(oldcwd.pair, newcwd.pair) == 0);
3979 lfs_fs_prepmove(lfs, newoldid, oldcwd.pair);
4018 err = lfs_fs_pred(lfs, prevdir.m.pair, &newcwd);
4365 lfs->root[0] = dir.pair[0];
4366 lfs->root[1] = dir.pair[1];
4473 lfs->gstate.pair[0],
4474 lfs->gstate.pair[1]);
4646 const lfs_block_t pair[2], lfs_mdir_t *pdir) {
4667 if (lfs_pair_cmp(pdir->tail, pair) == 0) {
4684 const lfs_block_t pair[2];
4705 return (lfs_pair_cmp(child, find->pair) == 0) ? LFS_CMP_EQ : LFS_CMP_LT;
4710 static lfs_stag_t lfs_fs_parent(lfs_t *lfs, const lfs_block_t pair[2],
4737 lfs, {pair[0], pair[1]}});
4766 uint16_t id, const lfs_block_t pair[2]) {
4769 lfs->gstate.pair[0] = (id != 0x3ff) ? pair[0] : 0;
4770 lfs->gstate.pair[1] = (id != 0x3ff) ? pair[1] : 0;
4821 lfs->gdisk.pair[0],
4822 lfs->gdisk.pair[1],
4831 int err = lfs_dir_fetch(lfs, &movedir, lfs->gdisk.pair);
4887 lfs_block_t pair[2];
4889 LFS_MKTAG(0x7ff, 0x3ff, 0), tag, pair);
4893 lfs_pair_fromle32(pair);
4895 if (!lfs_pair_issync(pair, pdir.tail)) {
4900 pdir.tail[0], pdir.tail[1], pair[0], pair[1]);
4902 // fix pending move in this pair? this looks like an
4906 if (lfs_gstate_hasmovehere(&lfs->gstate, pdir.pair)) {
4910 pdir.pair[0], pdir.pair[1], moveid);
4914 lfs_pair_tole32(pair);
4919 pair}));
4920 lfs_pair_fromle32(pair);
5140 lfs_block_t pair[2];
5233 ///// Metadata pair and directory operations ///
5239 lfs1_dir_t *dir, const lfs_block_t pair[2]) {
5240 // copy out pair, otherwise may be aliasing dir
5241 const lfs_block_t tpair[2] = {pair[0], pair[1]};
5285 dir->pair[0] = tpair[(i+0) % 2];
5286 dir->pair[1] = tpair[(i+1) % 2];
5292 LFS_ERROR("Corrupted dir pair at {0x%"PRIx32", 0x%"PRIx32"}",
5316 int err = lfs1_bd_read(lfs, dir->pair[0], dir->off,
5355 err = lfs1_bd_read(lfs, dir.pair[0], dir.off,
5381 err = cb(data, dir2.pair[i]);
5468 err = lfs1_bd_read(lfs, dir.pair[0], sizeof(dir.d),
5540 dir1.head[0] = dir1.pair[0];
5541 dir1.head[1] = dir1.pair[1];
5542 lfs->root[0] = dir2.pair[0];
5543 lfs->root[1] = dir2.pair[1];
5579 err = lfs1_bd_read(lfs, dir1.pair[0],
5632 lfs_pair_tole32(dir2.pair);
5635 lfs_pair_fromle32(dir2.pair);
5661 dir2.pair[0], i, &dat, 1);
5686 dir2.pair[0] = dir1.pair[0];
5687 dir2.pair[1] = dir1.pair[1];