Index: sys/kern/vfs_bio.c =================================================================== --- sys/kern/vfs_bio.c +++ sys/kern/vfs_bio.c @@ -3609,23 +3609,25 @@ size = vp->v_mount->mnt_stat.f_iosize; off = (vm_ooffset_t)blkno * (vm_ooffset_t)vp->v_mount->mnt_stat.f_iosize; - VM_OBJECT_RLOCK(obj); for (toff = 0; toff < vp->v_mount->mnt_stat.f_iosize; toff += tinc) { - m = vm_page_lookup(obj, OFF_TO_IDX(off + toff)); + m = vm_page_grab_unlocked(obj, OFF_TO_IDX(off + toff), + VM_ALLOC_NORMAL | VM_ALLOC_SBUSY | VM_ALLOC_IGN_SBUSY | + VM_ALLOC_NOCREAT); if (!m) goto notinmem; tinc = size; if (tinc > PAGE_SIZE - ((toff + off) & PAGE_MASK)) tinc = PAGE_SIZE - ((toff + off) & PAGE_MASK); if (vm_page_is_valid(m, - (vm_offset_t) ((toff + off) & PAGE_MASK), tinc) == 0) + (vm_offset_t) ((toff + off) & PAGE_MASK), tinc) == 0) { + vm_page_sunbusy(m); goto notinmem; + } + vm_page_sunbusy(m); } - VM_OBJECT_RUNLOCK(obj); return 1; notinmem: - VM_OBJECT_RUNLOCK(obj); return (0); }