diff options
author | eivind <eivind@FreeBSD.org> | 1999-04-10 17:54:43 +0000 |
---|---|---|
committer | eivind <eivind@FreeBSD.org> | 1999-04-10 17:54:43 +0000 |
commit | b790d856f9d0e1847332703dbd5527af921734c7 (patch) | |
tree | 63929b510d40258f9d407fe25b531c6046e98b4b /sys/vm | |
parent | 4c0628c3d0c969586b22d4527b869914d60178c9 (diff) | |
download | FreeBSD-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.c | 6 |
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); |