~ubuntu-branches/ubuntu/utopic/xfsprogs/utopic-proposed

« back to all changes in this revision

Viewing changes to include/xfs_trans_space.h

  • Committer: Bazaar Package Importer
  • Author(s): Nathan Scott
  • Date: 2002-04-13 09:45:06 UTC
  • Revision ID: james.westby@ubuntu.com-20020413094506-t8dhemv41gkeg4kx
Tags: 2.0.3-1
New upstream bugfix release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
 
3
 * 
 
4
 * This program is free software; you can redistribute it and/or modify it
 
5
 * under the terms of version 2 of the GNU General Public License as
 
6
 * published by the Free Software Foundation.
 
7
 * 
 
8
 * This program is distributed in the hope that it would be useful, but
 
9
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
11
 * 
 
12
 * Further, this software is distributed without any warranty that it is
 
13
 * free of the rightful claim of any third person regarding infringement
 
14
 * or the like.  Any license provided herein, whether implied or
 
15
 * otherwise, applies only to this software file.  Patent licenses, if
 
16
 * any, provided herein do not apply to combinations of this program with
 
17
 * other software, or any other product whatsoever.
 
18
 * 
 
19
 * You should have received a copy of the GNU General Public License along
 
20
 * with this program; if not, write the Free Software Foundation, Inc., 59
 
21
 * Temple Place - Suite 330, Boston MA 02111-1307, USA.
 
22
 * 
 
23
 * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
 
24
 * Mountain View, CA  94043, or:
 
25
 * 
 
26
 * http://www.sgi.com 
 
27
 * 
 
28
 * For further information regarding this notice, see: 
 
29
 * 
 
30
 * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
 
31
 */
 
32
#ifndef __XFS_TRANS_SPACE_H__
 
33
#define __XFS_TRANS_SPACE_H__
 
34
 
 
35
/*
 
36
 * Components of space reservations.
 
37
 */
 
38
#define XFS_MAX_CONTIG_EXTENTS_PER_BLOCK(mp)    \
 
39
                (((mp)->m_alloc_mxr[0]) - ((mp)->m_alloc_mnr[0]))
 
40
#define XFS_EXTENTADD_SPACE_RES(mp,w)   (XFS_BM_MAXLEVELS(mp,w) - 1)
 
41
#define XFS_NEXTENTADD_SPACE_RES(mp,b,w)\
 
42
        (((b + XFS_MAX_CONTIG_EXTENTS_PER_BLOCK(mp) - 1) / \
 
43
          XFS_MAX_CONTIG_EXTENTS_PER_BLOCK(mp)) * \
 
44
          XFS_EXTENTADD_SPACE_RES(mp,w))
 
45
#define XFS_DAENTER_1B(mp,w)    ((w) == XFS_DATA_FORK ? (mp)->m_dirblkfsbs : 1)
 
46
#define XFS_DAENTER_DBS(mp,w)   \
 
47
        (XFS_DA_NODE_MAXDEPTH + \
 
48
         ((XFS_DIR_IS_V2(mp) && (w) == XFS_DATA_FORK) ? 2 : 0))
 
49
#define XFS_DAENTER_BLOCKS(mp,w)        \
 
50
        (XFS_DAENTER_1B(mp,w) * XFS_DAENTER_DBS(mp,w))
 
51
#define XFS_DAENTER_BMAP1B(mp,w)        \
 
52
        XFS_NEXTENTADD_SPACE_RES(mp, XFS_DAENTER_1B(mp, w), w)
 
53
#define XFS_DAENTER_BMAPS(mp,w)         \
 
54
        (XFS_DAENTER_DBS(mp,w) * XFS_DAENTER_BMAP1B(mp,w))
 
55
#define XFS_DAENTER_SPACE_RES(mp,w)     \
 
56
        (XFS_DAENTER_BLOCKS(mp,w) + XFS_DAENTER_BMAPS(mp,w))
 
57
#define XFS_DAREMOVE_SPACE_RES(mp,w)    XFS_DAENTER_BMAPS(mp,w)
 
58
#define XFS_DIRENTER_MAX_SPLIT(mp,nl)   \
 
59
        (((mp)->m_sb.sb_blocksize == 512 && \
 
60
          XFS_DIR_IS_V1(mp) && \
 
61
          (nl) >= XFS_DIR_LEAF_CAN_DOUBLE_SPLIT_LEN) ? 2 : 1)
 
62
#define XFS_DIRENTER_SPACE_RES(mp,nl)   \
 
63
        (XFS_DAENTER_SPACE_RES(mp, XFS_DATA_FORK) * \
 
64
         XFS_DIRENTER_MAX_SPLIT(mp,nl))
 
65
#define XFS_DIRREMOVE_SPACE_RES(mp)     \
 
66
        XFS_DAREMOVE_SPACE_RES(mp, XFS_DATA_FORK)
 
67
#define XFS_IALLOC_SPACE_RES(mp)        \
 
68
        (XFS_IALLOC_BLOCKS(mp) + XFS_IN_MAXLEVELS(mp)-1)
 
69
 
 
70
/*
 
71
 * Space reservation values for various transactions.
 
72
 */
 
73
#define XFS_ADDAFORK_SPACE_RES(mp)      \
 
74
        ((mp)->m_dirblkfsbs + \
 
75
         (XFS_DIR_IS_V1(mp) ? 0 : XFS_DAENTER_BMAP1B(mp, XFS_DATA_FORK)))
 
76
#define XFS_ATTRRM_SPACE_RES(mp)        \
 
77
        XFS_DAREMOVE_SPACE_RES(mp, XFS_ATTR_FORK)
 
78
/* This macro is not used - see inline code in xfs_attr_set */
 
79
#define XFS_ATTRSET_SPACE_RES(mp, v)    \
 
80
        (XFS_DAENTER_SPACE_RES(mp, XFS_ATTR_FORK) + XFS_B_TO_FSB(mp, v))
 
81
#define XFS_CREATE_SPACE_RES(mp,nl)     \
 
82
        (XFS_IALLOC_SPACE_RES(mp) + XFS_DIRENTER_SPACE_RES(mp,nl))
 
83
#define XFS_DIOSTRAT_SPACE_RES(mp, v)   \
 
84
        (XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK) + (v))
 
85
#define XFS_GROWFS_SPACE_RES(mp)        \
 
86
        (2 * XFS_AG_MAXLEVELS(mp))
 
87
#define XFS_GROWFSRT_SPACE_RES(mp,b)    \
 
88
        ((b) + XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK))
 
89
#define XFS_LINK_SPACE_RES(mp,nl)       \
 
90
        XFS_DIRENTER_SPACE_RES(mp,nl)
 
91
#define XFS_MKDIR_SPACE_RES(mp,nl)      \
 
92
        (XFS_IALLOC_SPACE_RES(mp) + XFS_DIRENTER_SPACE_RES(mp,nl))
 
93
#define XFS_QM_DQALLOC_SPACE_RES(mp)    \
 
94
        (XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK) + \
 
95
         XFS_DQUOT_CLUSTER_SIZE_FSB)
 
96
#define XFS_QM_QINOCREATE_SPACE_RES(mp) \
 
97
        XFS_IALLOC_SPACE_RES(mp)
 
98
#define XFS_REMOVE_SPACE_RES(mp)        \
 
99
        XFS_DIRREMOVE_SPACE_RES(mp)
 
100
#define XFS_RENAME_SPACE_RES(mp,nl)     \
 
101
        (XFS_DIRREMOVE_SPACE_RES(mp) + XFS_DIRENTER_SPACE_RES(mp,nl))
 
102
#define XFS_SYMLINK_SPACE_RES(mp,nl,b)  \
 
103
        (XFS_IALLOC_SPACE_RES(mp) + XFS_DIRENTER_SPACE_RES(mp,nl) + (b))
 
104
 
 
105
#endif  /* __XFS_TRANS_SPACE_H__ */