home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / nfs / nfsnode.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  8.3 KB  |  216 lines

  1. /*
  2.  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
  3.  *
  4.  * @APPLE_LICENSE_HEADER_START@
  5.  * 
  6.  * The contents of this file constitute Original Code as defined in and
  7.  * are subject to the Apple Public Source License Version 1.1 (the
  8.  * "License").  You may not use this file except in compliance with the
  9.  * License.  Please obtain a copy of the License at
  10.  * http://www.apple.com/publicsource and read it before using this file.
  11.  * 
  12.  * This Original Code and all software distributed under the License are
  13.  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14.  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17.  * License for the specific language governing rights and limitations
  18.  * under the License.
  19.  * 
  20.  * @APPLE_LICENSE_HEADER_END@
  21.  */
  22. /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
  23. /*
  24.  * Copyright (c) 1989, 1993
  25.  *    The Regents of the University of California.  All rights reserved.
  26.  *
  27.  * This code is derived from software contributed to Berkeley by
  28.  * Rick Macklem at The University of Guelph.
  29.  *
  30.  * Redistribution and use in source and binary forms, with or without
  31.  * modification, are permitted provided that the following conditions
  32.  * are met:
  33.  * 1. Redistributions of source code must retain the above copyright
  34.  *    notice, this list of conditions and the following disclaimer.
  35.  * 2. Redistributions in binary form must reproduce the above copyright
  36.  *    notice, this list of conditions and the following disclaimer in the
  37.  *    documentation and/or other materials provided with the distribution.
  38.  * 3. All advertising materials mentioning features or use of this software
  39.  *    must display the following acknowledgement:
  40.  *    This product includes software developed by the University of
  41.  *    California, Berkeley and its contributors.
  42.  * 4. Neither the name of the University nor the names of its contributors
  43.  *    may be used to endorse or promote products derived from this software
  44.  *    without specific prior written permission.
  45.  *
  46.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  47.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  48.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  49.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  50.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  51.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  52.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  53.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  54.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  55.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  56.  * SUCH DAMAGE.
  57.  *
  58.  *    @(#)nfsnode.h    8.9 (Berkeley) 5/14/95
  59.  * FreeBSD-Id: nfsnode.h,v 1.24 1997/10/28 14:06:25 bde Exp $
  60.  */
  61.  
  62.  
  63. #ifndef _NFS_NFSNODE_H_
  64. #define _NFS_NFSNODE_H_
  65.  
  66. #ifndef _NFS_NFS_H_
  67. #include <nfs/nfs.h>
  68. #endif
  69.  
  70. /*
  71.  * Silly rename structure that hangs off the nfsnode until the name
  72.  * can be removed by nfs_inactive()
  73.  */
  74. struct sillyrename {
  75.     struct    ucred *s_cred;
  76.     struct    vnode *s_dvp;
  77.     long    s_namlen;
  78.     char    s_name[20];
  79. };
  80.  
  81. /*
  82.  * This structure is used to save the logical directory offset to
  83.  * NFS cookie mappings.
  84.  * The mappings are stored in a list headed
  85.  * by n_cookies, as required.
  86.  * There is one mapping for each NFS_DIRBLKSIZ bytes of directory information
  87.  * stored in increasing logical offset byte order.
  88.  */
  89. #define NFSNUMCOOKIES        31
  90.  
  91. struct nfsdmap {
  92.     LIST_ENTRY(nfsdmap)    ndm_list;
  93.     int            ndm_eocookie;
  94.     nfsuint64        ndm_cookies[NFSNUMCOOKIES];
  95. };
  96.  
  97. /*
  98.  * The nfsnode is the nfs equivalent to ufs's inode. Any similarity
  99.  * is purely coincidental.
  100.  * There is a unique nfsnode allocated for each active file,
  101.  * each current directory, each mounted-on file, text file, and the root.
  102.  * An nfsnode is 'named' by its file handle. (nget/nfs_node.c)
  103.  * If this structure exceeds 256 bytes (it is currently 256 using 4.4BSD-Lite
  104.  * type definitions), file handles of > 32 bytes should probably be split out
  105.  * into a separate MALLOC()'d data structure. (Reduce the size of nfsfh_t by
  106.  * changing the definition in sys/mount.h of NFS_SMALLFH.)
  107.  * NB: Hopefully the current order of the fields is such that everything will
  108.  *     be well aligned and, therefore, tightly packed.
  109.  */
  110. struct nfsnode {
  111.     LIST_ENTRY(nfsnode)    n_hash;        /* Hash chain */
  112.     CIRCLEQ_ENTRY(nfsnode)    n_timer;    /* Nqnfs timer chain */
  113.     u_quad_t        n_size;        /* Current size of file */
  114.     u_quad_t        n_brev;        /* Modify rev when cached */
  115.     u_quad_t        n_lrev;        /* Modify rev for lease */
  116.     struct vattr        n_vattr;    /* Vnode attribute cache */
  117.     time_t            n_attrstamp;    /* Attr. cache timestamp */
  118.         u_int32_t               n_mode;         /* ACCESS mode cache */
  119.         uid_t                   n_modeuid;      /* credentials having mode */
  120.         time_t                  n_modestamp;    /* mode cache timestamp */
  121.     time_t            n_mtime;    /* Prev modify time. */
  122.     time_t            n_ctime;    /* Prev create time. */
  123.     time_t            n_expiry;    /* Lease expiry time */
  124.     nfsfh_t            *n_fhp;        /* NFS File Handle */
  125.     struct vnode        *n_vnode;    /* associated vnode */
  126.     struct lockf        *n_lockf;    /* Locking record of file */
  127.     int            n_error;    /* Save write error value */
  128.     union {
  129.         struct timespec    nf_atim;    /* Special file times */
  130.         nfsuint64    nd_cookieverf;    /* Cookie verifier (dir only) */
  131.     } n_un1;
  132.     union {
  133.         struct timespec    nf_mtim;
  134.         off_t        nd_direof;    /* Dir. EOF offset cache */
  135.     } n_un2;
  136.     union {
  137.         struct sillyrename *nf_silly;    /* Ptr to silly rename struct */
  138.         LIST_HEAD(, nfsdmap) nd_cook;    /* cookies */
  139.     } n_un3;
  140.     short            n_fhsize;    /* size in bytes, of fh */
  141.     short            n_flag;        /* Flag for locking.. */
  142.     nfsfh_t            n_fh;        /* Small File Handle */
  143. };
  144.  
  145. #define n_atim        n_un1.nf_atim
  146. #define n_mtim        n_un2.nf_mtim
  147. #define n_sillyrename    n_un3.nf_silly
  148. #define n_cookieverf    n_un1.nd_cookieverf
  149. #define n_direofoffset    n_un2.nd_direof
  150. #define n_cookies    n_un3.nd_cook
  151.  
  152. /*
  153.  * Flags for n_flag
  154.  */
  155. #define    NFLUSHWANT    0x0001    /* Want wakeup from a flush in prog. */
  156. #define    NFLUSHINPROG    0x0002    /* Avoid multiple calls to vinvalbuf() */
  157. #define    NMODIFIED    0x0004    /* Might have a modified buffer in bio */
  158. #define    NWRITEERR    0x0008    /* Flag write errors so close will know */
  159. #define    NQNFSNONCACHE    0x0020    /* Non-cachable lease */
  160. #define    NQNFSWRITE    0x0040    /* Write lease */
  161. #define    NQNFSEVICTED    0x0080    /* Has been evicted */
  162. #define    NACC        0x0100    /* Special file accessed */
  163. #define    NUPD        0x0200    /* Special file updated */
  164. #define    NCHG        0x0400    /* Special file times changed */
  165. #define NLOCKED        0x0800  /* node is locked */
  166. #define NWANTED        0x0100  /* someone wants to lock */
  167.  
  168. /*
  169.  * Convert between nfsnode pointers and vnode pointers
  170.  */
  171. #define VTONFS(vp)    ((struct nfsnode *)(vp)->v_data)
  172. #define NFSTOV(np)    ((struct vnode *)(np)->n_vnode)
  173.  
  174. /*
  175.  * Queue head for nfsiod's
  176.  */
  177. extern TAILQ_HEAD(nfs_bufq, buf) nfs_bufq;
  178. extern struct proc *nfs_iodwant[NFS_MAXASYNCDAEMON];
  179. extern struct nfsmount *nfs_iodmount[NFS_MAXASYNCDAEMON];
  180.  
  181. #if defined(KERNEL)
  182. typedef int     vop_t __P((void *));
  183. extern    vop_t    **fifo_nfsv2nodeop_p;
  184. extern    vop_t    **nfsv2_vnodeop_p;
  185. extern    vop_t    **spec_nfsv2nodeop_p;
  186.  
  187. /*
  188.  * Prototypes for NFS vnode operations
  189.  */
  190. int    nfs_write __P((struct vop_write_args *));
  191. #define    nfs_lease_check ((int (*) __P((struct  vop_lease_args *)))nullop)
  192. #define nqnfs_vop_lease_check    lease_check
  193. int    nqnfs_vop_lease_check __P((struct vop_lease_args *));
  194. #define nfs_revoke vop_revoke
  195. #define nfs_seek ((int (*) __P((struct  vop_seek_args *)))nullop)
  196. int    nfs_abortop __P((struct vop_abortop_args *));
  197. int    nfs_inactive __P((struct vop_inactive_args *));
  198. int    nfs_reclaim __P((struct vop_reclaim_args *));
  199. #define nfs_lock ((int (*) __P((struct vop_lock_args *)))vop_nolock)
  200. #define nfs_unlock ((int (*) __P((struct vop_unlock_args *)))vop_nounlock)
  201. #define nfs_islocked ((int (*) __P((struct vop_islocked_args *)))vop_noislocked)
  202. #define nfs_reallocblks \
  203.     ((int (*) __P((struct  vop_reallocblks_args *)))eopnotsupp)
  204.  
  205. /* other stuff */
  206. int    nfs_removeit __P((struct sillyrename *));
  207. int    nfs_nget __P((struct mount *,nfsfh_t *,int,struct nfsnode **));
  208. nfsuint64 *nfs_getcookie __P((struct nfsnode *, off_t, int));
  209. void nfs_invaldir __P((struct vnode *));
  210.  
  211. #define nqnfs_lease_updatetime    lease_updatetime
  212.  
  213. #endif /* KERNEL */
  214.  
  215. #endif
  216.