@@ -863,8 +863,6 @@ static int lfs_dir_compact(lfs_t *lfs,
863
863
break ;
864
864
865
865
split :
866
- // TODO update dirs that get split here?
867
-
868
866
// commit no longer fits, need to split dir,
869
867
// drop caches and create tail
870
868
lfs -> pcache .block = 0xffffffff ;
@@ -923,6 +921,18 @@ static int lfs_dir_compact(lfs_t *lfs,
923
921
}
924
922
}
925
923
924
+ // update any dirs/files that are affected
925
+ for (int i = 0 ; i < 2 ; i ++ ) {
926
+ for (lfs_file_t * f = ((lfs_file_t * * )& lfs -> files )[i ]; f ; f = f -> next ) {
927
+ if (lfs_paircmp (f -> pair , dir -> pair ) == 0 &&
928
+ f -> id >= begin && f -> id < end ) {
929
+ f -> pair [0 ] = dir -> pair [0 ];
930
+ f -> pair [1 ] = dir -> pair [1 ];
931
+ f -> id -= begin ;
932
+ }
933
+ }
934
+ }
935
+
926
936
return 0 ;
927
937
}
928
938
@@ -1052,19 +1062,17 @@ static int lfs_dir_commit(lfs_t *lfs, lfs_mdir_t *dir,
1052
1062
}
1053
1063
1054
1064
// update any directories that are affected
1055
- // TODO what about pairs? what if we're splitting??
1056
1065
for (lfs_dir_t * d = lfs -> dirs ; d ; d = d -> next ) {
1057
1066
if (lfs_paircmp (d -> m .pair , dir -> pair ) == 0 ) {
1058
1067
d -> m = * dir ;
1059
1068
if (d -> id > lfs_tagid (deletetag )) {
1060
- d -> id -= 1 ;
1061
1069
d -> pos -= 1 ;
1062
1070
}
1063
1071
}
1064
1072
}
1065
1073
1066
- for (lfs_file_t * f = lfs -> files ; f ; f = f -> next ) {
1067
- if ( lfs_paircmp ( f -> pair , dir -> pair ) == 0 ) {
1074
+ for (int i = 0 ; i < 2 ; i ++ ) {
1075
+ for ( lfs_file_t * f = (( lfs_file_t * * ) & lfs -> files )[ i ]; f ; f = f -> next ) {
1068
1076
if (f -> id == lfs_tagid (deletetag )) {
1069
1077
f -> pair [0 ] = 0xffffffff ;
1070
1078
f -> pair [1 ] = 0xffffffff ;
@@ -3186,8 +3194,6 @@ static int lfs_relocate(lfs_t *lfs,
3186
3194
lfs -> root [1 ] = newpair [1 ];
3187
3195
}
3188
3196
3189
- // TODO update dir list!!?
3190
-
3191
3197
// clean up bad block, which should now be a desync
3192
3198
return lfs_deorphan (lfs );
3193
3199
}
@@ -3212,17 +3218,6 @@ static int lfs_relocate(lfs_t *lfs,
3212
3218
}
3213
3219
}
3214
3220
3215
- // shift over any dirs/files that are affected
3216
- for (int i = 0 ; i < 2 ; i ++ ) {
3217
- for (lfs_dir_t * d = ((void * [2 ]){lfs -> dirs , lfs -> files })[i ];
3218
- d ; d = d -> next ) {
3219
- if (lfs_paircmp (d -> m .pair , oldpair ) == 0 ) {
3220
- d -> m .pair [0 ] = newpair [0 ];
3221
- d -> m .pair [1 ] = newpair [1 ];
3222
- }
3223
- }
3224
- }
3225
-
3226
3221
return 0 ;
3227
3222
}
3228
3223
0 commit comments