Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
xfs
xfs_ialloc.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2000,2005 Silicon Graphics, Inc.
3
* All Rights Reserved.
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License as
7
* published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it would be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write the Free Software Foundation,
16
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
#ifndef __XFS_IALLOC_H__
19
#define __XFS_IALLOC_H__
20
21
struct
xfs_buf
;
22
struct
xfs_dinode
;
23
struct
xfs_imap
;
24
struct
xfs_mount;
25
struct
xfs_trans;
26
27
/*
28
* Allocation parameters for inode allocation.
29
*/
30
#define XFS_IALLOC_INODES(mp) (mp)->m_ialloc_inos
31
#define XFS_IALLOC_BLOCKS(mp) (mp)->m_ialloc_blks
32
33
/*
34
* Move inodes in clusters of this size.
35
*/
36
#define XFS_INODE_BIG_CLUSTER_SIZE 8192
37
#define XFS_INODE_CLUSTER_SIZE(mp) (mp)->m_inode_cluster_size
38
39
/*
40
* Make an inode pointer out of the buffer/offset.
41
*/
42
static
inline
struct
xfs_dinode
*
43
xfs_make_iptr(
struct
xfs_mount *
mp
,
struct
xfs_buf
*
b
,
int
o)
44
{
45
return
(xfs_dinode_t *)
46
(
xfs_buf_offset
(b, o << (mp)->m_sb.sb_inodelog));
47
}
48
49
/*
50
* Allocate an inode on disk.
51
* Mode is used to tell whether the new inode will need space, and whether
52
* it is a directory.
53
*
54
* To work within the constraint of one allocation per transaction,
55
* xfs_dialloc() is designed to be called twice if it has to do an
56
* allocation to make more free inodes. If an inode is
57
* available without an allocation, agbp would be set to the current
58
* agbp and alloc_done set to false.
59
* If an allocation needed to be done, agbp would be set to the
60
* inode header of the allocation group and alloc_done set to true.
61
* The caller should then commit the current transaction and allocate a new
62
* transaction. xfs_dialloc() should then be called again with
63
* the agbp value returned from the previous call.
64
*
65
* Once we successfully pick an inode its number is returned and the
66
* on-disk data structures are updated. The inode itself is not read
67
* in, since doing so would break ordering constraints with xfs_reclaim.
68
*
69
* *agbp should be set to NULL on the first call, *alloc_done set to FALSE.
70
*/
71
int
/* error */
72
xfs_dialloc
(
73
struct
xfs_trans *tp,
/* transaction pointer */
74
xfs_ino_t parent,
/* parent inode (directory) */
75
umode_t
mode
,
/* mode bits for new inode */
76
int
okalloc,
/* ok to allocate more space */
77
struct
xfs_buf
**agbp,
/* buf for a.g. inode header */
78
xfs_ino_t *inop);
/* inode number allocated */
79
80
/*
81
* Free disk inode. Carefully avoids touching the incore inode, all
82
* manipulations incore are the caller's responsibility.
83
* The on-disk inode is not changed by this operation, only the
84
* btree (free inode mask) is changed.
85
*/
86
int
/* error */
87
xfs_difree
(
88
struct
xfs_trans *tp,
/* transaction pointer */
89
xfs_ino_t
inode
,
/* inode to be freed */
90
struct
xfs_bmap_free
*flist,
/* extents to free */
91
int
*
delete
,
/* set if inode cluster was deleted */
92
xfs_ino_t *first_ino);
/* first inode in deleted cluster */
93
94
/*
95
* Return the location of the inode in imap, for mapping it into a buffer.
96
*/
97
int
98
xfs_imap
(
99
struct
xfs_mount *
mp
,
/* file system mount structure */
100
struct
xfs_trans *tp,
/* transaction pointer */
101
xfs_ino_t
ino
,
/* inode to locate */
102
struct
xfs_imap
*imap,
/* location map structure */
103
uint
flags
);
/* flags for inode btree lookup */
104
105
/*
106
* Compute and fill in value of m_in_maxlevels.
107
*/
108
void
109
xfs_ialloc_compute_maxlevels
(
110
struct
xfs_mount *
mp
);
/* file system mount structure */
111
112
/*
113
* Log specified fields for the ag hdr (inode section)
114
*/
115
void
116
xfs_ialloc_log_agi
(
117
struct
xfs_trans *tp,
/* transaction pointer */
118
struct
xfs_buf
*bp,
/* allocation group header buffer */
119
int
fields
);
/* bitmask of fields to log */
120
121
/*
122
* Read in the allocation group header (inode allocation section)
123
*/
124
int
/* error */
125
xfs_ialloc_read_agi
(
126
struct
xfs_mount *
mp
,
/* file system mount structure */
127
struct
xfs_trans *tp,
/* transaction pointer */
128
xfs_agnumber_t
agno,
/* allocation group number */
129
struct
xfs_buf
**
bpp
);
/* allocation group hdr buf */
130
131
/*
132
* Read in the allocation group header to initialise the per-ag data
133
* in the mount structure
134
*/
135
int
136
xfs_ialloc_pagi_init
(
137
struct
xfs_mount *
mp
,
/* file system mount structure */
138
struct
xfs_trans *tp,
/* transaction pointer */
139
xfs_agnumber_t
agno);
/* allocation group number */
140
141
/*
142
* Lookup a record by ino in the btree given by cur.
143
*/
144
int
xfs_inobt_lookup
(
struct
xfs_btree_cur
*
cur
,
xfs_agino_t
ino
,
145
xfs_lookup_t
dir,
int
*
stat
);
146
147
/*
148
* Get the data from the pointed-to record.
149
*/
150
extern
int
xfs_inobt_get_rec
(
struct
xfs_btree_cur
*
cur
,
151
xfs_inobt_rec_incore_t
*rec,
int
*
stat
);
152
153
#endif
/* __XFS_IALLOC_H__ */
Generated on Thu Jan 10 2013 14:50:27 for Linux Kernel by
1.8.2