diff options
Diffstat (limited to 'sys/kern/vfs_bio.c')
-rw-r--r-- | sys/kern/vfs_bio.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index 34cff17..11e9183 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -1027,7 +1027,7 @@ brelse(struct buf * bp) vm_page_flag_clear(m, PG_ZERO); if (m == bogus_page) { - obj = (vm_object_t) vp->v_object; + VOP_GETVOBJECT(vp, &obj); poff = OFF_TO_IDX(bp->b_offset); for (j = i; j < bp->b_npages; j++) { @@ -1905,10 +1905,9 @@ inmem(struct vnode * vp, daddr_t blkno) return 1; if (vp->v_mount == NULL) return 0; - if ((vp->v_object == NULL) || (vp->v_flag & VOBJBUF) == 0) + if (VOP_GETVOBJECT(vp, &obj) != 0 || (vp->v_flag & VOBJBUF) == 0) return 0; - obj = vp->v_object; size = PAGE_SIZE; if (size > vp->v_mount->mnt_stat.f_iosize) size = vp->v_mount->mnt_stat.f_iosize; @@ -2193,7 +2192,7 @@ loop: bsize = size; offset = (off_t)blkno * bsize; - vmio = (vp->v_object != 0) && (vp->v_flag & VOBJBUF); + vmio = (VOP_GETVOBJECT(vp, NULL) == 0) && (vp->v_flag & VOBJBUF); maxsize = vmio ? size + (offset & PAGE_MASK) : size; maxsize = imax(maxsize, bsize); @@ -2462,7 +2461,7 @@ allocbuf(struct buf *bp, int size) */ vp = bp->b_vp; - obj = vp->v_object; + VOP_GETVOBJECT(vp, &obj); while (bp->b_npages < desiredpages) { vm_page_t m; @@ -2641,7 +2640,7 @@ bufdonebio(struct bio *bp) void bufdone(struct buf *bp) { - int s; + int s, error; void (*biodone) __P((struct buf *)); s = splbio(); @@ -2680,14 +2679,14 @@ bufdone(struct buf *bp) int iosize; struct vnode *vp = bp->b_vp; - obj = vp->v_object; + error = VOP_GETVOBJECT(vp, &obj); #if defined(VFS_BIO_DEBUG) if (vp->v_usecount == 0) { panic("biodone: zero vnode ref count"); } - if (vp->v_object == NULL) { + if (error) { panic("biodone: missing VM object"); } @@ -2700,7 +2699,7 @@ bufdone(struct buf *bp) KASSERT(bp->b_offset != NOOFFSET, ("biodone: no buffer offset")); - if (!obj) { + if (error) { panic("biodone: no object"); } #if defined(VFS_BIO_DEBUG) @@ -2821,7 +2820,9 @@ vfs_unbusy_pages(struct buf * bp) if (bp->b_flags & B_VMIO) { struct vnode *vp = bp->b_vp; - vm_object_t obj = vp->v_object; + vm_object_t obj; + + VOP_GETVOBJECT(vp, &obj); for (i = 0; i < bp->b_npages; i++) { vm_page_t m = bp->b_pages[i]; @@ -2898,9 +2899,10 @@ vfs_busy_pages(struct buf * bp, int clear_modify) if (bp->b_flags & B_VMIO) { struct vnode *vp = bp->b_vp; - vm_object_t obj = vp->v_object; + vm_object_t obj; vm_ooffset_t foff; + VOP_GETVOBJECT(vp, &obj); foff = bp->b_offset; KASSERT(bp->b_offset != NOOFFSET, ("vfs_busy_pages: no buffer offset")); |