Blame view
fs/xfs/linux-2.6/xfs_vnode.h
8.6 KB
1da177e4c Linux-2.6.12-rc2 |
1 |
/* |
7b7187698 [XFS] Update lice... |
2 3 |
* Copyright (c) 2000-2005 Silicon Graphics, Inc. * All Rights Reserved. |
1da177e4c Linux-2.6.12-rc2 |
4 |
* |
7b7187698 [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 Linux-2.6.12-rc2 |
7 8 |
* published by the Free Software Foundation. * |
7b7187698 [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 Linux-2.6.12-rc2 |
13 |
* |
7b7187698 [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 Linux-2.6.12-rc2 |
17 18 19 |
*/ #ifndef __XFS_VNODE_H__ #define __XFS_VNODE_H__ |
1da177e4c Linux-2.6.12-rc2 |
20 |
struct file; |
8285fb58e [XFS] Resolve a n... |
21 |
struct bhv_vattr; |
1da177e4c Linux-2.6.12-rc2 |
22 23 |
struct xfs_iomap; struct attrlist_cursor_kern; |
0a74cd196 [XFS] kill struct... |
24 |
typedef struct inode bhv_vnode_t; |
1da177e4c Linux-2.6.12-rc2 |
25 |
|
1da177e4c Linux-2.6.12-rc2 |
26 27 28 |
/* * Vnode to Linux inode mapping. */ |
0a74cd196 [XFS] kill struct... |
29 |
static inline bhv_vnode_t *vn_from_inode(struct inode *inode) |
ec86dc02f [XFS] Complete tr... |
30 |
{ |
0a74cd196 [XFS] kill struct... |
31 |
return inode; |
ec86dc02f [XFS] Complete tr... |
32 |
} |
0a74cd196 [XFS] kill struct... |
33 |
static inline struct inode *vn_to_inode(bhv_vnode_t *vnode) |
ec86dc02f [XFS] Complete tr... |
34 |
{ |
0a74cd196 [XFS] kill struct... |
35 |
return vnode; |
ec86dc02f [XFS] Complete tr... |
36 |
} |
1da177e4c Linux-2.6.12-rc2 |
37 38 |
/* |
739bfb2a7 [XFS] call common... |
39 |
* Return values for xfs_inactive. A return value of |
1da177e4c 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 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 [XFS] Don't block... |
54 |
* Flags for xfs_inode_flush |
1da177e4c Linux-2.6.12-rc2 |
55 56 |
*/ #define FLUSH_SYNC 1 /* wait for flush to complete */ |
1da177e4c Linux-2.6.12-rc2 |
57 58 |
/* |
67fcaa73a [XFS] Resolve a n... |
59 |
* Flush/Invalidate options for vop_toss/flush/flushinval_pages. |
1da177e4c 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 [XFS] Resolve a n... |
71 |
typedef struct bhv_vattr { |
1da177e4c Linux-2.6.12-rc2 |
72 |
int va_mask; /* bit-mask of attributes present */ |
1da177e4c Linux-2.6.12-rc2 |
73 |
mode_t va_mode; /* file access mode and type */ |
31b084aef [XFS] Fix up uses... |
74 |
xfs_nlink_t va_nlink; /* number of references to file */ |
1da177e4c 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 [XFS] Add a get/s... |
90 |
prid_t va_projid; /* project id */ |
8285fb58e [XFS] Resolve a n... |
91 |
} bhv_vattr_t; |
1da177e4c 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 Linux-2.6.12-rc2 |
145 |
extern void vn_init(void); |
0a74cd196 [XFS] kill struct... |
146 |
extern int vn_revalidate(bhv_vnode_t *); |
1da177e4c Linux-2.6.12-rc2 |
147 |
|
b677c210c [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 [XFS] Shutdown th... |
155 |
|
0a74cd196 [XFS] kill struct... |
156 |
static inline int vn_count(bhv_vnode_t *vp) |
1da177e4c Linux-2.6.12-rc2 |
157 |
{ |
ec86dc02f [XFS] Complete tr... |
158 |
return atomic_read(&vn_to_inode(vp)->i_count); |
1da177e4c Linux-2.6.12-rc2 |
159 160 161 162 163 |
} /* * Vnode reference counting functions (and macros for compatibility). */ |
0a74cd196 [XFS] kill struct... |
164 |
extern bhv_vnode_t *vn_hold(bhv_vnode_t *); |
1da177e4c Linux-2.6.12-rc2 |
165 |
|
cf441eeb7 [XFS] clean up vn... |
166 |
#if defined(XFS_INODE_TRACE) |
1da177e4c Linux-2.6.12-rc2 |
167 168 |
#define VN_HOLD(vp) \ ((void)vn_hold(vp), \ |
cf441eeb7 [XFS] clean up vn... |
169 |
xfs_itrace_hold(xfs_vtoi(vp), __FILE__, __LINE__, (inst_t *)__return_address)) |
1da177e4c Linux-2.6.12-rc2 |
170 |
#define VN_RELE(vp) \ |
cf441eeb7 [XFS] clean up vn... |
171 |
(xfs_itrace_rele(xfs_vtoi(vp), __FILE__, __LINE__, (inst_t *)__return_address), \ |
ec86dc02f [XFS] Complete tr... |
172 |
iput(vn_to_inode(vp))) |
1da177e4c Linux-2.6.12-rc2 |
173 174 |
#else #define VN_HOLD(vp) ((void)vn_hold(vp)) |
ec86dc02f [XFS] Complete tr... |
175 |
#define VN_RELE(vp) (iput(vn_to_inode(vp))) |
1da177e4c Linux-2.6.12-rc2 |
176 |
#endif |
0a74cd196 [XFS] kill struct... |
177 |
static inline bhv_vnode_t *vn_grab(bhv_vnode_t *vp) |
cdb626878 [XFS] replace vn_... |
178 |
{ |
ec86dc02f [XFS] Complete tr... |
179 180 |
struct inode *inode = igrab(vn_to_inode(vp)); return inode ? vn_from_inode(inode) : NULL; |
cdb626878 [XFS] replace vn_... |
181 |
} |
1da177e4c Linux-2.6.12-rc2 |
182 |
/* |
1da177e4c Linux-2.6.12-rc2 |
183 184 |
* Dealing with bad inodes */ |
0a74cd196 [XFS] kill struct... |
185 |
static inline int VN_BAD(bhv_vnode_t *vp) |
1da177e4c Linux-2.6.12-rc2 |
186 |
{ |
ec86dc02f [XFS] Complete tr... |
187 |
return is_bad_inode(vn_to_inode(vp)); |
1da177e4c Linux-2.6.12-rc2 |
188 189 190 |
} /* |
ca5ccbf98 [XFS] Fix some bu... |
191 192 |
* Extracting atime values in various formats */ |
67fcaa73a [XFS] Resolve a n... |
193 |
static inline void vn_atime_to_bstime(bhv_vnode_t *vp, xfs_bstime_t *bs_atime) |
ca5ccbf98 [XFS] Fix some bu... |
194 |
{ |
0a74cd196 [XFS] kill struct... |
195 196 |
bs_atime->tv_sec = vp->i_atime.tv_sec; bs_atime->tv_nsec = vp->i_atime.tv_nsec; |
ca5ccbf98 [XFS] Fix some bu... |
197 |
} |
67fcaa73a [XFS] Resolve a n... |
198 |
static inline void vn_atime_to_timespec(bhv_vnode_t *vp, struct timespec *ts) |
ca5ccbf98 [XFS] Fix some bu... |
199 |
{ |
0a74cd196 [XFS] kill struct... |
200 |
*ts = vp->i_atime; |
ca5ccbf98 [XFS] Fix some bu... |
201 |
} |
67fcaa73a [XFS] Resolve a n... |
202 |
static inline void vn_atime_to_time_t(bhv_vnode_t *vp, time_t *tt) |
ca5ccbf98 [XFS] Fix some bu... |
203 |
{ |
0a74cd196 [XFS] kill struct... |
204 |
*tt = vp->i_atime.tv_sec; |
ca5ccbf98 [XFS] Fix some bu... |
205 206 207 |
} /* |
1da177e4c Linux-2.6.12-rc2 |
208 209 |
* Some useful predicates. */ |
ec86dc02f [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 Linux-2.6.12-rc2 |
213 |
PAGECACHE_TAG_DIRTY) |
1da177e4c Linux-2.6.12-rc2 |
214 215 |
/* |
67fcaa73a [XFS] Resolve a n... |
216 |
* Flags to vop_setattr/getattr. |
1da177e4c 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 [XFS] Add ATTR_NO... |
222 |
#define ATTR_NOLOCK 0x200 /* Don't grab any conflicting locks */ |
1f730e3b5 [XFS] Add ATTR_NO... |
223 |
#define ATTR_NOSIZETOK 0x400 /* Don't get the SIZE token */ |
1da177e4c Linux-2.6.12-rc2 |
224 225 |
/* |
67fcaa73a [XFS] Resolve a n... |
226 |
* Flags to vop_fsync/reclaim. |
1da177e4c 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 [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 [XFS] replace rem... |
251 |
_xfs_itrace_entry(ip, __func__, (inst_t *)__return_address) |
cf441eeb7 [XFS] clean up vn... |
252 |
#define xfs_itrace_exit(ip) \ |
34a622b2e [XFS] replace rem... |
253 |
_xfs_itrace_exit(ip, __func__, (inst_t *)__return_address) |
15947f2d4 [XFS] more vnode/... |
254 255 |
#define xfs_itrace_exit_tag(ip, tag) \ _xfs_itrace_exit(ip, tag, (inst_t *)__return_address) |
cf441eeb7 [XFS] clean up vn... |
256 257 |
#define xfs_itrace_ref(ip) \ _xfs_itrace_ref(ip, __FILE__, __LINE__, (inst_t *)__return_address) |
1da177e4c Linux-2.6.12-rc2 |
258 |
#else |
cf441eeb7 [XFS] clean up vn... |
259 260 |
#define xfs_itrace_entry(a) #define xfs_itrace_exit(a) |
15947f2d4 [XFS] more vnode/... |
261 |
#define xfs_itrace_exit_tag(a, b) |
cf441eeb7 [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 Linux-2.6.12-rc2 |
265 266 267 |
#endif #endif /* __XFS_VNODE_H__ */ |