[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.29

1.29    ! simonb      1: /*      $NetBSD: nfsnode.h,v 1.28 1999/11/29 23:34:01 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)
                     97:  */
                     98: struct nfsnode {
1.16      fvdl       99:        u_quad_t                n_size;         /* Current size of file */
                    100:        u_quad_t                n_brev;         /* Modify rev when cached */
                    101:        u_quad_t                n_lrev;         /* Modify rev for lease */
1.24      fvdl      102:        union {
                    103:                struct timespec nf_mtim;
                    104:                off_t           nd_direof;      /* Dir. EOF offset cache */
                    105:        } n_un2;
1.16      fvdl      106:        union {
                    107:                struct timespec nf_atim;        /* Special file times */
                    108:                nfsuint64       nd_cookieverf;  /* Cookie verifier (dir only) */
                    109:        } n_un1;
                    110:        union {
                    111:                struct sillyrename *nf_silly;   /* Ptr to silly rename struct */
1.21      fvdl      112:                struct nfsdirhashhead *nd_dircache;
1.16      fvdl      113:        } n_un3;
1.24      fvdl      114:        LIST_ENTRY(nfsnode)     n_hash;         /* Hash chain */
                    115:        CIRCLEQ_ENTRY(nfsnode)  n_timer;        /* Nqnfs timer chain */
                    116:        struct nfsdirchainhead  n_dirchain;     /* Chain of dir cookies */
                    117:        nfsfh_t                 *n_fhp;         /* NFS File Handle */
                    118:        struct vattr            *n_vattr;       /* Vnode attribute cache */
                    119:        struct vnode            *n_vnode;       /* associated vnode */
                    120:        struct lockf            *n_lockf;       /* Locking record of file */
                    121:        unsigned                *n_dirgens;     /* 32<->64bit xlate gen. no. */
                    122:        time_t                  n_attrstamp;    /* Attr. cache timestamp */
                    123:        time_t                  n_mtime;        /* Prev modify time. */
                    124:        time_t                  n_ctime;        /* Prev create time. */
                    125:        time_t                  n_nctime;       /* Last neg cache entry (dir) */
                    126:        time_t                  n_expiry;       /* Lease expiry time */
                    127:        daddr_t                 n_dblkno;       /* To keep faked dir blkno */
                    128:        unsigned                n_dircachesize; /* Size of dir cookie cache */
                    129:        int                     n_error;        /* Save write error value */
1.16      fvdl      130:        short                   n_fhsize;       /* size in bytes, of fh */
                    131:        short                   n_flag;         /* Flag for locking.. */
                    132:        nfsfh_t                 n_fh;           /* Small File Handle */
1.28      fvdl      133:        time_t                  n_accstamp;     /* Access cache timestamp */
                    134:        uid_t                   n_accuid;       /* Last access requester */
                    135:        int                     n_accmode;      /* Mode last requested */
                    136:        int                     n_accerror;     /* Error last returned */
1.1       mycroft   137: };
                    138:
1.16      fvdl      139: #define n_atim         n_un1.nf_atim
                    140: #define n_mtim         n_un2.nf_mtim
                    141: #define n_sillyrename  n_un3.nf_silly
                    142: #define n_cookieverf   n_un1.nd_cookieverf
                    143: #define n_direofoffset n_un2.nd_direof
1.21      fvdl      144: #define n_dircache     n_un3.nd_dircache
1.16      fvdl      145:
1.10      mycroft   146: /*
                    147:  * Flags for n_flag
                    148:  */
                    149: #define        NFLUSHWANT      0x0001  /* Want wakeup from a flush in prog. */
                    150: #define        NFLUSHINPROG    0x0002  /* Avoid multiple calls to vinvalbuf() */
                    151: #define        NMODIFIED       0x0004  /* Might have a modified buffer in bio */
                    152: #define        NWRITEERR       0x0008  /* Flag write errors so close will know */
                    153: #define        NQNFSNONCACHE   0x0020  /* Non-cachable lease */
                    154: #define        NQNFSWRITE      0x0040  /* Write lease */
                    155: #define        NQNFSEVICTED    0x0080  /* Has been evicted */
                    156: #define        NACC            0x0100  /* Special file accessed */
                    157: #define        NUPD            0x0200  /* Special file updated */
                    158: #define        NCHG            0x0400  /* Special file times changed */
1.1       mycroft   159:
                    160: /*
                    161:  * Convert between nfsnode pointers and vnode pointers
                    162:  */
                    163: #define VTONFS(vp)     ((struct nfsnode *)(vp)->v_data)
                    164: #define NFSTOV(np)     ((struct vnode *)(np)->n_vnode)
1.10      mycroft   165:
1.1       mycroft   166: /*
1.10      mycroft   167:  * Queue head for nfsiod's
1.1       mycroft   168:  */
1.19      thorpej   169: extern struct proc *nfs_iodwant[NFS_MAXASYNCDAEMON];
                    170: extern struct nfsmount *nfs_iodmount[NFS_MAXASYNCDAEMON];
1.1       mycroft   171:
1.14      jtc       172: #ifdef _KERNEL
1.1       mycroft   173: /*
                    174:  * Prototypes for NFS vnode operations
                    175:  */
1.17      mycroft   176: int    nfs_lookup      __P((void *));
                    177: int    nfs_create      __P((void *));
                    178: int    nfs_mknod       __P((void *));
                    179: int    nfs_open        __P((void *));
                    180: int    nfs_close       __P((void *));
                    181: int    nfsspec_close   __P((void *));
                    182: int    nfsfifo_close   __P((void *));
                    183: int    nfs_access      __P((void *));
                    184: int    nfsspec_access  __P((void *));
                    185: int    nfs_getattr     __P((void *));
                    186: int    nfs_setattr     __P((void *));
                    187: int    nfs_read        __P((void *));
                    188: int    nfs_write       __P((void *));
                    189: #define        nfs_lease_check genfs_nullop
                    190: int    nfsspec_read    __P((void *));
                    191: int    nfsspec_write   __P((void *));
                    192: int    nfsfifo_read    __P((void *));
                    193: int    nfsfifo_write   __P((void *));
1.27      matthias  194: #define        nfs_ioctl       genfs_enoioctl
1.18      mycroft   195: #define        nfs_poll        genfs_poll
1.25      fvdl      196: #define nfs_revoke     genfs_revoke
1.17      mycroft   197: int    nfs_mmap        __P((void *));
                    198: int    nfs_fsync       __P((void *));
1.20      kleink    199: #define nfs_seek       genfs_seek
1.17      mycroft   200: int    nfs_remove      __P((void *));
                    201: int    nfs_link        __P((void *));
                    202: int    nfs_rename      __P((void *));
                    203: int    nfs_mkdir       __P((void *));
                    204: int    nfs_rmdir       __P((void *));
                    205: int    nfs_symlink     __P((void *));
                    206: int    nfs_readdir     __P((void *));
                    207: int    nfs_readlink    __P((void *));
                    208: #define        nfs_abortop     genfs_abortop
                    209: int    nfs_inactive    __P((void *));
                    210: int    nfs_reclaim     __P((void *));
1.25      fvdl      211: #define nfs_lock       genfs_nolock
                    212: #define nfs_unlock     genfs_nounlock
                    213: #define nfs_islocked   genfs_noislocked
1.17      mycroft   214: int    nfs_bmap        __P((void *));
                    215: int    nfs_strategy    __P((void *));
                    216: int    nfs_print       __P((void *));
                    217: int    nfs_pathconf    __P((void *));
                    218: int    nfs_advlock     __P((void *));
                    219: #define        nfs_blkatoff    genfs_eopnotsupp
                    220: int    nfs_bwrite      __P((void *));
                    221: #define        nfs_valloc      genfs_eopnotsupp
                    222: #define nfs_reallocblks        genfs_eopnotsupp
                    223: #define        nfs_vfree       genfs_nullop
                    224: int    nfs_truncate    __P((void *));
                    225: int    nfs_update      __P((void *));
1.15      christos  226:
                    227: extern int (**nfsv2_vnodeop_p) __P((void *));
                    228:
1.14      jtc       229: #endif /* _KERNEL */
1.16      fvdl      230:
                    231: #endif

CVSweb <webmaster@jp.NetBSD.org>