LINUX: hold vcache while dropping dcache refs
[openafs.git] / src / afs / LINUX / osi_vfs.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  *
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 /*
11  * Linux interpretations of vnode and vfs structs.
12  */
13
14 #ifndef OSI_VFS_H_
15 #define OSI_VFS_H_
16
17 typedef struct inode vnode_t;
18 #define vnode inode
19
20 /* Map vnode fields to inode fields */
21 #define i_number        i_ino
22 #define v_count         i_count
23 #define v_op            i_op
24 #define v_fop           i_fop
25 #define v_type          i_mode
26 #define v_vfsp          i_sb
27 #define v_data          u.generic_ip
28
29 /* v_type bits map to mode bits */
30 #define VNON 0
31 #define VREG S_IFREG
32 #define VDIR S_IFDIR
33 #define VBLK S_IFBLK
34 #define VCHR S_IFCHR
35 #define VLNK S_IFLNK
36 #define VSOCK S_IFSOCK
37 #define VFIFO S_IFIFO
38
39 /* vcexcl - used only by afs_create */
40 enum vcexcl { EXCL, NONEXCL } ;
41
42 /* afs_open and afs_close needs to distinguish these cases */
43 #define FWRITE  O_WRONLY|O_RDWR|O_APPEND
44 #define FTRUNC  O_TRUNC
45
46 #define IO_APPEND O_APPEND
47 #define FSYNC O_SYNC
48
49 #define VTOI(V) (V)
50
51 /* Various mode bits */
52 #define VWRITE  S_IWUSR
53 #define VREAD   S_IRUSR
54 #define VEXEC   S_IXUSR
55 #define VSUID   S_ISUID
56 #define VSGID   S_ISGID
57
58 #define vfs super_block
59
60 typedef struct vattr {
61     int         va_type;        /* One of v_types above. */
62     afs_size_t  va_size;
63     unsigned long va_blocks;
64     unsigned long va_blocksize;
65     int         va_mask;        /* AT_xxx operation to perform. */
66     umode_t     va_mode;        /* mode bits. */
67     uid_t       va_uid;
68     gid_t       va_gid;
69     int         va_fsid;        /* Not used? */
70     dev_t       va_rdev;
71     ino_t       va_nodeid;      /* Inode number */
72     nlink_t     va_nlink;       /* link count for file. */
73     struct timeval va_atime;
74     struct timeval va_mtime;
75     struct timeval va_ctime;
76 } vattr_t;
77
78 #define VATTR_NULL(A) memset(A, 0, sizeof(struct vattr))
79
80 #ifndef HAVE_LINUX_I_SIZE_READ
81 #define i_size_read(X) ((X)->i_size)
82 #define i_size_write(X,Y) (X)->i_size = Y
83 #endif
84
85 #endif /* OSI_VFS_H_ */