home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 8.ddi / usr / include / sys / fs / xnamnode.h < prev   
Encoding:
C/C++ Source or Header  |  1990-12-08  |  3.9 KB  |  130 lines

  1. /*    Copyright (c) 1990 UNIX System Laboratories, Inc.    */
  2. /*    Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T    */
  3. /*      All Rights Reserved      */
  4.  
  5. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF         */
  6. /*    UNIX System Laboratories, Inc.                         */
  7. /*    The copyright notice above does not evidence any       */
  8. /*    actual or intended publication of such source code.    */
  9.  
  10. #ifndef _FS_XNAMNODE_H
  11. #define _FS_XNAMNODE_H
  12.  
  13. #ident    "@(#)/usr/include/sys/fs/xnamnode.h.sl 1.1 4.0 12/08/90 16447 AT&T-USL"
  14. /*
  15.  * The xnamnode represents a special XENIX file in any filesystem.  There is
  16.  * one xnamnode for each active special XENIX file.  Filesystems that support
  17.  * special files use xnamvp(vp, dev, type, cr) to convert a normal
  18.  * vnode to a special vnode in the ops lookup() and create().
  19.  *
  20.  */
  21.  
  22. struct xsem {            /* XENIX semaphore */
  23.     short  x_scount;    /* current semaphore count */
  24.     short  x_eflag;        /* err flg */
  25.     struct file *x_headw;    /* first waiter */
  26.     struct file *x_tailw;    /* last waiter */
  27. };
  28.  
  29. struct xsd {               /* XENIX shared data */
  30.     union {
  31.         struct xsd *x_chain; /* next available shared data structure */
  32.         struct anon_map *xamp;  /* Pointer to shared data segment */
  33.     } x_sun;
  34.     unsigned x_len;         /* limit of segment (seg size - 1) */
  35.     short    x_snum;         /* serial # for sdgetv, sdwaitv */
  36.     short    x_flags;        /* LOCKED, etc. */
  37. }; 
  38.  
  39.  
  40. struct xnamnode {
  41.     struct    xnamnode *x_next;        /* must be first */
  42.     struct    vnode x_vnode;        /* vnode associated with this xnamnode */
  43.     struct    vnode *x_realvp;    /* vnode for the fs entry (if any) */
  44.     ushort    x_flag;            /* flags, see below */
  45.     dev_t    x_dev;            /* device the xnamnode represents */
  46.     dev_t    x_fsid;            /* file system identifier */
  47.     daddr_t    x_nextr;        /* next byte read offset (read-ahead) */
  48.     long    x_size;            /* block device size in bytes */
  49.     time_t  x_atime;        /* time of last access */
  50.     time_t  x_mtime;        /* time of last modification */
  51.     time_t  x_ctime;        /* time of last attributes change */
  52.     int    x_count;        /* count of opened references */
  53.     mode_t    x_mode;            /* file mode and type */
  54.     uid_t    x_uid;            /* owner */
  55.     gid_t    x_gid;            /* group */
  56.     union x_u {
  57.         struct  xsem *xsem;    /* ptr to XENIX semaphores */
  58.         struct  xsd *xsd;    /* ptr to XENIX semaphores */
  59.     } x_un;
  60.     struct proc *x_powns;        /* XXX vm debugging */
  61. };
  62.  
  63. #define x_sem    x_un.xsem    /* for v_type==VXNAM && v_rdev==XNAM_SEM */
  64. #define x_sd    x_un.xsd    /* for v_type==VXNAM && v_rdev==XNAM_SD */
  65.  
  66. /* flags */
  67. #define XNAMLOCKED        0x01        /* xnamnode is locked */
  68. #define XNAMUPD        0x02        /* update device access time */
  69. #define XNAMACC        0x04        /* update device modification time */
  70. #define XNAMWANT        0x10        /* some process waiting on lock */
  71. #define XNAMCHG        0x40        /* update device change time */
  72.  
  73. /* XENIX semaphore sub-types */
  74. #define    XNAM_SEM        0x01
  75. #define    XNAM_SD            0x02
  76.  
  77. /*
  78.  * Convert between vnode and xnamnode
  79.  */
  80. #define    VTOXNAM(vp)    ((struct xnamnode *)((vp)->v_data))
  81. #define    XNAMTOV(xp)    (&(xp)->x_vnode)
  82.  
  83. extern struct proc *curproc;    /* XXX vm debugging */
  84. /*
  85.  * Lock and unlock xnamnodes.
  86.  */
  87. #define XNAMNLOCK(xp) { \
  88.     while ((xp)->x_flag & XNAMLOCKED) { \
  89.         (xp)->x_flag |= XNAMWANT; \
  90.         (void) sleep((caddr_t)(xp), PINOD); \
  91.     } \
  92.     (xp)->x_flag |= XNAMLOCKED; \
  93.     if (((xp)->x_vnode.v_flag & VISSWAP) != 0) { \
  94.         curproc->p_swlocks++; \
  95.         curproc->p_flag |= SSWLOCKS; \
  96.     } \
  97.     (xp)->x_powns = curproc; \
  98. }
  99.  
  100. #define XNAMNUNLOCK(xp) { \
  101.     (xp)->x_flag &= ~XNAMLOCKED; \
  102.     if (((xp)->x_vnode.v_flag & VISSWAP) != 0) \
  103.         if (--curproc->p_swlocks == 0) \
  104.             curproc->p_flag &= ~SSWLOCKS; \
  105.     if ((xp)->x_flag & XNAMWANT) { \
  106.         (xp)->x_flag &= ~XNAMWANT; \
  107.         wakeprocs((caddr_t)(xp), PRMPT); \
  108.     } \
  109.     (xp)->x_powns = NULL; \
  110. }
  111.  
  112. /*
  113.  * Construct an xnam vnode for a given device that shadows a particular
  114.  * "real" vnode.
  115.  */
  116. extern struct vnode *xnamvp();
  117.  
  118.  
  119. /*
  120.  * Xnamnode lookup stuff.
  121.  * These routines maintain a table of xnamnodes.
  122.  */
  123.  
  124. #define    XNAMTABLESIZE    2
  125. extern struct xnamnode *xnamtable[];
  126.  
  127. extern struct vnodeops xnam_vnodeops;
  128.  
  129. #endif    /* _FS_XNAMNODE_H */
  130.