Page MenuHomeFreeBSD

D54219.1777272491.diff
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

D54219.1777272491.diff

diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -2460,7 +2460,8 @@
vm_page_t m;
vm_pindex_t swap_index;
- VM_OBJECT_ASSERT_RLOCKED(object);
+ VM_OBJECT_ASSERT_LOCKED(object);
+ KASSERT((object->flags & OBJ_ANON) != 0, ("non-anon obj %p", object));
vm_page_iter_init(&pages, object);
m = vm_radix_iter_lookup_ge(&pages, pindex);
if (m != NULL && pages.index == pindex && vm_page_any_valid(m))
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -2244,6 +2244,26 @@
if (next_pindex + next_size > prev_object->size)
prev_object->size = next_pindex + next_size;
+#ifdef INVARIANTS
+ /*
+ * Re-check: there must be no pages in the next range backed
+ * by prev_entry's object. Otherwise, the resulting
+ * corruption is same as faulting in non-zeroed page.
+ */
+ if (vm_check_pg_zero) {
+ vm_pindex_t pidx, pstart, pend;
+
+ pstart = OFF_TO_IDX(prev_offset + prev_size);
+ pend = pstart + OFF_TO_IDX(next_size);
+ pidx = swap_pager_seek_data(prev_object, pstart);
+ KASSERT(pidx >= pend,
+ ("found obj %p pindex %#jx e %#jx %#jx %#jx",
+ prev_object, pidx,
+ (uintmax_t)prev_offset, (uintmax_t)prev_size,
+ (uintmax_t)next_size));
+ }
+#endif
+
VM_OBJECT_WUNLOCK(prev_object);
return (TRUE);
}

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 27, 6:48 AM (14 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28437063
Default Alt Text
D54219.1777272491.diff (1 KB)

Event Timeline