From: Marc Fiuczynski Date: Wed, 7 Sep 2005 17:53:05 +0000 (+0000) Subject: Added support to check for a CPUGUARANTEED value in a vserver configuration X-Git-Tag: after-util-vserver-0_30_208-revert~109 X-Git-Url: http://git.onelab.eu/?p=util-vserver.git;a=commitdiff_plain;h=2fd3b085966352e2e796b78d64e78fc4be01c9d2 Added support to check for a CPUGUARANTEED value in a vserver configuration file. It needs to either be CPUGUARANTEED=0 for false and 1 for true. --- diff --git a/src/vsh.c b/src/vsh.c index 6401e10..da93d56 100644 --- a/src/vsh.c +++ b/src/vsh.c @@ -209,15 +209,10 @@ struct resources { }; #define VSERVERCONF "/etc/vservers/" -static void get_limits(char *context, unsigned long long *cpu, unsigned long long *mem, unsigned long long *task) { +static void get_limits(char *context, struct resources *list){ FILE *fb; size_t len = strlen(VSERVERCONF) + strlen(context) + strlen(".conf") + NULLBYTE_SIZE; char *conf = (char *)malloc(len); - struct resources list[] = - {{"MEMLIMIT", mem}, - {"CPULIMIT", cpu}, - {"TASKLIMIT", task}, - {0,0}}; struct resources *r; sprintf(conf, "%s%s.conf", VSERVERCONF, context); @@ -293,7 +288,15 @@ static int sandbox_processes(xid_t xid, char *context) unsigned long long cpu = VC_LIM_KEEP; unsigned long long mem = VC_LIM_KEEP; unsigned long long task = VC_LIM_KEEP; - get_limits(context,&cpu, &mem, &task); + unsigned long long cpuguaranteed = 0; + struct resources list[] = + {{"MEMLIMIT", &mem}, + {"CPULIMIT", &cpu}, + {"CPUGUARANTEED", &cpuguaranteed}, + {"TASKLIMIT", &task}, + {0,0}}; + + get_limits(context,list); (void) (sandbox_chroot(xid)); caps.ccaps = ~vc_get_insecureccaps(); @@ -321,8 +324,12 @@ static int sandbox_processes(xid_t xid, char *context) * configuration. */ #define VC_VXF_SCHED_SHARE 0x00000800ull - flags.flagword |= VC_VXF_SCHED_HARD | VC_VXF_SCHED_SHARE; - flags.mask |= VC_VXF_SCHED_HARD | VC_VXF_SCHED_SHARE; + flags.flagword |= VC_VXF_SCHED_HARD; + flags.mask |= VC_VXF_SCHED_HARD; + if (cpuguaranteed) { + flags.flagword |= VC_VXF_SCHED_SHARE; + flags.mask |= VC_VXF_SCHED_SHARE; + } /* CPULIMIT value from /etc/vservers/xyz.conf */ sched.fill_rate = cpu;