Merge to Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.13-vs2...
[linux-2.6.git] / kernel / vserver / switch.c
index f35bec2..841213f 100644 (file)
@@ -14,7 +14,6 @@
  *
  */
 
-#include <linux/config.h>
 #include <linux/linkage.h>
 #include <linux/sched.h>
 #include <linux/compat.h>
 static inline
 int vc_get_version(uint32_t id)
 {
+#ifdef CONFIG_VSERVER_LEGACY_VERSION
+       if (id == 63)
+               return VCI_LEGACY_VERSION;
+#endif
        return VCI_VERSION;
 }
 
@@ -40,18 +43,18 @@ int vc_get_version(uint32_t id)
 #include <linux/vserver/inode_cmd.h>
 #include <linux/vserver/dlimit_cmd.h>
 #include <linux/vserver/signal_cmd.h>
+#include <linux/vserver/namespace_cmd.h>
 
 #include <linux/vserver/legacy.h>
-#include <linux/vserver/namespace.h>
 #include <linux/vserver/inode.h>
 #include <linux/vserver/dlimit.h>
 
 
 #ifdef CONFIG_COMPAT
-#define        __COMPAT(name, id, data, compat)        \
+#define __COMPAT(name, id, data, compat)       \
        (compat) ? name ## _x32 (id, data) : name (id, data)
 #else
-#define        __COMPAT(name, id, data, compat)        \
+#define __COMPAT(name, id, data, compat)       \
        name (id, data)
 #endif
 
@@ -104,10 +107,10 @@ long do_vserver(uint32_t cmd, uint32_t id, void __user *data, int compat)
        case VCMD_nx_info:
                return vc_nx_info(id, data);
 
+       case VCMD_set_namespace_v0:
+               return vc_set_namespace(-1, data);
        case VCMD_set_namespace:
                return vc_set_namespace(id, data);
-       case VCMD_cleanup_namespace:
-               return vc_cleanup_namespace(id, data);
        }
 
        /* those are allowed while in setup too */
@@ -125,16 +128,23 @@ long do_vserver(uint32_t cmd, uint32_t id, void __user *data, int compat)
 #endif
 
        switch (cmd) {
+#ifdef CONFIG_IA32_EMULATION
+       case VCMD_get_rlimit:
+               return __COMPAT(vc_get_rlimit, id, data, compat);
+       case VCMD_set_rlimit:
+               return __COMPAT(vc_set_rlimit, id, data, compat);
+#else
        case VCMD_get_rlimit:
                return vc_get_rlimit(id, data);
        case VCMD_set_rlimit:
                return vc_set_rlimit(id, data);
+#endif
        case VCMD_get_rlimit_mask:
                return vc_get_rlimit_mask(id, data);
 
-       case VCMD_vx_get_vhi_name:
+       case VCMD_get_vhi_name:
                return vc_get_vhi_name(id, data);
-       case VCMD_vx_set_vhi_name:
+       case VCMD_set_vhi_name:
                return vc_set_vhi_name(id, data);
 
        case VCMD_set_cflags:
@@ -209,6 +219,8 @@ long do_vserver(uint32_t cmd, uint32_t id, void __user *data, int compat)
                return vc_ctx_create(id, NULL);
        case VCMD_ctx_create:
                return vc_ctx_create(id, data);
+       case VCMD_ctx_migrate_v0:
+               return vc_ctx_migrate(id, NULL);
        case VCMD_ctx_migrate:
                return vc_ctx_migrate(id, data);
 
@@ -218,6 +230,10 @@ long do_vserver(uint32_t cmd, uint32_t id, void __user *data, int compat)
                return vc_net_create(id, data);
        case VCMD_net_migrate:
                return vc_net_migrate(id, data);
+       case VCMD_net_add:
+               return vc_net_add(id, data);
+       case VCMD_net_remove:
+               return vc_net_remove(id, data);
 
        }
        return -ENOSYS;
@@ -226,7 +242,13 @@ long do_vserver(uint32_t cmd, uint32_t id, void __user *data, int compat)
 extern asmlinkage long
 sys_vserver(uint32_t cmd, uint32_t id, void __user *data)
 {
-       return do_vserver(cmd, id, data, 0);
+       long ret = do_vserver(cmd, id, data, 0);
+
+       vxdprintk(VXD_CBIT(switch, 1),
+               "vc: VCMD_%02d_%d[%d] = %08lx(%ld)",
+               VC_CATEGORY(cmd), VC_COMMAND(cmd),
+               VC_VERSION(cmd), ret, ret);
+       return ret;
 }
 
 #ifdef CONFIG_COMPAT
@@ -234,7 +256,13 @@ sys_vserver(uint32_t cmd, uint32_t id, void __user *data)
 extern asmlinkage long
 sys32_vserver(uint32_t cmd, uint32_t id, void __user *data)
 {
-       return do_vserver(cmd, id, data, 1);
+       long ret = do_vserver(cmd, id, data, 1);
+
+       vxdprintk(VXD_CBIT(switch, 1),
+               "vc: VCMD_%02d_%d[%d] = %08lx(%ld)",
+               VC_CATEGORY(cmd), VC_COMMAND(cmd),
+               VC_VERSION(cmd), ret, ret);
+       return ret;
 }
 
 #endif /* CONFIG_COMPAT */