@@ -1213,37 +1213,33 @@ xfs_refcount_adjust_extents(
1213
1213
STATIC int
1214
1214
xfs_refcount_adjust (
1215
1215
struct xfs_btree_cur * cur ,
1216
- xfs_agblock_t agbno ,
1217
- xfs_extlen_t aglen ,
1218
- xfs_agblock_t * new_agbno ,
1219
- xfs_extlen_t * new_aglen ,
1216
+ xfs_agblock_t * agbno ,
1217
+ xfs_extlen_t * aglen ,
1220
1218
enum xfs_refc_adjust_op adj )
1221
1219
{
1222
1220
bool shape_changed ;
1223
1221
int shape_changes = 0 ;
1224
1222
int error ;
1225
1223
1226
- * new_agbno = agbno ;
1227
- * new_aglen = aglen ;
1228
1224
if (adj == XFS_REFCOUNT_ADJUST_INCREASE )
1229
- trace_xfs_refcount_increase (cur -> bc_mp , cur -> bc_ag . pag -> pag_agno ,
1230
- agbno , aglen );
1225
+ trace_xfs_refcount_increase (cur -> bc_mp ,
1226
+ cur -> bc_ag . pag -> pag_agno , * agbno , * aglen );
1231
1227
else
1232
- trace_xfs_refcount_decrease (cur -> bc_mp , cur -> bc_ag . pag -> pag_agno ,
1233
- agbno , aglen );
1228
+ trace_xfs_refcount_decrease (cur -> bc_mp ,
1229
+ cur -> bc_ag . pag -> pag_agno , * agbno , * aglen );
1234
1230
1235
1231
/*
1236
1232
* Ensure that no rcextents cross the boundary of the adjustment range.
1237
1233
*/
1238
1234
error = xfs_refcount_split_extent (cur , XFS_REFC_DOMAIN_SHARED ,
1239
- agbno , & shape_changed );
1235
+ * agbno , & shape_changed );
1240
1236
if (error )
1241
1237
goto out_error ;
1242
1238
if (shape_changed )
1243
1239
shape_changes ++ ;
1244
1240
1245
1241
error = xfs_refcount_split_extent (cur , XFS_REFC_DOMAIN_SHARED ,
1246
- agbno + aglen , & shape_changed );
1242
+ * agbno + * aglen , & shape_changed );
1247
1243
if (error )
1248
1244
goto out_error ;
1249
1245
if (shape_changed )
@@ -1253,7 +1249,7 @@ xfs_refcount_adjust(
1253
1249
* Try to merge with the left or right extents of the range.
1254
1250
*/
1255
1251
error = xfs_refcount_merge_extents (cur , XFS_REFC_DOMAIN_SHARED ,
1256
- new_agbno , new_aglen , adj , & shape_changed );
1252
+ agbno , aglen , adj , & shape_changed );
1257
1253
if (error )
1258
1254
goto out_error ;
1259
1255
if (shape_changed )
@@ -1262,7 +1258,7 @@ xfs_refcount_adjust(
1262
1258
cur -> bc_ag .refc .shape_changes ++ ;
1263
1259
1264
1260
/* Now that we've taken care of the ends, adjust the middle extents */
1265
- error = xfs_refcount_adjust_extents (cur , new_agbno , new_aglen , adj );
1261
+ error = xfs_refcount_adjust_extents (cur , agbno , aglen , adj );
1266
1262
if (error )
1267
1263
goto out_error ;
1268
1264
@@ -1298,21 +1294,20 @@ xfs_refcount_finish_one_cleanup(
1298
1294
static inline int
1299
1295
xfs_refcount_continue_op (
1300
1296
struct xfs_btree_cur * cur ,
1301
- xfs_fsblock_t startblock ,
1302
- xfs_agblock_t new_agbno ,
1303
- xfs_extlen_t new_len ,
1304
- xfs_fsblock_t * new_fsbno )
1297
+ struct xfs_refcount_intent * ri ,
1298
+ xfs_agblock_t new_agbno )
1305
1299
{
1306
1300
struct xfs_mount * mp = cur -> bc_mp ;
1307
1301
struct xfs_perag * pag = cur -> bc_ag .pag ;
1308
1302
1309
- if (XFS_IS_CORRUPT (mp , !xfs_verify_agbext (pag , new_agbno , new_len )))
1303
+ if (XFS_IS_CORRUPT (mp , !xfs_verify_agbext (pag , new_agbno ,
1304
+ ri -> ri_blockcount )))
1310
1305
return - EFSCORRUPTED ;
1311
1306
1312
- * new_fsbno = XFS_AGB_TO_FSB (mp , pag -> pag_agno , new_agbno );
1307
+ ri -> ri_startblock = XFS_AGB_TO_FSB (mp , pag -> pag_agno , new_agbno );
1313
1308
1314
- ASSERT (xfs_verify_fsbext (mp , * new_fsbno , new_len ));
1315
- ASSERT (pag -> pag_agno == XFS_FSB_TO_AGNO (mp , * new_fsbno ));
1309
+ ASSERT (xfs_verify_fsbext (mp , ri -> ri_startblock , ri -> ri_blockcount ));
1310
+ ASSERT (pag -> pag_agno == XFS_FSB_TO_AGNO (mp , ri -> ri_startblock ));
1316
1311
1317
1312
return 0 ;
1318
1313
}
@@ -1327,29 +1322,24 @@ xfs_refcount_continue_op(
1327
1322
int
1328
1323
xfs_refcount_finish_one (
1329
1324
struct xfs_trans * tp ,
1330
- enum xfs_refcount_intent_type type ,
1331
- xfs_fsblock_t startblock ,
1332
- xfs_extlen_t blockcount ,
1333
- xfs_fsblock_t * new_fsb ,
1334
- xfs_extlen_t * new_len ,
1325
+ struct xfs_refcount_intent * ri ,
1335
1326
struct xfs_btree_cur * * pcur )
1336
1327
{
1337
1328
struct xfs_mount * mp = tp -> t_mountp ;
1338
1329
struct xfs_btree_cur * rcur ;
1339
1330
struct xfs_buf * agbp = NULL ;
1340
1331
int error = 0 ;
1341
1332
xfs_agblock_t bno ;
1342
- xfs_agblock_t new_agbno ;
1343
1333
unsigned long nr_ops = 0 ;
1344
1334
int shape_changes = 0 ;
1345
1335
struct xfs_perag * pag ;
1346
1336
1347
- pag = xfs_perag_get (mp , XFS_FSB_TO_AGNO (mp , startblock ));
1348
- bno = XFS_FSB_TO_AGBNO (mp , startblock );
1337
+ pag = xfs_perag_get (mp , XFS_FSB_TO_AGNO (mp , ri -> ri_startblock ));
1338
+ bno = XFS_FSB_TO_AGBNO (mp , ri -> ri_startblock );
1349
1339
1350
- trace_xfs_refcount_deferred (mp , XFS_FSB_TO_AGNO (mp , startblock ),
1351
- type , XFS_FSB_TO_AGBNO (mp , startblock ),
1352
- blockcount );
1340
+ trace_xfs_refcount_deferred (mp , XFS_FSB_TO_AGNO (mp , ri -> ri_startblock ),
1341
+ ri -> ri_type , XFS_FSB_TO_AGBNO (mp , ri -> ri_startblock ),
1342
+ ri -> ri_blockcount );
1353
1343
1354
1344
if (XFS_TEST_ERROR (false, mp , XFS_ERRTAG_REFCOUNT_FINISH_ONE )) {
1355
1345
error = - EIO ;
@@ -1380,42 +1370,42 @@ xfs_refcount_finish_one(
1380
1370
}
1381
1371
* pcur = rcur ;
1382
1372
1383
- switch (type ) {
1373
+ switch (ri -> ri_type ) {
1384
1374
case XFS_REFCOUNT_INCREASE :
1385
- error = xfs_refcount_adjust (rcur , bno , blockcount , & new_agbno ,
1386
- new_len , XFS_REFCOUNT_ADJUST_INCREASE );
1375
+ error = xfs_refcount_adjust (rcur , & bno , & ri -> ri_blockcount ,
1376
+ XFS_REFCOUNT_ADJUST_INCREASE );
1387
1377
if (error )
1388
1378
goto out_drop ;
1389
- if (* new_len > 0 )
1390
- error = xfs_refcount_continue_op (rcur , startblock ,
1391
- new_agbno , * new_len , new_fsb );
1379
+ if (ri -> ri_blockcount > 0 )
1380
+ error = xfs_refcount_continue_op (rcur , ri , bno );
1392
1381
break ;
1393
1382
case XFS_REFCOUNT_DECREASE :
1394
- error = xfs_refcount_adjust (rcur , bno , blockcount , & new_agbno ,
1395
- new_len , XFS_REFCOUNT_ADJUST_DECREASE );
1383
+ error = xfs_refcount_adjust (rcur , & bno , & ri -> ri_blockcount ,
1384
+ XFS_REFCOUNT_ADJUST_DECREASE );
1396
1385
if (error )
1397
1386
goto out_drop ;
1398
- if (* new_len > 0 )
1399
- error = xfs_refcount_continue_op (rcur , startblock ,
1400
- new_agbno , * new_len , new_fsb );
1387
+ if (ri -> ri_blockcount > 0 )
1388
+ error = xfs_refcount_continue_op (rcur , ri , bno );
1401
1389
break ;
1402
1390
case XFS_REFCOUNT_ALLOC_COW :
1403
- * new_fsb = startblock + blockcount ;
1404
- * new_len = 0 ;
1405
- error = __xfs_refcount_cow_alloc (rcur , bno , blockcount );
1391
+ error = __xfs_refcount_cow_alloc (rcur , bno , ri -> ri_blockcount );
1392
+ if (error )
1393
+ goto out_drop ;
1394
+ ri -> ri_blockcount = 0 ;
1406
1395
break ;
1407
1396
case XFS_REFCOUNT_FREE_COW :
1408
- * new_fsb = startblock + blockcount ;
1409
- * new_len = 0 ;
1410
- error = __xfs_refcount_cow_free (rcur , bno , blockcount );
1397
+ error = __xfs_refcount_cow_free (rcur , bno , ri -> ri_blockcount );
1398
+ if (error )
1399
+ goto out_drop ;
1400
+ ri -> ri_blockcount = 0 ;
1411
1401
break ;
1412
1402
default :
1413
1403
ASSERT (0 );
1414
1404
error = - EFSCORRUPTED ;
1415
1405
}
1416
- if (!error && * new_len > 0 )
1417
- trace_xfs_refcount_finish_one_leftover (mp , pag -> pag_agno , type ,
1418
- bno , blockcount , new_agbno , * new_len );
1406
+ if (!error && ri -> ri_blockcount > 0 )
1407
+ trace_xfs_refcount_finish_one_leftover (mp , pag -> pag_agno ,
1408
+ ri -> ri_type , bno , ri -> ri_blockcount );
1419
1409
out_drop :
1420
1410
xfs_perag_put (pag );
1421
1411
return error ;
0 commit comments