@@ -1069,53 +1069,6 @@ xfs_growfs_rt(
1069
1069
return error ;
1070
1070
}
1071
1071
1072
- /*
1073
- * Allocate an extent in the realtime subvolume, with the usual allocation
1074
- * parameters. The length units are all in realtime extents, as is the
1075
- * result block number.
1076
- */
1077
- static int
1078
- xfs_rtallocate_extent (
1079
- struct xfs_trans * tp ,
1080
- xfs_rtxnum_t start , /* starting rtext number to allocate */
1081
- xfs_rtxlen_t minlen , /* minimum length to allocate */
1082
- xfs_rtxlen_t maxlen , /* maximum length to allocate */
1083
- xfs_rtxlen_t * len , /* out: actual length allocated */
1084
- int wasdel , /* was a delayed allocation extent */
1085
- xfs_rtxlen_t prod , /* extent product factor */
1086
- xfs_rtxnum_t * rtx ) /* out: start rtext allocated */
1087
- {
1088
- struct xfs_rtalloc_args args = {
1089
- .mp = tp -> t_mountp ,
1090
- .tp = tp ,
1091
- };
1092
- int error ; /* error value */
1093
-
1094
- ASSERT (xfs_isilocked (args .mp -> m_rbmip , XFS_ILOCK_EXCL ));
1095
- ASSERT (minlen > 0 && minlen <= maxlen );
1096
-
1097
- if (start == 0 ) {
1098
- error = xfs_rtallocate_extent_size (& args , minlen ,
1099
- maxlen , len , prod , rtx );
1100
- } else {
1101
- error = xfs_rtallocate_extent_near (& args , start , minlen ,
1102
- maxlen , len , prod , rtx );
1103
- }
1104
- xfs_rtbuf_cache_relse (& args );
1105
- if (error )
1106
- return error ;
1107
-
1108
- /*
1109
- * If it worked, update the superblock.
1110
- */
1111
- ASSERT (* len >= minlen && * len <= maxlen );
1112
- if (wasdel )
1113
- xfs_trans_mod_sb (tp , XFS_TRANS_SB_RES_FREXTENTS , - (long )* len );
1114
- else
1115
- xfs_trans_mod_sb (tp , XFS_TRANS_SB_FREXTENTS , - (long )* len );
1116
- return 0 ;
1117
- }
1118
-
1119
1072
/*
1120
1073
* Initialize realtime fields in the mount structure.
1121
1074
*/
@@ -1380,6 +1333,10 @@ xfs_bmap_rtalloc(
1380
1333
xfs_rtxlen_t raminlen ;
1381
1334
bool rtlocked = false;
1382
1335
bool ignore_locality = false;
1336
+ struct xfs_rtalloc_args args = {
1337
+ .mp = mp ,
1338
+ .tp = ap -> tp ,
1339
+ };
1383
1340
int error ;
1384
1341
1385
1342
align = xfs_get_extsz_hint (ap -> ip );
@@ -1412,6 +1369,8 @@ xfs_bmap_rtalloc(
1412
1369
*/
1413
1370
ralen = xfs_extlen_to_rtxlen (mp , min (ap -> length , XFS_MAX_BMBT_EXTLEN ));
1414
1371
raminlen = max_t (xfs_rtxlen_t , 1 , xfs_extlen_to_rtxlen (mp , minlen ));
1372
+ ASSERT (raminlen > 0 );
1373
+ ASSERT (raminlen <= ralen );
1415
1374
1416
1375
/*
1417
1376
* Lock out modifications to both the RT bitmap and summary inodes
@@ -1453,8 +1412,15 @@ xfs_bmap_rtalloc(
1453
1412
xfs_rtalloc_align_minmax (& raminlen , & ralen , & prod );
1454
1413
}
1455
1414
1456
- error = xfs_rtallocate_extent (ap -> tp , start , raminlen , ralen , & ralen ,
1457
- ap -> wasdel , prod , & rtx );
1415
+ if (start ) {
1416
+ error = xfs_rtallocate_extent_near (& args , start , raminlen ,
1417
+ ralen , & ralen , prod , & rtx );
1418
+ } else {
1419
+ error = xfs_rtallocate_extent_size (& args , raminlen ,
1420
+ ralen , & ralen , prod , & rtx );
1421
+ }
1422
+ xfs_rtbuf_cache_relse (& args );
1423
+
1458
1424
if (error == - ENOSPC ) {
1459
1425
if (align > mp -> m_sb .sb_rextsize ) {
1460
1426
/*
@@ -1486,6 +1452,9 @@ xfs_bmap_rtalloc(
1486
1452
if (error )
1487
1453
return error ;
1488
1454
1455
+ xfs_trans_mod_sb (ap -> tp , ap -> wasdel ?
1456
+ XFS_TRANS_SB_RES_FREXTENTS : XFS_TRANS_SB_FREXTENTS ,
1457
+ - (long )ralen );
1489
1458
ap -> blkno = xfs_rtx_to_rtb (mp , rtx );
1490
1459
ap -> length = xfs_rtxlen_to_extlen (mp , ralen );
1491
1460
xfs_bmap_alloc_account (ap );
0 commit comments