diff options
Diffstat (limited to 'fs/xfs/xfs_dir2_node.h')
-rw-r--r-- | fs/xfs/xfs_dir2_node.h | 147 |
1 files changed, 46 insertions, 101 deletions
diff --git a/fs/xfs/xfs_dir2_node.h b/fs/xfs/xfs_dir2_node.h index 96db420c7c5c..0ab8fbd59512 100644 --- a/fs/xfs/xfs_dir2_node.h +++ b/fs/xfs/xfs_dir2_node.h | |||
@@ -1,33 +1,19 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. | 2 | * Copyright (c) 2000,2005 Silicon Graphics, Inc. |
3 | * All Rights Reserved. | ||
3 | * | 4 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or |
5 | * under the terms of version 2 of the GNU General Public License as | 6 | * modify it under the terms of the GNU General Public License as |
6 | * published by the Free Software Foundation. | 7 | * published by the Free Software Foundation. |
7 | * | 8 | * |
8 | * This program is distributed in the hope that it would be useful, but | 9 | * This program is distributed in the hope that it would be useful, |
9 | * WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | * GNU General Public License for more details. | ||
11 | * | 13 | * |
12 | * Further, this software is distributed without any warranty that it is | 14 | * You should have received a copy of the GNU General Public License |
13 | * free of the rightful claim of any third person regarding infringement | 15 | * along with this program; if not, write the Free Software Foundation, |
14 | * or the like. Any license provided herein, whether implied or | 16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
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 | */ | 17 | */ |
32 | #ifndef __XFS_DIR2_NODE_H__ | 18 | #ifndef __XFS_DIR2_NODE_H__ |
33 | #define __XFS_DIR2_NODE_H__ | 19 | #define __XFS_DIR2_NODE_H__ |
@@ -45,10 +31,6 @@ struct xfs_inode; | |||
45 | struct xfs_trans; | 31 | struct xfs_trans; |
46 | 32 | ||
47 | /* | 33 | /* |
48 | * Constants. | ||
49 | */ | ||
50 | |||
51 | /* | ||
52 | * Offset of the freespace index. | 34 | * Offset of the freespace index. |
53 | */ | 35 | */ |
54 | #define XFS_DIR2_FREE_SPACE 2 | 36 | #define XFS_DIR2_FREE_SPACE 2 |
@@ -58,9 +40,6 @@ struct xfs_trans; | |||
58 | 40 | ||
59 | #define XFS_DIR2_FREE_MAGIC 0x58443246 /* XD2F */ | 41 | #define XFS_DIR2_FREE_MAGIC 0x58443246 /* XD2F */ |
60 | 42 | ||
61 | /* | ||
62 | * Structures. | ||
63 | */ | ||
64 | typedef struct xfs_dir2_free_hdr { | 43 | typedef struct xfs_dir2_free_hdr { |
65 | __uint32_t magic; /* XFS_DIR2_FREE_MAGIC */ | 44 | __uint32_t magic; /* XFS_DIR2_FREE_MAGIC */ |
66 | __int32_t firstdb; /* db of first entry */ | 45 | __int32_t firstdb; /* db of first entry */ |
@@ -73,87 +52,53 @@ typedef struct xfs_dir2_free { | |||
73 | xfs_dir2_data_off_t bests[1]; /* best free counts */ | 52 | xfs_dir2_data_off_t bests[1]; /* best free counts */ |
74 | /* unused entries are -1 */ | 53 | /* unused entries are -1 */ |
75 | } xfs_dir2_free_t; | 54 | } xfs_dir2_free_t; |
55 | |||
76 | #define XFS_DIR2_MAX_FREE_BESTS(mp) \ | 56 | #define XFS_DIR2_MAX_FREE_BESTS(mp) \ |
77 | (((mp)->m_dirblksize - (uint)sizeof(xfs_dir2_free_hdr_t)) / \ | 57 | (((mp)->m_dirblksize - (uint)sizeof(xfs_dir2_free_hdr_t)) / \ |
78 | (uint)sizeof(xfs_dir2_data_off_t)) | 58 | (uint)sizeof(xfs_dir2_data_off_t)) |
79 | 59 | ||
80 | /* | 60 | /* |
81 | * Macros. | ||
82 | */ | ||
83 | |||
84 | /* | ||
85 | * Convert data space db to the corresponding free db. | 61 | * Convert data space db to the corresponding free db. |
86 | */ | 62 | */ |
87 | #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR2_DB_TO_FDB) | ||
88 | xfs_dir2_db_t | ||
89 | xfs_dir2_db_to_fdb(struct xfs_mount *mp, xfs_dir2_db_t db); | ||
90 | #define XFS_DIR2_DB_TO_FDB(mp,db) xfs_dir2_db_to_fdb(mp, db) | 63 | #define XFS_DIR2_DB_TO_FDB(mp,db) xfs_dir2_db_to_fdb(mp, db) |
91 | #else | 64 | static inline xfs_dir2_db_t |
92 | #define XFS_DIR2_DB_TO_FDB(mp,db) \ | 65 | xfs_dir2_db_to_fdb(struct xfs_mount *mp, xfs_dir2_db_t db) |
93 | (XFS_DIR2_FREE_FIRSTDB(mp) + (db) / XFS_DIR2_MAX_FREE_BESTS(mp)) | 66 | { |
94 | #endif | 67 | return (XFS_DIR2_FREE_FIRSTDB(mp) + (db) / XFS_DIR2_MAX_FREE_BESTS(mp)); |
68 | } | ||
95 | 69 | ||
96 | /* | 70 | /* |
97 | * Convert data space db to the corresponding index in a free db. | 71 | * Convert data space db to the corresponding index in a free db. |
98 | */ | 72 | */ |
99 | #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR2_DB_TO_FDINDEX) | ||
100 | int | ||
101 | xfs_dir2_db_to_fdindex(struct xfs_mount *mp, xfs_dir2_db_t db); | ||
102 | #define XFS_DIR2_DB_TO_FDINDEX(mp,db) xfs_dir2_db_to_fdindex(mp, db) | 73 | #define XFS_DIR2_DB_TO_FDINDEX(mp,db) xfs_dir2_db_to_fdindex(mp, db) |
103 | #else | 74 | static inline int |
104 | #define XFS_DIR2_DB_TO_FDINDEX(mp,db) ((db) % XFS_DIR2_MAX_FREE_BESTS(mp)) | 75 | xfs_dir2_db_to_fdindex(struct xfs_mount *mp, xfs_dir2_db_t db) |
105 | #endif | 76 | { |
106 | 77 | return ((db) % XFS_DIR2_MAX_FREE_BESTS(mp)); | |
107 | /* | 78 | } |
108 | * Functions. | 79 | |
109 | */ | 80 | extern void xfs_dir2_free_log_bests(struct xfs_trans *tp, struct xfs_dabuf *bp, |
110 | 81 | int first, int last); | |
111 | extern void | 82 | extern int xfs_dir2_leaf_to_node(struct xfs_da_args *args, |
112 | xfs_dir2_free_log_bests(struct xfs_trans *tp, struct xfs_dabuf *bp, | 83 | struct xfs_dabuf *lbp); |
113 | int first, int last); | 84 | extern xfs_dahash_t xfs_dir2_leafn_lasthash(struct xfs_dabuf *bp, int *count); |
114 | 85 | extern int xfs_dir2_leafn_lookup_int(struct xfs_dabuf *bp, | |
115 | extern int | 86 | struct xfs_da_args *args, int *indexp, |
116 | xfs_dir2_leaf_to_node(struct xfs_da_args *args, struct xfs_dabuf *lbp); | 87 | struct xfs_da_state *state); |
117 | 88 | extern int xfs_dir2_leafn_order(struct xfs_dabuf *leaf1_bp, | |
118 | extern xfs_dahash_t | 89 | struct xfs_dabuf *leaf2_bp); |
119 | xfs_dir2_leafn_lasthash(struct xfs_dabuf *bp, int *count); | 90 | extern int xfs_dir2_leafn_split(struct xfs_da_state *state, |
120 | 91 | struct xfs_da_state_blk *oldblk, | |
121 | extern int | 92 | struct xfs_da_state_blk *newblk); |
122 | xfs_dir2_leafn_lookup_int(struct xfs_dabuf *bp, | 93 | extern int xfs_dir2_leafn_toosmall(struct xfs_da_state *state, int *action); |
123 | struct xfs_da_args *args, int *indexp, | 94 | extern void xfs_dir2_leafn_unbalance(struct xfs_da_state *state, |
124 | struct xfs_da_state *state); | 95 | struct xfs_da_state_blk *drop_blk, |
125 | 96 | struct xfs_da_state_blk *save_blk); | |
126 | extern int | 97 | extern int xfs_dir2_node_addname(struct xfs_da_args *args); |
127 | xfs_dir2_leafn_order(struct xfs_dabuf *leaf1_bp, | 98 | extern int xfs_dir2_node_lookup(struct xfs_da_args *args); |
128 | struct xfs_dabuf *leaf2_bp); | 99 | extern int xfs_dir2_node_removename(struct xfs_da_args *args); |
129 | 100 | extern int xfs_dir2_node_replace(struct xfs_da_args *args); | |
130 | extern int | 101 | extern int xfs_dir2_node_trim_free(struct xfs_da_args *args, xfs_fileoff_t fo, |
131 | xfs_dir2_leafn_split(struct xfs_da_state *state, | 102 | int *rvalp); |
132 | struct xfs_da_state_blk *oldblk, | ||
133 | struct xfs_da_state_blk *newblk); | ||
134 | |||
135 | extern int | ||
136 | xfs_dir2_leafn_toosmall(struct xfs_da_state *state, int *action); | ||
137 | |||
138 | extern void | ||
139 | xfs_dir2_leafn_unbalance(struct xfs_da_state *state, | ||
140 | struct xfs_da_state_blk *drop_blk, | ||
141 | struct xfs_da_state_blk *save_blk); | ||
142 | |||
143 | extern int | ||
144 | xfs_dir2_node_addname(struct xfs_da_args *args); | ||
145 | |||
146 | extern int | ||
147 | xfs_dir2_node_lookup(struct xfs_da_args *args); | ||
148 | |||
149 | extern int | ||
150 | xfs_dir2_node_removename(struct xfs_da_args *args); | ||
151 | |||
152 | extern int | ||
153 | xfs_dir2_node_replace(struct xfs_da_args *args); | ||
154 | |||
155 | extern int | ||
156 | xfs_dir2_node_trim_free(struct xfs_da_args *args, xfs_fileoff_t fo, | ||
157 | int *rvalp); | ||
158 | 103 | ||
159 | #endif /* __XFS_DIR2_NODE_H__ */ | 104 | #endif /* __XFS_DIR2_NODE_H__ */ |