2005-04-17 02:20:36 +04:00
/*
2005-11-02 06:58:39 +03:00
* Copyright ( c ) 2000 , 2005 Silicon Graphics , Inc .
* All Rights Reserved .
2005-04-17 02:20:36 +04:00
*
2005-11-02 06:58:39 +03:00
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
2005-04-17 02:20:36 +04:00
* published by the Free Software Foundation .
*
2005-11-02 06:58:39 +03:00
* This program is distributed in the hope that it would be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2005-04-17 02:20:36 +04:00
*
2005-11-02 06:58:39 +03:00
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA
2005-04-17 02:20:36 +04:00
*/
# ifndef __XFS_TRANS_SPACE_H__
# define __XFS_TRANS_SPACE_H__
/*
* Components of space reservations .
*/
# define XFS_MAX_CONTIG_EXTENTS_PER_BLOCK(mp) \
( ( ( mp ) - > m_alloc_mxr [ 0 ] ) - ( ( mp ) - > m_alloc_mnr [ 0 ] ) )
# define XFS_EXTENTADD_SPACE_RES(mp,w) (XFS_BM_MAXLEVELS(mp,w) - 1)
# define XFS_NEXTENTADD_SPACE_RES(mp,b,w)\
( ( ( b + XFS_MAX_CONTIG_EXTENTS_PER_BLOCK ( mp ) - 1 ) / \
XFS_MAX_CONTIG_EXTENTS_PER_BLOCK ( mp ) ) * \
XFS_EXTENTADD_SPACE_RES ( mp , w ) )
2014-06-06 09:14:11 +04:00
# define XFS_DAENTER_1B(mp,w) \
( ( w ) = = XFS_DATA_FORK ? ( mp ) - > m_dir_geo - > fsbcount : 1 )
2005-04-17 02:20:36 +04:00
# define XFS_DAENTER_DBS(mp,w) \
2006-06-20 07:04:51 +04:00
( XFS_DA_NODE_MAXDEPTH + ( ( ( w ) = = XFS_DATA_FORK ) ? 2 : 0 ) )
2005-04-17 02:20:36 +04:00
# define XFS_DAENTER_BLOCKS(mp,w) \
( XFS_DAENTER_1B ( mp , w ) * XFS_DAENTER_DBS ( mp , w ) )
# define XFS_DAENTER_BMAP1B(mp,w) \
XFS_NEXTENTADD_SPACE_RES ( mp , XFS_DAENTER_1B ( mp , w ) , w )
# define XFS_DAENTER_BMAPS(mp,w) \
( XFS_DAENTER_DBS ( mp , w ) * XFS_DAENTER_BMAP1B ( mp , w ) )
# define XFS_DAENTER_SPACE_RES(mp,w) \
( XFS_DAENTER_BLOCKS ( mp , w ) + XFS_DAENTER_BMAPS ( mp , w ) )
# define XFS_DAREMOVE_SPACE_RES(mp,w) XFS_DAENTER_BMAPS(mp,w)
2006-06-20 07:04:51 +04:00
# define XFS_DIRENTER_MAX_SPLIT(mp,nl) 1
2005-04-17 02:20:36 +04:00
# define XFS_DIRENTER_SPACE_RES(mp,nl) \
( XFS_DAENTER_SPACE_RES ( mp , XFS_DATA_FORK ) * \
XFS_DIRENTER_MAX_SPLIT ( mp , nl ) )
# define XFS_DIRREMOVE_SPACE_RES(mp) \
XFS_DAREMOVE_SPACE_RES ( mp , XFS_DATA_FORK )
# define XFS_IALLOC_SPACE_RES(mp) \
2014-04-24 10:00:52 +04:00
( ( mp ) - > m_ialloc_blks + \
( xfs_sb_version_hasfinobt ( & mp - > m_sb ) ? 2 : 1 * \
( ( mp ) - > m_in_maxlevels - 1 ) ) )
2005-04-17 02:20:36 +04:00
/*
* Space reservation values for various transactions .
*/
# define XFS_ADDAFORK_SPACE_RES(mp) \
2014-06-06 09:14:11 +04:00
( ( mp ) - > m_dir_geo - > fsbcount + XFS_DAENTER_BMAP1B ( mp , XFS_DATA_FORK ) )
2005-04-17 02:20:36 +04:00
# define XFS_ATTRRM_SPACE_RES(mp) \
XFS_DAREMOVE_SPACE_RES ( mp , XFS_ATTR_FORK )
/* This macro is not used - see inline code in xfs_attr_set */
# define XFS_ATTRSET_SPACE_RES(mp, v) \
( XFS_DAENTER_SPACE_RES ( mp , XFS_ATTR_FORK ) + XFS_B_TO_FSB ( mp , v ) )
# define XFS_CREATE_SPACE_RES(mp,nl) \
( XFS_IALLOC_SPACE_RES ( mp ) + XFS_DIRENTER_SPACE_RES ( mp , nl ) )
# define XFS_DIOSTRAT_SPACE_RES(mp, v) \
( XFS_EXTENTADD_SPACE_RES ( mp , XFS_DATA_FORK ) + ( v ) )
# define XFS_GROWFS_SPACE_RES(mp) \
2015-06-22 03:13:30 +03:00
( 2 * ( mp ) - > m_ag_maxlevels )
2005-04-17 02:20:36 +04:00
# define XFS_GROWFSRT_SPACE_RES(mp,b) \
( ( b ) + XFS_EXTENTADD_SPACE_RES ( mp , XFS_DATA_FORK ) )
# define XFS_LINK_SPACE_RES(mp,nl) \
XFS_DIRENTER_SPACE_RES ( mp , nl )
# define XFS_MKDIR_SPACE_RES(mp,nl) \
( XFS_IALLOC_SPACE_RES ( mp ) + XFS_DIRENTER_SPACE_RES ( mp , nl ) )
# define XFS_QM_DQALLOC_SPACE_RES(mp) \
( XFS_EXTENTADD_SPACE_RES ( mp , XFS_DATA_FORK ) + \
XFS_DQUOT_CLUSTER_SIZE_FSB )
# define XFS_QM_QINOCREATE_SPACE_RES(mp) \
XFS_IALLOC_SPACE_RES ( mp )
# define XFS_REMOVE_SPACE_RES(mp) \
XFS_DIRREMOVE_SPACE_RES ( mp )
# define XFS_RENAME_SPACE_RES(mp,nl) \
( XFS_DIRREMOVE_SPACE_RES ( mp ) + XFS_DIRENTER_SPACE_RES ( mp , nl ) )
# define XFS_SYMLINK_SPACE_RES(mp,nl,b) \
( XFS_IALLOC_SPACE_RES ( mp ) + XFS_DIRENTER_SPACE_RES ( mp , nl ) + ( b ) )
2014-04-24 10:00:52 +04:00
# define XFS_IFREE_SPACE_RES(mp) \
( xfs_sb_version_hasfinobt ( & mp - > m_sb ) ? ( mp ) - > m_in_maxlevels : 0 )
2005-04-17 02:20:36 +04:00
# endif /* __XFS_TRANS_SPACE_H__ */