From owner-p4-projects@FreeBSD.ORG Mon Jun 28 19:11:19 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 336A1106567A; Mon, 28 Jun 2010 19:11:19 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EB6201065677 for ; Mon, 28 Jun 2010 19:11:18 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id D81448FC0C for ; Mon, 28 Jun 2010 19:11:18 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id o5SJBIO3066763 for ; Mon, 28 Jun 2010 19:11:18 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id o5SJBISA066761 for perforce@freebsd.org; Mon, 28 Jun 2010 19:11:18 GMT (envelope-from trasz@freebsd.org) Date: Mon, 28 Jun 2010 19:11:18 GMT Message-Id: <201006281911.o5SJBISA066761@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 180302 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Jun 2010 19:11:19 -0000 http://p4web.freebsd.org/@@180302?ac=10 Change 180302 by trasz@trasz_victim on 2010/06/28 19:10:24 Make containers independent from HRL. Add "options HRL". Affected files ... .. //depot/projects/soc2009/trasz_limits/sys/compat/linux/linux_misc.c#11 edit .. //depot/projects/soc2009/trasz_limits/sys/compat/svr4/imgact_svr4.c#5 edit .. //depot/projects/soc2009/trasz_limits/sys/compat/svr4/svr4_filio.c#5 edit .. //depot/projects/soc2009/trasz_limits/sys/conf/NOTES#22 edit .. //depot/projects/soc2009/trasz_limits/sys/conf/options#20 edit .. //depot/projects/soc2009/trasz_limits/sys/fs/unionfs/union_subr.c#6 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/init_main.c#22 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_container.c#4 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_exit.c#19 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_fork.c#15 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#77 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_loginclass.c#18 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_prot.c#26 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#33 edit .. //depot/projects/soc2009/trasz_limits/sys/kern/tty_pts.c#15 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/loginclass.h#9 edit .. //depot/projects/soc2009/trasz_limits/sys/sys/resourcevar.h#19 edit .. //depot/projects/soc2009/trasz_limits/sys/vm/vm_map.c#14 edit .. //depot/projects/soc2009/trasz_limits/sys/vm/vm_unix.c#5 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/sys/compat/linux/linux_misc.c#11 (text+ko) ==== @@ -35,7 +35,7 @@ #include #include #include -#include +#include #if defined(__i386__) #include #endif ==== //depot/projects/soc2009/trasz_limits/sys/compat/svr4/imgact_svr4.c#5 (text+ko) ==== @@ -36,7 +36,7 @@ #include #include #include -#include +#include #include #include #include ==== //depot/projects/soc2009/trasz_limits/sys/compat/svr4/svr4_filio.c#5 (text+ko) ==== @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include #include ==== //depot/projects/soc2009/trasz_limits/sys/conf/NOTES#22 (text+ko) ==== @@ -1144,6 +1144,9 @@ options MAC_STUB options MAC_TEST +# Hierarchical Resource Limits +options HRL + ##################################################################### # CLOCK OPTIONS ==== //depot/projects/soc2009/trasz_limits/sys/conf/options#20 (text+ko) ==== @@ -853,3 +853,6 @@ # Flattened device tree options FDT opt_platform.h FDT_DTB_STATIC opt_platform.h + +# Hierarchical Resource Limits +HRL opt_hrl.h ==== //depot/projects/soc2009/trasz_limits/sys/fs/unionfs/union_subr.c#6 (text+ko) ==== @@ -49,7 +49,7 @@ #include #include #include -#include +#include #include #include ==== //depot/projects/soc2009/trasz_limits/sys/kern/init_main.c#22 (text+ko) ==== @@ -45,6 +45,7 @@ __FBSDID("$FreeBSD: src/sys/kern/init_main.c,v 1.310 2010/05/23 18:32:02 kib Exp $"); #include "opt_ddb.h" +#include "opt_hrl.h" #include "opt_init_path.h" #include @@ -498,8 +499,10 @@ #endif td->td_ucred = crhold(p->p_ucred); +#ifdef HRL /* Let the HRL know about the new process. */ hrl_proc_init(p); +#endif /* Create sigacts. */ p->p_sigacts = sigacts_alloc(); ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_container.c#4 (text+ko) ==== @@ -27,20 +27,18 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_hrl.h" + #include -#include #include #include #include #include -#include #include #include -#include #include #include #include -#include #include #include #include @@ -52,14 +50,19 @@ #include #include -extern struct mtx hrl_lock; +#ifdef HRL +#include +#endif + +struct mtx container_lock; +MTX_SYSINIT(container_lock, &container_lock, "container lock", MTX_RECURSE); /* XXX: Make it non-recurseable later. */ static void container_add(struct container *dest, const struct container *src) { int i; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); for (i = 0; i <= HRL_RESOURCE_MAX; i++) { KASSERT(dest->c_resources[i] >= 0, @@ -77,7 +80,7 @@ { int i; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); for (i = 0; i <= HRL_RESOURCE_MAX; i++) { KASSERT(dest->c_resources[i] >= 0, @@ -97,7 +100,7 @@ { int i; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); KASSERT(child != NULL, ("child != NULL")); KASSERT(parent != NULL, ("parent != NULL")); @@ -118,7 +121,7 @@ { int i; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); KASSERT(child != NULL, ("child != NULL")); KASSERT(parent != NULL, ("parent != NULL")); @@ -137,7 +140,7 @@ { int i; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); KASSERT(child != NULL, ("child != NULL")); for (i = 0; i <= CONTAINER_PARENTS_MAX; i++) { @@ -166,18 +169,17 @@ { int i; - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); for (i = 0; i <= HRL_RESOURCE_MAX; i++) { if (container->c_resources[i] != 0) printf("destroying non-empty container: " - "%ju allocated for resource %s", - container->c_resources[i], - hrl_resource_name(i)); + "%ju allocated for resource %d", + container->c_resources[i], i); container->c_resources[i] = 0; } container_leave_parents(container); - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); } #ifdef DIAGNOSTIC @@ -190,7 +192,7 @@ int i, resource; struct container *parent; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); KASSERT(container != NULL, ("NULL container")); for (resource = 0; resource <= HRL_RESOURCE_MAX; resource++) { @@ -223,7 +225,7 @@ { int i; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); KASSERT(container != NULL, ("NULL container")); container->c_resources[resource] += amount; @@ -244,23 +246,24 @@ int hrl_alloc(struct proc *p, int resource, uint64_t amount) { - int error; #if 0 printf("hrl_alloc: allocating %ju of %s for %s (pid %d)\n", amount, hrl_resource_name(resource), p->p_comm, p->p_pid); #endif - KASSERT(amount > 0, ("hrl_alloc: invalid amount for %s: %ju", - hrl_resource_name(resource), amount)); + KASSERT(amount > 0, ("hrl_alloc: invalid amount for resource %d: %ju", + resource, amount)); - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); +#ifdef HRL error = hrl_enforce_proc(p, resource, amount); if (error) { - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); return (error); } +#endif container_alloc_resource(&p->p_container, resource, amount); - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); return (0); } @@ -275,27 +278,28 @@ int hrl_allocated(struct proc *p, int resource, uint64_t amount) { - int error; int64_t diff; #if 0 printf("hrl_allocated: allocated %lld of %s for %s (pid %d)\n", amount, hrl_resource_name(resource), p->p_comm, p->p_pid); #endif - KASSERT(amount >= 0, ("hrl_allocated: invalid amount for %s: %ju", - hrl_resource_name(resource), amount)); + KASSERT(amount >= 0, ("hrl_allocated: invalid amount for resource %d: %ju", + resource, amount)); - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); diff = amount - p->p_container.c_resources[resource]; +#ifdef HRL if (diff > 0) { error = hrl_enforce_proc(p, resource, diff); if (error) { - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); return (error); } } +#endif container_alloc_resource(&p->p_container, resource, diff); - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); return (0); } @@ -311,17 +315,17 @@ printf("hrl_free: freeing %lld of %s for %s (pid %d)\n", amount, hrl_resource_name(resource), p->p_comm, p->p_pid); #endif - KASSERT(amount > 0, ("hrl_free: invalid amount for %s: %ju", - hrl_resource_name(resource), amount)); + KASSERT(amount > 0, ("hrl_free: invalid amount for resource %d: %ju", + resource, amount)); - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); KASSERT(amount <= p->p_container.c_resources[resource], - ("hrl_free: freeing %ju of %s, which is more than allocated " - "%ld for %s (pid %d)", amount, hrl_resource_name(resource), + ("hrl_free: freeing %ju of resource %d, which is more than allocated " + "%ld for %s (pid %d)", amount, resource, p->p_container.c_resources[resource], p->p_comm, p->p_pid)); container_alloc_resource(&p->p_container, resource, -amount); - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); } static int @@ -346,9 +350,9 @@ hrl_allocated(p, HRL_RESOURCE_COREDUMPSIZE, 0); hrl_allocated(p, HRL_RESOURCE_PTY, 0); - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); container_destroy(&p->p_container); - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); } /* @@ -363,7 +367,7 @@ PROC_LOCK(parent); PROC_LOCK(child); - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); /* * Create container for the child process and inherit containing @@ -384,7 +388,7 @@ parent->p_container.c_resources[i]); } - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); PROC_UNLOCK(child); PROC_UNLOCK(parent); } ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_exit.c#19 (text+ko) ==== @@ -66,7 +66,7 @@ #include #include /* for acct_process() function prototype */ #include -#include +#include #include #include #include ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_fork.c#15 (text+ko) ==== @@ -46,7 +46,7 @@ #include #include #include -#include +#include #include #include #include ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#77 (text+ko) ==== @@ -27,6 +27,8 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_hrl.h" + #include #include #include @@ -52,6 +54,8 @@ #include #include +#ifdef HRL + #define HRF_DEFAULT 0 #define HRF_DONT_INHERIT 1 #define HRF_DONT_ACCUMULATE 2 @@ -116,7 +120,7 @@ static uma_zone_t hrl_rule_link_zone; static uma_zone_t hrl_rule_zone; -struct mtx hrl_lock; +extern struct mtx container_lock; static void hrl_compute_available(struct proc *p, int64_t (*availablep)[]); static int hrl_rule_fully_specified(const struct hrl_rule *rule); @@ -192,7 +196,7 @@ int64_t available = INT64_MAX; struct ucred *cred = p->p_ucred; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); resource = rule->hr_resource; switch (rule->hr_per) { @@ -231,7 +235,7 @@ { int64_t available; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); available = hrl_available_resource(p, rule); if (available >= amount) @@ -266,7 +270,7 @@ int should_deny = 0; char *buf; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); /* * XXX: Do this just before we start running on a CPU, not all the time. @@ -363,7 +367,7 @@ struct hrl_rule_link *link; struct hrl_rule *rule; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); for (i = 0; i <= HRL_RESOURCE_MAX; i++) (*availablep)[i] = INT64_MAX; @@ -509,9 +513,9 @@ link = uma_zalloc(hrl_rule_link_zone, M_WAITOK); link->hrl_rule = rule; - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); LIST_INSERT_HEAD(&container->c_rule_links, link, hrl_next); - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); } static int @@ -520,7 +524,7 @@ struct hrl_rule_link *link; KASSERT(hrl_rule_fully_specified(rule), ("rule not fully specified")); - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); link = uma_zalloc(hrl_rule_link_zone, M_NOWAIT); if (link == NULL) @@ -544,7 +548,7 @@ int removed = 0; struct hrl_rule_link *link, *linktmp; - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); LIST_FOREACH_SAFE(link, &container->c_rule_links, hrl_next, linktmp) { if (!hrl_rule_matches(link->hrl_rule, filter)) continue; @@ -554,7 +558,7 @@ uma_zfree(hrl_rule_link_zone, link); removed++; } - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); return (removed); } @@ -1210,7 +1214,7 @@ struct hrl_rule_link *link; struct sbuf *sb = (struct sbuf *)arg3; - mtx_assert(&hrl_lock, MA_OWNED); + mtx_assert(&container_lock, MA_OWNED); LIST_FOREACH(link, &container->c_rule_links, hrl_next) { if (!hrl_rule_matches(link->hrl_rule, filter)) @@ -1252,7 +1256,7 @@ sx_assert(&allproc_lock, SA_LOCKED); FOREACH_PROC_IN_SYSTEM(p) { - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); LIST_FOREACH(link, &p->p_container.c_rule_links, hrl_next) { /* * Non-process rules will be added to the buffer later. @@ -1265,14 +1269,14 @@ hrl_rule_to_sbuf(sb, link->hrl_rule); sbuf_printf(sb, ","); } - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); } - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); loginclass_container_foreach(hrl_get_rules_callback, filter, sb); ui_container_foreach(hrl_get_rules_callback, filter, sb); gi_container_foreach(hrl_get_rules_callback, filter, sb); - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); if (sbuf_overflowed(sb)) { sbuf_delete(sb); free(buf, M_HRL); @@ -1337,12 +1341,12 @@ sb = sbuf_new(NULL, buf, bufsize, SBUF_FIXEDLEN); KASSERT(sb != NULL, ("sbuf_new failed")); - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); LIST_FOREACH(link, &filter->hr_subject.hs_proc->p_container.c_rule_links, hrl_next) { hrl_rule_to_sbuf(sb, link->hrl_rule); sbuf_printf(sb, ","); } - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); if (sbuf_overflowed(sb)) { sbuf_delete(sb); free(buf, M_HRL); @@ -1443,14 +1447,14 @@ { struct ucred *cred = p->p_ucred; - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); container_create(&p->p_container); container_join(&p->p_container, &cred->cr_ruidinfo->ui_container); container_join(&p->p_container, &cred->cr_loginclass->lc_container); container_join(&p->p_container, &cred->cr_prison->pr_container); - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); } /* @@ -1475,7 +1479,7 @@ newpr = newcred->cr_prison; oldpr = p->p_ucred->cr_prison; - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); /* * Remove rules that are no longer applicable with the new ucred. @@ -1537,7 +1541,7 @@ container_join(&p->p_container, &newpr->pr_container); } - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); } /* @@ -1553,7 +1557,7 @@ PROC_LOCK(parent); PROC_LOCK(child); - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); /* * Go through limits applicable to the parent and assign them to the child. @@ -1576,7 +1580,7 @@ } } - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); PROC_UNLOCK(child); PROC_UNLOCK(parent); } @@ -1589,14 +1593,14 @@ { struct hrl_rule_link *link; - mtx_lock(&hrl_lock); + mtx_lock(&container_lock); while (!LIST_EMPTY(&p->p_container.c_rule_links)) { link = LIST_FIRST(&p->p_container.c_rule_links); LIST_REMOVE(link, hrl_next); hrl_rule_release(link->hrl_rule); uma_zfree(hrl_rule_link_zone, link); } - mtx_unlock(&hrl_lock); + mtx_unlock(&container_lock); } static void @@ -1607,9 +1611,47 @@ NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); hrl_rule_zone = uma_zcreate("hrl_rule", sizeof(struct hrl_rule), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); - mtx_init(&hrl_lock, "hrl lock", NULL, MTX_RECURSE); /* XXX: Make it non-recurseable later. */ EVENTHANDLER_REGISTER(process_fork, hrl_proc_fork, NULL, EVENTHANDLER_PRI_ANY); EVENTHANDLER_REGISTER(process_exit, hrl_proc_exit, NULL, EVENTHANDLER_PRI_ANY); } + +#else /* !HRL */ + +int +hrl_get_usage(struct thread *td, struct hrl_get_usage_args *uap) +{ + + return (EOPNOTSUPP); +} + +int +hrl_get_rules(struct thread *td, struct hrl_get_rules_args *uap) +{ + + return (EOPNOTSUPP); +} + +int +hrl_get_limits(struct thread *td, struct hrl_get_limits_args *uap) +{ + + return (EOPNOTSUPP); +} + +int +hrl_add_rule(struct thread *td, struct hrl_add_rule_args *uap) +{ + + return (EOPNOTSUPP); +} + +int +hrl_remove_rule(struct thread *td, struct hrl_remove_rule_args *uap) +{ + + return (EOPNOTSUPP); +} + +#endif /* !HRL */ ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_loginclass.c#18 (text+ko) ==== @@ -42,7 +42,6 @@ #include #include -#include #include #include #include ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_prot.c#26 (text+ko) ==== @@ -45,6 +45,7 @@ __FBSDID("$FreeBSD: src/sys/kern/kern_prot.c,v 1.228 2010/01/15 07:18:46 brooks Exp $"); #include "opt_compat.h" +#include "opt_hrl.h" #include "opt_inet.h" #include "opt_inet6.h" @@ -2125,7 +2126,9 @@ { PROC_LOCK_ASSERT(p, MA_OWNED); +#ifdef HRL hrl_proc_ucred_changing(p, newcred); +#endif p->p_ucred = newcred; } ==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#33 (text+ko) ==== @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD: src/sys/kern/kern_resource.c,v 1.198 2010/05/24 10:23:49 kib Exp $"); #include "opt_compat.h" +#include "opt_hrl.h" #include #include @@ -654,6 +655,7 @@ callout_reset(&p->p_limco, hz, lim_cb, p); } +#ifdef HRL static void hrl_handle_setrlimit(u_int which, struct rlimit *lim, struct thread *td) { @@ -748,6 +750,7 @@ } hrl_rule_release(rule); } +#endif /* HRL */ int kern_setrlimit(td, which, limp) @@ -870,7 +873,9 @@ } } +#ifdef HRL hrl_handle_setrlimit(which, alimp, td); +#endif return (0); } ==== //depot/projects/soc2009/trasz_limits/sys/kern/tty_pts.c#15 (text+ko) ==== @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include #include ==== //depot/projects/soc2009/trasz_limits/sys/sys/loginclass.h#9 (text+ko) ==== @@ -39,6 +39,8 @@ struct container lc_container; }; +struct hrl_rule; + void loginclass_acquire(struct loginclass *lc); void loginclass_release(struct loginclass *lc); struct loginclass *loginclass_find(const char *name); ==== //depot/projects/soc2009/trasz_limits/sys/sys/resourcevar.h#19 (text+ko) ==== @@ -39,7 +39,6 @@ #include #include #include -#include #endif /* @@ -123,6 +122,7 @@ struct proc; struct rusage_ext; struct thread; +struct hrl_rule; void addupc_intr(struct thread *td, uintfptr_t pc, u_int ticks); void addupc_task(struct thread *td, uintfptr_t pc, u_int ticks); ==== //depot/projects/soc2009/trasz_limits/sys/vm/vm_map.c#14 (text+ko) ==== @@ -67,7 +67,7 @@ #include #include -#include +#include #include #include #include ==== //depot/projects/soc2009/trasz_limits/sys/vm/vm_unix.c#5 (text+ko) ==== @@ -44,7 +44,7 @@ __FBSDID("$FreeBSD: src/sys/vm/vm_unix.c,v 1.49 2009/04/11 22:34:08 alc Exp $"); #include -#include +#include #include #include #include