linux-2625-20080312
[openafs.git] / src / afs / LINUX / osi_vfs.hin
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 #define VFS_STATFS(V, S) ((V)->s_op->statfs)((V), (S), sizeof(*(S)))
51
52 /* Various mode bits */
53 #define VWRITE  S_IWUSR
54 #define VREAD   S_IRUSR
55 #define VEXEC   S_IXUSR
56 #define VSUID   S_ISUID
57 #define VSGID   S_ISGID
58
59 #define vfs super_block
60
61 typedef struct vattr {
62     int         va_type;        /* One of v_types above. */
63     afs_size_t  va_size;
64     unsigned long va_blocks;
65     unsigned long va_blocksize;
66     int         va_mask;        /* AT_xxx operation to perform. */
67     umode_t     va_mode;        /* mode bits. */
68     uid_t       va_uid;
69     gid_t       va_gid;
70     int         va_fsid;        /* Not used? */
71     dev_t       va_rdev;
72     ino_t       va_nodeid;      /* Inode number */
73     nlink_t     va_nlink;       /* link count for file. */
74     struct timeval va_atime;
75     struct timeval va_mtime;
76     struct timeval va_ctime;
77 } vattr_t;
78
79 #define VATTR_NULL(A) memset(A, 0, sizeof(struct vattr))
80
81 #endif /* OSI_VFS_H_ */