summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>1995-03-20 02:08:24 +0000
committerdg <dg@FreeBSD.org>1995-03-20 02:08:24 +0000
commitcfecdfd362400d666af67737a4e703bcc200ee3c (patch)
treed31a9da7320e04844c676cc5b5dfb8d179128b75
parent27e7e169044efd07ca45915bead1365376812f4a (diff)
downloadFreeBSD-src-cfecdfd362400d666af67737a4e703bcc200ee3c.zip
FreeBSD-src-cfecdfd362400d666af67737a4e703bcc200ee3c.tar.gz
Don't attempt to sync pages in the V_SAVE case of vinvalbuf; doing so can
lead to a deadlock. Just let the VM system deal with it.
-rw-r--r--sys/kern/vfs_export.c31
-rw-r--r--sys/kern/vfs_subr.c31
2 files changed, 34 insertions, 28 deletions
diff --git a/sys/kern/vfs_export.c b/sys/kern/vfs_export.c
index 7be57e9..6274e20 100644
--- a/sys/kern/vfs_export.c
+++ b/sys/kern/vfs_export.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_subr.c 8.13 (Berkeley) 4/18/94
- * $Id: vfs_subr.c,v 1.22 1995/03/11 22:29:07 davidg Exp $
+ * $Id: vfs_subr.c,v 1.23 1995/03/16 18:12:49 bde Exp $
*/
/*
@@ -508,19 +508,22 @@ vinvalbuf(vp, flags, cred, p, slpflag, slptimeo)
}
splx(s);
- pager = NULL;
- object = (vm_object_t) vp->v_vmdata;
- if (object != NULL)
- pager = object->pager;
- if (pager != NULL) {
- object = vm_object_lookup(pager);
- if (object) {
- vm_object_lock(object);
- if (flags & V_SAVE)
- vm_object_page_clean(object, 0, 0, TRUE, FALSE);
- vm_object_page_remove(object, 0, object->size);
- vm_object_unlock(object);
- vm_object_deallocate(object);
+ /*
+ * Destroy the copy in the VM cache, too.
+ */
+ if ((flags & V_SAVE) == 0) {
+ pager = NULL;
+ object = (vm_object_t) vp->v_vmdata;
+ if (object != NULL)
+ pager = object->pager;
+ if (pager != NULL) {
+ object = vm_object_lookup(pager);
+ if (object) {
+ vm_object_lock(object);
+ vm_object_page_remove(object, 0, object->size);
+ vm_object_unlock(object);
+ vm_object_deallocate(object);
+ }
}
}
if (!(flags & V_SAVEMETA) &&
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 7be57e9..6274e20 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_subr.c 8.13 (Berkeley) 4/18/94
- * $Id: vfs_subr.c,v 1.22 1995/03/11 22:29:07 davidg Exp $
+ * $Id: vfs_subr.c,v 1.23 1995/03/16 18:12:49 bde Exp $
*/
/*
@@ -508,19 +508,22 @@ vinvalbuf(vp, flags, cred, p, slpflag, slptimeo)
}
splx(s);
- pager = NULL;
- object = (vm_object_t) vp->v_vmdata;
- if (object != NULL)
- pager = object->pager;
- if (pager != NULL) {
- object = vm_object_lookup(pager);
- if (object) {
- vm_object_lock(object);
- if (flags & V_SAVE)
- vm_object_page_clean(object, 0, 0, TRUE, FALSE);
- vm_object_page_remove(object, 0, object->size);
- vm_object_unlock(object);
- vm_object_deallocate(object);
+ /*
+ * Destroy the copy in the VM cache, too.
+ */
+ if ((flags & V_SAVE) == 0) {
+ pager = NULL;
+ object = (vm_object_t) vp->v_vmdata;
+ if (object != NULL)
+ pager = object->pager;
+ if (pager != NULL) {
+ object = vm_object_lookup(pager);
+ if (object) {
+ vm_object_lock(object);
+ vm_object_page_remove(object, 0, object->size);
+ vm_object_unlock(object);
+ vm_object_deallocate(object);
+ }
}
}
if (!(flags & V_SAVEMETA) &&
OpenPOWER on IntegriCloud