1*a9643ea8Slogwang /* 2*a9643ea8Slogwang * Copyright (c) 2010 Kip Macy All rights reserved. 3*a9643ea8Slogwang * Copyright (C) 2017 THL A29 Limited, a Tencent company. 4*a9643ea8Slogwang * All rights reserved. 5*a9643ea8Slogwang * 6*a9643ea8Slogwang * Redistribution and use in source and binary forms, with or without 7*a9643ea8Slogwang * modification, are permitted provided that the following conditions are met: 8*a9643ea8Slogwang * 9*a9643ea8Slogwang * 1. Redistributions of source code must retain the above copyright notice, this 10*a9643ea8Slogwang * list of conditions and the following disclaimer. 11*a9643ea8Slogwang * 2. Redistributions in binary form must reproduce the above copyright notice, 12*a9643ea8Slogwang * this list of conditions and the following disclaimer in the documentation 13*a9643ea8Slogwang * and/or other materials provided with the distribution. 14*a9643ea8Slogwang * 15*a9643ea8Slogwang * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16*a9643ea8Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17*a9643ea8Slogwang * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18*a9643ea8Slogwang * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 19*a9643ea8Slogwang * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20*a9643ea8Slogwang * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21*a9643ea8Slogwang * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22*a9643ea8Slogwang * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23*a9643ea8Slogwang * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24*a9643ea8Slogwang * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25*a9643ea8Slogwang * 26*a9643ea8Slogwang */ 27*a9643ea8Slogwang 28*a9643ea8Slogwang #ifndef _FSTACK_SYS_VNODE_H_ 29*a9643ea8Slogwang #define _FSTACK_SYS_VNODE_H_ 30*a9643ea8Slogwang 31*a9643ea8Slogwang #include <sys/uio.h> 32*a9643ea8Slogwang #include <sys/namei.h> 33*a9643ea8Slogwang 34*a9643ea8Slogwang /* 35*a9643ea8Slogwang * Vnode types. VNON means no type. 36*a9643ea8Slogwang */ 37*a9643ea8Slogwang enum vtype { 38*a9643ea8Slogwang VNON, VREG, VDIR, VBLK, VCHR, 39*a9643ea8Slogwang VLNK, VSOCK, VFIFO, VBAD, VMARKER 40*a9643ea8Slogwang }; 41*a9643ea8Slogwang 42*a9643ea8Slogwang struct nameidata; 43*a9643ea8Slogwang struct stat; 44*a9643ea8Slogwang struct nstat; 45*a9643ea8Slogwang struct vnode { 46*a9643ea8Slogwang enum vtype v_type; 47*a9643ea8Slogwang struct mount *v_mount; /* u ptr to vfs we are in */ 48*a9643ea8Slogwang u_long v_vflag; /* v vnode flags */ 49*a9643ea8Slogwang int v_fd; /* file descriptor */ 50*a9643ea8Slogwang }; 51*a9643ea8Slogwang 52*a9643ea8Slogwang #define VOP_ADVLOCK(a, b, c, d, e) (0) 53*a9643ea8Slogwang #define VOP_UNLOCK(a, b) 54*a9643ea8Slogwang static __inline int 55*a9643ea8Slogwang vn_lock(struct vnode *vp, int flags) 56*a9643ea8Slogwang { 57*a9643ea8Slogwang return (0); 58*a9643ea8Slogwang } 59*a9643ea8Slogwang 60*a9643ea8Slogwang static __inline int 61*a9643ea8Slogwang vrefcnt(struct vnode *vp) 62*a9643ea8Slogwang { 63*a9643ea8Slogwang return (0); 64*a9643ea8Slogwang } 65*a9643ea8Slogwang 66*a9643ea8Slogwang #define VREF(vp) vref(vp) 67*a9643ea8Slogwang static __inline void 68*a9643ea8Slogwang vref(struct vnode *vp) 69*a9643ea8Slogwang { 70*a9643ea8Slogwang 71*a9643ea8Slogwang } 72*a9643ea8Slogwang 73*a9643ea8Slogwang static __inline void 74*a9643ea8Slogwang vrele(struct vnode *vp) 75*a9643ea8Slogwang { 76*a9643ea8Slogwang 77*a9643ea8Slogwang } 78*a9643ea8Slogwang 79*a9643ea8Slogwang extern struct vnode *rootvnode; 80*a9643ea8Slogwang /* 0 or POSIX version of AIO i'face */ 81*a9643ea8Slogwang extern int async_io_version; 82*a9643ea8Slogwang 83*a9643ea8Slogwang static __inline int 84*a9643ea8Slogwang vn_fullpath(struct thread *td, struct vnode *vp, 85*a9643ea8Slogwang char **retbuf, char **freebuf) 86*a9643ea8Slogwang { 87*a9643ea8Slogwang return (0); 88*a9643ea8Slogwang } 89*a9643ea8Slogwang 90*a9643ea8Slogwang static __inline void 91*a9643ea8Slogwang cvtnstat(struct stat *sb, struct nstat *nsb) 92*a9643ea8Slogwang { 93*a9643ea8Slogwang 94*a9643ea8Slogwang } 95*a9643ea8Slogwang 96*a9643ea8Slogwang struct vattr { 97*a9643ea8Slogwang enum vtype va_type;/* vnode type (for create) */ 98*a9643ea8Slogwang u_short va_mode; /* files access mode and type */ 99*a9643ea8Slogwang dev_t va_fsid; /* filesystem id */ 100*a9643ea8Slogwang struct timespec va_mtime; 101*a9643ea8Slogwang dev_t va_rdev; /* device the special file represents */ 102*a9643ea8Slogwang u_quad_t va_size; /* file size in bytes */ 103*a9643ea8Slogwang long va_fileid; /* file id */ 104*a9643ea8Slogwang }; 105*a9643ea8Slogwang 106*a9643ea8Slogwang /* underlying node already locked */ 107*a9643ea8Slogwang #define IO_NODELOCKED 0x0008 108*a9643ea8Slogwang 109*a9643ea8Slogwang #define VNOVAL (-1) 110*a9643ea8Slogwang 111*a9643ea8Slogwang /* 112*a9643ea8Slogwang * Convert between vnode types and inode formats (since POSIX.1 113*a9643ea8Slogwang * defines mode word of stat structure in terms of inode formats). 114*a9643ea8Slogwang */ 115*a9643ea8Slogwang extern enum vtype iftovt_tab[]; 116*a9643ea8Slogwang extern int vttoif_tab[]; 117*a9643ea8Slogwang #define IFTOVT(mode) (iftovt_tab[((mode) & S_IFMT) >> 12]) 118*a9643ea8Slogwang #define VTTOIF(indx) (vttoif_tab[(int)(indx)]) 119*a9643ea8Slogwang #define MAKEIMODE(indx, mode) (int)(VTTOIF(indx) | (mode)) 120*a9643ea8Slogwang 121*a9643ea8Slogwang #define VV_PROCDEP 0x0100 /* vnode is process dependent */ 122*a9643ea8Slogwang 123*a9643ea8Slogwang static __inline int 124*a9643ea8Slogwang VOP_PATHCONF(struct vnode *vp, int name, register_t *retval) 125*a9643ea8Slogwang { 126*a9643ea8Slogwang return (0); 127*a9643ea8Slogwang } 128*a9643ea8Slogwang 129*a9643ea8Slogwang static __inline int 130*a9643ea8Slogwang VOP_GETATTR(struct vnode *vp, struct vattr *vap, struct ucred *cred) 131*a9643ea8Slogwang { 132*a9643ea8Slogwang bzero(vap, sizeof(struct vattr)); 133*a9643ea8Slogwang return (0); 134*a9643ea8Slogwang } 135*a9643ea8Slogwang 136*a9643ea8Slogwang int vn_open(struct nameidata *ndp, int *flagp, int cmode, struct file *fp); 137*a9643ea8Slogwang int vn_close(struct vnode *vp, int flags, struct ucred *file_cred, 138*a9643ea8Slogwang struct thread *td); 139*a9643ea8Slogwang 140*a9643ea8Slogwang int vn_rdwr(enum uio_rw rw, struct vnode *vp, void *base, 141*a9643ea8Slogwang int len, off_t offset, enum uio_seg segflg, int ioflg, 142*a9643ea8Slogwang struct ucred *active_cred, struct ucred *file_cred, ssize_t *aresid, 143*a9643ea8Slogwang struct thread *td); 144*a9643ea8Slogwang 145*a9643ea8Slogwang 146*a9643ea8Slogwang #endif /* _FSTACK_SYS_VNODE_H_ */ 147