From cfecdfd362400d666af67737a4e703bcc200ee3c Mon Sep 17 00:00:00 2001 From: dg Date: Mon, 20 Mar 1995 02:08:24 +0000 Subject: 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. --- sys/kern/vfs_export.c | 31 +++++++++++++++++-------------- sys/kern/vfs_subr.c | 31 +++++++++++++++++-------------- 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) && -- cgit v1.1