summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authoreivind <eivind@FreeBSD.org>1999-04-10 17:54:43 +0000
committereivind <eivind@FreeBSD.org>1999-04-10 17:54:43 +0000
commitb790d856f9d0e1847332703dbd5527af921734c7 (patch)
tree63929b510d40258f9d407fe25b531c6046e98b4b /sys/vm
parent4c0628c3d0c969586b22d4527b869914d60178c9 (diff)
downloadFreeBSD-src-b790d856f9d0e1847332703dbd5527af921734c7.zip
FreeBSD-src-b790d856f9d0e1847332703dbd5527af921734c7.tar.gz
Lock vnode correctly for VOP_OPEN.
Discussed with: alc, dillon
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_swap.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/vm/vm_swap.c b/sys/vm/vm_swap.c
index 8856332..1280eac 100644
--- a/sys/vm/vm_swap.c
+++ b/sys/vm/vm_swap.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)vm_swap.c 8.5 (Berkeley) 2/17/94
- * $Id: vm_swap.c,v 1.59 1999/01/21 10:17:12 dillon Exp $
+ * $Id: vm_swap.c,v 1.60 1999/02/25 05:37:18 dillon Exp $
*/
#include "opt_devfs.h"
@@ -52,6 +52,7 @@
#include <sys/fcntl.h>
#include <sys/blist.h>
#include <sys/kernel.h>
+#include <sys/lock.h>
#include <vm/vm.h>
#include <vm/vm_extern.h>
#include <vm/swap_pager.h>
@@ -278,6 +279,7 @@ swaponvp(p, vp, dev, nblks)
swblk_t dvbase;
int error;
+ ASSERT_VOP_UNLOCKED(vp, "swaponvp");
for (sp = swdevt, index = 0 ; index < nswdev; index++, sp++) {
if (sp->sw_vp == vp)
return EBUSY;
@@ -287,7 +289,9 @@ swaponvp(p, vp, dev, nblks)
}
return EINVAL;
found:
+ (void) vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
error = VOP_OPEN(vp, FREAD | FWRITE, p->p_ucred, p);
+ (void) VOP_UNLOCK(vp, 0, p);
if (error)
return (error);
OpenPOWER on IntegriCloud