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;