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

1.29.4.1! he          1: /*      $NetBSD$       */
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.29.4.1! he        137:        off_t                   n_pushedlo;     /* 1st blk in commited range */
        !           138:        off_t                   n_pushedhi;     /* Last block in range */
        !           139:        off_t                   n_pushlo;       /* 1st block in commit range */
        !           140:        off_t                   n_pushhi;       /* Last block in range */
        !           141:        struct lock             n_commitlock;   /* Serialize commits XXX */
        !           142:        int                     n_commitflags;
1.1       mycroft   143: };
1.29.4.1! he        144:
        !           145: /*
        !           146:  * Values for n_commitflags
        !           147:  */
        !           148: #define NFS_COMMIT_PUSH_VALID  0x0001          /* push range valid */
        !           149: #define NFS_COMMIT_PUSHED_VALID        0x0002          /* pushed range valid */
1.1       mycroft   150:
1.16      fvdl      151: #define n_atim         n_un1.nf_atim
                    152: #define n_mtim         n_un2.nf_mtim
                    153: #define n_sillyrename  n_un3.nf_silly
                    154: #define n_cookieverf   n_un1.nd_cookieverf
                    155: #define n_direofoffset n_un2.nd_direof
1.21      fvdl      156: #define n_dircache     n_un3.nd_dircache
1.16      fvdl      157:
1.10      mycroft   158: /*
                    159:  * Flags for n_flag
                    160:  */
                    161: #define        NFLUSHWANT      0x0001  /* Want wakeup from a flush in prog. */
                    162: #define        NFLUSHINPROG    0x0002  /* Avoid multiple calls to vinvalbuf() */
                    163: #define        NMODIFIED       0x0004  /* Might have a modified buffer in bio */
                    164: #define        NWRITEERR       0x0008  /* Flag write errors so close will know */
                    165: #define        NQNFSNONCACHE   0x0020  /* Non-cachable lease */
                    166: #define        NQNFSWRITE      0x0040  /* Write lease */
                    167: #define        NQNFSEVICTED    0x0080  /* Has been evicted */
                    168: #define        NACC            0x0100  /* Special file accessed */
                    169: #define        NUPD            0x0200  /* Special file updated */
                    170: #define        NCHG            0x0400  /* Special file times changed */
1.1       mycroft   171:
                    172: /*
                    173:  * Convert between nfsnode pointers and vnode pointers
                    174:  */
                    175: #define VTONFS(vp)     ((struct nfsnode *)(vp)->v_data)
                    176: #define NFSTOV(np)     ((struct vnode *)(np)->n_vnode)
1.10      mycroft   177:
1.1       mycroft   178: /*
1.10      mycroft   179:  * Queue head for nfsiod's
1.1       mycroft   180:  */
1.19      thorpej   181: extern struct proc *nfs_iodwant[NFS_MAXASYNCDAEMON];
                    182: extern struct nfsmount *nfs_iodmount[NFS_MAXASYNCDAEMON];
1.1       mycroft   183:
1.14      jtc       184: #ifdef _KERNEL
1.1       mycroft   185: /*
                    186:  * Prototypes for NFS vnode operations
                    187:  */
1.17      mycroft   188: int    nfs_lookup      __P((void *));
                    189: int    nfs_create      __P((void *));
                    190: int    nfs_mknod       __P((void *));
                    191: int    nfs_open        __P((void *));
                    192: int    nfs_close       __P((void *));
                    193: int    nfsspec_close   __P((void *));
                    194: int    nfsfifo_close   __P((void *));
                    195: int    nfs_access      __P((void *));
                    196: int    nfsspec_access  __P((void *));
                    197: int    nfs_getattr     __P((void *));
                    198: int    nfs_setattr     __P((void *));
                    199: int    nfs_read        __P((void *));
                    200: int    nfs_write       __P((void *));
                    201: #define        nfs_lease_check genfs_nullop
                    202: int    nfsspec_read    __P((void *));
                    203: int    nfsspec_write   __P((void *));
                    204: int    nfsfifo_read    __P((void *));
                    205: int    nfsfifo_write   __P((void *));
1.27      matthias  206: #define        nfs_ioctl       genfs_enoioctl
1.18      mycroft   207: #define        nfs_poll        genfs_poll
1.25      fvdl      208: #define nfs_revoke     genfs_revoke
1.17      mycroft   209: int    nfs_mmap        __P((void *));
                    210: int    nfs_fsync       __P((void *));
1.20      kleink    211: #define nfs_seek       genfs_seek
1.17      mycroft   212: int    nfs_remove      __P((void *));
                    213: int    nfs_link        __P((void *));
                    214: int    nfs_rename      __P((void *));
                    215: int    nfs_mkdir       __P((void *));
                    216: int    nfs_rmdir       __P((void *));
                    217: int    nfs_symlink     __P((void *));
                    218: int    nfs_readdir     __P((void *));
                    219: int    nfs_readlink    __P((void *));
                    220: #define        nfs_abortop     genfs_abortop
                    221: int    nfs_inactive    __P((void *));
                    222: int    nfs_reclaim     __P((void *));
1.25      fvdl      223: #define nfs_lock       genfs_nolock
                    224: #define nfs_unlock     genfs_nounlock
                    225: #define nfs_islocked   genfs_noislocked
1.17      mycroft   226: int    nfs_bmap        __P((void *));
                    227: int    nfs_strategy    __P((void *));
                    228: int    nfs_print       __P((void *));
                    229: int    nfs_pathconf    __P((void *));
                    230: int    nfs_advlock     __P((void *));
                    231: #define        nfs_blkatoff    genfs_eopnotsupp
                    232: int    nfs_bwrite      __P((void *));
                    233: #define        nfs_valloc      genfs_eopnotsupp
                    234: #define nfs_reallocblks        genfs_eopnotsupp
                    235: #define        nfs_vfree       genfs_nullop
                    236: int    nfs_truncate    __P((void *));
                    237: int    nfs_update      __P((void *));
1.15      christos  238:
                    239: extern int (**nfsv2_vnodeop_p) __P((void *));
                    240:
1.14      jtc       241: #endif /* _KERNEL */
1.16      fvdl      242:
                    243: #endif

CVSweb <webmaster@jp.NetBSD.org>