X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Fvserver%2Flimit.h;h=d9e1eea015d7544943f27f973f3a4b19f5cbbf70;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=a7a50f972c4cba9da40bfca4f174fcb1c75f8647;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/include/linux/vserver/limit.h b/include/linux/vserver/limit.h index a7a50f972..d9e1eea01 100644 --- a/include/linux/vserver/limit.h +++ b/include/linux/vserver/limit.h @@ -1,3 +1,5 @@ +/* _VX_LIMIT_H defined below */ + #if defined(__KERNEL__) && defined(_VX_INFO_DEF_) #include @@ -5,27 +7,27 @@ /* context sub struct */ -#define RLIMIT_OPENFD 12 +#define NUM_LIMITS 20 -#define NUM_RLIMITS 16 +#define VLIMIT_NSOCK 16 -#define VLIMIT_SOCK 16 +extern const char *vlimit_name[NUM_LIMITS]; struct _vx_limit { atomic_t ticks; - unsigned long rlim[NUM_RLIMITS]; /* Context limit */ - unsigned long rmax[NUM_RLIMITS]; /* Context maximum */ - atomic_t rcur[NUM_RLIMITS]; /* Current value */ - atomic_t lhit[NUM_RLIMITS]; /* Limit hits */ + unsigned long rlim[NUM_LIMITS]; /* Context limit */ + unsigned long rmax[NUM_LIMITS]; /* Context maximum */ + atomic_t rcur[NUM_LIMITS]; /* Current value */ + atomic_t lhit[NUM_LIMITS]; /* Limit hits */ }; static inline void vx_info_init_limit(struct _vx_limit *limit) { int lim; - for (lim=0; limrlim[lim] = RLIM_INFINITY; limit->rmax[lim] = 0; atomic_set(&limit->rcur[lim], 0); @@ -33,40 +35,38 @@ static inline void vx_info_init_limit(struct _vx_limit *limit) } } -extern unsigned int vx_debug_limit; - static inline void vx_info_exit_limit(struct _vx_limit *limit) { +#ifdef CONFIG_VSERVER_DEBUG unsigned long value; unsigned int lim; - if (!vx_debug_limit) - return; - for (lim=0; limrcur[lim]); if (value) - printk("!!! limit: %p[%d] = %ld on exit.\n", - limit, lim, value); + printk("!!! limit: %p[%s,%d] = %ld on exit.\n", + limit, vlimit_name[lim], lim, value); } +#endif } static inline void vx_limit_fixup(struct _vx_limit *limit) { unsigned long value; unsigned int lim; - - for (lim=0; limrcur[lim]); - if (value > limit->rmax[lim]) + + for (lim=0; limrcur[lim]); + if (value > limit->rmax[lim]) limit->rmax[lim] = value; if (limit->rmax[lim] > limit->rlim[lim]) limit->rmax[lim] = limit->rlim[lim]; - } + } } -#define VX_LIMIT_FMT ":\t%10d\t%10ld\t%10ld\t%6d\n" +#define VX_LIMIT_FMT ":\t%10d\t%10ld\t%10ld\t%6d\n" -#define VX_LIMIT_ARG(r) \ +#define VX_LIMIT_ARG(r) \ ,atomic_read(&limit->rcur[r]) \ ,limit->rmax[r] \ ,limit->rlim[r] \ @@ -80,14 +80,14 @@ static inline int vx_info_proc_limit(struct _vx_limit *limit, char *buffer) "VM" VX_LIMIT_FMT "VML" VX_LIMIT_FMT "RSS" VX_LIMIT_FMT - "FILES" VX_LIMIT_FMT - "OFD" VX_LIMIT_FMT + "FILES" VX_LIMIT_FMT + "SOCK" VX_LIMIT_FMT VX_LIMIT_ARG(RLIMIT_NPROC) VX_LIMIT_ARG(RLIMIT_AS) VX_LIMIT_ARG(RLIMIT_MEMLOCK) VX_LIMIT_ARG(RLIMIT_RSS) VX_LIMIT_ARG(RLIMIT_NOFILE) - VX_LIMIT_ARG(RLIMIT_OPENFD) + VX_LIMIT_ARG(VLIMIT_NSOCK) ); } @@ -97,20 +97,22 @@ static inline int vx_info_proc_limit(struct _vx_limit *limit, char *buffer) #include "switch.h" +#define VXD_RLIMIT(r,l) (VXD_CBIT(limit, (l)) && ((r) == (l))) + /* rlimit vserver commands */ #define VCMD_get_rlimit VC_CMD(RLIMIT, 1, 0) #define VCMD_set_rlimit VC_CMD(RLIMIT, 2, 0) #define VCMD_get_rlimit_mask VC_CMD(RLIMIT, 3, 0) -struct vcmd_ctx_rlimit_v0 { +struct vcmd_ctx_rlimit_v0 { uint32_t id; uint64_t minimum; uint64_t softlimit; uint64_t maximum; }; -struct vcmd_ctx_rlimit_mask_v0 { +struct vcmd_ctx_rlimit_mask_v0 { uint32_t minimum; uint32_t softlimit; uint32_t maximum; @@ -138,3 +140,5 @@ void vx_vsi_swapinfo(struct sysinfo *); #endif /* _VX_LIMIT_H */ #endif + +