drm/panel-edp: Add STA 116QHD024002
[drm/drm-misc.git] / fs / xfs / libxfs / xfs_trans_space.c
blobb9dc3752f702ce9341bcd7a249c3a418140c8056
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Copyright (c) 2000,2005 Silicon Graphics, Inc.
4 * All Rights Reserved.
5 */
6 #include "xfs.h"
7 #include "xfs_fs.h"
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. */
19 unsigned int
20 xfs_parent_calc_space_res(
21 struct xfs_mount *mp,
22 unsigned int namelen)
25 * Parent pointers are always the first attr in an attr tree, and never
26 * larger than a block
28 return XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK) +
29 XFS_NEXTENTADD_SPACE_RES(mp, namelen, XFS_ATTR_FORK);
32 unsigned int
33 xfs_create_space_res(
34 struct xfs_mount *mp,
35 unsigned int namelen)
37 unsigned int ret;
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);
43 return ret;
46 unsigned int
47 xfs_mkdir_space_res(
48 struct xfs_mount *mp,
49 unsigned int namelen)
51 return xfs_create_space_res(mp, namelen);
54 unsigned int
55 xfs_link_space_res(
56 struct xfs_mount *mp,
57 unsigned int namelen)
59 unsigned int ret;
61 ret = XFS_DIRENTER_SPACE_RES(mp, namelen);
62 if (xfs_has_parent(mp))
63 ret += xfs_parent_calc_space_res(mp, namelen);
65 return ret;
68 unsigned int
69 xfs_symlink_space_res(
70 struct xfs_mount *mp,
71 unsigned int namelen,
72 unsigned int fsblocks)
74 unsigned int ret;
76 ret = XFS_IALLOC_SPACE_RES(mp) + XFS_DIRENTER_SPACE_RES(mp, namelen) +
77 fsblocks;
79 if (xfs_has_parent(mp))
80 ret += xfs_parent_calc_space_res(mp, namelen);
82 return ret;
85 unsigned int
86 xfs_remove_space_res(
87 struct xfs_mount *mp,
88 unsigned int 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);
95 return ret;
98 unsigned int
99 xfs_rename_space_res(
100 struct xfs_mount *mp,
101 unsigned int src_namelen,
102 bool target_exists,
103 unsigned int target_namelen,
104 bool has_whiteout)
106 unsigned int ret;
108 ret = XFS_DIRREMOVE_SPACE_RES(mp) +
109 XFS_DIRENTER_SPACE_RES(mp, target_namelen);
111 if (xfs_has_parent(mp)) {
112 if (has_whiteout)
113 ret += xfs_parent_calc_space_res(mp, src_namelen);
114 ret += 2 * xfs_parent_calc_space_res(mp, target_namelen);
117 if (target_exists)
118 ret += xfs_parent_calc_space_res(mp, target_namelen);
120 return ret;