Lines Matching refs:split
96 uint split;
109 struct xtsplit * split, struct btstack * btstack);
111 static int xtSplitPage(tid_t tid, struct inode *ip, struct xtsplit * split,
115 struct xtsplit * split, struct metapage ** rmpp);
238 int nsplit = 0; /* number of pages to split */
335 /* compute number of pages to split */
382 /* compute number of pages to split */
440 /* compute number of pages to split */
482 /* update number of pages to split */
535 struct xtsplit split; /* split information */
590 * if the leaf page is full, split the page and
591 * propagate up the router entry for the new page from split
597 split.mp = mp;
598 split.index = index;
599 split.flag = xflag;
600 split.off = xoff;
601 split.len = xlen;
602 split.addr = xaddr;
603 split.pxdlist = NULL;
604 if ((rc = xtSplitUp(tid, ip, &split, &btstack))) {
664 * split full pages as propagating insertion up the tree
669 * split - entry parameter descriptor;
676 struct inode *ip, struct xtsplit * split, struct btstack * btstack)
680 xtpage_t *sp; /* split page */
692 int nsplit; /* number of pages split */
698 smp = split->mp;
716 skip = split->index;
724 XT_PUTENTRY(xad, split->flag, split->off, split->len,
725 split->addr);
745 * allocate new index blocks to cover index page split(s)
749 if (split->pxdlist == NULL) {
751 split->pxdlist = &pxdlist;
776 * The split routines insert the new entry into the leaf page,
781 xtSplitRoot(tid, ip, split, &rmp) :
782 xtSplitPage(tid, ip, split, &rmp, &rbn);
789 * propagate up the router entry for the leaf page just split
792 * propagate the insert/split up the tree by walking back the stack
794 * that were traversed during the search for the page that split.
796 * the propagation of insert/split up the tree stops if the root
797 * splits or the page inserted into doesn't have to split to hold
800 * the parent entry for the split page remains the same, and
829 * because the split was to the right.
834 * split or shift right remaining entries of the parent page
838 * parent page is full - split the parent page
841 /* init for parent page split */
842 split->mp = smp;
843 split->index = skip; /* index at insert */
844 split->flag = XAD_NEW;
845 split->off = offsetXAD(&rcp->xad[XTENTRYSTART]);
846 split->len = JFS_SBI(ip->i_sb)->nbperpage;
847 split->addr = rcbn;
852 /* The split routines insert the new entry,
857 xtSplitRoot(tid, ip, split, &rmp) :
858 xtSplitPage(tid, ip, split, &rmp, &rbn);
930 * split a full non-root page into
931 * original/split/left page and new right page
932 * i.e., the original/split page remains as left page.
937 * struct xtsplit *split,
946 struct xtsplit * split, struct metapage ** rmpp, s64 * rbnp)
965 smp = split->mp;
968 INCREMENT(xtStat.split);
970 pxdlist = split->pxdlist;
983 * allocate the new right page for the split
1014 * acquire a transaction lock on the split page
1028 skip = split->index;
1037 * if we're wrong it's no big deal - we will do the split the right
1040 * reverse sorted data, that is, split the tree left, but it's not.
1051 XT_PUTENTRY(xad, split->flag, split->off, split->len,
1052 split->addr);
1101 * split the data between the split and new/right pages
1108 * skip index in old split/left page - insert into left page:
1111 /* move right half of split page to the new right page */
1122 XT_PUTENTRY(xad, split->flag, split->off, split->len,
1123 split->addr);
1147 XT_PUTENTRY(xad, split->flag, split->off, split->len,
1148 split->addr);
1195 * split the full root page into original/root/split page and new
1199 * non-root page, and the split root page contains a single entry
1205 * struct xtsplit *split,
1213 struct inode *ip, struct xtsplit * split, struct metapage ** rmpp)
1229 INCREMENT(xtStat.split);
1234 pxdlist = split->pxdlist;
1280 skip = split->index;
1287 XT_PUTENTRY(xad, split->flag, split->off, split->len, split->addr);
1310 * action: root split;
1312 BT_MARK_DIRTY(split->mp, ip);
1324 tlck = txLock(tid, ip, split->mp, tlckXTREE | tlckGROW);
1359 struct xtsplit split; /* split information */
1414 * propagate up the router entry for the new page from split
1420 split.mp = mp;
1421 split.index = index + 1;
1422 split.flag = XAD_NEW;
1423 split.off = xoff; /* split offset */
1424 split.len = len;
1425 split.addr = xaddr;
1426 split.pxdlist = NULL;
1427 if ((rc = xtSplitUp(tid, ip, &split, &btstack)))
1435 * if leaf root has been split, original root has been
1500 * function: split existing 'tail' extent
1501 * (split offset >= start offset of tail extent), and
1502 * relocate and extend the split tail half;
1507 * update pmap: free old split tail extent, alloc new extent;
1510 struct inode *ip, s64 xoff, /* split/new extent offset */
1522 struct xtsplit split; /* split information */
1579 * propagate up the router entry for the new page from split
1585 split.mp = mp;
1586 split.index = index + 1;
1587 split.flag = XAD_NEW;
1588 split.off = xoff; /* split offset */
1589 split.len = xlen;
1590 split.addr = xaddr;
1591 split.pxdlist = NULL;
1592 if ((rc = xtSplitUp(tid, ip, &split, &btstack)))
1600 * if leaf root has been split, original root has been
1639 * truncate/relocate old extent at split offset
1701 struct xtsplit split; /* split information */
1903 * split XAD into (lXAD, nXAD):
1918 split.mp = mp;
1919 split.index = newindex;
1920 split.flag = xflag & ~XAD_NOTRECORDED;
1921 split.off = nxoff;
1922 split.len = nxlen;
1923 split.addr = nxaddr;
1924 split.pxdlist = NULL;
1925 if ((rc = xtSplitUp(tid, ip, &split, &btstack)))
1933 * if leaf root has been split, original root has been
1982 * does nXAD force 3-way split ?
1991 /* reorient nXAD as XAD for further split XAD into (nXAD, rXAD) */
2026 /* recompute split pages */
2050 * split XAD into (nXAD, rXAD)
2068 printf("xtUpdate.updateLeft.split p:0x%p\n", p);
2071 split.mp = mp;
2072 split.index = newindex;
2073 split.flag = xflag;
2074 split.off = xoff;
2075 split.len = xlen;
2076 split.addr = xaddr;
2077 split.pxdlist = NULL;
2078 if ((rc = xtSplitUp(tid, ip, &split, &btstack)))
2087 * if leaf root has been split, original root has been
2168 struct xtsplit split; /* split information */
2211 * if the leaf page is full, split the page and
2212 * propagate up the router entry for the new page from split
2221 * allocate new index blocks to cover index page split(s)
2224 split.pxdlist = &pxdlist;
2251 split.mp = mp;
2252 split.index = index;
2253 split.flag = xflag;
2254 split.off = xoff;
2255 split.len = xlen;
2256 split.addr = xaddr;
2257 if ((rc = xtSplitUp(tid, ip, &split, &btstack))) {
3874 xtStat.split);