Date: Fri, 30 May 1997 07:16:00 +1000 From: Bruce Evans <bde@zeta.org.au> To: bde@zeta.org.au, dfr@nlsystems.com Cc: current@freebsd.org Subject: Re: disk cache challenged by small block sizes Message-ID: <199705292116.HAA29423@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>This is caused by my recent changes to vfs_bio to make NFS mmap work >properly. I didn't test on a filesystem with small block sizes. This >patch should fix it: Thanks. >... > static void >-vfs_page_set_valid(struct buf *bp, vm_offset_t off, vm_page_t m) >+vfs_page_set_valid(struct buf *bp, vm_ooffset_t off, int pageno, vm_page_t m) > { > struct vnode *vp = bp->b_vp; > vm_offset_t soff, eoff; > > soff = off; >- eoff = min(off + PAGE_SIZE, bp->b_bufsize); >+ eoff = off + min(PAGE_SIZE, bp->b_bufsize); >+ vm_page_set_invalid(m, soff, eoff); This sometimes traps. It only works on my test system. I think soff needs to be reduced (mod PAGE_SIZE)? > if (vp->v_tag == VT_NFS) { >- soff = max((bp->b_validoff + DEV_BSIZE - 1) & -DEV_BSIZE, soff); >- eoff = min(bp->b_validend & -DEV_BSIZE, eoff); >+ vm_offset_t sv, ev; >+ sv = off + (bp->b_validoff + DEV_BSIZE - 1) & -DEV_BSIZE >+ - pageno * PAGE_SIZE; >+ ev = off + bp->b_validend & -DEV_BSIZE - pageno * PAGE_SIZE; This has too few parentheses even for me :-). Please use `& ~(BSIZE - 1)' instead of -DEV_BSIZE. The latter assumes 2's complement and may be less idiomatic. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199705292116.HAA29423>