Module Name:    src
Committed By:   manu
Date:           Fri Sep  9 15:35:22 UTC 2011

Modified Files:
        src/lib/libperfuse: perfuse.c

Log Message:
Make sure perfused remains locked in memory, otherwise we can get
deadlocks in low memory situations, where ioflush waits for perfused
to fsync vnodes, and perfused waits for memory to be freed.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/lib/libperfuse/perfuse.c

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

Modified files:

Index: src/lib/libperfuse/perfuse.c
diff -u src/lib/libperfuse/perfuse.c:1.18 src/lib/libperfuse/perfuse.c:1.19
--- src/lib/libperfuse/perfuse.c:1.18	Sat Aug 13 23:12:15 2011
+++ src/lib/libperfuse/perfuse.c	Fri Sep  9 15:35:22 2011
@@ -1,4 +1,4 @@
-/*  $NetBSD: perfuse.c,v 1.18 2011/08/13 23:12:15 christos Exp $ */
+/*  $NetBSD: perfuse.c,v 1.19 2011/09/09 15:35:22 manu Exp $ */
 
 /*-
  *  Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved.
@@ -33,6 +33,7 @@
 #include <errno.h>
 #include <puffs.h>
 #include <sys/types.h>
+#include <sys/mman.h>
 #include <sys/socket.h>
 #include <sys/extattr.h>
 #include <sys/un.h>
@@ -407,6 +408,13 @@
 	struct puffs_node *pn_root;
 	struct puffs_pathobj *po_root;
 
+	/*
+	 * perfused needs to remain in memory. If it gets
+	 * swapped out, the kernel will deadlock when trying
+	 * to free memory backed by the PUFFS filesystem
+	 */
+	mlockall(MCL_CURRENT|MCL_FUTURE);
+
 	ps = init_state();
 	ps->ps_owner_uid = pmi->pmi_uid;
 

Reply via email to