correct read-ahead calculations in vfs_bio_getpages
Previously the calculations were done as if the requested region ended at the start of the last requested page, not its end. The problem as actually quite minor as it affected only stats and page prefaulting, not the actual page data, and only with specific parameters. Reviewed by: kib (previous version) MFC after: 2 weeks
This commit is contained in:
parent
ac97ccbab5
commit
3e4f610dad
@ -4802,7 +4802,14 @@ vfs_bio_getpages(struct vnode *vp, vm_page_t *ma, int count,
|
||||
la = IDX_TO_OFF(ma[count - 1]->pindex);
|
||||
if (la >= object->un_pager.vnp.vnp_size)
|
||||
return (VM_PAGER_BAD);
|
||||
lpart = la + PAGE_SIZE > object->un_pager.vnp.vnp_size;
|
||||
|
||||
/*
|
||||
* Change the meaning of la from where the last requested page starts
|
||||
* to where it ends, because that's the end of the requested region
|
||||
* and the start of the potential read-ahead region.
|
||||
*/
|
||||
la += PAGE_SIZE;
|
||||
lpart = la > object->un_pager.vnp.vnp_size;
|
||||
bo_bs = get_blksize(vp, get_lblkno(vp, IDX_TO_OFF(ma[0]->pindex)));
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user