diff options
author | phk <phk@FreeBSD.org> | 1997-09-10 20:09:22 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1997-09-10 20:09:22 +0000 |
commit | 1a50603a249c2949b7e49144a2ecebc38586ec6d (patch) | |
tree | 861b65273576b8ee31a039c490a33630b676d97b | |
parent | 4d0f72e0e25cb52d81ff2dfec572ad57269f7255 (diff) | |
download | FreeBSD-src-1a50603a249c2949b7e49144a2ecebc38586ec6d.zip FreeBSD-src-1a50603a249c2949b7e49144a2ecebc38586ec6d.tar.gz |
The patch is needed in order to not throw away unmodified
local filesystem metadata at the first brelse call when the
block device vnode has v_tag set to VT_NFS.
Reviewed by: phk
Submitted by: Tor Egge <tegge@idi.ntnu.no>
-rw-r--r-- | sys/kern/vfs_bio.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index a387804..fdc9399 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -18,7 +18,7 @@ * 5. Modifications may be freely made to this file if the above conditions * are met. * - * $Id: vfs_bio.c,v 1.124 1997/08/26 04:36:16 dyson Exp $ + * $Id: vfs_bio.c,v 1.125 1997/09/07 16:56:29 bde Exp $ */ /* @@ -593,9 +593,11 @@ brelse(struct buf * bp) */ if ((bp->b_flags & B_VMIO) && !(bp->b_vp->v_tag == VT_NFS && + bp->b_vp->v_type != VBLK && (bp->b_flags & B_DELWRI) != 0) #ifdef notdef && (bp->b_vp->v_tag != VT_NFS + || bp->b_vp->v_type == VBLK || (bp->b_flags & (B_NOCACHE | B_INVAL | B_ERROR)) || bp->b_validend == 0 || (bp->b_validoff == 0 @@ -1683,7 +1685,8 @@ allocbuf(struct buf * bp, int size) bp->b_pages[pageindex] = m; curbpnpages = pageindex + 1; } - if (vp->v_tag == VT_NFS) { + if (vp->v_tag == VT_NFS && + vp->v_type != VBLK) { if (bp->b_dirtyend > 0) { bp->b_validoff = min(bp->b_validoff, bp->b_dirtyoff); bp->b_validend = max(bp->b_validend, bp->b_dirtyend); @@ -1993,7 +1996,7 @@ vfs_buf_set_valid(struct buf *bp, vm_ooffset_t foff, vm_offset_t off, vm_offset_t size, vm_page_t m) { - if (bp->b_vp->v_tag == VT_NFS) { + if (bp->b_vp->v_tag == VT_NFS && bp->b_vp->v_type != VBLK) { vm_offset_t svalid, evalid; int validbits = m->valid; @@ -2043,7 +2046,7 @@ vfs_page_set_valid(struct buf *bp, vm_ooffset_t off, int pageno, vm_page_t m) vm_page_set_invalid(m, (vm_offset_t) (soff & PAGE_MASK), (vm_offset_t) (eoff - soff)); - if (vp->v_tag == VT_NFS) { + if (vp->v_tag == VT_NFS && vp->v_type != VBLK) { vm_ooffset_t sv, ev; off = off - pageno * PAGE_SIZE; sv = off + ((bp->b_validoff + DEV_BSIZE - 1) & ~(DEV_BSIZE - 1)); |