Blame view

fs/xfs/linux-2.6/xfs_vnode.h 8.6 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
7b7187698   Nathan Scott   [XFS] Update lice...
2
3
   * Copyright (c) 2000-2005 Silicon Graphics, Inc.
   * All Rights Reserved.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
   *
7b7187698   Nathan Scott   [XFS] Update lice...
5
6
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License as
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
8
   * published by the Free Software Foundation.
   *
7b7187698   Nathan Scott   [XFS] Update lice...
9
10
11
12
   * This program is distributed in the hope that it would be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
13
   *
7b7187698   Nathan Scott   [XFS] Update lice...
14
15
16
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write the Free Software Foundation,
   * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
19
   */
  #ifndef __XFS_VNODE_H__
  #define __XFS_VNODE_H__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
  struct file;
8285fb58e   Nathan Scott   [XFS] Resolve a n...
21
  struct bhv_vattr;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22
23
  struct xfs_iomap;
  struct attrlist_cursor_kern;
0a74cd196   Christoph Hellwig   [XFS] kill struct...
24
  typedef struct inode	bhv_vnode_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
25

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
27
28
  /*
   * Vnode to Linux inode mapping.
   */
0a74cd196   Christoph Hellwig   [XFS] kill struct...
29
  static inline bhv_vnode_t *vn_from_inode(struct inode *inode)
ec86dc02f   Nathan Scott   [XFS] Complete tr...
30
  {
0a74cd196   Christoph Hellwig   [XFS] kill struct...
31
  	return inode;
ec86dc02f   Nathan Scott   [XFS] Complete tr...
32
  }
0a74cd196   Christoph Hellwig   [XFS] kill struct...
33
  static inline struct inode *vn_to_inode(bhv_vnode_t *vnode)
ec86dc02f   Nathan Scott   [XFS] Complete tr...
34
  {
0a74cd196   Christoph Hellwig   [XFS] kill struct...
35
  	return vnode;
ec86dc02f   Nathan Scott   [XFS] Complete tr...
36
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
37
38
  
  /*
739bfb2a7   Christoph Hellwig   [XFS] call common...
39
   * Return values for xfs_inactive.  A return value of
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
40
41
42
43
44
45
46
   * VN_INACTIVE_NOCACHE implies that the file system behavior
   * has disassociated its state and bhv_desc_t from the vnode.
   */
  #define	VN_INACTIVE_CACHE	0
  #define	VN_INACTIVE_NOCACHE	1
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
47
48
49
50
51
52
53
   * Flags for read/write calls - same values as IRIX
   */
  #define IO_ISAIO	0x00001		/* don't wait for completion */
  #define IO_ISDIRECT	0x00004		/* bypass page cache */
  #define IO_INVIS	0x00020		/* don't update inode timestamps */
  
  /*
a3f74ffb6   David Chinner   [XFS] Don't block...
54
   * Flags for xfs_inode_flush
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
55
56
   */
  #define FLUSH_SYNC		1	/* wait for flush to complete	*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
57
58
  
  /*
67fcaa73a   Nathan Scott   [XFS] Resolve a n...
59
   * Flush/Invalidate options for vop_toss/flush/flushinval_pages.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
61
62
63
64
65
66
67
68
69
70
   */
  #define FI_NONE			0	/* none */
  #define FI_REMAPF		1	/* Do a remapf prior to the operation */
  #define FI_REMAPF_LOCKED	2	/* Do a remapf prior to the operation.
  					   Prevent VM access to the pages until
  					   the operation completes. */
  
  /*
   * Vnode attributes.  va_mask indicates those attributes the caller
   * wants to set or extract.
   */
8285fb58e   Nathan Scott   [XFS] Resolve a n...
71
  typedef struct bhv_vattr {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
72
  	int		va_mask;	/* bit-mask of attributes present */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
73
  	mode_t		va_mode;	/* file access mode and type */
31b084aef   Nathan Scott   [XFS] Fix up uses...
74
  	xfs_nlink_t	va_nlink;	/* number of references to file */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
  	uid_t		va_uid;		/* owner user id */
  	gid_t		va_gid;		/* owner group id */
  	xfs_ino_t	va_nodeid;	/* file id */
  	xfs_off_t	va_size;	/* file size in bytes */
  	u_long		va_blocksize;	/* blocksize preferred for i/o */
  	struct timespec	va_atime;	/* time of last access */
  	struct timespec	va_mtime;	/* time of last modification */
  	struct timespec	va_ctime;	/* time file changed */
  	u_int		va_gen;		/* generation number of file */
  	xfs_dev_t	va_rdev;	/* device the special file represents */
  	__int64_t	va_nblocks;	/* number of blocks allocated */
  	u_long		va_xflags;	/* random extended file flags */
  	u_long		va_extsize;	/* file extent size */
  	u_long		va_nextents;	/* number of extents in file */
  	u_long		va_anextents;	/* number of attr extents in file */
b74e2159c   Nathan Scott   [XFS] Add a get/s...
90
  	prid_t		va_projid;	/* project id */
8285fb58e   Nathan Scott   [XFS] Resolve a n...
91
  } bhv_vattr_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
  
  /*
   * setattr or getattr attributes
   */
  #define XFS_AT_TYPE		0x00000001
  #define XFS_AT_MODE		0x00000002
  #define XFS_AT_UID		0x00000004
  #define XFS_AT_GID		0x00000008
  #define XFS_AT_FSID		0x00000010
  #define XFS_AT_NODEID		0x00000020
  #define XFS_AT_NLINK		0x00000040
  #define XFS_AT_SIZE		0x00000080
  #define XFS_AT_ATIME		0x00000100
  #define XFS_AT_MTIME		0x00000200
  #define XFS_AT_CTIME		0x00000400
  #define XFS_AT_RDEV		0x00000800
  #define XFS_AT_BLKSIZE		0x00001000
  #define XFS_AT_NBLOCKS		0x00002000
  #define XFS_AT_VCODE		0x00004000
  #define XFS_AT_MAC		0x00008000
  #define XFS_AT_UPDATIME		0x00010000
  #define XFS_AT_UPDMTIME		0x00020000
  #define XFS_AT_UPDCTIME		0x00040000
  #define XFS_AT_ACL		0x00080000
  #define XFS_AT_CAP		0x00100000
  #define XFS_AT_INF		0x00200000
  #define XFS_AT_XFLAGS		0x00400000
  #define XFS_AT_EXTSIZE		0x00800000
  #define XFS_AT_NEXTENTS		0x01000000
  #define XFS_AT_ANEXTENTS	0x02000000
  #define XFS_AT_PROJID		0x04000000
  #define XFS_AT_SIZE_NOPERM	0x08000000
  #define XFS_AT_GENCOUNT		0x10000000
  
  #define XFS_AT_ALL	(XFS_AT_TYPE|XFS_AT_MODE|XFS_AT_UID|XFS_AT_GID|\
  		XFS_AT_FSID|XFS_AT_NODEID|XFS_AT_NLINK|XFS_AT_SIZE|\
  		XFS_AT_ATIME|XFS_AT_MTIME|XFS_AT_CTIME|XFS_AT_RDEV|\
  		XFS_AT_BLKSIZE|XFS_AT_NBLOCKS|XFS_AT_VCODE|XFS_AT_MAC|\
  		XFS_AT_ACL|XFS_AT_CAP|XFS_AT_INF|XFS_AT_XFLAGS|XFS_AT_EXTSIZE|\
  		XFS_AT_NEXTENTS|XFS_AT_ANEXTENTS|XFS_AT_PROJID|XFS_AT_GENCOUNT)
  
  #define XFS_AT_STAT	(XFS_AT_TYPE|XFS_AT_MODE|XFS_AT_UID|XFS_AT_GID|\
  		XFS_AT_FSID|XFS_AT_NODEID|XFS_AT_NLINK|XFS_AT_SIZE|\
  		XFS_AT_ATIME|XFS_AT_MTIME|XFS_AT_CTIME|XFS_AT_RDEV|\
  		XFS_AT_BLKSIZE|XFS_AT_NBLOCKS|XFS_AT_PROJID)
  
  #define XFS_AT_TIMES	(XFS_AT_ATIME|XFS_AT_MTIME|XFS_AT_CTIME)
  
  #define XFS_AT_UPDTIMES	(XFS_AT_UPDATIME|XFS_AT_UPDMTIME|XFS_AT_UPDCTIME)
  
  #define XFS_AT_NOSET	(XFS_AT_NLINK|XFS_AT_RDEV|XFS_AT_FSID|XFS_AT_NODEID|\
  		XFS_AT_TYPE|XFS_AT_BLKSIZE|XFS_AT_NBLOCKS|XFS_AT_VCODE|\
  		XFS_AT_NEXTENTS|XFS_AT_ANEXTENTS|XFS_AT_GENCOUNT)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145
  extern void	vn_init(void);
0a74cd196   Christoph Hellwig   [XFS] kill struct...
146
  extern int	vn_revalidate(bhv_vnode_t *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
147

b677c210c   Christoph Hellwig   [XFS] move v_ioco...
148
149
150
151
152
153
154
  /*
   * Yeah, these don't take vnode anymore at all, all this should be
   * cleaned up at some point.
   */
  extern void	vn_iowait(struct xfs_inode *ip);
  extern void	vn_iowake(struct xfs_inode *ip);
  extern void	vn_ioerror(struct xfs_inode *ip, int error, char *f, int l);
7d04a335b   Nathan Scott   [XFS] Shutdown th...
155

0a74cd196   Christoph Hellwig   [XFS] kill struct...
156
  static inline int vn_count(bhv_vnode_t *vp)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
157
  {
ec86dc02f   Nathan Scott   [XFS] Complete tr...
158
  	return atomic_read(&vn_to_inode(vp)->i_count);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
159
160
161
162
163
  }
  
  /*
   * Vnode reference counting functions (and macros for compatibility).
   */
0a74cd196   Christoph Hellwig   [XFS] kill struct...
164
  extern bhv_vnode_t	*vn_hold(bhv_vnode_t *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
165

cf441eeb7   Lachlan McIlroy   [XFS] clean up vn...
166
  #if defined(XFS_INODE_TRACE)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
167
168
  #define VN_HOLD(vp)		\
  	((void)vn_hold(vp),	\
cf441eeb7   Lachlan McIlroy   [XFS] clean up vn...
169
  	  xfs_itrace_hold(xfs_vtoi(vp), __FILE__, __LINE__, (inst_t *)__return_address))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
170
  #define VN_RELE(vp)		\
cf441eeb7   Lachlan McIlroy   [XFS] clean up vn...
171
  	  (xfs_itrace_rele(xfs_vtoi(vp), __FILE__, __LINE__, (inst_t *)__return_address), \
ec86dc02f   Nathan Scott   [XFS] Complete tr...
172
  	   iput(vn_to_inode(vp)))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
173
174
  #else
  #define VN_HOLD(vp)		((void)vn_hold(vp))
ec86dc02f   Nathan Scott   [XFS] Complete tr...
175
  #define VN_RELE(vp)		(iput(vn_to_inode(vp)))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
176
  #endif
0a74cd196   Christoph Hellwig   [XFS] kill struct...
177
  static inline bhv_vnode_t *vn_grab(bhv_vnode_t *vp)
cdb626878   Christoph Hellwig   [XFS] replace vn_...
178
  {
ec86dc02f   Nathan Scott   [XFS] Complete tr...
179
180
  	struct inode *inode = igrab(vn_to_inode(vp));
  	return inode ? vn_from_inode(inode) : NULL;
cdb626878   Christoph Hellwig   [XFS] replace vn_...
181
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
182
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
183
184
   * Dealing with bad inodes
   */
0a74cd196   Christoph Hellwig   [XFS] kill struct...
185
  static inline int VN_BAD(bhv_vnode_t *vp)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
186
  {
ec86dc02f   Nathan Scott   [XFS] Complete tr...
187
  	return is_bad_inode(vn_to_inode(vp));
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
188
189
190
  }
  
  /*
ca5ccbf98   Nathan Scott   [XFS] Fix some bu...
191
192
   * Extracting atime values in various formats
   */
67fcaa73a   Nathan Scott   [XFS] Resolve a n...
193
  static inline void vn_atime_to_bstime(bhv_vnode_t *vp, xfs_bstime_t *bs_atime)
ca5ccbf98   Nathan Scott   [XFS] Fix some bu...
194
  {
0a74cd196   Christoph Hellwig   [XFS] kill struct...
195
196
  	bs_atime->tv_sec = vp->i_atime.tv_sec;
  	bs_atime->tv_nsec = vp->i_atime.tv_nsec;
ca5ccbf98   Nathan Scott   [XFS] Fix some bu...
197
  }
67fcaa73a   Nathan Scott   [XFS] Resolve a n...
198
  static inline void vn_atime_to_timespec(bhv_vnode_t *vp, struct timespec *ts)
ca5ccbf98   Nathan Scott   [XFS] Fix some bu...
199
  {
0a74cd196   Christoph Hellwig   [XFS] kill struct...
200
  	*ts = vp->i_atime;
ca5ccbf98   Nathan Scott   [XFS] Fix some bu...
201
  }
67fcaa73a   Nathan Scott   [XFS] Resolve a n...
202
  static inline void vn_atime_to_time_t(bhv_vnode_t *vp, time_t *tt)
ca5ccbf98   Nathan Scott   [XFS] Fix some bu...
203
  {
0a74cd196   Christoph Hellwig   [XFS] kill struct...
204
  	*tt = vp->i_atime.tv_sec;
ca5ccbf98   Nathan Scott   [XFS] Fix some bu...
205
206
207
  }
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
208
209
   * Some useful predicates.
   */
ec86dc02f   Nathan Scott   [XFS] Complete tr...
210
211
212
  #define VN_MAPPED(vp)	mapping_mapped(vn_to_inode(vp)->i_mapping)
  #define VN_CACHED(vp)	(vn_to_inode(vp)->i_mapping->nrpages)
  #define VN_DIRTY(vp)	mapping_tagged(vn_to_inode(vp)->i_mapping, \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
213
  					PAGECACHE_TAG_DIRTY)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
214
215
  
  /*
67fcaa73a   Nathan Scott   [XFS] Resolve a n...
216
   * Flags to vop_setattr/getattr.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
217
218
219
220
221
   */
  #define	ATTR_UTIME	0x01	/* non-default utime(2) request */
  #define	ATTR_DMI	0x08	/* invocation from a DMI function */
  #define	ATTR_LAZY	0x80	/* set/get attributes lazily */
  #define	ATTR_NONBLOCK	0x100	/* return EAGAIN if operation would block */
5fcbab355   Dean Roehrich   [XFS] Add ATTR_NO...
222
  #define ATTR_NOLOCK	0x200	/* Don't grab any conflicting locks */
1f730e3b5   Eric Sandeen   [XFS] Add ATTR_NO...
223
  #define ATTR_NOSIZETOK	0x400	/* Don't get the SIZE token */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
224
225
  
  /*
67fcaa73a   Nathan Scott   [XFS] Resolve a n...
226
   * Flags to vop_fsync/reclaim.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
227
228
229
230
231
232
233
234
235
   */
  #define FSYNC_NOWAIT	0	/* asynchronous flush */
  #define FSYNC_WAIT	0x1	/* synchronous fsync or forced reclaim */
  #define FSYNC_INVAL	0x2	/* flush and invalidate cached data */
  #define FSYNC_DATA	0x4	/* synchronous fsync of data only */
  
  /*
   * Tracking vnode activity.
   */
cf441eeb7   Lachlan McIlroy   [XFS] clean up vn...
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
  #if defined(XFS_INODE_TRACE)
  
  #define	INODE_TRACE_SIZE	16		/* number of trace entries */
  #define	INODE_KTRACE_ENTRY	1
  #define	INODE_KTRACE_EXIT	2
  #define	INODE_KTRACE_HOLD	3
  #define	INODE_KTRACE_REF	4
  #define	INODE_KTRACE_RELE	5
  
  extern void _xfs_itrace_entry(struct xfs_inode *, const char *, inst_t *);
  extern void _xfs_itrace_exit(struct xfs_inode *, const char *, inst_t *);
  extern void xfs_itrace_hold(struct xfs_inode *, char *, int, inst_t *);
  extern void _xfs_itrace_ref(struct xfs_inode *, char *, int, inst_t *);
  extern void xfs_itrace_rele(struct xfs_inode *, char *, int, inst_t *);
  #define xfs_itrace_entry(ip)	\
34a622b2e   Harvey Harrison   [XFS] replace rem...
251
  	_xfs_itrace_entry(ip, __func__, (inst_t *)__return_address)
cf441eeb7   Lachlan McIlroy   [XFS] clean up vn...
252
  #define xfs_itrace_exit(ip)	\
34a622b2e   Harvey Harrison   [XFS] replace rem...
253
  	_xfs_itrace_exit(ip, __func__, (inst_t *)__return_address)
15947f2d4   Lachlan McIlroy   [XFS] more vnode/...
254
255
  #define xfs_itrace_exit_tag(ip, tag)	\
  	_xfs_itrace_exit(ip, tag, (inst_t *)__return_address)
cf441eeb7   Lachlan McIlroy   [XFS] clean up vn...
256
257
  #define xfs_itrace_ref(ip)	\
  	_xfs_itrace_ref(ip, __FILE__, __LINE__, (inst_t *)__return_address)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
258
  #else
cf441eeb7   Lachlan McIlroy   [XFS] clean up vn...
259
260
  #define	xfs_itrace_entry(a)
  #define	xfs_itrace_exit(a)
15947f2d4   Lachlan McIlroy   [XFS] more vnode/...
261
  #define	xfs_itrace_exit_tag(a, b)
cf441eeb7   Lachlan McIlroy   [XFS] clean up vn...
262
263
264
  #define	xfs_itrace_hold(a, b, c, d)
  #define	xfs_itrace_ref(a)
  #define	xfs_itrace_rele(a, b, c, d)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
265
266
267
  #endif
  
  #endif	/* __XFS_VNODE_H__ */