X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fvserver%2Fswitch.c;h=841213f456e22f6507f6aa0ecf69bf67e4aa290c;hb=34a75f0025b9cf803b6a88db032e6ad6950c9313;hp=f35bec27cf39a0af1dc7a1666c67594b2c99928b;hpb=8e8ece46a861c84343256819eaec77e608ff9217;p=linux-2.6.git diff --git a/kernel/vserver/switch.c b/kernel/vserver/switch.c index f35bec27c..841213f45 100644 --- a/kernel/vserver/switch.c +++ b/kernel/vserver/switch.c @@ -14,7 +14,6 @@ * */ -#include #include #include #include @@ -28,6 +27,10 @@ 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 #include #include +#include #include -#include #include #include #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 */