diff options
author | bp <bp@FreeBSD.org> | 2000-09-12 09:49:08 +0000 |
---|---|---|
committer | bp <bp@FreeBSD.org> | 2000-09-12 09:49:08 +0000 |
commit | a7bc78c86d1b25efbea8d9ad3e7354ef3a302e90 (patch) | |
tree | ae6a2a75d2b0d94e115a73fd536dca86dba92ac4 /sys/kern/vfs_syscalls.c | |
parent | 7893328799a796677510cba9c7bbb8e52d8ce56c (diff) | |
download | FreeBSD-src-a7bc78c86d1b25efbea8d9ad3e7354ef3a302e90.zip FreeBSD-src-a7bc78c86d1b25efbea8d9ad3e7354ef3a302e90.tar.gz |
Add three new VOPs: VOP_CREATEVOBJECT, VOP_DESTROYVOBJECT and VOP_GETVOBJECT.
They will be used by nullfs and other stacked filesystems to support full
cache coherency.
Reviewed in general by: mckusick, dillon
Diffstat (limited to 'sys/kern/vfs_syscalls.c')
-rw-r--r-- | sys/kern/vfs_syscalls.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 7f4c6bc0..4064fa3 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -1068,7 +1068,7 @@ open(p, uap) goto bad; } /* assert that vn_open created a backing object if one is needed */ - KASSERT(!vn_canvmio(vp) || vp->v_object != NULL, + KASSERT(!vn_canvmio(vp) || VOP_GETVOBJECT(vp, NULL) == 0, ("open: vmio vnode has no backing object after vn_open")); p->p_retval[0] = indx; return (0); @@ -2637,6 +2637,7 @@ fsync(p, uap) struct vnode *vp; struct mount *mp; struct file *fp; + vm_object_t obj; int error; if ((error = getvnode(p->p_fd, SCARG(uap, fd), &fp)) != 0) @@ -2645,8 +2646,8 @@ fsync(p, uap) if ((error = vn_start_write(vp, &mp, V_WAIT | PCATCH)) != 0) return (error); vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p); - if (vp->v_object) - vm_object_page_clean(vp->v_object, 0, 0, 0); + if (VOP_GETVOBJECT(vp, &obj) == 0) + vm_object_page_clean(obj, 0, 0, 0); error = VOP_FSYNC(vp, fp->f_cred, MNT_WAIT, p); #ifdef SOFTUPDATES if (error == 0 && vp->v_mount && (vp->v_mount->mnt_flag & MNT_SOFTDEP)) @@ -3415,7 +3416,7 @@ fhopen(p, uap) vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p); fp->f_flag |= FHASLOCK; } - if ((vp->v_type == VREG) && (vp->v_object == NULL)) + if ((vp->v_type == VREG) && (VOP_GETVOBJECT(vp, NULL) != 0)) vfs_object_create(vp, p, p->p_ucred); VOP_UNLOCK(vp, 0, p); |