vserver 1.9.5.x5
[linux-2.6.git] / kernel / vserver / limit.c
index 4af1ee5..0527afc 100644 (file)
@@ -3,7 +3,7 @@
  *
  *  Virtual Server: Context Limits
  *
- *  Copyright (C) 2004  Herbert Pötzl
+ *  Copyright (C) 2004-2005  Herbert Pötzl
  *
  *  V0.01  broken out from vcontext V0.05
  *
 
 #include <linux/config.h>
 #include <linux/module.h>
-#include <linux/vserver/limit.h>
-#include <linux/vserver/context.h>
-#include <linux/vserver/switch.h>
-#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_limit.h>
+#include <linux/vserver/limit.h>
+#include <linux/vserver/switch.h>
+#include <linux/vserver/limit_cmd.h>
 
 #include <asm/errno.h>
 #include <asm/uaccess.h>
@@ -26,12 +25,17 @@ const char *vlimit_name[NUM_LIMITS] = {
        [RLIMIT_CPU]            = "CPU",
        [RLIMIT_RSS]            = "RSS",
        [RLIMIT_NPROC]          = "NPROC",
-       [RLIMIT_NOFILE] = "NOFILE",
+       [RLIMIT_NOFILE]         = "NOFILE",
        [RLIMIT_MEMLOCK]        = "VML",
        [RLIMIT_AS]             = "VM",
        [RLIMIT_LOCKS]          = "LOCKS",
+       [RLIMIT_SIGPENDING]     = "SIGP",
        [RLIMIT_MSGQUEUE]       = "MSGQ",
+
        [VLIMIT_NSOCK]          = "NSOCK",
+       [VLIMIT_OPENFD]         = "OPENFD",
+       [VLIMIT_ANON]           = "ANON",
+       [VLIMIT_SHMEM]          = "SHMEM",
 };
 
 EXPORT_SYMBOL_GPL(vlimit_name);
@@ -42,11 +46,16 @@ static int is_valid_rlimit(int id)
        int valid = 0;
 
        switch (id) {
-               case RLIMIT_NPROC:
-               case RLIMIT_AS:
                case RLIMIT_RSS:
-               case RLIMIT_MEMLOCK:
+               case RLIMIT_NPROC:
                case RLIMIT_NOFILE:
+               case RLIMIT_MEMLOCK:
+               case RLIMIT_AS:
+
+               case VLIMIT_NSOCK:
+               case VLIMIT_OPENFD:
+               case VLIMIT_ANON:
+               case VLIMIT_SHMEM:
                        valid = 1;
                        break;
        }
@@ -118,11 +127,14 @@ int vc_get_rlimit_mask(uint32_t id, void __user *data)
                ,       /* softlimit */
                0
                ,       /* maximum */
+               (1 << RLIMIT_RSS) |
                (1 << RLIMIT_NPROC) |
                (1 << RLIMIT_NOFILE) |
                (1 << RLIMIT_MEMLOCK) |
+               (1 << RLIMIT_LOCKS) |
                (1 << RLIMIT_AS) |
-               (1 << RLIMIT_RSS)
+               (1 << VLIMIT_ANON) |
+               0
                };
 
        if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RESOURCE))