1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000,2005 Silicon Graphics, Inc.
8 #include "xfs_shared.h"
9 #include "xfs_format.h"
10 #include "xfs_da_format.h"
11 #include "xfs_log_format.h"
12 #include "xfs_trans_resv.h"
13 #include "xfs_mount.h"
14 #include "xfs_da_btree.h"
15 #include "xfs_bmap_btree.h"
16 #include "xfs_trans_space.h"
18 /* Calculate the disk space required to add a parent pointer. */
20 xfs_parent_calc_space_res(
25 * Parent pointers are always the first attr in an attr tree, and never
28 return XFS_DAENTER_SPACE_RES(mp
, XFS_ATTR_FORK
) +
29 XFS_NEXTENTADD_SPACE_RES(mp
, namelen
, XFS_ATTR_FORK
);
39 ret
= XFS_IALLOC_SPACE_RES(mp
) + XFS_DIRENTER_SPACE_RES(mp
, namelen
);
40 if (xfs_has_parent(mp
))
41 ret
+= xfs_parent_calc_space_res(mp
, namelen
);
51 return xfs_create_space_res(mp
, namelen
);
61 ret
= XFS_DIRENTER_SPACE_RES(mp
, namelen
);
62 if (xfs_has_parent(mp
))
63 ret
+= xfs_parent_calc_space_res(mp
, namelen
);
69 xfs_symlink_space_res(
72 unsigned int fsblocks
)
76 ret
= XFS_IALLOC_SPACE_RES(mp
) + XFS_DIRENTER_SPACE_RES(mp
, namelen
) +
79 if (xfs_has_parent(mp
))
80 ret
+= xfs_parent_calc_space_res(mp
, namelen
);
90 unsigned int ret
= XFS_DIRREMOVE_SPACE_RES(mp
);
92 if (xfs_has_parent(mp
))
93 ret
+= xfs_parent_calc_space_res(mp
, namelen
);
100 struct xfs_mount
*mp
,
101 unsigned int src_namelen
,
103 unsigned int target_namelen
,
108 ret
= XFS_DIRREMOVE_SPACE_RES(mp
) +
109 XFS_DIRENTER_SPACE_RES(mp
, target_namelen
);
111 if (xfs_has_parent(mp
)) {
113 ret
+= xfs_parent_calc_space_res(mp
, src_namelen
);
114 ret
+= 2 * xfs_parent_calc_space_res(mp
, target_namelen
);
118 ret
+= xfs_parent_calc_space_res(mp
, target_namelen
);