diff options
author | alc <alc@FreeBSD.org> | 2003-05-03 20:28:26 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-05-03 20:28:26 +0000 |
commit | f9966ce9e8106e72749aa3390aeefb55e65dbbad (patch) | |
tree | d52e5bb5baa11acea5e8c3eb1883a6a31bbcf702 /sys/ufs | |
parent | 978f22b7c8755ae65aaa9314ff725ab24c4e1089 (diff) | |
download | FreeBSD-src-f9966ce9e8106e72749aa3390aeefb55e65dbbad.zip FreeBSD-src-f9966ce9e8106e72749aa3390aeefb55e65dbbad.tar.gz |
Lock the vm_object on entry to vm_object_vndeallocate().
Diffstat (limited to 'sys/ufs')
-rw-r--r-- | sys/ufs/ffs/ffs_vnops.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c index eda8b0b..9bcd7ff 100644 --- a/sys/ufs/ffs/ffs_vnops.c +++ b/sys/ufs/ffs/ffs_vnops.c @@ -549,6 +549,7 @@ ffs_read(ap) } if (object) { + VM_OBJECT_LOCK(object); vm_object_vndeallocate(object); } if ((error == 0 || uio->uio_resid != orig_resid) && @@ -613,6 +614,7 @@ ffs_write(ap) uio->uio_offset = ip->i_size; if ((ip->i_flags & APPEND) && uio->uio_offset != ip->i_size) { if (object) { + VM_OBJECT_LOCK(object); vm_object_vndeallocate(object); } return (EPERM); @@ -634,6 +636,7 @@ ffs_write(ap) if (uio->uio_offset < 0 || (u_int64_t)uio->uio_offset + uio->uio_resid > fs->fs_maxfilesize) { if (object) { + VM_OBJECT_LOCK(object); vm_object_vndeallocate(object); } return (EFBIG); @@ -650,6 +653,7 @@ ffs_write(ap) psignal(td->td_proc, SIGXFSZ); PROC_UNLOCK(td->td_proc); if (object) { + VM_OBJECT_LOCK(object); vm_object_vndeallocate(object); } return (EFBIG); @@ -774,6 +778,7 @@ ffs_write(ap) error = UFS_UPDATE(vp, 1); if (object) { + VM_OBJECT_LOCK(object); vm_object_vndeallocate(object); } |