home *** CD-ROM | disk | FTP | other *** search
- /*
- * $Header: /ax/networking:include/sys/namei.h:networking 1.1 $
- * $Source: /ax/networking:include/sys/namei.h: $
- *
- * Copyright (c) 1988 Acorn Computers Ltd., Cambridge, England
- *
- * $Log: namei.h,v $
- * Revision 1.1 95/01/11 10:19:28 kwelton
- * Initial revision
- *
- * Revision 1.3 88/06/17 20:20:02 beta
- * Acorn Unix initial beta version
- *
- */
- /*
- * Copyright (c) 1982, 1986 Regents of the University of California.
- * All rights reserved. The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
- *
- * @(#)namei.h 7.1 (Berkeley) 6/4/86
- */
-
- #ifndef _NAMEI_
- #define _NAMEI_
-
- #ifdef KERNEL
- #include "uio.h"
- #else
- #include <sys/uio.h>
- #endif
-
- /*
- * Encapsulation of namei parameters.
- * One of these is located in the u. area to
- * minimize space allocated on the kernel stack.
- */
- struct nameidata {
- caddr_t ni_dirp; /* pathname pointer */
- short ni_nameiop; /* see below */
- short ni_error; /* error return if any */
- off_t ni_endoff; /* end of useful stuff in directory */
- struct inode *ni_pdir; /* inode of parent directory of dirp */
- struct iovec ni_iovec; /* MUST be pointed to by ni_iov */
- struct uio ni_uio; /* directory I/O parameters */
- struct direct ni_dent; /* current directory entry */
- };
-
- #define ni_base ni_iovec.iov_base
- #define ni_count ni_iovec.iov_len
- #define ni_iov ni_uio.uio_iov
- #define ni_iovcnt ni_uio.uio_iovcnt
- #define ni_offset ni_uio.uio_offset
- #define ni_segflg ni_uio.uio_segflg
- #define ni_resid ni_uio.uio_resid
-
- /*
- * namei operations and modifiers
- */
- #define LOOKUP 0 /* perform name lookup only */
- #define CREATE 1 /* setup for file creation */
- #define DELETE 2 /* setup for file deletion */
- #define LOCKPARENT 0x10 /* see the top of namei */
- #define NOCACHE 0x20 /* name must not be left in cache */
- #define FOLLOW 0x40 /* follow symbolic links */
- #define NOFOLLOW 0x0 /* don't follow symbolic links (pseudo) */
-
- /*
- * This structure describes the elements in the cache of recent
- * names looked up by namei.
- */
- struct namecache {
- struct namecache *nc_forw; /* hash chain, MUST BE FIRST */
- struct namecache *nc_back; /* hash chain, MUST BE FIRST */
- struct namecache *nc_nxt; /* LRU chain */
- struct namecache **nc_prev; /* LRU chain */
- struct inode *nc_ip; /* inode the name refers to */
- ino_t nc_ino; /* ino of parent of name */
- dev_t nc_dev; /* dev of parent of name */
- dev_t nc_idev; /* dev of the name ref'd */
- long nc_id; /* referenced inode's id */
- char nc_nlen; /* length of name */
- #define NCHNAMLEN 15 /* maximum name segment length we bother with */
- char nc_name[NCHNAMLEN]; /* segment name */
- };
- #ifdef KERNEL
- #ifdef DYNALLOC
- struct namecache *namecache;
- #else DYNALLOC
- struct namecache *namecache, stat_namecache[NCHSIZE];
- #endif DYNALLOC
- int nchsize;
- #endif KERNEL
-
- /*
- * Stats on usefulness of namei caches.
- */
- struct nchstats {
- long ncs_goodhits; /* hits that we can reall use */
- long ncs_badhits; /* hits we must drop */
- long ncs_falsehits; /* hits with id mismatch */
- long ncs_miss; /* misses */
- long ncs_long; /* long names that ignore cache */
- long ncs_pass2; /* names found with passes == 2 */
- long ncs_2passes; /* number of times we attempt it */
- };
- #endif
-
- /* EOF namei.h */
-