Page MenuHomeFreeBSD

D4497.id11080.diff
No OneTemporary

D4497.id11080.diff

Index: sys/vm/device_pager.c
===================================================================
--- sys/vm/device_pager.c
+++ sys/vm/device_pager.c
@@ -342,8 +342,7 @@
*/
page = vm_page_getfake(paddr, memattr);
VM_OBJECT_WLOCK(object);
- if (vm_page_replace(page, object, (*mres)->pindex) != *mres)
- panic("old_dev_pager_fault: invalid page replacement");
+ vm_page_replace_check(page, object, (*mres)->pindex, *mres);
vm_page_lock(*mres);
vm_page_free(*mres);
vm_page_unlock(*mres);
Index: sys/vm/sg_pager.c
===================================================================
--- sys/vm/sg_pager.c
+++ sys/vm/sg_pager.c
@@ -188,9 +188,8 @@
/* Free the original pages and insert this fake page into the object. */
for (i = 0; i < count; i++) {
- if (i == reqpage &&
- vm_page_replace(page, object, offset) != m[i])
- panic("sg_pager_getpages: invalid place replacement");
+ if (i == reqpage)
+ vm_page_replace_check(page, object, offset, m[i]);
vm_page_lock(m[i]);
vm_page_free(m[i]);
vm_page_unlock(m[i]);
Index: sys/vm/vm_page.h
===================================================================
--- sys/vm/vm_page.h
+++ sys/vm/vm_page.h
@@ -677,5 +677,20 @@
m->dirty = 0;
}
+static inline void
+vm_page_replace_check(vm_page_t mnew, vm_object_t object, vm_pindex_t pindex,
+ vm_page_t mold)
+{
+ vm_page_t mret;
+
+ mret = vm_page_replace(mnew, object, pindex);
+ KASSERT(mret == mold,
+ ("invalid page replacement, mold=%p, mret=%p", mold, mret));
+
+ /* Unused if !INVARIANTS. */
+ (void)mold;
+ (void)mret;
+}
+
#endif /* _KERNEL */
#endif /* !_VM_PAGE_ */

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 31, 9:54 AM (2 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30599907
Default Alt Text
D4497.id11080.diff (1 KB)

Event Timeline