Merge pull request #937 from littlefs-project/fix-pending-rm-get-underflow

Fix synthetic move underflows in lfs_dir_get
This commit is contained in:
Christopher Haster
2024-03-08 16:48:50 -06:00
committed by GitHub
+6 -3
View File
@@ -710,12 +710,15 @@ static lfs_stag_t lfs_dir_getslice(lfs_t *lfs, const lfs_mdir_t *dir,
lfs_tag_t ntag = dir->etag; lfs_tag_t ntag = dir->etag;
lfs_stag_t gdiff = 0; lfs_stag_t gdiff = 0;
if (lfs_gstate_hasmovehere(&lfs->gdisk, dir->pair) &&
lfs_tag_id(gmask) != 0 &&
lfs_tag_id(lfs->gdisk.tag) <= lfs_tag_id(gtag)) {
// synthetic moves // synthetic moves
if (lfs_gstate_hasmovehere(&lfs->gdisk, dir->pair) &&
lfs_tag_id(gmask) != 0) {
if (lfs_tag_id(lfs->gdisk.tag) == lfs_tag_id(gtag)) {
return LFS_ERR_NOENT;
} else if (lfs_tag_id(lfs->gdisk.tag) < lfs_tag_id(gtag)) {
gdiff -= LFS_MKTAG(0, 1, 0); gdiff -= LFS_MKTAG(0, 1, 0);
} }
}
// iterate over dir block backwards (for faster lookups) // iterate over dir block backwards (for faster lookups)
while (off >= sizeof(lfs_tag_t) + lfs_tag_dsize(ntag)) { while (off >= sizeof(lfs_tag_t) + lfs_tag_dsize(ntag)) {