tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern.maxlockf for byte range lock limit



On Fri, Jul 09, 2021 at 08:52:08PM +0000, David Holland wrote:
> This was discussed somewhere briefly (probably on chat) a couple weeks
> ago, with the conclusion that we should just make the limit something
> like twice the maximum number of open files and forget about it. No
> real need to add more knobs.

Here is a patch that ties it to maxfiles, with documentation. Tying
to open files would be more complex. We could also tie to
curproc->p_rlimit[RLIMIT_NOFILE].rlim_cur if that is more relevant.

-- 
Emmanuel Dreyfus
manu%netbsd.org@localhost
Index: sys/kern/vfs_lockf.c
===================================================================
RCS file: /cvsroot/src/sys/kern/vfs_lockf.c,v
retrieving revision 1.73
diff -U4 -r1.73 vfs_lockf.c
--- sys/kern/vfs_lockf.c	31 Jan 2011 08:25:32 -0000	1.73
+++ sys/kern/vfs_lockf.c	12 Jul 2021 07:51:43 -0000
@@ -122,9 +122,9 @@
  * If you're slightly above the limit, we still have to permit an allocation
  * so that the unlock can succeed.  If the unlocking causes too many splits,
  * however, you're totally cutoff.
  */
-int maxlocksperuid = 1024;
+#define MAXLOCKSPERUID (2 * maxfiles)
 
 #ifdef LOCKF_DEBUG
 /*
  * Print out a lock.
@@ -199,9 +199,9 @@
 
 	uip = uid_find(uid);
 	lcnt = atomic_inc_ulong_nv(&uip->ui_lockcnt);
 	if (uid && allowfail && lcnt >
-	    (allowfail == 1 ? maxlocksperuid : (maxlocksperuid * 2))) {
+	    (allowfail == 1 ? MAXLOCKSPERUID : (MAXLOCKSPERUID * 2))) {
 		atomic_dec_ulong(&uip->ui_lockcnt);
 		return NULL;
 	}
 
Index: lib/libc/sys/fcntl.2
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/fcntl.2,v
retrieving revision 1.45
diff -U4 -r1.45 fcntl.2
--- lib/libc/sys/fcntl.2	27 Sep 2019 07:20:07 -0000	1.45
+++ lib/libc/sys/fcntl.2	12 Jul 2021 07:51:43 -0000
@@ -548,8 +548,19 @@
 .Fa cmd
 is
 .Dv F_GETPATH
 and insufficient memory is available.
+.Pp
+The argument
+.Fa cmd
+is
+.Dv F_GETLK ,
+.Dv F_SETLK ,
+or
+.Dv F_SETLKW ,
+and the file lock limit for the current unprivilegied user
+has been reached. It can be modifed using sysctl
+.Li kern.maxfiles .
 .It Bq Er ERANGE
 The argument
 .Fa cmd
 is
Index: lib/libc/sys/flock.2
===================================================================
RCS file: /cvsroot/src/lib/libc/sys/flock.2,v
retrieving revision 1.22
diff -U4 -r1.22 flock.2
--- lib/libc/sys/flock.2	15 Oct 2011 21:35:50 -0000	1.22
+++ lib/libc/sys/flock.2	12 Jul 2021 07:51:43 -0000
@@ -136,8 +136,12 @@
 .Dv LOCK_EX ,
 .Dv LOCK_SH ,
 or
 .Dv LOCK_UN .
+.It Bq Eq ENOMEM
+The file lock limit for the current unprivilegied user 
+has been reached. It can be modifed using sysctl
+.Li kern.maxfiles .
 .It Bq Er EOPNOTSUPP
 The argument
 .Fa fd
 refers to an object other than a file.
Index: share/man/man7/sysctl.7
===================================================================
RCS file: /cvsroot/src/share/man/man7/sysctl.7,v
retrieving revision 1.151
diff -U4 -r1.151 sysctl.7
--- share/man/man7/sysctl.7	17 Oct 2020 09:20:33 -0000	1.151
+++ share/man/man7/sysctl.7	12 Jul 2021 07:51:43 -0000
@@ -755,8 +755,13 @@
 Memory Mapped Files Option is available on this system,
 otherwise\ 0.
 .It Li kern.maxfiles ( Dv KERN_MAXFILES )
 The maximum number of open files that may be open in the system.
+This also controls the maximum file locks per unprivilegied user 
+enforced by
+.Xr fnctl 2
+and 
+.Xr flock 2 .
 .It Li kern.maxpartitions ( Dv KERN_MAXPARTITIONS )
 The maximum number of partitions allowed per disk.
 .It Li kern.maxlwp
 The maximum number of Lightweight Processes (threads) the system allows


Home | Main Index | Thread Index | Old Index