summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_syscalls.c
diff options
context:
space:
mode:
authorbp <bp@FreeBSD.org>2000-09-12 09:49:08 +0000
committerbp <bp@FreeBSD.org>2000-09-12 09:49:08 +0000
commita7bc78c86d1b25efbea8d9ad3e7354ef3a302e90 (patch)
treeae6a2a75d2b0d94e115a73fd536dca86dba92ac4 /sys/kern/vfs_syscalls.c
parent7893328799a796677510cba9c7bbb8e52d8ce56c (diff)
downloadFreeBSD-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.c9
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);
OpenPOWER on IntegriCloud