@@ -22,8 +22,8 @@ struct z_erofs_maprecorder {
22
22
bool partialref ;
23
23
};
24
24
25
- static int legacy_load_cluster_from_disk (struct z_erofs_maprecorder * m ,
26
- unsigned long lcn )
25
+ static int z_erofs_load_full_lcluster (struct z_erofs_maprecorder * m ,
26
+ unsigned long lcn )
27
27
{
28
28
struct inode * const inode = m -> inode ;
29
29
struct erofs_inode * const vi = EROFS_I (inode );
@@ -226,8 +226,8 @@ static int unpack_compacted_index(struct z_erofs_maprecorder *m,
226
226
return 0 ;
227
227
}
228
228
229
- static int compacted_load_cluster_from_disk (struct z_erofs_maprecorder * m ,
230
- unsigned long lcn , bool lookahead )
229
+ static int z_erofs_load_compact_lcluster (struct z_erofs_maprecorder * m ,
230
+ unsigned long lcn , bool lookahead )
231
231
{
232
232
struct inode * const inode = m -> inode ;
233
233
struct erofs_inode * const vi = EROFS_I (inode );
@@ -277,45 +277,39 @@ static int compacted_load_cluster_from_disk(struct z_erofs_maprecorder *m,
277
277
return unpack_compacted_index (m , amortizedshift , pos , lookahead );
278
278
}
279
279
280
- static int z_erofs_load_cluster_from_disk (struct z_erofs_maprecorder * m ,
281
- unsigned int lcn , bool lookahead )
280
+ static int z_erofs_load_lcluster_from_disk (struct z_erofs_maprecorder * m ,
281
+ unsigned int lcn , bool lookahead )
282
282
{
283
- const unsigned int datamode = EROFS_I (m -> inode )-> datalayout ;
284
-
285
- if (datamode == EROFS_INODE_COMPRESSED_FULL )
286
- return legacy_load_cluster_from_disk (m , lcn );
287
-
288
- if (datamode == EROFS_INODE_COMPRESSED_COMPACT )
289
- return compacted_load_cluster_from_disk (m , lcn , lookahead );
290
-
291
- return - EINVAL ;
283
+ switch (EROFS_I (m -> inode )-> datalayout ) {
284
+ case EROFS_INODE_COMPRESSED_FULL :
285
+ return z_erofs_load_full_lcluster (m , lcn );
286
+ case EROFS_INODE_COMPRESSED_COMPACT :
287
+ return z_erofs_load_compact_lcluster (m , lcn , lookahead );
288
+ default :
289
+ return - EINVAL ;
290
+ }
292
291
}
293
292
294
293
static int z_erofs_extent_lookback (struct z_erofs_maprecorder * m ,
295
294
unsigned int lookback_distance )
296
295
{
296
+ struct super_block * sb = m -> inode -> i_sb ;
297
297
struct erofs_inode * const vi = EROFS_I (m -> inode );
298
298
const unsigned int lclusterbits = vi -> z_logical_clusterbits ;
299
299
300
300
while (m -> lcn >= lookback_distance ) {
301
301
unsigned long lcn = m -> lcn - lookback_distance ;
302
302
int err ;
303
303
304
- /* load extent head logical cluster if needed */
305
- err = z_erofs_load_cluster_from_disk (m , lcn , false);
304
+ err = z_erofs_load_lcluster_from_disk (m , lcn , false);
306
305
if (err )
307
306
return err ;
308
307
309
308
switch (m -> type ) {
310
309
case Z_EROFS_LCLUSTER_TYPE_NONHEAD :
311
- if (!m -> delta [0 ]) {
312
- erofs_err (m -> inode -> i_sb ,
313
- "invalid lookback distance 0 @ nid %llu" ,
314
- vi -> nid );
315
- DBG_BUGON (1 );
316
- return - EFSCORRUPTED ;
317
- }
318
310
lookback_distance = m -> delta [0 ];
311
+ if (!lookback_distance )
312
+ goto err_bogus ;
319
313
continue ;
320
314
case Z_EROFS_LCLUSTER_TYPE_PLAIN :
321
315
case Z_EROFS_LCLUSTER_TYPE_HEAD1 :
@@ -324,16 +318,15 @@ static int z_erofs_extent_lookback(struct z_erofs_maprecorder *m,
324
318
m -> map -> m_la = (lcn << lclusterbits ) | m -> clusterofs ;
325
319
return 0 ;
326
320
default :
327
- erofs_err (m -> inode -> i_sb ,
328
- "unknown type %u @ lcn %lu of nid %llu" ,
321
+ erofs_err (sb , "unknown type %u @ lcn %lu of nid %llu" ,
329
322
m -> type , lcn , vi -> nid );
330
323
DBG_BUGON (1 );
331
324
return - EOPNOTSUPP ;
332
325
}
333
326
}
334
-
335
- erofs_err (m -> inode -> i_sb , "bogus lookback distance @ nid %llu" ,
336
- vi -> nid );
327
+ err_bogus :
328
+ erofs_err (sb , "bogus lookback distance %u @ lcn %lu of nid %llu" ,
329
+ lookback_distance , m -> lcn , vi -> nid );
337
330
DBG_BUGON (1 );
338
331
return - EFSCORRUPTED ;
339
332
}
@@ -365,7 +358,7 @@ static int z_erofs_get_extent_compressedlen(struct z_erofs_maprecorder *m,
365
358
if (m -> compressedblks )
366
359
goto out ;
367
360
368
- err = z_erofs_load_cluster_from_disk (m , lcn , false);
361
+ err = z_erofs_load_lcluster_from_disk (m , lcn , false);
369
362
if (err )
370
363
return err ;
371
364
@@ -397,19 +390,16 @@ static int z_erofs_get_extent_compressedlen(struct z_erofs_maprecorder *m,
397
390
break ;
398
391
fallthrough ;
399
392
default :
400
- erofs_err (m -> inode -> i_sb ,
401
- "cannot found CBLKCNT @ lcn %lu of nid %llu" ,
402
- lcn , vi -> nid );
393
+ erofs_err (sb , "cannot found CBLKCNT @ lcn %lu of nid %llu" , lcn ,
394
+ vi -> nid );
403
395
DBG_BUGON (1 );
404
396
return - EFSCORRUPTED ;
405
397
}
406
398
out :
407
399
map -> m_plen = erofs_pos (sb , m -> compressedblks );
408
400
return 0 ;
409
401
err_bonus_cblkcnt :
410
- erofs_err (m -> inode -> i_sb ,
411
- "bogus CBLKCNT @ lcn %lu of nid %llu" ,
412
- lcn , vi -> nid );
402
+ erofs_err (sb , "bogus CBLKCNT @ lcn %lu of nid %llu" , lcn , vi -> nid );
413
403
DBG_BUGON (1 );
414
404
return - EFSCORRUPTED ;
415
405
}
@@ -430,7 +420,7 @@ static int z_erofs_get_extent_decompressedlen(struct z_erofs_maprecorder *m)
430
420
return 0 ;
431
421
}
432
422
433
- err = z_erofs_load_cluster_from_disk (m , lcn , true);
423
+ err = z_erofs_load_lcluster_from_disk (m , lcn , true);
434
424
if (err )
435
425
return err ;
436
426
@@ -477,7 +467,7 @@ static int z_erofs_do_map_blocks(struct inode *inode,
477
467
initial_lcn = ofs >> lclusterbits ;
478
468
endoff = ofs & ((1 << lclusterbits ) - 1 );
479
469
480
- err = z_erofs_load_cluster_from_disk (& m , initial_lcn , false);
470
+ err = z_erofs_load_lcluster_from_disk (& m , initial_lcn , false);
481
471
if (err )
482
472
goto unmap_out ;
483
473
@@ -535,8 +525,7 @@ static int z_erofs_do_map_blocks(struct inode *inode,
535
525
if (flags & EROFS_GET_BLOCKS_FINDTAIL ) {
536
526
vi -> z_tailextent_headlcn = m .lcn ;
537
527
/* for non-compact indexes, fragmentoff is 64 bits */
538
- if (fragment &&
539
- vi -> datalayout == EROFS_INODE_COMPRESSED_FULL )
528
+ if (fragment && vi -> datalayout == EROFS_INODE_COMPRESSED_FULL )
540
529
vi -> z_fragmentoff |= (u64 )m .pblk << 32 ;
541
530
}
542
531
if (ztailpacking && m .lcn == vi -> z_tailextent_headlcn ) {
0 commit comments