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);