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

« back to all changes in this revision

Viewing changes to include/xfs_dir2_node.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_DIR2_NODE_H__
 
33
#define __XFS_DIR2_NODE_H__
 
34
 
 
35
/*
 
36
 * Directory version 2, btree node format structures
 
37
 */
 
38
 
 
39
struct dirent;
 
40
struct uio;
 
41
struct xfs_dabuf;
 
42
struct xfs_da_args;
 
43
struct xfs_da_state;
 
44
struct xfs_da_state_blk;
 
45
struct xfs_inode;
 
46
struct xfs_trans;
 
47
 
 
48
/*
 
49
 * Constants.
 
50
 */
 
51
 
 
52
/*
 
53
 * Offset of the freespace index.
 
54
 */
 
55
#define XFS_DIR2_FREE_SPACE     2
 
56
#define XFS_DIR2_FREE_OFFSET    (XFS_DIR2_FREE_SPACE * XFS_DIR2_SPACE_SIZE)
 
57
#define XFS_DIR2_FREE_FIRSTDB(mp)       \
 
58
        XFS_DIR2_BYTE_TO_DB(mp, XFS_DIR2_FREE_OFFSET)
 
59
 
 
60
#define XFS_DIR2_FREE_MAGIC     0x58443246      /* XD2F */
 
61
 
 
62
/*
 
63
 * Structures.
 
64
 */
 
65
typedef struct xfs_dir2_free_hdr {
 
66
        __uint32_t              magic;          /* XFS_DIR2_FREE_MAGIC */
 
67
        __int32_t               firstdb;        /* db of first entry */
 
68
        __int32_t               nvalid;         /* count of valid entries */
 
69
        __int32_t               nused;          /* count of used entries */
 
70
} xfs_dir2_free_hdr_t;
 
71
 
 
72
typedef struct xfs_dir2_free {
 
73
        xfs_dir2_free_hdr_t     hdr;            /* block header */
 
74
        xfs_dir2_data_off_t     bests[1];       /* best free counts */
 
75
                                                /* unused entries are -1 */
 
76
} xfs_dir2_free_t;
 
77
#define XFS_DIR2_MAX_FREE_BESTS(mp)     \
 
78
        (((mp)->m_dirblksize - (uint)sizeof(xfs_dir2_free_hdr_t)) / \
 
79
         (uint)sizeof(xfs_dir2_data_off_t))
 
80
 
 
81
/*
 
82
 * Macros.
 
83
 */
 
84
 
 
85
/*
 
86
 * Convert data space db to the corresponding free db.
 
87
 */
 
88
#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR2_DB_TO_FDB)
 
89
xfs_dir2_db_t
 
90
xfs_dir2_db_to_fdb(struct xfs_mount *mp, xfs_dir2_db_t db);
 
91
#define XFS_DIR2_DB_TO_FDB(mp,db)       xfs_dir2_db_to_fdb(mp, db)
 
92
#else
 
93
#define XFS_DIR2_DB_TO_FDB(mp,db)       \
 
94
        (XFS_DIR2_FREE_FIRSTDB(mp) + (db) / XFS_DIR2_MAX_FREE_BESTS(mp))
 
95
#endif
 
96
 
 
97
/*
 
98
 * Convert data space db to the corresponding index in a free db.
 
99
 */
 
100
#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR2_DB_TO_FDINDEX)
 
101
int
 
102
xfs_dir2_db_to_fdindex(struct xfs_mount *mp, xfs_dir2_db_t db);
 
103
#define XFS_DIR2_DB_TO_FDINDEX(mp,db)   xfs_dir2_db_to_fdindex(mp, db)
 
104
#else
 
105
#define XFS_DIR2_DB_TO_FDINDEX(mp,db)   ((db) % XFS_DIR2_MAX_FREE_BESTS(mp))
 
106
#endif
 
107
 
 
108
/* 
 
109
 * Functions.
 
110
 */
 
111
 
 
112
extern void
 
113
        xfs_dir2_free_log_bests(struct xfs_trans *tp, struct xfs_dabuf *bp,
 
114
                                int first, int last);
 
115
 
 
116
extern int
 
117
        xfs_dir2_leaf_to_node(struct xfs_da_args *args, struct xfs_dabuf *lbp);
 
118
 
 
119
extern xfs_dahash_t
 
120
        xfs_dir2_leafn_lasthash(struct xfs_dabuf *bp, int *count);
 
121
 
 
122
extern int
 
123
        xfs_dir2_leafn_lookup_int(struct xfs_dabuf *bp,
 
124
                                  struct xfs_da_args *args, int *indexp,
 
125
                                  struct xfs_da_state *state);
 
126
 
 
127
extern int
 
128
        xfs_dir2_leafn_order(struct xfs_dabuf *leaf1_bp,
 
129
                             struct xfs_dabuf *leaf2_bp);
 
130
 
 
131
extern int
 
132
        xfs_dir2_leafn_split(struct xfs_da_state *state,
 
133
                             struct xfs_da_state_blk *oldblk,
 
134
                             struct xfs_da_state_blk *newblk);
 
135
 
 
136
extern int
 
137
        xfs_dir2_leafn_toosmall(struct xfs_da_state *state, int *action);
 
138
 
 
139
extern void
 
140
        xfs_dir2_leafn_unbalance(struct xfs_da_state *state,
 
141
                                 struct xfs_da_state_blk *drop_blk,
 
142
                                 struct xfs_da_state_blk *save_blk);
 
143
 
 
144
extern int
 
145
        xfs_dir2_node_addname(struct xfs_da_args *args);
 
146
 
 
147
extern int
 
148
        xfs_dir2_node_lookup(struct xfs_da_args *args);
 
149
 
 
150
extern int
 
151
        xfs_dir2_node_removename(struct xfs_da_args *args);
 
152
 
 
153
extern int
 
154
        xfs_dir2_node_replace(struct xfs_da_args *args);
 
155
 
 
156
extern int
 
157
        xfs_dir2_node_trim_free(struct xfs_da_args *args, xfs_fileoff_t fo,
 
158
                                int *rvalp);
 
159
 
 
160
#endif  /* __XFS_DIR2_NODE_H__ */