diff --git a/bsd/porting/kthread.h b/bsd/porting/kthread.h
index 3c19b7d39bff279d66a824da4d00f3dedbf70c24..56d60eb9b6785e94fdbbba1a0b6ad25fb1345e2d 100644
--- a/bsd/porting/kthread.h
+++ b/bsd/porting/kthread.h
@@ -30,6 +30,9 @@ __END_DECLS
 
 #define curproc (get_curproc())
 
+extern unsigned char *osv_reclaimer_thread;
+#define pageproc ((struct proc *)osv_reclaimer_thread)
+
 #endif
 
 #endif
diff --git a/core/mempool.cc b/core/mempool.cc
index 466de98bdbd79735ca17b1e28326a4524cc50581..9e5d4735346abeb13b630c96c066e8b4b3c35568 100644
--- a/core/mempool.cc
+++ b/core/mempool.cc
@@ -40,6 +40,7 @@ TRACEPOINT(trace_memory_huge_failure, "page ranges=%d", unsigned long);
 TRACEPOINT(trace_memory_reclaim, "shrinker %s, target=%d, delta=%d", const char *, long, long);
 
 bool smp_allocator = false;
+unsigned char *osv_reclaimer_thread;
 
 namespace memory {
 
@@ -615,6 +616,7 @@ reclaimer::reclaimer()
     // std::thread is implemented ontop of pthreads, so it is fine
     std::thread tmp([&] {
         _thread = sched::thread::current();
+        osv_reclaimer_thread = reinterpret_cast<unsigned char *>(_thread);
         allow_emergency_alloc = true;
         do {
             _do_reclaim();