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
.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;
};