diff -dur orig2/hurd-20111206/libpager/data-return.c orig/hurd-20111106/libpager/data-return.c --- orig2/hurd-20111206/libpager/data-return.c 2011-12-28 21:18:48.000000000 +0000 +++ orig/hurd-20111106/libpager/data-return.c 2011-12-28 20:43:09.000000000 +0000 @@ -93,21 +93,22 @@ pm_entries = &p->pagemap[offset / __vm_page_size]; - if (! dirty && ! kcopy) - { - /* Prepare notified array. */ - for (i = 0; i < npages; i++) - notified[i] = (p->notify_on_evict - && ! (pm_entries[i] & PM_PAGEINWAIT)); - - _pager_release_seqno (p, seqno); - goto notify; - } - if (! dirty) { - _pager_allow_termination (p); - goto release_out; + munmap ((caddr_t) data, length); + if (!kcopy) { + /* Prepare notified array. */ + for (i = 0; i < npages; i++) + notified[i] = (p->notify_on_evict + && ! (pm_entries[i] & PM_PAGEINWAIT)); + + _pager_release_seqno (p, seqno); + goto notify; + } + else { + _pager_allow_termination (p); + goto release_out; + } } /* Make sure there are no other in-progress writes for any of these