Module Name:    src
Committed By:   haad
Date:           Wed Aug 12 21:52:41 UTC 2009

Modified Files:
        src/external/cddl/osnet/dist/uts/common/fs/zfs: arc.c

Log Message:
Register callbacks for reclaiming kvm kernel space to arc. Unregister both
kvm address space and memory callbacks from kernel during arc_fini call.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.3 src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.4
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c:1.3	Mon Aug 10 22:38:02 2009
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/arc.c	Wed Aug 12 21:52:41 2009
@@ -167,6 +167,12 @@
 	}
 }
 static void	*zio_arena;
+
+#include <sys/callback.h>
+/* Structures used for memory and kva space reclaim. */
+static struct callback_entry arc_kva_reclaim_entry;
+static struct uvm_reclaim_hook arc_hook;
+
 #endif	/* __NetBSD__ */
 
 static kmutex_t		arc_reclaim_thr_lock;
@@ -3380,6 +3386,19 @@
 	}
 }
 
+static int
+arc_kva_reclaim_callback(struct callback_entry *ce, void *obj, void *arg)
+{
+
+	
+	if (mutex_tryenter(&arc_reclaim_thr_lock)) {
+		cv_broadcast(&arc_reclaim_thr_cv);
+		mutex_exit(&arc_reclaim_thr_lock);
+	}
+	
+	return CALLBACK_CHAIN_CONTINUE;
+}
+
 #endif /* __NetBSD__ */
 
 void
@@ -3495,11 +3514,12 @@
 	    TS_RUN, maxclsyspri);
 
 #if defined(__NetBSD__) && defined(_KERNEL)
-	static struct uvm_reclaim_hook hook;
+	arc_hook.uvm_reclaim_hook = &arc_uvm_reclaim_hook;
 
-	hook.uvm_reclaim_hook = &arc_uvm_reclaim_hook;
+	uvm_reclaim_hook_add(&arc_hook);
+	callback_register(&vm_map_to_kernel(kernel_map)->vmk_reclaim_callback,
+	    &arc_kva_reclaim_entry, NULL, arc_kva_reclaim_callback);
 
-	uvm_reclaim_hook_add(&hook);
 #endif
 
 	arc_dead = FALSE;
@@ -3552,6 +3572,12 @@
 	
 	mutex_destroy(&zfs_write_limit_lock);
 
+#if defined(__NetBSD__) && defined(_KERNEL)
+	uvm_reclaim_hook_del(&arc_hook);
+	callback_unregister(&vm_map_to_kernel(kernel_map)->vmk_reclaim_callback,
+	    &arc_kva_reclaim_entry);
+#endif 	
+	
 	buf_fini();
 }
 

Reply via email to