From owner-freebsd-bugs Sat Jan 6 14:11:37 1996 Return-Path: owner-bugs Received: (from root@localhost) by freefall.freebsd.org (8.7.3/8.7.3) id OAA22102 for bugs-outgoing; Sat, 6 Jan 1996 14:11:37 -0800 (PST) Received: (from phk@localhost) by freefall.freebsd.org (8.7.3/8.7.3) id OAA22075 Sat, 6 Jan 1996 14:11:27 -0800 (PST) Date: Sat, 6 Jan 1996 14:11:27 -0800 (PST) From: Poul-Henning Kamp Message-Id: <199601062211.OAA22075@freefall.freebsd.org> To: aagero@aage.aage.priv.no, phk, freebsd-bugs Subject: Re: kern/901 Sender: owner-bugs@FreeBSD.ORG Precedence: bulk Synopsis: vm_page_free frees wrong pages in vfs_bio.c State-Changed-From-To: open-feedback State-Changed-By: phk State-Changed-When: Sat Jan 6 13:54:21 PST 1996 State-Changed-Why: It actually looks like you're right, if ((caddr_t) pg - bp->b_data) is bigger than 0x7f000000 then trouble abounds. Could you try this patch instead ? Index: vfs_bio.c =================================================================== RCS file: /home/ncvs/src/sys/kern/vfs_bio.c,v retrieving revision 1.81 diff -u -r1.81 vfs_bio.c --- vfs_bio.c 1996/01/05 20:12:33 1.81 +++ vfs_bio.c 1996/01/06 21:58:17 @@ -1637,9 +1637,9 @@ vm_page_t p; vm_offset_t from = round_page(froma); vm_offset_t to = round_page(toa); + unsigned int index = ((caddr_t) from - bp->b_data) >> PAGE_SHIFT; - for (pg = from; pg < to; pg += PAGE_SIZE) { - int index = ((caddr_t) pg - bp->b_data) >> PAGE_SHIFT; + for (pg = from; pg < to; pg += PAGE_SIZE, index++) { p = bp->b_pages[index]; bp->b_pages[index] = 0; pmap_kremove(pg); Poul-Henning Kamp