merge in vnodes
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Wed, 10 May 1989 07:36:24 +0000 (23:36 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Wed, 10 May 1989 07:36:24 +0000 (23:36 -0800)
SCCS-vsn: sys/sys/acct.h 7.2
SCCS-vsn: sys/sys/file.h 7.3
SCCS-vsn: sys/sys/user.h 7.5
SCCS-vsn: sys/sys/uio.h 7.4
SCCS-vsn: sys/sys/unpcb.h 7.4
SCCS-vsn: sys/sys/proc.h 7.5
SCCS-vsn: sys/sys/namei.h 7.4

usr/src/sys/sys/acct.h
usr/src/sys/sys/file.h
usr/src/sys/sys/namei.h
usr/src/sys/sys/proc.h
usr/src/sys/sys/uio.h
usr/src/sys/sys/unpcb.h
usr/src/sys/sys/user.h

index d58e53d..fc0ff2b 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)acct.h      7.1 (Berkeley) %G%
+ *     @(#)acct.h      7.2 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -42,6 +42,5 @@ struct        acct
 #define AHZ 64
 
 #ifdef KERNEL
 #define AHZ 64
 
 #ifdef KERNEL
-struct acct    acctbuf;
-struct inode   *acctp;
+struct vnode   *acctp;
 #endif
 #endif
index 6128488..672f16d 100644 (file)
@@ -1,9 +1,20 @@
 /*
 /*
- * 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.
+ * Copyright (c) 1982, 1986, 1989 Regents of the University of California.
+ * All rights reserved.
  *
  *
- *     @(#)file.h      7.2 (Berkeley) %G%
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *     @(#)file.h      7.3 (Berkeley) %G%
  */
 
 #ifdef KERNEL
  */
 
 #ifdef KERNEL
@@ -16,8 +27,10 @@ struct       file {
        short   f_type;         /* descriptor type */
        short   f_count;        /* reference count */
        short   f_msgcount;     /* references from message queue */
        short   f_type;         /* descriptor type */
        short   f_count;        /* reference count */
        short   f_msgcount;     /* references from message queue */
+       struct  ucred *f_cred;  /* credentials associated with descriptor */
        struct  fileops {
        struct  fileops {
-               int     (*fo_rw)();
+               int     (*fo_read)();
+               int     (*fo_write)();
                int     (*fo_ioctl)();
                int     (*fo_select)();
                int     (*fo_close)();
                int     (*fo_ioctl)();
                int     (*fo_select)();
                int     (*fo_close)();
@@ -28,8 +41,6 @@ struct        file {
 
 struct file *file, *fileNFILE;
 int    nfile;
 
 struct file *file, *fileNFILE;
 int    nfile;
-struct file *getf();
-struct file *falloc();
 #endif
 
 /*
 #endif
 
 /*
@@ -111,12 +122,6 @@ struct     file *falloc();
 #define        L_XTND          2       /* relative to end of file */
 
 #ifdef KERNEL
 #define        L_XTND          2       /* relative to end of file */
 
 #ifdef KERNEL
-#define        GETF(fp, fd) { \
-       if ((unsigned)(fd) >= NOFILE || ((fp) = u.u_ofile[fd]) == NULL) { \
-               u.u_error = EBADF; \
-               return; \
-       } \
-}
-#define        DTYPE_INODE     1       /* file */
+#define        DTYPE_VNODE     1       /* file */
 #define        DTYPE_SOCKET    2       /* communications endpoint */
 #endif
 #define        DTYPE_SOCKET    2       /* communications endpoint */
 #endif
index 6d207d4..9f0897e 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 1982, 1986 The Regents of the University of California.
+ * Copyright (c) 1985, 1989 Regents of the University of California.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms are permitted
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms are permitted
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- *     @(#)namei.h     7.3 (Berkeley) %G%
+ *     @(#)namei.h     7.4 (Berkeley) %G%
  */
 
 #ifndef _NAMEI_
 #define        _NAMEI_
 
 #ifdef KERNEL
  */
 
 #ifndef _NAMEI_
 #define        _NAMEI_
 
 #ifdef KERNEL
+#include "../ufs/dir.h"
 #include "uio.h"
 #else
 #include <sys/uio.h>
 #include "uio.h"
 #else
 #include <sys/uio.h>
+#include <ufs/dir.h>
 #endif
 
 /*
 #endif
 
 /*
  * minimize space allocated on the kernel stack.
  */
 struct nameidata {
  * minimize space allocated on the kernel stack.
  */
 struct nameidata {
+               /* arguments to namei and related context: */
        caddr_t ni_dirp;                /* pathname pointer */
        caddr_t ni_dirp;                /* pathname pointer */
+       enum    uio_seg ni_segflg;      /* location of pathname */
        short   ni_nameiop;             /* see below */
        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  vnode *ni_cdir;         /* current directory */
+       struct  vnode *ni_rdir;         /* root directory, if not normal root */
+       struct  ucred *ni_cred;         /* credentials */
+
+               /* shared between namei, lookup routines and commit routines: */
+       caddr_t ni_pnbuf;               /* pathname buffer */
+       char    *ni_ptr;                /* current location in pathname */
+       char    *ni_next;               /* next location in pathname */
+       u_int   ni_pathlen;             /* remaining chars in path */
+       short   ni_namelen;             /* length of current component */
+       short   ni_loopcnt;             /* count of symlinks encountered */
+       char    ni_makeentry;           /* 1 => add entry to name cache */
+       char    ni_isdotdot;            /* 1 => current component name is .. */
+
+               /* results: */
+       struct  vnode *ni_vp;           /* vnode of result */
+       struct  vnode *ni_dvp;          /* vnode of intermediate directory */
+
+               /* side effects: */
        struct  direct ni_dent;         /* current directory entry */
        struct  direct ni_dent;         /* current directory entry */
+
+       /* BEGIN UFS SPECIFIC */
+       off_t   ni_endoff;              /* end of useful directory contents */
+       struct ndirinfo {               /* saved info for new dir entry */
+               struct  iovec nd_iovec;         /* pointed to by ni_iov */
+               struct  uio nd_uio;             /* directory I/O parameters */
+               u_long  nd_hash;                /* hash value of nd_dent */
+       } ni_nd;
+       /* END UFS SPECIFIC */
 };
 
 };
 
-#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
+#define        ni_base         ni_nd.nd_iovec.iov_base
+#define        ni_count        ni_nd.nd_iovec.iov_len
+#define        ni_segflg       ni_nd.nd_uio.uio_segflg
+#define        ni_iov          ni_nd.nd_uio.uio_iov
+#define        ni_iovcnt       ni_nd.nd_uio.uio_iovcnt
+#define        ni_offset       ni_nd.nd_uio.uio_offset
+#define        ni_resid        ni_nd.nd_uio.uio_resid
+#define ni_hash                ni_nd.nd_hash
 
 #ifdef KERNEL
 /*
 
 #ifdef KERNEL
 /*
@@ -57,30 +85,39 @@ struct nameidata {
 #define        LOOKUP          0       /* perform name lookup only */
 #define        CREATE          1       /* setup for file creation */
 #define        DELETE          2       /* setup for file deletion */
 #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        RENAME          3       /* setup for file renaming */
+#define        OPFLAG          3       /* mask for operation */
+#define        LOCKLEAF        0x04    /* lock inode on return */
+#define        LOCKPARENT      0x08    /* want parent vnode returned locked */
+#define        WANTPARENT      0x10    /* want parent vnode returned unlocked */
 #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) */
 #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) */
+#define        NOMOUNT         0x80    /* don't cross mount points */
 #endif
 
 /*
  * This structure describes the elements in the cache of recent
  * names looked up by namei.
  */
 #endif
 
 /*
  * This structure describes the elements in the cache of recent
  * names looked up by namei.
  */
+
+#define        NCHNAMLEN       15      /* maximum name segment length we bother with */
+
 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 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 */
+       struct  vnode *nc_vp;           /* vnode the name refers to */
+       struct  vnode *nc_dp;           /* vnode of parent of name */
        char    nc_nlen;                /* length of name */
        char    nc_nlen;                /* length of name */
-#define        NCHNAMLEN       15      /* maximum name segment length we bother with */
        char    nc_name[NCHNAMLEN];     /* segment name */
        char    nc_name[NCHNAMLEN];     /* segment name */
+       struct  ucred *nc_cred;         /* ??? credentials */
 };
 };
+
+#define ANYCRED ((struct ucred *) -1)
+#define NOCRED  ((struct ucred *) 0)
+
 #ifdef KERNEL
 struct namecache *namecache;
 int    nchsize;
 #ifdef KERNEL
 struct namecache *namecache;
 int    nchsize;
index 01b8a31..4d47531 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)proc.h      7.4 (Berkeley) %G%
+ *     @(#)proc.h      7.5 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -85,7 +85,7 @@ struct        proc {
        struct  itimerval p_realtimer;
        struct  quota *p_quota; /* quotas for this process */
        int     p_traceflag;    /* kernel tracing flags (facilities) */
        struct  itimerval p_realtimer;
        struct  quota *p_quota; /* quotas for this process */
        int     p_traceflag;    /* kernel tracing flags (facilities) */
-       struct  inode *p_tracep;/* trace to inode */
+       struct  vnode *p_tracep;/* trace to vnode */
 #if defined(tahoe)
        int     p_ckey;         /* code cache key */
        int     p_dkey;         /* data cache key */
 #if defined(tahoe)
        int     p_ckey;         /* code cache key */
        int     p_dkey;         /* data cache key */
@@ -141,7 +141,7 @@ int whichqs;                /* bit mask summarizing non-empty qs's */
 #define        SVFORK  0x0001000       /* process resulted from vfork() */
 #define        SVFDONE 0x0002000       /* another vfork flag */
 #define        SNOVM   0x0004000       /* no vm, parent in a vfork() */
 #define        SVFORK  0x0001000       /* process resulted from vfork() */
 #define        SVFDONE 0x0002000       /* another vfork flag */
 #define        SNOVM   0x0004000       /* no vm, parent in a vfork() */
-#define        SPAGI   0x0008000       /* init data space on demand, from inode */
+#define        SPAGV   0x0008000       /* init data space on demand, from vnode */
 #define        SSEQL   0x0010000       /* user warned of sequential vm behavior */
 #define        SUANOM  0x0020000       /* user warned of random vm behavior */
 #define        STIMO   0x0040000       /* timing out during sleep */
 #define        SSEQL   0x0010000       /* user warned of sequential vm behavior */
 #define        SUANOM  0x0020000       /* user warned of random vm behavior */
 #define        STIMO   0x0040000       /* timing out during sleep */
index 99b6503..f5629c6 100644 (file)
@@ -14,7 +14,7 @@
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- *     @(#)uio.h       7.3 (Berkeley) %G%
+ *     @(#)uio.h       7.4 (Berkeley) %G%
  */
 
 #ifndef _UIO_
  */
 
 #ifndef _UIO_
@@ -25,23 +25,26 @@ struct iovec {
        int     iov_len;
 };
 
        int     iov_len;
 };
 
+enum   uio_rw { UIO_READ, UIO_WRITE };
+
+/*
+ * Segment flag values.
+ */
+enum   uio_seg {
+       UIO_USERSPACE,          /* from user data space */
+       UIO_SYSSPACE,           /* from system space */
+       UIO_USERISPACE          /* from user I space */
+};
+
 struct uio {
        struct  iovec *uio_iov;
        int     uio_iovcnt;
        off_t   uio_offset;
 struct uio {
        struct  iovec *uio_iov;
        int     uio_iovcnt;
        off_t   uio_offset;
-       int     uio_segflg;
        int     uio_resid;
        int     uio_resid;
+       enum    uio_seg uio_segflg;
+       enum    uio_rw uio_rw;
 };
 
 };
 
-enum   uio_rw { UIO_READ, UIO_WRITE };
-
-/*
- * Segment flag values (should be enum).
- */
-#define UIO_USERSPACE  0               /* from user data space */
-#define UIO_SYSSPACE   1               /* from system space */
-#define UIO_USERISPACE 2               /* from user I space */
-
  /*
   * Limits
   */
  /*
   * Limits
   */
index 53bec9a..a773347 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 1982, 1986 Regents of the University of California.
+ * Copyright (c) 1982, 1986, 1989 Regents of the University of California.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms are permitted
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms are permitted
  * from this software without specific prior written permission.
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * from this software without specific prior written permission.
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  *
- *     @(#)unpcb.h     7.3 (Berkeley) %G%
+ *     @(#)unpcb.h     7.4 (Berkeley) %G%
  */
 
 /*
  * Protocol control block for an active
  * instance of a UNIX internal protocol.
  *
  */
 
 /*
  * Protocol control block for an active
  * instance of a UNIX internal protocol.
  *
- * A socket may be associated with an inode in the
- * file system.  If so, the unp_inode pointer holds
- * a reference count to this inode, which should be irele'd
+ * A socket may be associated with an vnode in the
+ * file system.  If so, the unp_vnode pointer holds
+ * a reference count to this vnode, which should be irele'd
  * when the socket goes away.
  *
  * A socket may be connected to another socket, in which
  * when the socket goes away.
  *
  * A socket may be connected to another socket, in which
@@ -44,8 +44,8 @@
  */
 struct unpcb {
        struct  socket *unp_socket;     /* pointer back to socket */
  */
 struct unpcb {
        struct  socket *unp_socket;     /* pointer back to socket */
-       struct  inode *unp_inode;       /* if associated with file */
-       ino_t   unp_ino;                /* fake inode number */
+       struct  vnode *unp_vnode;       /* if associated with file */
+       ino_t   unp_vno;                /* fake vnode number */
        struct  unpcb *unp_conn;        /* control block of connected socket */
        struct  unpcb *unp_refs;        /* referencing socket linked list */
        struct  unpcb *unp_nextref;     /* link in unp_refs list */
        struct  unpcb *unp_conn;        /* control block of connected socket */
        struct  unpcb *unp_refs;        /* referencing socket linked list */
        struct  unpcb *unp_nextref;     /* link in unp_refs list */
index c4646ce..80efc25 100644 (file)
@@ -1,9 +1,20 @@
 /*
 /*
- * 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.
+ * Copyright (c) 1982, 1986, 1989 Regents of the University of California.
+ * All rights reserved.
  *
  *
- *     @(#)user.h      7.4 (Berkeley) %G%
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *     @(#)user.h      7.5 (Berkeley) %G%
  */
 
 #ifdef KERNEL
  */
 
 #ifdef KERNEL
 #include "time.h"
 #include "resource.h"
 #include "namei.h"
 #include "time.h"
 #include "resource.h"
 #include "namei.h"
+#include "ucred.h"
 #else
 #include <machine/pcb.h>
 #include <sys/dmap.h>
 #include <sys/time.h>
 #include <sys/resource.h>
 #include <sys/namei.h>
 #else
 #include <machine/pcb.h>
 #include <sys/dmap.h>
 #include <sys/time.h>
 #include <sys/resource.h>
 #include <sys/namei.h>
+#include <sys/ucred.h>
 #endif
 
 /*
 #endif
 
 /*
@@ -52,12 +65,13 @@ struct      user {
        char    u_eosys;                /* special action on end of syscall */
 
 /* 1.1 - processes and protection */
        char    u_eosys;                /* special action on end of syscall */
 
 /* 1.1 - processes and protection */
-       uid_t   u_uid;                  /* effective user id */
-       uid_t   u_ruid;                 /* real user id */
-       gid_t   u_gid;                  /* effective group id */
+#define        u_ruid  u_cred->cr_ruid         /* real user id */
        gid_t   u_rgid;                 /* real group id */
        gid_t   u_rgid;                 /* real group id */
-       gid_t   u_groups[NGROUPS];      /* groups, 0 terminated */
-#define u_cred u_uid
+#define u_cred u_nd.ni_cred
+#define u_uid  u_cred->cr_uid          /* effective user id */
+#define u_gid  u_cred->cr_gid          /* effective group id */
+#define u_ngroups u_cred->cr_ngroups   /* number of group id's */
+#define u_groups u_cred->cr_groups     /* list of effective grp id's */
 
 /* 1.2 - memory management */
        size_t  u_tsize;                /* text size (clicks) */
 
 /* 1.2 - memory management */
        size_t  u_tsize;                /* text size (clicks) */
@@ -65,8 +79,8 @@ struct        user {
        size_t  u_ssize;                /* stack size (clicks) */
        struct  dmap u_dmap;            /* disk map for data segment */
        struct  dmap u_smap;            /* disk map for stack segment */
        size_t  u_ssize;                /* stack size (clicks) */
        struct  dmap u_dmap;            /* disk map for data segment */
        struct  dmap u_smap;            /* disk map for stack segment */
-       struct  dmap u_cdmap, u_csmap;  /* shadows of u_dmap, u_smap, for
-                                          use of parent during fork */
+       struct  dmap u_cdmap;           /* temp data segment disk map */
+       struct  dmap u_csmap;           /* temp stack segment disk map */
        label_t u_ssave;                /* label variable for swapping */
        size_t  u_odsize, u_ossize;     /* for (clumsy) expansion swaps */
        time_t  u_outime;               /* user time at last sample */
        label_t u_ssave;                /* label variable for swapping */
        size_t  u_odsize, u_ossize;     /* for (clumsy) expansion swaps */
        time_t  u_outime;               /* user time at last sample */
@@ -88,8 +102,8 @@ struct       user {
        int     u_lastfile;             /* high-water mark of u_ofile */
 #define        UF_EXCLOSE      0x1             /* auto-close on exec */
 #define        UF_MAPPED       0x2             /* mapped from device */
        int     u_lastfile;             /* high-water mark of u_ofile */
 #define        UF_EXCLOSE      0x1             /* auto-close on exec */
 #define        UF_MAPPED       0x2             /* mapped from device */
-       struct  inode *u_cdir;          /* current directory */
-       struct  inode *u_rdir;          /* root directory of current process */
+#define u_cdir u_nd.ni_cdir            /* current directory */
+#define u_rdir u_nd.ni_rdir            /* root directory of current process */
        struct  tty *u_ttyp;            /* controlling tty pointer */
        dev_t   u_ttyd;                 /* controlling tty dev */
        short   u_cmask;                /* mask for file creation */
        struct  tty *u_ttyp;            /* controlling tty pointer */
        dev_t   u_ttyd;                 /* controlling tty dev */
        short   u_cmask;                /* mask for file creation */
@@ -115,12 +129,6 @@ struct     user {
        int     u_qflags;               /* per process quota flags */
 
 /* namei & co. */
        int     u_qflags;               /* per process quota flags */
 
 /* namei & co. */
-       struct nameicache {             /* last successful directory search */
-               int nc_prevoffset;      /* offset at which last entry found */
-               ino_t nc_inumber;       /* inum of cached directory */
-               dev_t nc_dev;           /* dev of cached directory */
-               time_t nc_time;         /* time stamp for cache entry */
-       } u_ncache;
        struct  nameidata u_nd;
 
        int     u_stack[1];
        struct  nameidata u_nd;
 
        int     u_stack[1];