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_inode_item.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_INODE_ITEM_H__
19
#define __XFS_INODE_ITEM_H__
20
21
/*
22
* This is the structure used to lay out an inode log item in the
23
* log. The size of the inline data/extents/b-tree root to be logged
24
* (if any) is indicated in the ilf_dsize field. Changes to this structure
25
* must be added on to the end.
26
*/
27
typedef
struct
xfs_inode_log_format
{
28
__uint16_t
ilf_type
;
/* inode log item type */
29
__uint16_t
ilf_size
;
/* size of this item */
30
__uint32_t
ilf_fields
;
/* flags for fields logged */
31
__uint16_t
ilf_asize
;
/* size of attr d/ext/root */
32
__uint16_t
ilf_dsize
;
/* size of data/ext/root */
33
__uint64_t
ilf_ino
;
/* inode number */
34
union
{
35
__uint32_t
ilfu_rdev
;
/* rdev value for dev inode*/
36
uuid_t
ilfu_uuid
;
/* mount point value */
37
}
ilf_u
;
38
__int64_t
ilf_blkno
;
/* blkno of inode buffer */
39
__int32_t
ilf_len
;
/* len of inode buffer */
40
__int32_t
ilf_boffset
;
/* off of inode in buffer */
41
}
xfs_inode_log_format_t
;
42
43
typedef
struct
xfs_inode_log_format_32
{
44
__uint16_t
ilf_type
;
/* inode log item type */
45
__uint16_t
ilf_size
;
/* size of this item */
46
__uint32_t
ilf_fields
;
/* flags for fields logged */
47
__uint16_t
ilf_asize
;
/* size of attr d/ext/root */
48
__uint16_t
ilf_dsize
;
/* size of data/ext/root */
49
__uint64_t
ilf_ino
;
/* inode number */
50
union
{
51
__uint32_t
ilfu_rdev
;
/* rdev value for dev inode*/
52
uuid_t
ilfu_uuid
;
/* mount point value */
53
}
ilf_u
;
54
__int64_t
ilf_blkno
;
/* blkno of inode buffer */
55
__int32_t
ilf_len
;
/* len of inode buffer */
56
__int32_t
ilf_boffset
;
/* off of inode in buffer */
57
}
__attribute__
((packed)) xfs_inode_log_format_32_t;
58
59
typedef
struct
xfs_inode_log_format_64
{
60
__uint16_t
ilf_type
;
/* inode log item type */
61
__uint16_t
ilf_size
;
/* size of this item */
62
__uint32_t
ilf_fields
;
/* flags for fields logged */
63
__uint16_t
ilf_asize
;
/* size of attr d/ext/root */
64
__uint16_t
ilf_dsize
;
/* size of data/ext/root */
65
__uint32_t ilf_pad;
/* pad for 64 bit boundary */
66
__uint64_t
ilf_ino
;
/* inode number */
67
union
{
68
__uint32_t
ilfu_rdev
;
/* rdev value for dev inode*/
69
uuid_t
ilfu_uuid
;
/* mount point value */
70
}
ilf_u
;
71
__int64_t
ilf_blkno
;
/* blkno of inode buffer */
72
__int32_t
ilf_len
;
/* len of inode buffer */
73
__int32_t
ilf_boffset
;
/* off of inode in buffer */
74
}
xfs_inode_log_format_64_t
;
75
76
/*
77
* Flags for xfs_trans_log_inode flags field.
78
*/
79
#define XFS_ILOG_CORE 0x001
/* log standard inode fields */
80
#define XFS_ILOG_DDATA 0x002
/* log i_df.if_data */
81
#define XFS_ILOG_DEXT 0x004
/* log i_df.if_extents */
82
#define XFS_ILOG_DBROOT 0x008
/* log i_df.i_broot */
83
#define XFS_ILOG_DEV 0x010
/* log the dev field */
84
#define XFS_ILOG_UUID 0x020
/* log the uuid field */
85
#define XFS_ILOG_ADATA 0x040
/* log i_af.if_data */
86
#define XFS_ILOG_AEXT 0x080
/* log i_af.if_extents */
87
#define XFS_ILOG_ABROOT 0x100
/* log i_af.i_broot */
88
89
90
/*
91
* The timestamps are dirty, but not necessarily anything else in the inode
92
* core. Unlike the other fields above this one must never make it to disk
93
* in the ilf_fields of the inode_log_format, but is purely store in-memory in
94
* ili_fields in the inode_log_item.
95
*/
96
#define XFS_ILOG_TIMESTAMP 0x4000
97
98
#define XFS_ILOG_NONCORE (XFS_ILOG_DDATA | XFS_ILOG_DEXT | \
99
XFS_ILOG_DBROOT | XFS_ILOG_DEV | \
100
XFS_ILOG_UUID | XFS_ILOG_ADATA | \
101
XFS_ILOG_AEXT | XFS_ILOG_ABROOT)
102
103
#define XFS_ILOG_DFORK (XFS_ILOG_DDATA | XFS_ILOG_DEXT | \
104
XFS_ILOG_DBROOT)
105
106
#define XFS_ILOG_AFORK (XFS_ILOG_ADATA | XFS_ILOG_AEXT | \
107
XFS_ILOG_ABROOT)
108
109
#define XFS_ILOG_ALL (XFS_ILOG_CORE | XFS_ILOG_DDATA | \
110
XFS_ILOG_DEXT | XFS_ILOG_DBROOT | \
111
XFS_ILOG_DEV | XFS_ILOG_UUID | \
112
XFS_ILOG_ADATA | XFS_ILOG_AEXT | \
113
XFS_ILOG_ABROOT | XFS_ILOG_TIMESTAMP)
114
115
static
inline
int
xfs_ilog_fbroot(
int
w
)
116
{
117
return
(w ==
XFS_DATA_FORK
?
XFS_ILOG_DBROOT
:
XFS_ILOG_ABROOT
);
118
}
119
120
static
inline
int
xfs_ilog_fext(
int
w
)
121
{
122
return
(w ==
XFS_DATA_FORK
?
XFS_ILOG_DEXT
:
XFS_ILOG_AEXT
);
123
}
124
125
static
inline
int
xfs_ilog_fdata(
int
w)
126
{
127
return
(w ==
XFS_DATA_FORK
?
XFS_ILOG_DDATA
:
XFS_ILOG_ADATA
);
128
}
129
130
#ifdef __KERNEL__
131
132
struct
xfs_buf
;
133
struct
xfs_bmbt_rec
;
134
struct
xfs_inode;
135
struct
xfs_mount;
136
137
138
typedef
struct
xfs_inode_log_item {
139
xfs_log_item_t ili_item;
/* common portion */
140
struct
xfs_inode *ili_inode;
/* inode ptr */
141
xfs_lsn_t
ili_flush_lsn;
/* lsn at last flush */
142
xfs_lsn_t
ili_last_lsn;
/* lsn at last transaction */
143
unsigned
short
ili_lock_flags;
/* lock flags */
144
unsigned
short
ili_logged;
/* flushed logged data */
145
unsigned
int
ili_last_fields;
/* fields when flushed */
146
unsigned
int
ili_fields;
/* fields to be logged */
147
struct
xfs_bmbt_rec
*ili_extents_buf;
/* array of logged
148
data exts */
149
struct
xfs_bmbt_rec
*ili_aextents_buf;
/* array of logged
150
attr exts */
151
#ifdef XFS_TRANS_DEBUG
152
int
ili_root_size;
153
char
*ili_orig_root;
154
#endif
155
xfs_inode_log_format_t
ili_format;
/* logged structure */
156
} xfs_inode_log_item_t;
157
158
159
static
inline
int
xfs_inode_clean(xfs_inode_t *
ip
)
160
{
161
return
!ip->i_itemp || !(ip->i_itemp->ili_fields &
XFS_ILOG_ALL
);
162
}
163
164
extern
void
xfs_inode_item_init
(
struct
xfs_inode *,
struct
xfs_mount *);
165
extern
void
xfs_inode_item_destroy
(
struct
xfs_inode *);
166
extern
void
xfs_iflush_done
(
struct
xfs_buf
*,
struct
xfs_log_item *);
167
extern
void
xfs_istale_done
(
struct
xfs_buf
*,
struct
xfs_log_item *);
168
extern
void
xfs_iflush_abort
(
struct
xfs_inode *,
bool
);
169
extern
int
xfs_inode_item_format_convert
(
xfs_log_iovec_t
*,
170
xfs_inode_log_format_t
*);
171
172
#endif
/* __KERNEL__ */
173
174
#endif
/* __XFS_INODE_ITEM_H__ */
Generated on Thu Jan 10 2013 14:50:29 for Linux Kernel by
1.8.2