Page MenuHomeFreeBSD

D21549.id61726.diff
No OneTemporary

D21549.id61726.diff

Index: sys/vm/device_pager.c
===================================================================
--- sys/vm/device_pager.c
+++ sys/vm/device_pager.c
@@ -238,6 +238,7 @@
vm_page_lock(m);
(void)vm_page_remove(m);
vm_page_unlock(m);
+ vm_page_xunbusy(m);
} else if (object->type == OBJT_DEVICE)
dev_pager_free_page(object, m);
}
Index: sys/vm/vm_fault.c
===================================================================
--- sys/vm/vm_fault.c
+++ sys/vm/vm_fault.c
@@ -1194,11 +1194,6 @@
fs.object, OFF_TO_IDX(
fs.first_object->backing_object_offset));
#endif
- /*
- * Removing the page from the backing object
- * unbusied it.
- */
- vm_page_xbusy(fs.m);
fs.first_m = fs.m;
fs.m = NULL;
VM_CNT_INC(v_cow_optim);
Index: sys/vm/vm_object.c
===================================================================
--- sys/vm/vm_object.c
+++ sys/vm/vm_object.c
@@ -1422,7 +1422,6 @@
VM_OBJECT_WLOCK(new_object);
goto retry;
}
- /* Rename released the xbusy lock. */
#if VM_NRESERVLEVEL > 0
/*
@@ -1439,8 +1438,8 @@
*/
vm_reserv_rename(m, new_object, orig_object, offidxstart);
#endif
- if (orig_object->type == OBJT_SWAP)
- vm_page_xbusy(m);
+ if (orig_object->type != OBJT_SWAP)
+ vm_page_xunbusy(m);
}
if (orig_object->type == OBJT_SWAP) {
/*
@@ -1599,6 +1598,8 @@
("freeing mapped page %p", p));
if (vm_page_remove(p))
vm_page_free(p);
+ else
+ vm_page_xunbusy(p);
vm_page_unlock(p);
continue;
}
@@ -1642,6 +1643,8 @@
("freeing mapped page %p", p));
if (vm_page_remove(p))
vm_page_free(p);
+ else
+ vm_page_xunbusy(p);
vm_page_unlock(p);
if (pp != NULL)
vm_page_xunbusy(pp);
@@ -1663,7 +1666,6 @@
op);
continue;
}
- /* Rename released the xbusy lock. */
/* Use the old pindex to free the right page. */
if (backing_object->type == OBJT_SWAP)
@@ -1677,6 +1679,7 @@
vm_reserv_rename(p, object, backing_object,
backing_offset_index);
#endif
+ vm_page_xunbusy(p);
}
return (true);
}
Index: sys/vm/vm_page.c
===================================================================
--- sys/vm/vm_page.c
+++ sys/vm/vm_page.c
@@ -1210,6 +1210,8 @@
KASSERT((m->oflags & VPO_UNMANAGED) != 0, ("managed %p", m));
KASSERT((m->flags & PG_FICTITIOUS) != 0,
("vm_page_putfake: bad page %p", m));
+ if (vm_page_xbusied(m))
+ vm_page_xunbusy(m);
uma_zfree(fakepg_zone, m);
}
@@ -1504,8 +1506,6 @@
if ((m->oflags & VPO_UNMANAGED) == 0)
vm_page_assert_locked(m);
VM_OBJECT_ASSERT_WLOCKED(object);
- if (vm_page_xbusied(m))
- vm_page_xunbusy(m);
mrem = vm_radix_remove(&object->rtree, m->pindex);
KASSERT(mrem == m, ("removed page %p, expected page %p", mrem, m));
@@ -3465,11 +3465,14 @@
VM_CNT_INC(v_tfree);
if (vm_page_sbusied(m))
- panic("vm_page_free_prep: freeing busy page %p", m);
+ panic("vm_page_free_prep: freeing shared busy page %p", m);
if (m->object != NULL)
(void)vm_page_remove(m);
+ if (vm_page_xbusied(m))
+ vm_page_xunbusy(m);
+
/*
* If fictitious remove object association and
* return.

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 1, 7:25 PM (7 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29107214
Default Alt Text
D21549.id61726.diff (3 KB)

Event Timeline