VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / include / linux / vserver / limit.h
index a7a50f9..ef9c9fc 100644 (file)
@@ -1,3 +1,5 @@
+/* _VX_LIMIT_H defined below */
+
 #if    defined(__KERNEL__) && defined(_VX_INFO_DEF_)
 
 #include <asm/atomic.h>
@@ -5,27 +7,26 @@
 
 /* context sub struct */
 
-#define        RLIMIT_OPENFD   12
-
-#define NUM_RLIMITS    16
+#define NUM_LIMITS     20
 
-#define VLIMIT_SOCK    16
+#define VLIMIT_NSOCK   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; lim<NUM_RLIMITS; lim++) {
+       for (lim=0; lim<NUM_LIMITS; lim++) {
                limit->rlim[lim] = RLIM_INFINITY;
                limit->rmax[lim] = 0;
                atomic_set(&limit->rcur[lim], 0);
@@ -33,21 +34,19 @@ 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; lim<NUM_RLIMITS; lim++) {
+       for (lim=0; lim<NUM_LIMITS; lim++) {
                value = atomic_read(&limit->rcur[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)
@@ -55,7 +54,7 @@ static inline void vx_limit_fixup(struct _vx_limit *limit)
        unsigned long value;
        unsigned int lim;
        
-        for (lim=0; lim<NUM_RLIMITS; lim++) {
+        for (lim=0; lim<NUM_LIMITS; lim++) {
                 value = atomic_read(&limit->rcur[lim]);
                 if (value > limit->rmax[lim])
                        limit->rmax[lim] = value;
@@ -81,13 +80,13 @@ static inline int vx_info_proc_limit(struct _vx_limit *limit, char *buffer)
                "VML"   VX_LIMIT_FMT
                "RSS"   VX_LIMIT_FMT
                "FILES" VX_LIMIT_FMT
-               "OFD"   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,6 +96,8 @@ 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)
@@ -138,3 +139,5 @@ void vx_vsi_swapinfo(struct sysinfo *);
 
 #endif /* _VX_LIMIT_H */
 #endif
+
+