summaryrefslogtreecommitdiffstats
path: root/sys/ufs
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-05-03 20:28:26 +0000
committeralc <alc@FreeBSD.org>2003-05-03 20:28:26 +0000
commitf9966ce9e8106e72749aa3390aeefb55e65dbbad (patch)
treed52e5bb5baa11acea5e8c3eb1883a6a31bbcf702 /sys/ufs
parent978f22b7c8755ae65aaa9314ff725ab24c4e1089 (diff)
downloadFreeBSD-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.c5
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);
}
OpenPOWER on IntegriCloud