Page MenuHomeFreeBSD

D8195.1793395395.diff
No OneTemporary

Authored By
Unknown
Size
720 B
Referenced Files
None
Subscribers
None

D8195.1793395395.diff

Index: head/sys/vm/vm_page.c
===================================================================
--- head/sys/vm/vm_page.c
+++ head/sys/vm/vm_page.c
@@ -655,15 +655,26 @@
vm_page_busy_downgrade(vm_page_t m)
{
u_int x;
+ bool locked;
vm_page_assert_xbusied(m);
+ locked = mtx_owned(vm_page_lockptr(m));
for (;;) {
x = m->busy_lock;
x &= VPB_BIT_WAITERS;
+ if (x != 0 && !locked)
+ vm_page_lock(m);
if (atomic_cmpset_rel_int(&m->busy_lock,
- VPB_SINGLE_EXCLUSIVER | x, VPB_SHARERS_WORD(1) | x))
+ VPB_SINGLE_EXCLUSIVER | x, VPB_SHARERS_WORD(1)))
break;
+ if (x != 0 && !locked)
+ vm_page_unlock(m);
+ }
+ if (x != 0) {
+ wakeup(m);
+ if (!locked)
+ vm_page_unlock(m);
}
}

File Metadata

Mime Type
text/plain
Expires
Fri, Oct 30, 9:23 PM (14 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41246453
Default Alt Text
D8195.1793395395.diff (720 B)

Event Timeline