The branch main has been updated by dougm:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=420e2f8a74df4be1237244a4ef222d2ceae6823d

commit 420e2f8a74df4be1237244a4ef222d2ceae6823d
Author:     Doug Moore <do...@freebsd.org>
AuthorDate: 2025-03-02 08:13:24 +0000
Commit:     Doug Moore <do...@freebsd.org>
CommitDate: 2025-03-02 08:13:24 +0000

    vnode_pager: simplify loop, avoid overflow
    
    Filling in read-behind pages in vnode_pager_generic_getpages() is made
    very slightly simpler here, by avoiding overflowing the startpindex
    variable and then avoiding an extra test in the allocation loop that
    handles the overflow case.
    
    Reviewed by:    kib
    Differential Revision:  https://reviews.freebsd.org/D49200
---
 sys/vm/vnode_pager.c | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index d5d312b3cf71..69509fe8948a 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -1045,18 +1045,13 @@ vnode_pager_generic_getpages(struct vnode *vp, 
vm_page_t *m, int count,
                vm_page_t mpred, p;
 
                VM_OBJECT_WLOCK(object);
-               startpindex = m[0]->pindex - rbehind;
-               if ((mpred = TAILQ_PREV(m[0], pglist, listq)) != NULL &&
-                   mpred->pindex >= startpindex)
-                       startpindex = mpred->pindex + 1;
+               tpindex = m[0]->pindex;
+               startpindex = MAX(tpindex, rbehind) - rbehind;
+               if ((mpred = TAILQ_PREV(m[0], pglist, listq)) != NULL)
+                       startpindex = MAX(startpindex, mpred->pindex + 1);
 
-               /*
-                * tpindex is unsigned; beware of numeric underflow.
-                * Stepping backward from pindex, mpred doesn't change.
-                */
-               for (tpindex = m[0]->pindex - 1;
-                   tpindex >= startpindex && tpindex < m[0]->pindex;
-                   tpindex--, i++) {
+               /* Stepping backward from pindex, mpred doesn't change. */
+               for (; tpindex-- > startpindex; i++) {
                        p = vm_page_alloc_after(object, tpindex,
                            VM_ALLOC_NORMAL, mpred);
                        if (p == NULL) {

Reply via email to