diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -3043,10 +3043,10 @@ presid = resid > (PAGE_SIZE - poffset) ? (PAGE_SIZE - poffset) : resid; KASSERT(presid >= 0, ("brelse: extra page")); - vm_page_busy_acquire(m, VM_ALLOC_SBUSY); + vm_page_busy_acquire(m, 0); if (pmap_page_wired_mappings(m) == 0) vm_page_set_invalid(m, poffset, presid); - vm_page_sunbusy(m); + vm_page_xunbusy(m); vm_page_release_locked(m, flags); resid -= presid; poffset = 0; diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -5314,7 +5314,7 @@ */ object = m->object; VM_OBJECT_ASSERT_WLOCKED(object); - vm_page_assert_busied(m); + vm_page_assert_xbusied(m); if (object->type == OBJT_VNODE && base == 0 && IDX_TO_OFF(m->pindex) + size >= object->un_pager.vnp.vnp_size) @@ -5326,19 +5326,14 @@ KASSERT((bits == 0 && vm_page_all_valid(m)) || !pmap_page_is_mapped(m), ("vm_page_set_invalid: page %p is mapped", m)); - if (vm_page_xbusied(m)) { - m->valid &= ~bits; - m->dirty &= ~bits; - } else { - vm_page_bits_clear(m, &m->valid, bits); - vm_page_bits_clear(m, &m->dirty, bits); - } + m->valid &= ~bits; + m->dirty &= ~bits; } /* * vm_page_invalid: * - * Invalidates the entire page. The page must be busy, unmapped, and + * Invalidates the entire page. The page must be xbusy, unmapped, and * the enclosing object must be locked. The object locks protects * against concurrent read-only pmap enter which is done without * busy. @@ -5347,14 +5342,11 @@ vm_page_invalid(vm_page_t m) { - vm_page_assert_busied(m); + vm_page_assert_xbusied(m); VM_OBJECT_ASSERT_WLOCKED(m->object); MPASS(!pmap_page_is_mapped(m)); - if (vm_page_xbusied(m)) - m->valid = 0; - else - vm_page_bits_clear(m, &m->valid, VM_PAGE_BITS_ALL); + m->valid = 0; } /*