Copyright (c) 1986 The Regents of the University of California.
All rights reserved.
%sccs.include.redist.man%
@(#)slides.t 5.2 (Berkeley) 04/16/91
.so macros
All rights reserved.
%sccs.include.redist.man%
@(#)slides.t 5.2 (Berkeley) 04/16/91
.so macros
.LL Encapsulation of namei parameters .NP 0 struct nameidata { /* arguments and context: */ caddr_t ni_dirp; enum uio_seg ni_seg; short ni_nameiop; struct vnode *ni_cdir; struct vnode *ni_rdir; struct ucred *ni_cred; /* shared with lookup and commit: */ caddr_t ni_pnbuf; char *ni_ptr; int ni_pathlen; short ni_more; short ni_loopcnt; /* results: */ struct vnode *ni_vp; struct vnode *ni_dvp; /* BEGIN UFS SPECIFIC */ struct diroffcache { struct vnode *nc_prevdir; long nc_id; off_t nc_prevoffset; } ni_nc; /* END UFS SPECIFIC */ }; .bp .LL Namei operations and modifiers .NP 0 #define LOOKUP 0 /* name lookup only */ #define CREATE 1 /* setup for creation */ #define DELETE 2 /* setup for deletion */ #define WANTPARENT 0x10 /* return parent vnode also */ #define NOCACHE 0x20 /* remove name from cache */ #define FOLLOW 0x40 /* follow symbolic links */ .bp .LL Namei operations and modifiers .NP 0 #define LOOKUP 0 #define CREATE 1 #define DELETE 2 #define WANTPARENT 0x10 #define NOCACHE 0x20 #define FOLLOW 0x40 .bp .LL Credentials .NP 0 struct ucred { u_short cr_ref; uid_t cr_uid; short cr_ngroups; gid_t cr_groups[NGROUPS]; /* * The following either should not be here, * or should be treated as opaque. */ uid_t cr_ruid; gid_t cr_svgid; }; .bp .LL Scatter-gather I/O .NP 0 struct uio { struct iovec *uio_iov; int uio_iovcnt; off_t uio_offset; int uio_resid; enum uio_rw uio_rw; }; enum uio_rw { UIO_READ, UIO_WRITE }; struct iovec { caddr_t iov_base; int iov_len; enum uio_seg iov_segflg; int (*iov_op)(); }; .bp .LL Per-filesystem information .NP 0 struct vfs { struct vfs *vfs_next; + struct vfs *vfs_prev; struct vfsops *vfs_op; struct vnode *vfs_vnodecovered; int vfs_flag; ! int vfs_fsize; + int vfs_bsize; ! uid_t vfs_exroot; short vfs_exflags; caddr_t vfs_data; }; .NP 0 /* vfs flags: */ #define VFS_RDONLY 0x01 + #define VFS_NOEXEC 0x02 #define VFS_MLOCK 0x04 #define VFS_MWAIT 0x08 #define VFS_NOSUID 0x10 #define VFS_EXPORTED 0x20 /* exported vfs flags: */ #define EX_RDONLY 0x01 .bp .LL Operations supported on virtual file system. .NP 0 struct vfsops { ! int (*vfs_mount)(vfs, path, data, len); ! int (*vfs_unmount)(vfs, forcibly); + int (*vfs_mountroot)(); int (*vfs_root)(vfs, vpp); int (*vfs_statfs)(vfs, sbp); ! int (*vfs_sync)(vfs, waitfor); + int (*vfs_fhtovp)(vfs, fhp, vpp); + int (*vfs_vptofh)(vp, fhp); }; .bp .LL Dynamic file system information .NP 0 struct statfs { ! short f_type; + short f_flags; ! long f_fsize; + long f_bsize; long f_blocks; long f_bfree; long f_bavail; long f_files; long f_ffree; fsid_t f_fsid; + char *f_mntonname; + char *f_mntfromname; long f_spare[7]; }; typedef long fsid_t[2]; .bp .LL Filesystem objects (vnodes) .NP 0 enum vtype { VNON, VREG, VDIR, VBLK, VCHR, VLNK, VSOCK }; struct vnode { u_short v_flag; u_short v_count; u_short v_shlockc; u_short v_exlockc; struct vfs *v_vfsmountedhere; struct vfs *v_vfsp; struct vnodeops *v_op; + struct text *v_text; enum vtype v_type; caddr_t v_data; }; /* vnode flags */ #define VROOT 0x01 #define VTEXT 0x02 #define VEXLOCK 0x10 #define VSHLOCK 0x20 #define VLWAIT 0x40 .bp .LL Operations on vnodes .NP 0 struct vnodeops { ! int (*vn_lookup)(ndp); ! int (*vn_create)(ndp, vap, fflags); + int (*vn_mknod)(ndp, vap, fflags); ! int (*vn_open)(vp, fflags, cred); int (*vn_close)(vp, fflags, cred); int (*vn_access)(vp, fflags, cred); int (*vn_getattr)(vp, vap, cred); int (*vn_setattr)(vp, vap, cred); + int (*vn_read)(vp, uiop, offp, ioflag, cred); + int (*vn_write)(vp, uiop, offp, ioflag, cred); ! int (*vn_ioctl)(vp, com, data, fflag, cred); int (*vn_select)(vp, which, cred); + int (*vn_mmap)(vp, ..., cred); int (*vn_fsync)(vp, cred); + int (*vn_seek)(vp, offp, off, whence); .bp .LL Operations on vnodes (cont) .NP 0 ! int (*vn_remove)(ndp); ! int (*vn_link)(vp, ndp); ! int (*vn_rename)(sndp, tndp); ! int (*vn_mkdir)(ndp, vap); ! int (*vn_rmdir)(ndp); ! int (*vn_symlink)(ndp, vap, nm); ! int (*vn_readdir)(vp, uiop, offp, ioflag, cred); ! int (*vn_readlink)(vp, uiop, offp, ioflag, cred); + int (*vn_abortop)(ndp); ! int (*vn_inactive)(vp); }; .NP 0 /* flags for ioflag */ #define IO_UNIT 0x01 #define IO_APPEND 0x02 #define IO_SYNC 0x04 .bp .LL Vnode attributes .NP 0 struct vattr { enum vtype va_type; u_short va_mode; ! uid_t va_uid; ! gid_t va_gid; long va_fsid; ! long va_fileid; short va_nlink; u_long va_size; + u_long va_size1; long va_blocksize; struct timeval va_atime; struct timeval va_mtime; struct timeval va_ctime; dev_t va_rdev; ! u_long va_bytes; + u_long va_bytes1; };