LCOV - code coverage report
Current view: top level - fs/xfs/libxfs - xfs_trans_space.c (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc4-xfsx @ Mon Jul 31 20:08:34 PDT 2023 Lines: 39 39 100.0 %
Date: 2023-07-31 20:08:34 Functions: 7 7 100.0 %

          Line data    Source code
       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   383581210 : 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   383581210 :         return XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK) +
      29   383581210 :                XFS_NEXTENTADD_SPACE_RES(mp, namelen, XFS_ATTR_FORK);
      30             : }
      31             : 
      32             : unsigned int
      33    73984109 : xfs_create_space_res(
      34             :         struct xfs_mount        *mp,
      35             :         unsigned int            namelen)
      36             : {
      37    73984109 :         unsigned int            ret;
      38             : 
      39    73984109 :         ret = XFS_IALLOC_SPACE_RES(mp) + XFS_DIRENTER_SPACE_RES(mp, namelen);
      40    73984109 :         if (xfs_has_parent(mp))
      41    69074862 :                 ret += xfs_parent_calc_space_res(mp, namelen);
      42             : 
      43    73804641 :         return ret;
      44             : }
      45             : 
      46             : unsigned int
      47    13430652 : xfs_mkdir_space_res(
      48             :         struct xfs_mount        *mp,
      49             :         unsigned int            namelen)
      50             : {
      51    13430652 :         return xfs_create_space_res(mp, namelen);
      52             : }
      53             : 
      54             : unsigned int
      55   116208431 : xfs_link_space_res(
      56             :         struct xfs_mount        *mp,
      57             :         unsigned int            namelen)
      58             : {
      59   116208431 :         unsigned int            ret;
      60             : 
      61   116208431 :         ret = XFS_DIRENTER_SPACE_RES(mp, namelen);
      62   116208431 :         if (xfs_has_parent(mp))
      63   114898338 :                 ret += xfs_parent_calc_space_res(mp, namelen);
      64             : 
      65   116208138 :         return ret;
      66             : }
      67             : 
      68             : unsigned int
      69    31835788 : xfs_symlink_space_res(
      70             :         struct xfs_mount        *mp,
      71             :         unsigned int            namelen,
      72             :         unsigned int            fsblocks)
      73             : {
      74    31835788 :         unsigned int            ret;
      75             : 
      76    31835788 :         ret = XFS_IALLOC_SPACE_RES(mp) + XFS_DIRENTER_SPACE_RES(mp, namelen) +
      77             :                         fsblocks;
      78             : 
      79    31835788 :         if (xfs_has_parent(mp))
      80    31291653 :                 ret += xfs_parent_calc_space_res(mp, namelen);
      81             : 
      82    31830727 :         return ret;
      83             : }
      84             : 
      85             : unsigned int
      86    70606964 : xfs_remove_space_res(
      87             :         struct xfs_mount        *mp,
      88             :         unsigned int            namelen)
      89             : {
      90    70606964 :         unsigned int            ret = XFS_DIRREMOVE_SPACE_RES(mp);
      91             : 
      92    70606964 :         if (xfs_has_parent(mp))
      93    66583857 :                 ret += xfs_parent_calc_space_res(mp, namelen);
      94             : 
      95    70602433 :         return ret;
      96             : }
      97             : 
      98             : unsigned int
      99    87009208 : 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    87009208 :         unsigned int            ret;
     107             : 
     108    87009208 :         ret = XFS_DIRREMOVE_SPACE_RES(mp) +
     109    87009208 :                         XFS_DIRENTER_SPACE_RES(mp, target_namelen);
     110             : 
     111    87009208 :         if (xfs_has_parent(mp)) {
     112    83457468 :                 if (has_whiteout)
     113     3715766 :                         ret += xfs_parent_calc_space_res(mp, src_namelen);
     114    83457525 :                 ret += 2 * xfs_parent_calc_space_res(mp, target_namelen);
     115             :         }
     116             : 
     117    87009258 :         if (target_exists)
     118    14645606 :                 ret += xfs_parent_calc_space_res(mp, target_namelen);
     119             : 
     120    87009254 :         return ret;
     121             : }

Generated by: LCOV version 1.14