PERFORCE change 102535 for review

Chris Jones cdjones at FreeBSD.org
Thu Jul 27 08:38:32 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=102535

Change 102535 by cdjones at cdjones-impulse on 2006/07/27 08:37:54

	Refactor to pass prison structures to _memory and _memory_limit.

Affected files ...

.. //depot/projects/soc2006/cdjones_jail/src/sys/kern/kern_jail.c#13 edit
.. //depot/projects/soc2006/cdjones_jail/src/sys/sys/jail.h#13 edit

Differences ...

==== //depot/projects/soc2006/cdjones_jail/src/sys/kern/kern_jail.c#13 (text+ko) ====

@@ -126,6 +126,11 @@
     if (pr->pr_pager_flags & J_PAGER_TD_DIE)
       break;
 
+    if (prison_memory(pr) > prison_memory_limit(pr)) {
+      /* the logic from vm_daemon() really needs to go here.
+	 TODO: refactor vm_daemon to optionally act on specific jails. */
+    }
+
     /* TODO --- make interval into a sysctl? */
     tsleep(pr, 0, "-", hz); 
   }
@@ -458,7 +463,7 @@
 
 /* Given credential, return memory usage in bytes. */
 int
-prison_memory(struct ucred *cred)
+prison_memory(struct prison *pr)
 {
   struct proc *p;
   u_int mem_used = 0;
@@ -466,7 +471,7 @@
   /* TODO: cut this to search only procs in given jail. */
   FOREACH_PROC_IN_SYSTEM(p) {
     if (!jailed(p->p_ucred) ||
-	(cred->cr_prison != p->p_ucred->cr_prison)) {
+	(pr != p->p_ucred->cr_prison)) {
       continue;
     }
 
@@ -479,17 +484,17 @@
 
   /* Convert to bytes, cache (maybe unncessary?). */
   mem_used *= PAGE_SIZE;
-  mtx_lock(&cred->cr_prison->pr_mtx);
-  cred->cr_prison->pr_mem_usage = mem_used;
-  mtx_unlock(&cred->cr_prison->pr_mtx);
+  mtx_lock(&pr->pr_mtx);
+  pr->pr_mem_usage = mem_used;
+  mtx_unlock(&pr->pr_mtx);
   return mem_used;
 }
 
 /* Given credential, return permitted memory usage in bytes. */
 int 
-prison_memory_limit(struct ucred *cred)
+prison_memory_limit(struct prison *pr)
 {
-  return cred->cr_prison->pr_mem_limit;
+  return pr->pr_mem_limit;
 }
 
 /*

==== //depot/projects/soc2006/cdjones_jail/src/sys/sys/jail.h#13 (text+ko) ====

@@ -143,8 +143,8 @@
 void prison_hold(struct prison *pr);
 int prison_if(struct ucred *cred, struct sockaddr *sa);
 int prison_ip(struct ucred *cred, int flag, u_int32_t *ip);
-int prison_memory(struct ucred *cred);
-int prison_memory_limit(struct ucred *cred);
+int prison_memory(struct prison *pr);
+int prison_memory_limit(struct prison *pr);
 void prison_remote_ip(struct ucred *cred, int flags, u_int32_t *ip);
 
 #endif /* _KERNEL */


More information about the p4-projects mailing list