[BACK]Return to nfsnode.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / nfs

Annotation of src/sys/nfs/nfsnode.h, Revision 1.26

1.26    ! thorpej     1: /*      $NetBSD: nfsnode.h,v 1.25 1998/03/01 02:24:29 fvdl Exp $       */
1.11      cgd         2:
1.1       mycroft     3: /*
1.10      mycroft     4:  * Copyright (c) 1989, 1993
                      5:  *     The Regents of the University of California.  All rights reserved.
1.1       mycroft     6:  *
                      7:  * This code is derived from software contributed to Berkeley by
                      8:  * Rick Macklem at The University of Guelph.
                      9:  *
                     10:  * Redistribution and use in source and binary forms, with or without
                     11:  * modification, are permitted provided that the following conditions
                     12:  * are met:
                     13:  * 1. Redistributions of source code must retain the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer.
                     15:  * 2. Redistributions in binary form must reproduce the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer in the
                     17:  *    documentation and/or other materials provided with the distribution.
                     18:  * 3. All advertising materials mentioning features or use of this software
                     19:  *    must display the following acknowledgement:
                     20:  *     This product includes software developed by the University of
                     21:  *     California, Berkeley and its contributors.
                     22:  * 4. Neither the name of the University nor the names of its contributors
                     23:  *    may be used to endorse or promote products derived from this software
                     24:  *    without specific prior written permission.
                     25:  *
                     26:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     27:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     28:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     29:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     30:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     31:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     32:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     33:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     34:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     35:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     36:  * SUCH DAMAGE.
                     37:  *
1.16      fvdl       38:  *     @(#)nfsnode.h   8.9 (Berkeley) 5/14/95
1.1       mycroft    39:  */
                     40:
1.16      fvdl       41:
                     42: #ifndef _NFS_NFSNODE_H_
                     43: #define _NFS_NFSNODE_H_
                     44:
                     45: #ifndef _NFS_NFS_H_
                     46: #include <nfs/nfs.h>
                     47: #endif
                     48:
1.10      mycroft    49: /*
                     50:  * Silly rename structure that hangs off the nfsnode until the name
                     51:  * can be removed by nfs_inactive()
                     52:  */
                     53: struct sillyrename {
                     54:        struct  ucred *s_cred;
                     55:        struct  vnode *s_dvp;
                     56:        long    s_namlen;
                     57:        char    s_name[20];
                     58: };
1.1       mycroft    59:
                     60: /*
1.21      fvdl       61:  * Definitions for the directory cache. Because directory cookies
                     62:  * are an opaque 64 bit entity, we need to provide some sort of
                     63:  * mapping between cookies and logical blocknumbers. Also,
                     64:  * we should store the cookies from the server somewhere,
                     65:  * to be able to satisfy VOP_READDIR requests for cookies.
                     66:  * We can't store the cookies in the dirent structure, as some
                     67:  * other systems.
                     68:  *
                     69:  * Each offset is hashed into a per-nfsnode hashtable. An entry
                     70:  * found therein contains information about the (faked up)
                     71:  * logical blocknumber, and also a pointer to a buffer where
                     72:  * the cookies are stored.
1.16      fvdl       73:  */
                     74:
1.21      fvdl       75: extern u_long nfsdirhashmask;
                     76:
                     77: LIST_HEAD(nfsdirhashhead, nfsdircache);
                     78: TAILQ_HEAD(nfsdirchainhead, nfsdircache);
                     79:
                     80: struct nfsdircache {
1.24      fvdl       81:        off_t           dc_cookie;              /* Own offset (key) */
                     82:        off_t           dc_blkcookie;           /* Offset of block we're in */
                     83:        LIST_ENTRY(nfsdircache) dc_hash;        /* Hash chain */
                     84:        TAILQ_ENTRY(nfsdircache) dc_chain;      /* Least recently entered chn */
                     85:        u_int32_t       dc_cookie32;            /* Key for 64<->32 xlate case */
                     86:        daddr_t         dc_blkno;               /* Number of block we're in */
                     87:        int             dc_entry;               /* Entry number within block */
1.16      fvdl       88: };
                     89:
1.21      fvdl       90:
1.16      fvdl       91: /*
1.1       mycroft    92:  * The nfsnode is the nfs equivalent to ufs's inode. Any similarity
                     93:  * is purely coincidental.
                     94:  * There is a unique nfsnode allocated for each active file,
                     95:  * each current directory, each mounted-on file, text file, and the root.
                     96:  * An nfsnode is 'named' by its file handle. (nget/nfs_node.c)
1.16      fvdl       97:  * If this structure exceeds 256 bytes (it is currently 256 using 4.4BSD-Lite
                     98:  * type definitions), file handles of > 32 bytes should probably be split out
                     99:  * into a separate MALLOC()'d data structure. (Reduce the size of nfsfh_t by
1.23      christos  100:  * changing the definition in nfsproto.h of NFS_SMALLFH.)
1.16      fvdl      101:  * NB: Hopefully the current order of the fields is such that everything will
                    102:  *     be well aligned and, therefore, tightly packed.
1.1       mycroft   103:  */
                    104: struct nfsnode {
1.16      fvdl      105:        u_quad_t                n_size;         /* Current size of file */
                    106:        u_quad_t                n_brev;         /* Modify rev when cached */
                    107:        u_quad_t                n_lrev;         /* Modify rev for lease */
1.24      fvdl      108:        union {
                    109:                struct timespec nf_mtim;
                    110:                off_t           nd_direof;      /* Dir. EOF offset cache */
                    111:        } n_un2;
1.16      fvdl      112:        union {
                    113:                struct timespec nf_atim;        /* Special file times */
                    114:                nfsuint64       nd_cookieverf;  /* Cookie verifier (dir only) */
                    115:        } n_un1;
                    116:        union {
                    117:                struct sillyrename *nf_silly;   /* Ptr to silly rename struct */
1.21      fvdl      118:                struct nfsdirhashhead *nd_dircache;
1.16      fvdl      119:        } n_un3;
1.24      fvdl      120:        LIST_ENTRY(nfsnode)     n_hash;         /* Hash chain */
                    121:        CIRCLEQ_ENTRY(nfsnode)  n_timer;        /* Nqnfs timer chain */
                    122:        struct nfsdirchainhead  n_dirchain;     /* Chain of dir cookies */
                    123:        nfsfh_t                 *n_fhp;         /* NFS File Handle */
                    124:        struct vattr            *n_vattr;       /* Vnode attribute cache */
                    125:        struct vnode            *n_vnode;       /* associated vnode */
                    126:        struct lockf            *n_lockf;       /* Locking record of file */
                    127:        unsigned                *n_dirgens;     /* 32<->64bit xlate gen. no. */
                    128:        time_t                  n_attrstamp;    /* Attr. cache timestamp */
                    129:        time_t                  n_mtime;        /* Prev modify time. */
                    130:        time_t                  n_ctime;        /* Prev create time. */
                    131:        time_t                  n_nctime;       /* Last neg cache entry (dir) */
                    132:        time_t                  n_expiry;       /* Lease expiry time */
                    133:        daddr_t                 n_dblkno;       /* To keep faked dir blkno */
                    134:        unsigned                n_dircachesize; /* Size of dir cookie cache */
                    135:        int                     n_error;        /* Save write error value */
1.16      fvdl      136:        short                   n_fhsize;       /* size in bytes, of fh */
                    137:        short                   n_flag;         /* Flag for locking.. */
                    138:        nfsfh_t                 n_fh;           /* Small File Handle */
1.1       mycroft   139: };
                    140:
1.16      fvdl      141: #define n_atim         n_un1.nf_atim
                    142: #define n_mtim         n_un2.nf_mtim
                    143: #define n_sillyrename  n_un3.nf_silly
                    144: #define n_cookieverf   n_un1.nd_cookieverf
                    145: #define n_direofoffset n_un2.nd_direof
1.21      fvdl      146: #define n_dircache     n_un3.nd_dircache
1.16      fvdl      147:
1.10      mycroft   148: /*
                    149:  * Flags for n_flag
                    150:  */
                    151: #define        NFLUSHWANT      0x0001  /* Want wakeup from a flush in prog. */
                    152: #define        NFLUSHINPROG    0x0002  /* Avoid multiple calls to vinvalbuf() */
                    153: #define        NMODIFIED       0x0004  /* Might have a modified buffer in bio */
                    154: #define        NWRITEERR       0x0008  /* Flag write errors so close will know */
                    155: #define        NQNFSNONCACHE   0x0020  /* Non-cachable lease */
                    156: #define        NQNFSWRITE      0x0040  /* Write lease */
                    157: #define        NQNFSEVICTED    0x0080  /* Has been evicted */
                    158: #define        NACC            0x0100  /* Special file accessed */
                    159: #define        NUPD            0x0200  /* Special file updated */
                    160: #define        NCHG            0x0400  /* Special file times changed */
1.1       mycroft   161:
                    162: /*
                    163:  * Convert between nfsnode pointers and vnode pointers
                    164:  */
                    165: #define VTONFS(vp)     ((struct nfsnode *)(vp)->v_data)
                    166: #define NFSTOV(np)     ((struct vnode *)(np)->n_vnode)
1.10      mycroft   167:
1.1       mycroft   168: /*
1.10      mycroft   169:  * Queue head for nfsiod's
1.1       mycroft   170:  */
1.19      thorpej   171: extern struct proc *nfs_iodwant[NFS_MAXASYNCDAEMON];
                    172: extern struct nfsmount *nfs_iodmount[NFS_MAXASYNCDAEMON];
1.1       mycroft   173:
1.14      jtc       174: #ifdef _KERNEL
1.1       mycroft   175: /*
                    176:  * Prototypes for NFS vnode operations
                    177:  */
1.17      mycroft   178: int    nfs_lookup      __P((void *));
                    179: int    nfs_create      __P((void *));
                    180: int    nfs_mknod       __P((void *));
                    181: int    nfs_open        __P((void *));
                    182: int    nfs_close       __P((void *));
                    183: int    nfsspec_close   __P((void *));
                    184: int    nfsfifo_close   __P((void *));
                    185: int    nfs_access      __P((void *));
                    186: int    nfsspec_access  __P((void *));
                    187: int    nfs_getattr     __P((void *));
                    188: int    nfs_setattr     __P((void *));
                    189: int    nfs_read        __P((void *));
                    190: int    nfs_write       __P((void *));
                    191: #define        nfs_lease_check genfs_nullop
                    192: int    nfsspec_read    __P((void *));
                    193: int    nfsspec_write   __P((void *));
                    194: int    nfsfifo_read    __P((void *));
                    195: int    nfsfifo_write   __P((void *));
                    196: #define nfs_ioctl      ((int (*)       __P((void *)))enoioctl)
1.18      mycroft   197: #define        nfs_poll        genfs_poll
1.25      fvdl      198: #define nfs_revoke     genfs_revoke
1.17      mycroft   199: int    nfs_mmap        __P((void *));
                    200: int    nfs_fsync       __P((void *));
1.20      kleink    201: #define nfs_seek       genfs_seek
1.17      mycroft   202: int    nfs_remove      __P((void *));
                    203: int    nfs_link        __P((void *));
                    204: int    nfs_rename      __P((void *));
                    205: int    nfs_mkdir       __P((void *));
                    206: int    nfs_rmdir       __P((void *));
                    207: int    nfs_symlink     __P((void *));
                    208: int    nfs_readdir     __P((void *));
                    209: int    nfs_readlink    __P((void *));
                    210: #define        nfs_abortop     genfs_abortop
                    211: int    nfs_inactive    __P((void *));
                    212: int    nfs_reclaim     __P((void *));
1.25      fvdl      213: #define nfs_lock       genfs_nolock
                    214: #define nfs_unlock     genfs_nounlock
                    215: #define nfs_islocked   genfs_noislocked
1.17      mycroft   216: int    nfs_bmap        __P((void *));
                    217: int    nfs_strategy    __P((void *));
                    218: int    nfs_print       __P((void *));
                    219: int    nfs_pathconf    __P((void *));
                    220: int    nfs_advlock     __P((void *));
                    221: #define        nfs_blkatoff    genfs_eopnotsupp
                    222: int    nfs_bwrite      __P((void *));
                    223: int    nfs_vget        __P((struct mount *, ino_t, struct vnode **));
                    224: #define        nfs_valloc      genfs_eopnotsupp
                    225: #define nfs_reallocblks        genfs_eopnotsupp
                    226: #define        nfs_vfree       genfs_nullop
                    227: int    nfs_truncate    __P((void *));
                    228: int    nfs_update      __P((void *));
1.15      christos  229:
                    230: extern int (**nfsv2_vnodeop_p) __P((void *));
                    231:
1.14      jtc       232: #endif /* _KERNEL */
1.16      fvdl      233:
                    234: #endif

CVSweb <webmaster@jp.NetBSD.org>