mirror of https://github.com/F-Stack/f-stack.git
147 lines
4.0 KiB
C
147 lines
4.0 KiB
C
|
/*
|
||
|
* Copyright (c) 2010 Kip Macy All rights reserved.
|
||
|
* Copyright (C) 2017 THL A29 Limited, a Tencent company.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions are met:
|
||
|
*
|
||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||
|
* list of conditions and the following disclaimer.
|
||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||
|
* this list of conditions and the following disclaimer in the documentation
|
||
|
* and/or other materials provided with the distribution.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef _FSTACK_SYS_VNODE_H_
|
||
|
#define _FSTACK_SYS_VNODE_H_
|
||
|
|
||
|
#include <sys/uio.h>
|
||
|
#include <sys/namei.h>
|
||
|
|
||
|
/*
|
||
|
* Vnode types. VNON means no type.
|
||
|
*/
|
||
|
enum vtype {
|
||
|
VNON, VREG, VDIR, VBLK, VCHR,
|
||
|
VLNK, VSOCK, VFIFO, VBAD, VMARKER
|
||
|
};
|
||
|
|
||
|
struct nameidata;
|
||
|
struct stat;
|
||
|
struct nstat;
|
||
|
struct vnode {
|
||
|
enum vtype v_type;
|
||
|
struct mount *v_mount; /* u ptr to vfs we are in */
|
||
|
u_long v_vflag; /* v vnode flags */
|
||
|
int v_fd; /* file descriptor */
|
||
|
};
|
||
|
|
||
|
#define VOP_ADVLOCK(a, b, c, d, e) (0)
|
||
|
#define VOP_UNLOCK(a, b)
|
||
|
static __inline int
|
||
|
vn_lock(struct vnode *vp, int flags)
|
||
|
{
|
||
|
return (0);
|
||
|
}
|
||
|
|
||
|
static __inline int
|
||
|
vrefcnt(struct vnode *vp)
|
||
|
{
|
||
|
return (0);
|
||
|
}
|
||
|
|
||
|
#define VREF(vp) vref(vp)
|
||
|
static __inline void
|
||
|
vref(struct vnode *vp)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
static __inline void
|
||
|
vrele(struct vnode *vp)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
extern struct vnode *rootvnode;
|
||
|
/* 0 or POSIX version of AIO i'face */
|
||
|
extern int async_io_version;
|
||
|
|
||
|
static __inline int
|
||
|
vn_fullpath(struct thread *td, struct vnode *vp,
|
||
|
char **retbuf, char **freebuf)
|
||
|
{
|
||
|
return (0);
|
||
|
}
|
||
|
|
||
|
static __inline void
|
||
|
cvtnstat(struct stat *sb, struct nstat *nsb)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
struct vattr {
|
||
|
enum vtype va_type;/* vnode type (for create) */
|
||
|
u_short va_mode; /* files access mode and type */
|
||
|
dev_t va_fsid; /* filesystem id */
|
||
|
struct timespec va_mtime;
|
||
|
dev_t va_rdev; /* device the special file represents */
|
||
|
u_quad_t va_size; /* file size in bytes */
|
||
|
long va_fileid; /* file id */
|
||
|
};
|
||
|
|
||
|
/* underlying node already locked */
|
||
|
#define IO_NODELOCKED 0x0008
|
||
|
|
||
|
#define VNOVAL (-1)
|
||
|
|
||
|
/*
|
||
|
* Convert between vnode types and inode formats (since POSIX.1
|
||
|
* defines mode word of stat structure in terms of inode formats).
|
||
|
*/
|
||
|
extern enum vtype iftovt_tab[];
|
||
|
extern int vttoif_tab[];
|
||
|
#define IFTOVT(mode) (iftovt_tab[((mode) & S_IFMT) >> 12])
|
||
|
#define VTTOIF(indx) (vttoif_tab[(int)(indx)])
|
||
|
#define MAKEIMODE(indx, mode) (int)(VTTOIF(indx) | (mode))
|
||
|
|
||
|
#define VV_PROCDEP 0x0100 /* vnode is process dependent */
|
||
|
|
||
|
static __inline int
|
||
|
VOP_PATHCONF(struct vnode *vp, int name, register_t *retval)
|
||
|
{
|
||
|
return (0);
|
||
|
}
|
||
|
|
||
|
static __inline int
|
||
|
VOP_GETATTR(struct vnode *vp, struct vattr *vap, struct ucred *cred)
|
||
|
{
|
||
|
bzero(vap, sizeof(struct vattr));
|
||
|
return (0);
|
||
|
}
|
||
|
|
||
|
int vn_open(struct nameidata *ndp, int *flagp, int cmode, struct file *fp);
|
||
|
int vn_close(struct vnode *vp, int flags, struct ucred *file_cred,
|
||
|
struct thread *td);
|
||
|
|
||
|
int vn_rdwr(enum uio_rw rw, struct vnode *vp, void *base,
|
||
|
int len, off_t offset, enum uio_seg segflg, int ioflg,
|
||
|
struct ucred *active_cred, struct ucred *file_cred, ssize_t *aresid,
|
||
|
struct thread *td);
|
||
|
|
||
|
|
||
|
#endif /* _FSTACK_SYS_VNODE_H_ */
|