diff options
author | dg <dg@FreeBSD.org> | 1995-03-20 02:08:24 +0000 |
---|---|---|
committer | dg <dg@FreeBSD.org> | 1995-03-20 02:08:24 +0000 |
commit | cfecdfd362400d666af67737a4e703bcc200ee3c (patch) | |
tree | d31a9da7320e04844c676cc5b5dfb8d179128b75 | |
parent | 27e7e169044efd07ca45915bead1365376812f4a (diff) | |
download | FreeBSD-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.c | 31 | ||||
-rw-r--r-- | 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) && |