From: Faiyaz Ahmed Date: Fri, 3 Aug 2007 16:07:17 +0000 (+0000) Subject: DHZ - ulimit fix for vsh. X-Git-Tag: planetlab-4_1-rc2~7 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;ds=sidebyside;h=e99bb697d1b912b05c54ea54d9e6fc7dea265729;p=util-vserver.git DHZ - ulimit fix for vsh. --- diff --git a/lib/planetlab.c b/lib/planetlab.c index adf6083..cbfbe33 100644 --- a/lib/planetlab.c +++ b/lib/planetlab.c @@ -94,6 +94,7 @@ pl_chcontext(xid_t ctx, uint64_t bcaps, struct sliver_resources *slr) { int retry_count = 0; + pl_set_ulimits(slr); for (;;) { struct vc_ctx_flags vc_flags; @@ -341,65 +342,64 @@ adjust_lim(struct vc_rlimit *vcr, struct rlimit *lim) return adjusted; } +static inline void +set_one_ulimit(int resource, struct vc_rlimit *limit) +{ + struct rlimit lim; + getrlimit(resource, &lim); + adjust_lim(limit, &lim); + setrlimit(resource, &lim); +} + +void +pl_set_ulimits(struct sliver_resources *slr) +{ + if (!slr) + return; + + set_one_ulimit(RLIMIT_RSS, &slr->vs_rss); + set_one_ulimit(RLIMIT_AS, &slr->vs_as); + set_one_ulimit(RLIMIT_NPROC, &slr->vs_nproc); + set_one_ulimit(RLIMIT_NOFILE, &slr->vs_openfd); +} void pl_set_limits(xid_t ctx, struct sliver_resources *slr) { - struct rlimit lim; /* getrlimit values */ unsigned long long vs_cpu; uint32_t cpu_sched_flags; if (slr != 0) { /* set memory limits */ - getrlimit(RLIMIT_RSS,&lim); - if (adjust_lim(&slr->vs_rss, &lim)) { - setrlimit(RLIMIT_RSS, &lim); - if (vc_set_rlimit(ctx, RLIMIT_RSS, &slr->vs_rss)) - { - PERROR("pl_setrlimit(%u, RLIMIT_RSS)", ctx); - exit(1); - } + if (vc_set_rlimit(ctx, RLIMIT_RSS, &slr->vs_rss)) { + PERROR("pl_setrlimit(%u, RLIMIT_RSS)", ctx); + exit(1); } /* set address space limits */ - getrlimit(RLIMIT_AS,&lim); - if (adjust_lim(&slr->vs_as, &lim)) { - setrlimit(RLIMIT_AS, &lim); - if (vc_set_rlimit(ctx, RLIMIT_AS, &slr->vs_as)) - { - PERROR("pl_setrlimit(%u, RLIMIT_AS)", ctx); - exit(1); - } + if (vc_set_rlimit(ctx, RLIMIT_AS, &slr->vs_as)) { + PERROR("pl_setrlimit(%u, RLIMIT_AS)", ctx); + exit(1); } + /* set nrpoc limit */ - getrlimit(RLIMIT_NPROC,&lim); - if (adjust_lim(&slr->vs_nproc, &lim)) { - setrlimit(RLIMIT_NPROC, &lim); - if (vc_set_rlimit(ctx, RLIMIT_NPROC, &slr->vs_nproc)) - { - PERROR("pl_setrlimit(%u, RLIMIT_NPROC)", ctx); - exit(1); - } + if (vc_set_rlimit(ctx, RLIMIT_NPROC, &slr->vs_nproc)) { + PERROR("pl_setrlimit(%u, RLIMIT_NPROC)", ctx); + exit(1); } /* set openfd limit */ - getrlimit(RLIMIT_NOFILE,&lim); - if (adjust_lim(&slr->vs_openfd, &lim)) { - setrlimit(RLIMIT_NOFILE, &lim); - if (vc_set_rlimit(ctx, RLIMIT_NOFILE, &slr->vs_openfd)) - { - PERROR("pl_setrlimit(%u, RLIMIT_NOFILE)", ctx); - exit(1); - } + if (vc_set_rlimit(ctx, RLIMIT_NOFILE, &slr->vs_openfd)) { + PERROR("pl_setrlimit(%u, RLIMIT_NOFILE)", ctx); + exit(1); + } #ifndef VLIMIT_OPENFD #warning VLIMIT_OPENFD should be defined from standard header #define VLIMIT_OPENFD 17 #endif - if (vc_set_rlimit(ctx, VLIMIT_OPENFD, &slr->vs_openfd)) - { - PERROR("pl_setrlimit(%u, VLIMIT_OPENFD)", ctx); - exit(1); - } + if (vc_set_rlimit(ctx, VLIMIT_OPENFD, &slr->vs_openfd)) { + PERROR("pl_setrlimit(%u, VLIMIT_OPENFD)", ctx); + exit(1); } vs_cpu = slr->vs_cpu; cpu_sched_flags = slr->vs_cpuguaranteed & VS_SCHED_CPU_GUARANTEED; diff --git a/lib/planetlab.h b/lib/planetlab.h index 739bac6..2d2bbeb 100644 --- a/lib/planetlab.h +++ b/lib/planetlab.h @@ -65,6 +65,7 @@ pl_setsched(xid_t ctx, uint32_t cpu_share, uint32_t cpu_sched_flags); void pl_get_limits(char *, struct sliver_resources *); void pl_set_limits(xid_t, struct sliver_resources *); +void pl_set_ulimits(struct sliver_resources *); static int _PERROR(const char *format, char *file, int line, int _errno, ...) diff --git a/util-vserver.spec b/util-vserver.spec index 1f43695..99587c2 100644 --- a/util-vserver.spec +++ b/util-vserver.spec @@ -16,8 +16,8 @@ %{!?release_func:%global release_func() %1%{?dist}} %define name util-vserver -%define version 0.30.209 -%define release 1%{?pldistro:.%{pldistro}}%{?date:.%{date}} +%define version 0.30.208 +%define release 17%{?pldistro:.%{pldistro}}%{?date:.%{date}} %define _without_dietlibc 1 %define _without_xalan 1 @@ -32,7 +32,7 @@ URL: http://cvs.planet-lab.org/cvs/util-vserver Summary: Linux virtual server utilities Name: util-vserver -Version: 0.30.209 +Version: 0.30.208 Release: %{release} License: GPL Group: System Environment/Base