Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F109999434
D25177.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D25177.diff
View Options
Index: head/share/man/man4/linux.4
===================================================================
--- head/share/man/man4/linux.4
+++ head/share/man/man4/linux.4
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 16, 2019
+.Dd June 10, 2020
.Dt LINUX 4
.Os
.Sh NAME
@@ -95,6 +95,10 @@
.Xr loader 8
tunables:
.Bl -tag -width indent
+.It Va compat.linux.default_openfiles
+Default soft openfiles resource limit for Linux applications.
+Set to -1 to disable the limit.
+Defaults to 1024.
.It Va compat.linux.emul_path
Path to the Linux run-time environment.
Defaults to
Index: head/sys/compat/linux/linux_emul.c
===================================================================
--- head/sys/compat/linux/linux_emul.c
+++ head/sys/compat/linux/linux_emul.c
@@ -42,10 +42,12 @@
#include <sys/mutex.h>
#include <sys/sx.h>
#include <sys/proc.h>
+#include <sys/resourcevar.h>
#include <sys/syscallsubr.h>
#include <sys/sysent.h>
#include <compat/linux/linux_emul.h>
+#include <compat/linux/linux_mib.h>
#include <compat/linux/linux_misc.h>
#include <compat/linux/linux_persona.h>
#include <compat/linux/linux_util.h>
@@ -87,6 +89,32 @@
return (pem);
}
+/*
+ * Linux apps generally expect the soft open file limit to be set
+ * to 1024, often iterating over all the file descriptors up to that
+ * limit instead of using closefrom(2). Give them what they want,
+ * unless there already is a resource limit in place.
+ */
+static void
+linux_set_default_openfiles(struct thread *td, struct proc *p)
+{
+ struct rlimit rlim;
+ int error;
+
+ if (linux_default_openfiles < 0)
+ return;
+
+ PROC_LOCK(p);
+ lim_rlimit_proc(p, RLIMIT_NOFILE, &rlim);
+ PROC_UNLOCK(p);
+ if (rlim.rlim_cur != rlim.rlim_max ||
+ rlim.rlim_cur <= linux_default_openfiles)
+ return;
+ rlim.rlim_cur = linux_default_openfiles;
+ error = kern_proc_setrlimit(td, p, RLIMIT_NOFILE, &rlim);
+ KASSERT(error == 0, ("kern_proc_setrlimit failed"));
+}
+
void
linux_proc_init(struct thread *td, struct thread *newtd, int flags)
{
@@ -115,6 +143,8 @@
p->p_emuldata = pem;
}
newtd->td_emuldata = em;
+
+ linux_set_default_openfiles(td, p);
} else {
p = td->td_proc;
Index: head/sys/compat/linux/linux_mib.h
===================================================================
--- head/sys/compat/linux/linux_mib.h
+++ head/sys/compat/linux/linux_mib.h
@@ -62,6 +62,7 @@
#define linux_use26(t) (linux_kernver(t) >= LINUX_KERNVER_2006000)
+extern int linux_default_openfiles;
extern int linux_ignore_ip_recverr;
extern int linux_preserve_vstatus;
extern bool linux_map_sched_prio;
Index: head/sys/compat/linux/linux_mib.c
===================================================================
--- head/sys/compat/linux/linux_mib.c
+++ head/sys/compat/linux/linux_mib.c
@@ -63,6 +63,11 @@
SYSCTL_NODE(_compat, OID_AUTO, linux, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"Linux mode");
+int linux_default_openfiles = 1024;
+SYSCTL_INT(_compat_linux, OID_AUTO, default_openfiles, CTLFLAG_RWTUN,
+ &linux_default_openfiles, 0,
+ "Default soft openfiles resource limit, or -1 for unlimited");
+
int linux_ignore_ip_recverr = 1;
SYSCTL_INT(_compat_linux, OID_AUTO, ignore_ip_recverr, CTLFLAG_RWTUN,
&linux_ignore_ip_recverr, 0, "Ignore enabling IP_RECVERR");
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Feb 13, 6:56 AM (21 h, 9 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16624215
Default Alt Text
D25177.diff (3 KB)
Attached To
Mode
D25177: Default Linux openfiles to 1024
Attached
Detach File
Event Timeline
Log In to Comment