xfs: simplify xfs_rtallocate_extent
We can deduce the allocation type from the bno argument, and do the return without prod much simpler internally. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> [darrick: fix the macro for the non-rt build] Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:

committed by
Darrick J. Wong

parent
410d17f67e
commit
089ec2f875
@@ -1093,7 +1093,6 @@ xfs_rtallocate_extent(
|
||||
xfs_extlen_t minlen, /* minimum length to allocate */
|
||||
xfs_extlen_t maxlen, /* maximum length to allocate */
|
||||
xfs_extlen_t *len, /* out: actual length allocated */
|
||||
xfs_alloctype_t type, /* allocation type XFS_ALLOCTYPE... */
|
||||
int wasdel, /* was a delayed allocation extent */
|
||||
xfs_extlen_t prod, /* extent product factor */
|
||||
xfs_rtblock_t *rtblock) /* out: start block allocated */
|
||||
@@ -1123,27 +1122,16 @@ xfs_rtallocate_extent(
|
||||
}
|
||||
}
|
||||
|
||||
retry:
|
||||
sumbp = NULL;
|
||||
/*
|
||||
* Allocate by size, or near another block, or exactly at some block.
|
||||
*/
|
||||
switch (type) {
|
||||
case XFS_ALLOCTYPE_ANY_AG:
|
||||
if (bno == 0) {
|
||||
error = xfs_rtallocate_extent_size(mp, tp, minlen, maxlen, len,
|
||||
&sumbp, &sb, prod, &r);
|
||||
break;
|
||||
case XFS_ALLOCTYPE_NEAR_BNO:
|
||||
} else {
|
||||
error = xfs_rtallocate_extent_near(mp, tp, bno, minlen, maxlen,
|
||||
len, &sumbp, &sb, prod, &r);
|
||||
break;
|
||||
case XFS_ALLOCTYPE_THIS_BNO:
|
||||
error = xfs_rtallocate_extent_exact(mp, tp, bno, minlen, maxlen,
|
||||
len, &sumbp, &sb, prod, &r);
|
||||
break;
|
||||
default:
|
||||
error = -EIO;
|
||||
ASSERT(0);
|
||||
}
|
||||
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
@@ -1158,7 +1146,11 @@ xfs_rtallocate_extent(
|
||||
xfs_trans_mod_sb(tp, XFS_TRANS_SB_RES_FREXTENTS, -slen);
|
||||
else
|
||||
xfs_trans_mod_sb(tp, XFS_TRANS_SB_FREXTENTS, -slen);
|
||||
} else if (prod > 1) {
|
||||
prod = 1;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
*rtblock = r;
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user