@@ -1161,23 +1161,34 @@ static bool cfs_gc_file(char* map_path, GC_CALL_KIND background)
1161
1161
1162
1162
if (cfs_gc_verify_file )
1163
1163
{
1164
+ off_t soff = -1 ;
1164
1165
fd = open (file_bck_path , O_RDONLY |PG_BINARY , 0 );
1165
1166
Assert (fd >= 0 );
1166
1167
1167
1168
for (i = 0 ; i < n_pages ; i ++ )
1168
1169
{
1169
- inode_t inode = newMap -> inodes [i ];
1170
+ inodes [i ] = & newMap -> inodes [i ];
1171
+ }
1172
+ qsort (inodes , n_pages , sizeof (inode_t * ), cfs_cmp_page_offs );
1173
+
1174
+ for (i = 0 ; i < n_pages ; i ++ )
1175
+ {
1176
+ inode_t inode = * inodes [i ];
1170
1177
int size = CFS_INODE_SIZE (inode );
1171
1178
if (size != 0 && size < BLCKSZ )
1172
1179
{
1173
1180
char block [BLCKSZ ];
1174
1181
char decomressedBlock [BLCKSZ ];
1175
1182
off_t res PG_USED_FOR_ASSERTS_ONLY ;
1176
1183
bool rc PG_USED_FOR_ASSERTS_ONLY ;
1177
- res = lseek (fd , CFS_INODE_OFFS (inode ), SEEK_SET );
1178
- Assert (res == (off_t )CFS_INODE_OFFS (inode ));
1184
+ if (soff != CFS_INODE_OFFS (inode ))
1185
+ {
1186
+ soff = lseek (fd , CFS_INODE_OFFS (inode ), SEEK_SET );
1187
+ Assert (soff == (off_t )CFS_INODE_OFFS (inode ));
1188
+ }
1179
1189
rc = cfs_read_file (fd , block , size );
1180
1190
Assert (rc );
1191
+ soff += size ;
1181
1192
cfs_decrypt (file_bck_path , block , (off_t )i * BLCKSZ , size );
1182
1193
res = cfs_decompress (decomressedBlock , BLCKSZ , block , size );
1183
1194
0 commit comments