Module Name: src
Committed By: snj
Date: Thu Aug 6 21:52:13 UTC 2015
Modified Files:
src/lib/libperfuse [netbsd-7]: perfuse.c
Log Message:
Pull up following revision(s) (requested by christos in ticket #923):
lib/libperfuse/perfuse.c: revision 1.37
Deal with limits properly.
Don't print strerror() 2ice.
XXX: pullup-7
To generate a diff of this commit:
cvs rdiff -u -r1.31.10.4 -r1.31.10.5 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.31.10.4 src/lib/libperfuse/perfuse.c:1.31.10.5
--- src/lib/libperfuse/perfuse.c:1.31.10.4 Fri Feb 27 19:39:56 2015
+++ src/lib/libperfuse/perfuse.c Thu Aug 6 21:52:13 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: perfuse.c,v 1.31.10.4 2015/02/27 19:39:56 martin Exp $ */
+/* $NetBSD: perfuse.c,v 1.31.10.5 2015/08/06 21:52:13 snj Exp $ */
/*-
* Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved.
@@ -391,6 +391,27 @@ perfuse_next_unique(struct puffs_usermou
return ps->ps_unique++;
}
+static void
+updatelimit(const char *func, int lim, const char *name)
+{
+ struct rlimit rl;
+
+ /* Try infinity but that will fail unless we are root */
+ rl.rlim_cur = RLIM_INFINITY;
+ rl.rlim_max = RLIM_INFINITY;
+ if (setrlimit(lim, &rl) != -1)
+ return;
+
+ /* Get and set to the maximum allowed */
+ if (getrlimit(lim, &rl) == -1)
+ DERR(EX_OSERR, "%s: getrlimit %s failed", func, name);
+
+ rl.rlim_cur = rl.rlim_max;
+ if (setrlimit(lim, &rl) == -1)
+ DERR(EX_OSERR, "%s: setrlimit %s to %ju failed", func,
+ name, (uintmax_t)rl.rlim_cur);
+}
+
struct puffs_usermount *
perfuse_init(struct perfuse_callbacks *pc, struct perfuse_mount_info *pmi)
{
@@ -402,23 +423,12 @@ perfuse_init(struct perfuse_callbacks *p
unsigned int puffs_flags;
struct puffs_node *pn_root;
struct puffs_pathobj *po_root;
- struct rlimit rl;
/*
* perfused can grow quite large, let assume there's enough ram ...
*/
- rl.rlim_cur = RLIM_INFINITY;
- rl.rlim_max = RLIM_INFINITY;
-
- if (setrlimit(RLIMIT_DATA, &rl) < 0) {
- DERR(EX_OSERR, "%s: setrlimit failed: %s", __func__,
- strerror(errno));
- }
-
- if (setrlimit(RLIMIT_AS, &rl) < 0) {
- DERR(EX_OSERR, "%s: setrlimit failed: %s", __func__,
- strerror(errno));
- }
+ updatelimit(__func__, RLIMIT_DATA, "RLIMIT_DATA");
+ updatelimit(__func__, RLIMIT_AS, "RLIMIT_AS");
ps = init_state();
ps->ps_owner_uid = pmi->pmi_uid;