Annotation of 42BSD/ingres/source/iutil/add_ovflo.c, revision 1.1.1.1

1.1       root        1: # include      <ingres.h>
                      2: # include      <access.h>
                      3: # include      <aux.h>
                      4: # include      <lock.h>
                      5: # include      <sccs.h>
                      6: 
                      7: SCCSID(@(#)add_ovflo.c 7.1     2/5/81)
                      8: 
                      9: /*
                     10: **     ADD_OVFLO -- Allocates an overflow page which will be
                     11: **             attached to current page.  TID must be for current page.
                     12: **             TID will be updated to id of new overflow page.
                     13: */
                     14: 
                     15: add_ovflo(dx, tid)
                     16: DESC   *dx;
                     17: TID    *tid;
                     18: {
                     19:        register DESC           *d;
                     20:        register struct accbuf  *b;
                     21:        extern struct accbuf    *choose_buf();
                     22:        register int            lk;
                     23:        int                     i;
                     24:        long                    mpage, newpage;
                     25:        TID                     tidx;
                     26: 
                     27:        d = dx;
                     28: #      ifdef xATR2
                     29:        if (tTf(26, 3))
                     30:                printf("ADD_OVFLO:\n");
                     31: #      endif
                     32: 
                     33:        /*
                     34:        **      save main page pointer so that it may be used when
                     35:        **      setting up new overflow page.
                     36:        */
                     37:        mpage = Acc_head->mainpg;
                     38: 
                     39:        if (lk = (Acclock && (d->reldum.relstat & S_CONCUR) && (d->relopn < 0 )))
                     40:        {
                     41:                setcsl(Acc_head->rel_tupid);
                     42:                Acclock = FALSE;
                     43:        }
                     44: 
                     45:        /*
                     46:        **      Determine last page of the relation
                     47:        */
                     48:        last_page(d, &tidx, Acc_head);
                     49:        pluck_page(&tidx, &newpage);
                     50:        newpage++;
                     51: 
                     52:        /*
                     53:        **      choose an available buffer as victim for setting up
                     54:        **      overflow page.
                     55:        */
                     56:        if ((b = choose_buf(d, newpage)) == NULL)
                     57:        {
                     58:                if (lk)
                     59:                {
                     60:                        Acclock = TRUE;
                     61:                        unlcs(Acc_head->rel_tupid);
                     62:                }
                     63:                return(-1);
                     64:        }
                     65: 
                     66:        /*
                     67:        **      setup overflow page
                     68:        */
                     69: 
                     70:        b->mainpg = mpage;
                     71:        b->ovflopg = 0;
                     72:        b->thispage = newpage;
                     73:        b->linetab[0] = (int) b->firstup - (int) b;
                     74:        b->nxtlino = 0;
                     75:        b->bufstatus |= BUF_DIRTY;
                     76:        if (pageflush(b))
                     77:                return (-2);
                     78: 
                     79:        /*
                     80:        **      now that overflow page has successfully been written,
                     81:        **      get the old current page back and link the new overflow page
                     82:        **      to it.
                     83:        **      If the relation is a heap then don't leave the old main
                     84:        **      page around in the buffers. This is done on the belief
                     85:        **      that it will never be accessed again.
                     86:        */
                     87: 
                     88:        if (get_page(d, tid))
                     89:                return (-3);
                     90:        Acc_head->ovflopg = newpage;
                     91:        Acc_head->bufstatus |= BUF_DIRTY;
                     92:        i = pageflush(Acc_head);
                     93:        if (lk)
                     94:        {
                     95:                Acclock = TRUE;
                     96:                unlcs(Acc_head->rel_tupid);
                     97:        }
                     98:        if (i)
                     99:                return (-4);
                    100:        if (abs(d->reldum.relspec) == M_HEAP)
                    101:                resetacc(Acc_head);     /* no error is possible */
                    102: 
                    103:        /*
                    104:        **      now bring the overflow page back and make it current.
                    105:        **      if the overflow page is still in AM cache, then this will not
                    106:        **      cause any disk activity.
                    107:        */
                    108: 
                    109:        stuff_page(tid, &newpage);
                    110:        if (get_page(d, tid))
                    111:                return (-5);
                    112:        return (0);
                    113: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.