/* * 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 #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 struct namecache *namecache; int nchsize; #endif /* * 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