]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Locking for the per-process resource limits structure.
authorjhb <jhb@FreeBSD.org>
Wed, 4 Feb 2004 21:52:57 +0000 (21:52 +0000)
committerjhb <jhb@FreeBSD.org>
Wed, 4 Feb 2004 21:52:57 +0000 (21:52 +0000)
commit279b2b827810d149b5b8453900cdea57874ae234
treed9c0a05d62914174d6f00ab22300e935c3e6d983
parentf7b1079809c2529c50447de59fdce77a7f5a08f5
Locking for the per-process resource limits structure.
- struct plimit includes a mutex to protect a reference count.  The plimit
  structure is treated similarly to struct ucred in that is is always copy
  on write, so having a reference to a structure is sufficient to read from
  it without needing a further lock.
- The proc lock protects the p_limit pointer and must be held while reading
  limits from a process to keep the limit structure from changing out from
  under you while reading from it.
- Various global limits that are ints are not protected by a lock since
  int writes are atomic on all the archs we support and thus a lock
  wouldn't buy us anything.
- All accesses to individual resource limits from a process are abstracted
  behind a simple lim_rlimit(), lim_max(), and lim_cur() API that return
  either an rlimit, or the current or max individual limit of the specified
  resource from a process.
- dosetrlimit() was renamed to kern_setrlimit() to match existing style of
  other similar syscall helper functions.
- The alpha OSF/1 compat layer no longer calls getrlimit() and setrlimit()
  (it didn't used the stackgap when it should have) but uses lim_rlimit()
  and kern_setrlimit() instead.
- The svr4 compat no longer uses the stackgap for resource limits calls,
  but uses lim_rlimit() and kern_setrlimit() instead.
- The ibcs2 compat no longer uses the stackgap for resource limits.  It
  also no longer uses the stackgap for accessing sysctl's for the
  ibcs2_sysconf() syscall but uses kernel_sysctl() instead.  As a result,
  ibcs2_sysconf() no longer needs Giant.
- The p_rlimit macro no longer exists.

Submitted by: mtm (mostly, I only did a few cleanups and catchups)
Tested on: i386
Compiled on: alpha, amd64
42 files changed:
sys/alpha/linux/linux_machdep.c
sys/alpha/osf1/osf1_misc.c
sys/compat/ia32/ia32_sysvec.c
sys/compat/linux/linux_misc.c
sys/compat/svr4/imgact_svr4.c
sys/compat/svr4/svr4_filio.c
sys/compat/svr4/svr4_misc.c
sys/compat/svr4/svr4_resource.c
sys/fs/fdescfs/fdesc_vfsops.c
sys/fs/msdosfs/msdosfs_vnops.c
sys/fs/nwfs/nwfs_io.c
sys/fs/procfs/procfs_rlimit.c
sys/fs/smbfs/smbfs_io.c
sys/gnu/ext2fs/ext2_readwrite.c
sys/gnu/fs/ext2fs/ext2_readwrite.c
sys/i386/ibcs2/ibcs2_misc.c
sys/i386/linux/imgact_linux.c
sys/i386/linux/linux_machdep.c
sys/kern/imgact_aout.c
sys/kern/imgact_elf.c
sys/kern/imgact_gzip.c
sys/kern/init_main.c
sys/kern/kern_acct.c
sys/kern/kern_descrip.c
sys/kern/kern_exit.c
sys/kern/kern_fork.c
sys/kern/kern_resource.c
sys/kern/kern_sig.c
sys/kern/subr_trap.c
sys/kern/sys_generic.c
sys/kern/uipc_sockbuf.c
sys/kern/uipc_socket2.c
sys/nfsclient/nfs_bio.c
sys/sys/proc.h
sys/sys/resource.h
sys/sys/resourcevar.h
sys/ufs/ffs/ffs_vnops.c
sys/vm/vm_glue.c
sys/vm/vm_map.c
sys/vm/vm_mmap.c
sys/vm/vm_pageout.c
sys/vm/vm_unix.c