diff options
Diffstat (limited to 'sys/kern/subr_extent.c')
| -rw-r--r-- | sys/kern/subr_extent.c | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/sys/kern/subr_extent.c b/sys/kern/subr_extent.c index 7d4d48b4da8..78fc592919e 100644 --- a/sys/kern/subr_extent.c +++ b/sys/kern/subr_extent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: subr_extent.c,v 1.25 2002/12/08 08:18:37 deraadt Exp $ */ +/* $OpenBSD: subr_extent.c,v 1.26 2004/12/26 21:22:13 miod Exp $ */ /* $NetBSD: subr_extent.c,v 1.7 1996/11/21 18:46:34 cgd Exp $ */ /*- @@ -266,9 +266,10 @@ extent_destroy(ex) #endif /* Free all region descriptors in extent. */ - for (rp = ex->ex_regions.lh_first; rp != NULL; ) { + for (rp = LIST_FIRST(&ex->ex_regions); + rp != LIST_END(&ex->ex_regions); ) { orp = rp; - rp = rp->er_link.le_next; + rp = LIST_NEXT(rp, er_link); LIST_REMOVE(orp, er_link); extent_free_region_descriptor(ex, orp); } @@ -305,12 +306,12 @@ extent_insert_and_optimize(ex, start, size, flags, after, rp) * descriptor overhead. */ if (((ex->ex_flags & EXF_NOCOALESCE) == 0) && - (ex->ex_regions.lh_first != NULL) && - ((start + size) == ex->ex_regions.lh_first->er_start)) { + !LIST_EMPTY(&ex->ex_regions) && + ((start + size) == LIST_FIRST(&ex->ex_regions)->er_start)) { /* * We can coalesce. Prepend us to the first region. */ - ex->ex_regions.lh_first->er_start = start; + LIST_FIRST(&ex->ex_regions)->er_start = start; extent_free_region_descriptor(ex, rp); return; } @@ -346,8 +347,8 @@ extent_insert_and_optimize(ex, start, size, flags, after, rp) /* * Attempt to coalesce with the region after us. */ - if ((after->er_link.le_next != NULL) && - ((start + size) == after->er_link.le_next->er_start)) { + if (LIST_NEXT(after, er_link) != NULL && + ((start + size) == LIST_NEXT(after, er_link)->er_start)) { /* * We can coalesce. Note that if we appended ourselves * to the previous region, we exactly fit the gap, and @@ -357,15 +358,15 @@ extent_insert_and_optimize(ex, start, size, flags, after, rp) /* * Yup, we can free it up. */ - after->er_end = after->er_link.le_next->er_end; - nextr = after->er_link.le_next; + after->er_end = LIST_NEXT(after, er_link)->er_end; + nextr = LIST_NEXT(after, er_link); LIST_REMOVE(nextr, er_link); extent_free_region_descriptor(ex, nextr); } else { /* * Nope, just prepend us to the next region. */ - after->er_link.le_next->er_start = start; + LIST_NEXT(after, er_link)->er_start = start; } extent_free_region_descriptor(ex, rp); @@ -469,8 +470,7 @@ extent_alloc_region(ex, start, size, flags) */ last = NULL; - for (rp = ex->ex_regions.lh_first; rp != NULL; - rp = rp->er_link.le_next) { + LIST_FOREACH(rp, &ex->ex_regions, er_link) { if (rp->er_start > end) { /* * We lie before this region and don't @@ -643,8 +643,7 @@ extent_alloc_subregion(ex, substart, subend, size, alignment, skew, boundary, * the subregion start, advancing the "last" pointer along * the way. */ - for (rp = ex->ex_regions.lh_first; rp != NULL; - rp = rp->er_link.le_next) { + LIST_FOREACH(rp, &ex->ex_regions, er_link) { if (rp->er_start >= newstart) break; last = rp; @@ -658,7 +657,7 @@ extent_alloc_subregion(ex, substart, subend, size, alignment, skew, boundary, if (last != NULL && last->er_end >= newstart) newstart = EXTENT_ALIGN((last->er_end + 1), alignment, skew); - for (; rp != NULL; rp = rp->er_link.le_next) { + for (; rp != LIST_END(&ex->ex_regions); rp = LIST_NEXT(rp, er_link)) { /* * If the region pasts the subend, bail out and see * if we fit against the subend. @@ -950,8 +949,7 @@ extent_free(ex, start, size, flags) * Cases 2, 3, and 4 require that the EXF_NOCOALESCE flag * is not set. */ - for (rp = ex->ex_regions.lh_first; rp != NULL; - rp = rp->er_link.le_next) { + LIST_FOREACH(rp, &ex->ex_regions, er_link) { /* * Save ourselves some comparisons; does the current * region end before chunk to be freed begins? If so, @@ -1041,7 +1039,7 @@ extent_alloc_region_descriptor(ex, flags) if (ex->ex_flags & EXF_FIXED) { struct extent_fixed *fex = (struct extent_fixed *)ex; - while (fex->fex_freelist.lh_first == NULL) { + while (LIST_EMPTY(&fex->fex_freelist)) { if (flags & EX_MALLOCOK) goto alloc; @@ -1053,7 +1051,7 @@ extent_alloc_region_descriptor(ex, flags) "extnt", 0)) return (NULL); } - rp = fex->fex_freelist.lh_first; + rp = LIST_FIRST(&fex->fex_freelist); LIST_REMOVE(rp, er_link); /* @@ -1142,8 +1140,7 @@ extent_print(ex) db_printf("extent `%s' (0x%lx - 0x%lx), flags=%b\n", ex->ex_name, ex->ex_start, ex->ex_end, ex->ex_flags, EXF_BITS); - for (rp = ex->ex_regions.lh_first; rp != NULL; - rp = rp->er_link.le_next) + LIST_FOREACH(rp, &ex->ex_regions, er_link) db_printf(" 0x%lx - 0x%lx\n", rp->er_start, rp->er_end); } #endif |
