~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/xfs/libxfs/xfs_trans_space.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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"
 17 
 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)
 23 {
 24         /*
 25          * Parent pointers are always the first attr in an attr tree, and never
 26          * larger than a block
 27          */
 28         return XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK) +
 29                XFS_NEXTENTADD_SPACE_RES(mp, namelen, XFS_ATTR_FORK);
 30 }
 31 
 32 unsigned int
 33 xfs_create_space_res(
 34         struct xfs_mount        *mp,
 35         unsigned int            namelen)
 36 {
 37         unsigned int            ret;
 38 
 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);
 42 
 43         return ret;
 44 }
 45 
 46 unsigned int
 47 xfs_mkdir_space_res(
 48         struct xfs_mount        *mp,
 49         unsigned int            namelen)
 50 {
 51         return xfs_create_space_res(mp, namelen);
 52 }
 53 
 54 unsigned int
 55 xfs_link_space_res(
 56         struct xfs_mount        *mp,
 57         unsigned int            namelen)
 58 {
 59         unsigned int            ret;
 60 
 61         ret = XFS_DIRENTER_SPACE_RES(mp, namelen);
 62         if (xfs_has_parent(mp))
 63                 ret += xfs_parent_calc_space_res(mp, namelen);
 64 
 65         return ret;
 66 }
 67 
 68 unsigned int
 69 xfs_symlink_space_res(
 70         struct xfs_mount        *mp,
 71         unsigned int            namelen,
 72         unsigned int            fsblocks)
 73 {
 74         unsigned int            ret;
 75 
 76         ret = XFS_IALLOC_SPACE_RES(mp) + XFS_DIRENTER_SPACE_RES(mp, namelen) +
 77                         fsblocks;
 78 
 79         if (xfs_has_parent(mp))
 80                 ret += xfs_parent_calc_space_res(mp, namelen);
 81 
 82         return ret;
 83 }
 84 
 85 unsigned int
 86 xfs_remove_space_res(
 87         struct xfs_mount        *mp,
 88         unsigned int            namelen)
 89 {
 90         unsigned int            ret = XFS_DIRREMOVE_SPACE_RES(mp);
 91 
 92         if (xfs_has_parent(mp))
 93                 ret += xfs_parent_calc_space_res(mp, namelen);
 94 
 95         return ret;
 96 }
 97 
 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)
105 {
106         unsigned int            ret;
107 
108         ret = XFS_DIRREMOVE_SPACE_RES(mp) +
109                         XFS_DIRENTER_SPACE_RES(mp, target_namelen);
110 
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);
115         }
116 
117         if (target_exists)
118                 ret += xfs_parent_calc_space_res(mp, target_namelen);
119 
120         return ret;
121 }
122 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php