summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtur Grabowski <art@cvs.openbsd.org>1999-02-26 04:51:18 +0000
committerArtur Grabowski <art@cvs.openbsd.org>1999-02-26 04:51:18 +0000
commit52b4d7fbde220c6651b33720adb78ce6728e00b1 (patch)
treeb1934f0b4af62c93bfb43d86689bc1e077bd1598
parentbc8986d97d2f8474b598194a210a6aa5338280b4 (diff)
adaptation to uvm vnode pager
-rw-r--r--sys/kern/vfs_syscalls.c23
-rw-r--r--sys/kern/vfs_vnops.c11
2 files changed, 31 insertions, 3 deletions
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 5b95c8a653d..46eca31aab0 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfs_syscalls.c,v 1.55 1999/02/15 16:46:57 art Exp $ */
+/* $OpenBSD: vfs_syscalls.c,v 1.56 1999/02/26 04:51:17 art Exp $ */
/* $NetBSD: vfs_syscalls.c,v 1.71 1996/04/23 10:29:02 mycroft Exp $ */
/*
@@ -60,6 +60,10 @@
#include <vm/vm.h>
#include <sys/sysctl.h>
+#if defined(UVM)
+#include <uvm/uvm_extern.h>
+#endif
+
extern int suid_clear;
int usermount = 0; /* sysctl: by default, users may not mount */
@@ -433,7 +437,9 @@ dounmount(mp, flags, p)
mp->mnt_flag |= MNT_UNMOUNT;
lockmgr(&mp->mnt_lock, LK_DRAIN | LK_INTERLOCK, &mountlist_slock, p);
mp->mnt_flag &=~ MNT_ASYNC;
+#if !defined(UVM)
vnode_pager_umount(mp); /* release cached vnodes */
+#endif
cache_purgevfs(mp); /* remove cache entries for this file sys */
if (mp->mnt_syncer != NULL)
vgone(mp->mnt_syncer);
@@ -495,6 +501,9 @@ sys_sync(p, v, retval)
if ((mp->mnt_flag & MNT_RDONLY) == 0) {
asyncflag = mp->mnt_flag & MNT_ASYNC;
mp->mnt_flag &= ~MNT_ASYNC;
+#if defined(UVM)
+ uvm_vnp_sync(mp);
+#endif
VFS_SYNC(mp, MNT_NOWAIT, p->p_ucred, p);
if (asyncflag)
mp->mnt_flag |= MNT_ASYNC;
@@ -1231,7 +1240,11 @@ sys_unlink(p, v, retval)
goto out;
}
+#if defined(UVM)
+ (void)uvm_vnp_uncache(vp);
+#else
(void)vnode_pager_uncache(vp);
+#endif
VOP_LEASE(nd.ni_dvp, p, p->p_ucred, LEASE_WRITE);
VOP_LEASE(vp, p, p->p_ucred, LEASE_WRITE);
@@ -2073,8 +2086,14 @@ out:
VOP_LEASE(tdvp, p, p->p_ucred, LEASE_WRITE);
if (fromnd.ni_dvp != tdvp)
VOP_LEASE(fromnd.ni_dvp, p, p->p_ucred, LEASE_WRITE);
- if (tvp)
+ if (tvp) {
+#if defined(UVM)
+ (void)uvm_vnp_uncache(tvp);
+#else
+ (void)vnode_pager_uncache(tvp); /* XXX - I think we need this */
+#endif
VOP_LEASE(tvp, p, p->p_ucred, LEASE_WRITE);
+ }
error = VOP_RENAME(fromnd.ni_dvp, fromnd.ni_vp, &fromnd.ni_cnd,
tond.ni_dvp, tond.ni_vp, &tond.ni_cnd);
} else {
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 8b7ff95a94a..402af724722 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vfs_vnops.c,v 1.19 1998/12/05 17:16:54 csapuntz Exp $ */
+/* $OpenBSD: vfs_vnops.c,v 1.20 1999/02/26 04:51:17 art Exp $ */
/* $NetBSD: vfs_vnops.c,v 1.20 1996/02/04 02:18:41 christos Exp $ */
/*
@@ -56,6 +56,10 @@
#include <vm/vm.h>
+#if defined(UVM)
+#include <uvm/uvm_extern.h>
+#endif
+
struct fileops vnops =
{ vn_read, vn_write, vn_ioctl, vn_select, vn_closefile };
@@ -191,8 +195,13 @@ vn_writechk(vp)
* the vnode, try to free it up once. If
* we fail, we can't allow writing.
*/
+#if defined(UVM)
+ if ((vp->v_flag & VTEXT) && !uvm_vnp_uncache(vp))
+ return (ETXTBSY);
+#else
if ((vp->v_flag & VTEXT) && !vnode_pager_uncache(vp))
return (ETXTBSY);
+#endif
return (0);
}