Page MenuHomeFreeBSD

D16610.id46359.diff
No OneTemporary

D16610.id46359.diff

Index: sys/vm/vm_swapout.c
===================================================================
--- sys/vm/vm_swapout.c
+++ sys/vm/vm_swapout.c
@@ -159,6 +159,7 @@
MTX_SYSINIT(vm_daemon, &vm_daemon_mtx, "vm daemon", MTX_DEF);
static int swapped_cnt;
+static int swap_inprogress; /* Current swap-ins done outside swapper. */
static void swapclear(struct proc *);
static int swapout(struct proc *);
@@ -634,6 +635,8 @@
sx_xlock(&allproc_lock);
MPASS(swapped_cnt > 0);
swapped_cnt--;
+ if (curthread != &thread0)
+ swap_inprogress++;
sx_xunlock(&allproc_lock);
/*
@@ -644,6 +647,12 @@
FOREACH_THREAD_IN_PROC(p, td)
vm_thread_swapin(td, oom_alloc);
+ if (curthread != &thread0) {
+ sx_xlock(&allproc_lock);
+ MPASS(swap_inprogress > 0);
+ swap_inprogress--;
+ sx_xunlock(&allproc_lock);
+ }
PROC_LOCK(p);
swapclear(p);
p->p_swtick = ticks;
@@ -721,6 +730,8 @@
}
PROC_UNLOCK(p);
}
+ if (swap_inprogress > 0)
+ res = NULL;
if (res != NULL)
PROC_LOCK(res);
return (res);

File Metadata

Mime Type
text/plain
Expires
Fri, Sep 18, 7:15 AM (3 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
39126108
Default Alt Text
D16610.id46359.diff (1 KB)

Event Timeline