Lines 2490-2495
bnoreuselist(struct bufv *bufv, struct bufobj *bo, daddr_t startn, daddr_t endn)
Link Here
|
2490 |
for (lblkno = startn;;) { |
2490 |
for (lblkno = startn;;) { |
2491 |
again: |
2491 |
again: |
2492 |
bp = BUF_PCTRIE_LOOKUP_GE(&bufv->bv_root, lblkno); |
2492 |
bp = BUF_PCTRIE_LOOKUP_GE(&bufv->bv_root, lblkno); |
|
|
2493 |
if (bp == NULL) |
2494 |
bp = BUF_PCTRIE_LOOKUP_GE(&bufv->bv_root, 0); |
2493 |
if (bp == NULL || bp->b_lblkno >= endn || |
2495 |
if (bp == NULL || bp->b_lblkno >= endn || |
2494 |
bp->b_lblkno < startn) |
2496 |
bp->b_lblkno < startn) |
2495 |
break; |
2497 |
break; |
Lines 2629-2636
v_inval_buf_range_locked(struct vnode *vp, struct bufobj *bo,
Link Here
|
2629 |
do { |
2631 |
do { |
2630 |
bv = clean ? &bo->bo_clean : &bo->bo_dirty; |
2632 |
bv = clean ? &bo->bo_clean : &bo->bo_dirty; |
2631 |
bp = BUF_PCTRIE_LOOKUP_GE(&bv->bv_root, startlbn); |
2633 |
bp = BUF_PCTRIE_LOOKUP_GE(&bv->bv_root, startlbn); |
2632 |
if (bp == NULL || bp->b_lblkno >= endlbn || |
2634 |
if (bp == NULL) |
2633 |
bp->b_lblkno < startlbn) |
2635 |
bp = BUF_PCTRIE_LOOKUP_GE(&bv->bv_root, 0); |
|
|
2636 |
if (bp == NULL || bp->b_lblkno < startlbn) |
2634 |
continue; |
2637 |
continue; |
2635 |
TAILQ_FOREACH_FROM_SAFE(bp, &bv->bv_hd, b_bobufs, nbp) { |
2638 |
TAILQ_FOREACH_FROM_SAFE(bp, &bv->bv_hd, b_bobufs, nbp) { |
2636 |
if (bp->b_lblkno >= endlbn) |
2639 |
if (bp->b_lblkno >= endlbn) |
Lines 2710-2721
buf_vlist_find_or_add(struct buf *bp, struct bufobj *bo, b_xflags_t xflags)
Link Here
|
2710 |
bv = &bo->bo_clean; |
2713 |
bv = &bo->bo_clean; |
2711 |
|
2714 |
|
2712 |
error = BUF_PCTRIE_INSERT_LOOKUP_LE(&bv->bv_root, bp, &n); |
2715 |
error = BUF_PCTRIE_INSERT_LOOKUP_LE(&bv->bv_root, bp, &n); |
|
|
2716 |
if (error != EEXIST) { |
2717 |
if (n == NULL) |
2718 |
n = BUF_PCTRIE_LOOKUP_LE(&bv->bv_root, ~0L); |
2719 |
if (n->b_lblkno >= bp->b_lblkno) |
2720 |
n = NULL; |
2721 |
} |
2713 |
if (n == NULL) { |
2722 |
if (n == NULL) { |
2714 |
KASSERT(error != EEXIST, |
2723 |
KASSERT(error != EEXIST, |
2715 |
("buf_vlist_add: EEXIST but no existing buf found: bp %p", |
2724 |
("buf_vlist_add: EEXIST but no existing buf found: bp %p", |
2716 |
bp)); |
2725 |
bp)); |
2717 |
} else { |
2726 |
} else { |
2718 |
KASSERT((uint64_t)n->b_lblkno <= (uint64_t)bp->b_lblkno, |
2727 |
KASSERT(n->b_lblkno <= bp->b_lblkno, |
2719 |
("buf_vlist_add: out of order insert/lookup: bp %p n %p", |
2728 |
("buf_vlist_add: out of order insert/lookup: bp %p n %p", |
2720 |
bp, n)); |
2729 |
bp, n)); |
2721 |
KASSERT((n->b_lblkno == bp->b_lblkno) == (error == EEXIST), |
2730 |
KASSERT((n->b_lblkno == bp->b_lblkno) == (error == EEXIST), |
Lines 2728-2743
buf_vlist_find_or_add(struct buf *bp, struct bufobj *bo, b_xflags_t xflags)
Link Here
|
2728 |
/* Keep the list ordered. */ |
2737 |
/* Keep the list ordered. */ |
2729 |
if (n == NULL) { |
2738 |
if (n == NULL) { |
2730 |
KASSERT(TAILQ_EMPTY(&bv->bv_hd) || |
2739 |
KASSERT(TAILQ_EMPTY(&bv->bv_hd) || |
2731 |
(uint64_t)bp->b_lblkno < |
2740 |
bp->b_lblkno < TAILQ_FIRST(&bv->bv_hd)->b_lblkno, |
2732 |
(uint64_t)TAILQ_FIRST(&bv->bv_hd)->b_lblkno, |
|
|
2733 |
("buf_vlist_add: queue order: " |
2741 |
("buf_vlist_add: queue order: " |
2734 |
"%p should be before first %p", |
2742 |
"%p should be before first %p", |
2735 |
bp, TAILQ_FIRST(&bv->bv_hd))); |
2743 |
bp, TAILQ_FIRST(&bv->bv_hd))); |
2736 |
TAILQ_INSERT_HEAD(&bv->bv_hd, bp, b_bobufs); |
2744 |
TAILQ_INSERT_HEAD(&bv->bv_hd, bp, b_bobufs); |
2737 |
} else { |
2745 |
} else { |
2738 |
KASSERT(TAILQ_NEXT(n, b_bobufs) == NULL || |
2746 |
KASSERT(TAILQ_NEXT(n, b_bobufs) == NULL || |
2739 |
(uint64_t)bp->b_lblkno < |
2747 |
bp->b_lblkno < TAILQ_NEXT(n, b_bobufs)->b_lblkno, |
2740 |
(uint64_t)TAILQ_NEXT(n, b_bobufs)->b_lblkno, |
|
|
2741 |
("buf_vlist_add: queue order: " |
2748 |
("buf_vlist_add: queue order: " |
2742 |
"%p should be before next %p", |
2749 |
"%p should be before next %p", |
2743 |
bp, TAILQ_NEXT(n, b_bobufs))); |
2750 |
bp, TAILQ_NEXT(n, b_bobufs))); |