@@ -154,12 +154,10 @@ xfs_attr_calc_size(
size = xfs_attr_leaf_newentsize(args->geo, args->namelen,
args->valuelen, local);
total_dablks = XFS_DAENTER_BLOCKS(mp, XFS_ATTR_FORK);
- bmbt_blks = XFS_DAENTER_BMAPS(mp, XFS_ATTR_FORK);
if (*local) {
if (size > (args->geo->blksize / 2)) {
/* Double split possible */
total_dablks *= 2;
- bmbt_blks *= 2;
}
rmt_blks = 0;
} else {
@@ -168,10 +166,11 @@ xfs_attr_calc_size(
* make room for the attribute value itself.
*/
rmt_blks = xfs_attr3_rmt_blocks(mp, args->valuelen);
- bmbt_blks += XFS_NEXTENTADD_SPACE_RES(mp, rmt_blks,
- XFS_ATTR_FORK);
}
+ bmbt_blks = XFS_NEXTENTADD_SPACE_RES(mp, total_dablks + rmt_blks,
+ XFS_ATTR_FORK);
+
return total_dablks + rmt_blks + bmbt_blks;
}
The number of Bmbt blocks that is required can be calculated only once by passing the sum of total number of dabtree blocks and remote blocks to XFS_NEXTENTADD_SPACE_RES() macro. Signed-off-by: Chandan Rajendra <chandanrlinux@gmail.com> --- fs/xfs/libxfs/xfs_attr.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)