home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / UNIX3862.ZIP / U386-06.ZIP / U386-6.TD0 / usr / include / sys / rbuf.h < prev    next >
Encoding:
C/C++ Source or Header  |  1988-06-26  |  3.8 KB  |  128 lines

  1. /*    Copyright (c) 1984, 1986, 1987, 1988 AT&T    */
  2. /*      All Rights Reserved      */
  3.  
  4. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T    */
  5. /*    The copyright notice above does not evidence any       */
  6. /*    actual or intended publication of such source code.    */
  7.  
  8.  
  9. #ident    "@(#)head.sys:rbuf.h    1.2"
  10.  
  11. /*
  12.  *      New parameters and macros for RFS network cache. rbuf structure
  13.  *    defines contents of buffer header when buffer contains remote (RFS)
  14.  *    server file data.
  15.  *
  16.  *      WARNING:  do not change size of the buf structure (sys/buf.h) without 
  17.  *    making a corresponding size change in the the rbuf structure 
  18.  *    (sys/rbuf.h), and vice versa.  The two structures define the two 
  19.  *    possible formats of the buffer header (the format used depends on 
  20.  *    whether the buffer contains local data or RFS data).  
  21.  *
  22.  *      This overlay of the two structures is an interim solution
  23.  *    that is expected to change in a future release.  Users
  24.  *    should be aware that the rbuf structure will probably go
  25.  *    away at that time.
  26.  */
  27.  
  28. #define    RBSIZE        FsBSIZE(SBUFSIZE)
  29. #define RBSHIFT        FsBSHIFT(SBUFSIZE)
  30. #define    RBMASK        FsBMASK(SBUFSIZE)
  31. #define LGET        0
  32. #define    RGET        1
  33. #define BUFAGE        300    /* Maximum buffer age time for NREMOTE minimum*/
  34.  
  35. #define off_to_blkoff(x)     ((unsigned long)(x) >> (RBSHIFT))
  36.                     /*convert offset to 1024 block-size*/
  37. #define ct_to_blkct(x,y)     ((x)<=0?0:((off_to_blkoff((x)-1+(y))-off_to_blkoff(y))+1))
  38.                     /*no. of blocks in read/write request*/
  39.  
  40. typedef struct    rbuf
  41. {
  42.     int    b_flags;        
  43.     struct    rbuf *b_forw;        /* position in RFS block hash table */
  44.     struct    rbuf *b_back;        /*  "  */
  45.     struct    rbuf *av_forw;        /* position on RFS free list, */
  46.     struct    rbuf *av_back;        /*     if not BUSY*/
  47.     struct    rbuf *f_forw;        /* position in RFS file hash table */
  48.     struct    rbuf *f_back;        /*  "  */
  49.     union {
  50.         caddr_t b_addr;        /* low order core address */
  51.     } b_un;
  52.  
  53.     daddr_t    b_blkno;        /* logical block # (computed from offset)*/
  54.     long           b_fhandle;    /* buffer remote file ID */
  55.     struct queue    *b_queue;       /* buffer remote server ID */
  56.     index_t        b_mntindx;      /* remote mount index */
  57.     unsigned long    b_vcode;        /* remote file version code */
  58.     unsigned long    b_reltime;      /* previous release time */
  59. } rbuf_t;
  60.  
  61. /*  
  62.  * Union defining dependency between buf and rbuf structure sizes
  63.  * (this union is not actually used in kernel code because of dependencies of
  64.  * old source code on buf structure).
  65.  */
  66. union unibuf {
  67.     struct    buf    loc;
  68.     struct    rbuf    rem;
  69. } ;
  70.  
  71. extern    struct    rbuf    rbfreelist;    /* head of available list */
  72. extern  int        rcache_enable;
  73. extern  unsigned long    rfs_vcode;
  74. extern  unsigned long    rbuf_ct;
  75. extern  unsigned long    lbuf_ct;
  76. extern    int        rhmask;
  77. extern    int        nrhbuf;
  78. extern    unsigned long    nlbuf;
  79. extern    unsigned long    nrbuf;
  80. extern    unsigned long    rcache_time;
  81. extern    int        rc_time;
  82. extern    unsigned long    nremote;
  83. extern    unsigned long    nlocal;
  84. extern    unsigned long    maxbufage;
  85. struct     rbuf         *rget_cache();
  86. struct     rbuf         *rgeteblk();
  87. struct     rbuf         *chk_rlist();
  88. uint            rcache_out();
  89.  
  90.  
  91. /*
  92.  *    Fast access to buffers in cache by hashing.
  93.  */
  94. #define rbhash(d,b)    ((struct rbuf *)&rhbuf[((int)d+(int)b)&rhmask])
  95. /*
  96.  * Key value for rfhash is fhandle (file handle), which is a full-word aligned
  97.  * memory address.  It therefore needs to be shifted right two places
  98.  * before using it as a hash key.
  99.  */
  100. #define rfhash(d)    ((struct rbuf *)&rhbuf[((int)(d>>2))&rhmask])
  101.  
  102. struct    rhbuf
  103. {
  104.     int    b_flags;
  105.     struct    rbuf *b_forw;
  106.     struct    rbuf *b_back;
  107.     struct    rbuf *av_forw;
  108.     struct    rbuf *av_back;    
  109.     struct    rbuf *f_forw;            
  110.     struct    rbuf *f_back;        
  111. };
  112.  
  113. extern    struct    rhbuf    rhbuf[];
  114.  
  115. /*
  116.  * Unlink a buffer from the remote freelist list and mark it busy.
  117.  * Spls not needed since interrupts should
  118.  * never return buffers to remote freelist.
  119.  */
  120. #define remnotavail(bp) \
  121. {\
  122.     register s;\
  123. \
  124.     bp->av_back->av_forw = bp->av_forw;\
  125.     bp->av_forw->av_back = bp->av_back;\
  126.     bp->b_flags |= B_BUSY;\
  127. }
  128.