svn commit: r198201 - head/sys/vm

Konstantin Belousov kib at FreeBSD.org
Sun Oct 18 12:55:40 UTC 2009


Author: kib
Date: Sun Oct 18 12:55:39 2009
New Revision: 198201
URL: http://svn.freebsd.org/changeset/base/198201

Log:
  Remove spurious call to priv_check(PRIV_VM_SWAP_NOQUOTA).
  Call priv_check(PRIV_VM_SWAP_NORLIMIT) only when per-uid limit is
  actually exceed.
  
  Both changes aim at calling priv_check(9) only for the cases when
  privilege is actually exercised by the process.
  
  Reported and tested by:	rwatson
  Reviewed by:	alc
  MFC after:	3 days

Modified:
  head/sys/vm/swap_pager.c

Modified: head/sys/vm/swap_pager.c
==============================================================================
--- head/sys/vm/swap_pager.c	Sun Oct 18 12:48:23 2009	(r198200)
+++ head/sys/vm/swap_pager.c	Sun Oct 18 12:55:39 2009	(r198201)
@@ -176,7 +176,7 @@ swap_reserve(vm_ooffset_t incr)
 int
 swap_reserve_by_uid(vm_ooffset_t incr, struct uidinfo *uip)
 {
-	vm_ooffset_t r, s, max;
+	vm_ooffset_t r, s;
 	int res, error;
 	static int curfail;
 	static struct timeval lastfail;
@@ -185,7 +185,6 @@ swap_reserve_by_uid(vm_ooffset_t incr, s
 		panic("swap_reserve: & PAGE_MASK");
 
 	res = 0;
-	error = priv_check(curthread, PRIV_VM_SWAP_NOQUOTA);
 	mtx_lock(&sw_dev_mtx);
 	r = swap_reserved + incr;
 	if (overcommit & SWAP_RESERVE_ALLOW_NONWIRED) {
@@ -204,10 +203,9 @@ swap_reserve_by_uid(vm_ooffset_t incr, s
 	if (res) {
 		PROC_LOCK(curproc);
 		UIDINFO_VMSIZE_LOCK(uip);
-		error = priv_check(curthread, PRIV_VM_SWAP_NORLIMIT);
-		max = (error != 0) ? lim_cur(curproc, RLIMIT_SWAP) : 0;
-		if (max != 0 && uip->ui_vmsize + incr > max &&
-		    (overcommit & SWAP_RESERVE_RLIMIT_ON) != 0)
+		if ((overcommit & SWAP_RESERVE_RLIMIT_ON) != 0 &&
+		    uip->ui_vmsize + incr > lim_cur(curproc, RLIMIT_SWAP) &&
+		    priv_check(curthread, PRIV_VM_SWAP_NORLIMIT))
 			res = 0;
 		else
 			uip->ui_vmsize += incr;


More information about the svn-src-all mailing list