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
ocfs2
inode.h
Go to the documentation of this file.
1
/* -*- mode: c; c-basic-offset: 8; -*-
2
* vim: noexpandtab sw=8 ts=8 sts=0:
3
*
4
* inode.h
5
*
6
* Function prototypes
7
*
8
* Copyright (C) 2002, 2004 Oracle. All rights reserved.
9
*
10
* This program is free software; you can redistribute it and/or
11
* modify it under the terms of the GNU General Public
12
* License as published by the Free Software Foundation; either
13
* version 2 of the License, or (at your option) any later version.
14
*
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
* General Public License for more details.
19
*
20
* You should have received a copy of the GNU General Public
21
* License along with this program; if not, write to the
22
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23
* Boston, MA 021110-1307, USA.
24
*/
25
26
#ifndef OCFS2_INODE_H
27
#define OCFS2_INODE_H
28
29
#include "
extent_map.h
"
30
31
/* OCFS2 Inode Private Data */
32
struct
ocfs2_inode_info
33
{
34
u64
ip_blkno
;
35
36
struct
ocfs2_lock_res
ip_rw_lockres
;
37
struct
ocfs2_lock_res
ip_inode_lockres
;
38
struct
ocfs2_lock_res
ip_open_lockres
;
39
40
/* protects allocation changes on this inode. */
41
struct
rw_semaphore
ip_alloc_sem
;
42
43
/* protects extended attribute changes on this inode */
44
struct
rw_semaphore
ip_xattr_sem
;
45
46
/* Number of outstanding AIO's which are not page aligned */
47
atomic_t
ip_unaligned_aio
;
48
49
/* These fields are protected by ip_lock */
50
spinlock_t
ip_lock
;
51
u32
ip_open_count
;
52
struct
list_head
ip_io_markers
;
53
u32
ip_clusters
;
54
55
u16
ip_dyn_features
;
56
struct
mutex
ip_io_mutex
;
57
u32
ip_flags
;
/* see below */
58
u32
ip_attr
;
/* inode attributes */
59
60
/* protected by recovery_lock. */
61
struct
inode
*
ip_next_orphan
;
62
63
struct
ocfs2_caching_info
ip_metadata_cache
;
64
struct
ocfs2_extent_map
ip_extent_map
;
65
struct
inode
vfs_inode
;
66
struct
jbd2_inode
ip_jinode
;
67
68
u32
ip_dir_start_lookup
;
69
70
/* Only valid if the inode is the dir. */
71
u32
ip_last_used_slot
;
72
u64
ip_last_used_group
;
73
u32
ip_dir_lock_gen
;
74
75
struct
ocfs2_alloc_reservation
ip_la_data_resv
;
76
};
77
78
/*
79
* Flags for the ip_flags field
80
*/
81
/* System file inodes */
82
#define OCFS2_INODE_SYSTEM_FILE 0x00000001
83
#define OCFS2_INODE_JOURNAL 0x00000002
84
#define OCFS2_INODE_BITMAP 0x00000004
85
/* This inode has been wiped from disk */
86
#define OCFS2_INODE_DELETED 0x00000008
87
/* Another node is deleting, so our delete is a nop */
88
#define OCFS2_INODE_SKIP_DELETE 0x00000010
89
/* Has the inode been orphaned on another node?
90
*
91
* This hints to ocfs2_drop_inode that it should clear i_nlink before
92
* continuing.
93
*
94
* We *only* set this on unlink vote from another node. If the inode
95
* was locally orphaned, then we're sure of the state and don't need
96
* to twiddle i_nlink later - it's either zero or not depending on
97
* whether our unlink succeeded. Otherwise we got this from a node
98
* whose intention was to orphan the inode, however he may have
99
* crashed, failed etc, so we let ocfs2_drop_inode zero the value and
100
* rely on ocfs2_delete_inode to sort things out under the proper
101
* cluster locks.
102
*/
103
#define OCFS2_INODE_MAYBE_ORPHANED 0x00000020
104
/* Does someone have the file open O_DIRECT */
105
#define OCFS2_INODE_OPEN_DIRECT 0x00000040
106
/* Tell the inode wipe code it's not in orphan dir */
107
#define OCFS2_INODE_SKIP_ORPHAN_DIR 0x00000080
108
109
static
inline
struct
ocfs2_inode_info
*OCFS2_I(
struct
inode
*
inode
)
110
{
111
return
container_of
(inode,
struct
ocfs2_inode_info
,
vfs_inode
);
112
}
113
114
#define INODE_JOURNAL(i) (OCFS2_I(i)->ip_flags & OCFS2_INODE_JOURNAL)
115
#define SET_INODE_JOURNAL(i) (OCFS2_I(i)->ip_flags |= OCFS2_INODE_JOURNAL)
116
117
extern
struct
kmem_cache
*
ocfs2_inode_cache
;
118
119
extern
const
struct
address_space_operations
ocfs2_aops
;
120
extern
const
struct
ocfs2_caching_operations
ocfs2_inode_caching_ops
;
121
122
static
inline
struct
ocfs2_caching_info
*INODE_CACHE(
struct
inode
*
inode
)
123
{
124
return
&OCFS2_I(inode)->ip_metadata_cache;
125
}
126
127
void
ocfs2_evict_inode
(
struct
inode
*
inode
);
128
int
ocfs2_drop_inode
(
struct
inode
*
inode
);
129
130
/* Flags for ocfs2_iget() */
131
#define OCFS2_FI_FLAG_SYSFILE 0x1
132
#define OCFS2_FI_FLAG_ORPHAN_RECOVERY 0x2
133
struct
inode
*
ocfs2_ilookup
(
struct
super_block
*
sb
,
u64
feoff);
134
struct
inode
*
ocfs2_iget
(
struct
ocfs2_super
*osb,
u64
feoff,
unsigned
flags
,
135
int
sysfile_type);
136
int
ocfs2_inode_init_private
(
struct
inode
*
inode
);
137
int
ocfs2_inode_revalidate
(
struct
dentry
*
dentry
);
138
void
ocfs2_populate_inode
(
struct
inode
*
inode
,
struct
ocfs2_dinode
*fe,
139
int
create_ino);
140
void
ocfs2_read_inode
(
struct
inode
*
inode
);
141
void
ocfs2_read_inode2
(
struct
inode
*
inode
,
void
*opaque);
142
ssize_t
ocfs2_rw_direct
(
int
rw
,
struct
file
*filp,
char
*
buf
,
143
size_t
size
, loff_t *offp);
144
void
ocfs2_sync_blockdev
(
struct
super_block
*
sb
);
145
void
ocfs2_refresh_inode
(
struct
inode
*
inode
,
146
struct
ocfs2_dinode
*fe);
147
int
ocfs2_mark_inode_dirty
(handle_t *
handle
,
148
struct
inode
*
inode
,
149
struct
buffer_head *bh);
150
int
ocfs2_aio_read
(
struct
file
*
file
,
struct
kiocb
*
req
,
struct
iocb
*
iocb
);
151
int
ocfs2_aio_write
(
struct
file
*
file
,
struct
kiocb
*
req
,
struct
iocb
*
iocb
);
152
struct
buffer_head *
ocfs2_bread
(
struct
inode
*
inode
,
153
int
block
,
int
*
err
,
int
reada);
154
155
void
ocfs2_set_inode_flags
(
struct
inode
*
inode
);
156
void
ocfs2_get_inode_flags
(
struct
ocfs2_inode_info
*oi);
157
158
static
inline
blkcnt_t
ocfs2_inode_sector_count(
struct
inode
*
inode
)
159
{
160
int
c_to_s_bits =
OCFS2_SB
(inode->
i_sb
)->s_clustersize_bits - 9;
161
162
return
(
blkcnt_t
)(OCFS2_I(inode)->ip_clusters << c_to_s_bits);
163
}
164
165
/* Validate that a bh contains a valid inode */
166
int
ocfs2_validate_inode_block
(
struct
super_block
*
sb
,
167
struct
buffer_head *bh);
168
/*
169
* Read an inode block into *bh. If *bh is NULL, a bh will be allocated.
170
* This is a cached read. The inode will be validated with
171
* ocfs2_validate_inode_block().
172
*/
173
int
ocfs2_read_inode_block
(
struct
inode *inode,
struct
buffer_head **bh);
174
/* The same, but can be passed OCFS2_BH_* flags */
175
int
ocfs2_read_inode_block_full
(
struct
inode *inode,
struct
buffer_head **bh,
176
int
flags
);
177
178
static
inline
struct
ocfs2_inode_info
*cache_info_to_inode(
struct
ocfs2_caching_info
*ci)
179
{
180
return
container_of
(ci,
struct
ocfs2_inode_info
,
ip_metadata_cache
);
181
}
182
183
#endif
/* OCFS2_INODE_H */
Generated on Thu Jan 10 2013 14:45:04 for Linux Kernel by
1.8.2