Index: sys/fs/tmpfs/tmpfs_vnops.c =================================================================== --- sys/fs/tmpfs/tmpfs_vnops.c +++ sys/fs/tmpfs/tmpfs_vnops.c @@ -2102,20 +2102,27 @@ vm_pindex_t p, p_m, p_swp; p = OFF_TO_IDX(noff); - m = vm_page_find_least(obj, p); + + /* + * Find the first resident page at or after p. + */ + for (m = vm_page_find_least(obj, p); m != NULL; m = vm_page_next(m)) { + if (vm_page_any_valid(m)) + break; + } /* * Microoptimize the most common case for SEEK_DATA, where * there is no hole and the page is resident. */ - if (m != NULL && vm_page_any_valid(m) && m->pindex == p) + p_m = (m == NULL) ? obj->size : m->pindex; + if (p_m == p) return (noff); p_swp = swap_pager_find_least(obj, p); if (p_swp == p) return (noff); - p_m = m == NULL ? obj->size : m->pindex; return (IDX_TO_OFF(MIN(p_m, p_swp))); }