Page MenuHomeFreeBSD

D21767.id62481.diff
No OneTemporary

D21767.id62481.diff

Index: sys/kern/kern_exec.c
===================================================================
--- sys/kern/kern_exec.c
+++ sys/kern/kern_exec.c
@@ -981,8 +981,10 @@
if (ma[0]->valid != VM_PAGE_BITS_ALL) {
vm_page_xbusy(ma[0]);
if (!vm_pager_has_page(object, 0, NULL, &after)) {
- vm_page_unwire_noq(ma[0]);
- vm_page_free(ma[0]);
+ if (vm_page_unwire_noq(ma[0]))
+ vm_page_free(ma[0]);
+ else
+ vm_page_xunbusy(ma[0]);
VM_OBJECT_WUNLOCK(object);
return (EIO);
}
@@ -1006,9 +1008,21 @@
initial_pagein = i;
rv = vm_pager_get_pages(object, ma, initial_pagein, NULL, NULL);
if (rv != VM_PAGER_OK) {
- vm_page_unwire_noq(ma[0]);
- for (i = 0; i < initial_pagein; i++)
- vm_page_free(ma[i]);
+ if (vm_page_unwire_noq(ma[0]))
+ vm_page_free(ma[0]);
+ else
+ vm_page_xunbusy(ma[i]);
+ for (i = 1; i < initial_pagein; i++) {
+ /*
+ * New wirings cannot be created while the
+ * object is locked and the page is exclusively
+ * busied.
+ */
+ if (!vm_page_wired(ma[i]))
+ vm_page_free(ma[i]);
+ else
+ vm_page_xunbusy(ma[i]);
+ }
VM_OBJECT_WUNLOCK(object);
return (EIO);
}

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 23, 2:56 AM (15 h, 28 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32008592
Default Alt Text
D21767.id62481.diff (1 KB)

Event Timeline