@@ -293,19 +293,12 @@ static int
293
293
xfs_trans_log_finish_rmap_update (
294
294
struct xfs_trans * tp ,
295
295
struct xfs_rud_log_item * rudp ,
296
- enum xfs_rmap_intent_type type ,
297
- uint64_t owner ,
298
- int whichfork ,
299
- xfs_fileoff_t startoff ,
300
- xfs_fsblock_t startblock ,
301
- xfs_filblks_t blockcount ,
302
- xfs_exntst_t state ,
296
+ struct xfs_rmap_intent * ri ,
303
297
struct xfs_btree_cur * * pcur )
304
298
{
305
299
int error ;
306
300
307
- error = xfs_rmap_finish_one (tp , type , owner , whichfork , startoff ,
308
- startblock , blockcount , state , pcur );
301
+ error = xfs_rmap_finish_one (tp , ri , pcur );
309
302
310
303
/*
311
304
* Mark the transaction dirty, even on error. This ensures the
@@ -409,10 +402,7 @@ xfs_rmap_update_finish_item(
409
402
int error ;
410
403
411
404
rmap = container_of (item , struct xfs_rmap_intent , ri_list );
412
- error = xfs_trans_log_finish_rmap_update (tp , RUD_ITEM (done ),
413
- rmap -> ri_type , rmap -> ri_owner , rmap -> ri_whichfork ,
414
- rmap -> ri_bmap .br_startoff , rmap -> ri_bmap .br_startblock ,
415
- rmap -> ri_bmap .br_blockcount , rmap -> ri_bmap .br_state ,
405
+ error = xfs_trans_log_finish_rmap_update (tp , RUD_ITEM (done ), rmap ,
416
406
state );
417
407
kmem_cache_free (xfs_rmap_intent_cache , rmap );
418
408
return error ;
@@ -493,15 +483,11 @@ xfs_rui_item_recover(
493
483
struct list_head * capture_list )
494
484
{
495
485
struct xfs_rui_log_item * ruip = RUI_ITEM (lip );
496
- struct xfs_map_extent * rmap ;
497
486
struct xfs_rud_log_item * rudp ;
498
487
struct xfs_trans * tp ;
499
488
struct xfs_btree_cur * rcur = NULL ;
500
489
struct xfs_mount * mp = lip -> li_log -> l_mp ;
501
- enum xfs_rmap_intent_type type ;
502
- xfs_exntst_t state ;
503
490
int i ;
504
- int whichfork ;
505
491
int error = 0 ;
506
492
507
493
/*
@@ -526,35 +512,34 @@ xfs_rui_item_recover(
526
512
rudp = xfs_trans_get_rud (tp , ruip );
527
513
528
514
for (i = 0 ; i < ruip -> rui_format .rui_nextents ; i ++ ) {
529
- rmap = & ruip -> rui_format .rui_extents [i ];
530
- state = (rmap -> me_flags & XFS_RMAP_EXTENT_UNWRITTEN ) ?
531
- XFS_EXT_UNWRITTEN : XFS_EXT_NORM ;
532
- whichfork = (rmap -> me_flags & XFS_RMAP_EXTENT_ATTR_FORK ) ?
533
- XFS_ATTR_FORK : XFS_DATA_FORK ;
534
- switch (rmap -> me_flags & XFS_RMAP_EXTENT_TYPE_MASK ) {
515
+ struct xfs_rmap_intent fake = { };
516
+ struct xfs_map_extent * map ;
517
+
518
+ map = & ruip -> rui_format .rui_extents [i ];
519
+ switch (map -> me_flags & XFS_RMAP_EXTENT_TYPE_MASK ) {
535
520
case XFS_RMAP_EXTENT_MAP :
536
- type = XFS_RMAP_MAP ;
521
+ fake . ri_type = XFS_RMAP_MAP ;
537
522
break ;
538
523
case XFS_RMAP_EXTENT_MAP_SHARED :
539
- type = XFS_RMAP_MAP_SHARED ;
524
+ fake . ri_type = XFS_RMAP_MAP_SHARED ;
540
525
break ;
541
526
case XFS_RMAP_EXTENT_UNMAP :
542
- type = XFS_RMAP_UNMAP ;
527
+ fake . ri_type = XFS_RMAP_UNMAP ;
543
528
break ;
544
529
case XFS_RMAP_EXTENT_UNMAP_SHARED :
545
- type = XFS_RMAP_UNMAP_SHARED ;
530
+ fake . ri_type = XFS_RMAP_UNMAP_SHARED ;
546
531
break ;
547
532
case XFS_RMAP_EXTENT_CONVERT :
548
- type = XFS_RMAP_CONVERT ;
533
+ fake . ri_type = XFS_RMAP_CONVERT ;
549
534
break ;
550
535
case XFS_RMAP_EXTENT_CONVERT_SHARED :
551
- type = XFS_RMAP_CONVERT_SHARED ;
536
+ fake . ri_type = XFS_RMAP_CONVERT_SHARED ;
552
537
break ;
553
538
case XFS_RMAP_EXTENT_ALLOC :
554
- type = XFS_RMAP_ALLOC ;
539
+ fake . ri_type = XFS_RMAP_ALLOC ;
555
540
break ;
556
541
case XFS_RMAP_EXTENT_FREE :
557
- type = XFS_RMAP_FREE ;
542
+ fake . ri_type = XFS_RMAP_FREE ;
558
543
break ;
559
544
default :
560
545
XFS_CORRUPTION_ERROR (__func__ , XFS_ERRLEVEL_LOW , mp ,
@@ -563,13 +548,21 @@ xfs_rui_item_recover(
563
548
error = - EFSCORRUPTED ;
564
549
goto abort_error ;
565
550
}
566
- error = xfs_trans_log_finish_rmap_update (tp , rudp , type ,
567
- rmap -> me_owner , whichfork ,
568
- rmap -> me_startoff , rmap -> me_startblock ,
569
- rmap -> me_len , state , & rcur );
551
+
552
+ fake .ri_owner = map -> me_owner ;
553
+ fake .ri_whichfork = (map -> me_flags & XFS_RMAP_EXTENT_ATTR_FORK ) ?
554
+ XFS_ATTR_FORK : XFS_DATA_FORK ;
555
+ fake .ri_bmap .br_startblock = map -> me_startblock ;
556
+ fake .ri_bmap .br_startoff = map -> me_startoff ;
557
+ fake .ri_bmap .br_blockcount = map -> me_len ;
558
+ fake .ri_bmap .br_state = (map -> me_flags & XFS_RMAP_EXTENT_UNWRITTEN ) ?
559
+ XFS_EXT_UNWRITTEN : XFS_EXT_NORM ;
560
+
561
+ error = xfs_trans_log_finish_rmap_update (tp , rudp , & fake ,
562
+ & rcur );
570
563
if (error == - EFSCORRUPTED )
571
564
XFS_CORRUPTION_ERROR (__func__ , XFS_ERRLEVEL_LOW , mp ,
572
- rmap , sizeof (* rmap ));
565
+ map , sizeof (* map ));
573
566
if (error )
574
567
goto abort_error ;
575
568
0 commit comments