Author: baggins Date: Tue Oct 4 17:51:49 2005 GMT Module: SOURCES Tag: HEAD ---- Log message: - fixes for vs2.0.1pre2
---- Files affected: SOURCES: delta-rkill_debug-feat01.diff (NONE -> 1.1) (NEW), delta-rkill-fix02.diff (NONE -> 1.1) (NEW), delta-ppc-fix01.diff (NONE -> 1.1) (NEW), delta-rkill-fix01.diff (NONE -> 1.1) (NEW), delta-rkill-feat01.diff (NONE -> 1.1) (NEW) ---- Diffs: ================================================================ Index: SOURCES/delta-rkill_debug-feat01.diff diff -u /dev/null SOURCES/delta-rkill_debug-feat01.diff:1.1 --- /dev/null Tue Oct 4 19:51:49 2005 +++ SOURCES/delta-rkill_debug-feat01.diff Tue Oct 4 19:51:44 2005 @@ -0,0 +1,36 @@ +diff -NurpP --minimal linux-2.6.13.1-vs2.1.0-rc2.1b/kernel/vserver/helper.c linux-2.6.13.1-vs2.1.0-rc2.2/kernel/vserver/helper.c +--- linux-2.6.13.1-vs2.1.0-rc2.1b/kernel/vserver/helper.c 2005-09-28 03:10:59 +0200 ++++ linux-2.6.13.1-vs2.1.0-rc2.2/kernel/vserver/helper.c 2005-09-28 03:06:41 +0200 +@@ -105,6 +105,9 @@ long vs_reboot(unsigned int cmd, void * + struct vx_info *vxi = current->vx_info; + long ret = 0; + ++ vxdprintk(VXD_CBIT(misc, 5), ++ "vs_reboot(%p[#%d],%d)", ++ vxi, vxi?vxi->vx_id:0, cmd); + if (vx_info_flags(vxi, VXF_REBOOT_KILL, 0)) { + switch (cmd) { + case LINUX_REBOOT_CMD_RESTART: +diff -NurpP --minimal linux-2.6.13.1-vs2.1.0-rc2.1b/kernel/vserver/signal.c linux-2.6.13.1-vs2.1.0-rc2.2/kernel/vserver/signal.c +--- linux-2.6.13.1-vs2.1.0-rc2.1b/kernel/vserver/signal.c 2005-09-16 01:19:15 +0200 ++++ linux-2.6.13.1-vs2.1.0-rc2.2/kernel/vserver/signal.c 2005-09-28 03:06:06 +0200 +@@ -26,6 +26,9 @@ int vx_info_kill(struct vx_info *vxi, in + unsigned long priv = 0; + + retval = -ESRCH; ++ vxdprintk(VXD_CBIT(misc, 4), ++ "vx_info_kill(%p[#%d],%d,%d)*", ++ vxi, vxi->vx_id, pid, sig); + read_lock(&tasklist_lock); + switch (pid) { + case 0: +@@ -61,6 +64,9 @@ int vx_info_kill(struct vx_info *vxi, in + break; + } + read_unlock(&tasklist_lock); ++ vxdprintk(VXD_CBIT(misc, 4), ++ "vx_info_kill(%p[#%d],%d,%d) = %d", ++ vxi, vxi->vx_id, pid, sig, retval); + return retval; + } + ================================================================ Index: SOURCES/delta-rkill-fix02.diff diff -u /dev/null SOURCES/delta-rkill-fix02.diff:1.1 --- /dev/null Tue Oct 4 19:51:49 2005 +++ SOURCES/delta-rkill-fix02.diff Tue Oct 4 19:51:44 2005 @@ -0,0 +1,25 @@ +--- ./kernel/vserver/helper.c 2005-09-14 23:08:50 +0200 ++++ ./kernel/vserver/helper.c 2005-09-28 02:11:32 +0200 +@@ -103,12 +103,18 @@ long vs_reboot_helper(struct vx_info *vx + long vs_reboot(unsigned int cmd, void * arg) + { + struct vx_info *vxi = current->vx_info; +- long ret; ++ long ret = 0; + + if (vx_info_flags(vxi, VXF_REBOOT_KILL, 0)) { +- vx_info_kill(vxi, 0, SIGKILL); +- vx_info_kill(vxi, 1, SIGKILL); +- return 0; ++ switch (cmd) { ++ case LINUX_REBOOT_CMD_RESTART: ++ case LINUX_REBOOT_CMD_HALT: ++ case LINUX_REBOOT_CMD_POWER_OFF: ++ vx_info_kill(vxi, 0, SIGKILL); ++ vx_info_kill(vxi, 1, SIGKILL); ++ default: ++ break; ++ } + } else { + ret = vs_reboot_helper(vxi, cmd, arg); + } ================================================================ Index: SOURCES/delta-ppc-fix01.diff diff -u /dev/null SOURCES/delta-ppc-fix01.diff:1.1 --- /dev/null Tue Oct 4 19:51:49 2005 +++ SOURCES/delta-ppc-fix01.diff Tue Oct 4 19:51:44 2005 @@ -0,0 +1,28 @@ +diff -NurpP --minimal linux-2.6.13.1-vs2.1.0-rc2.2/arch/ppc/kernel/misc.S linux-2.6.13.1-vs2.1.0-rc2.3/arch/ppc/kernel/misc.S +--- linux-2.6.13.1-vs2.1.0-rc2.2/arch/ppc/kernel/misc.S 2005-09-15 03:51:33 +0200 ++++ linux-2.6.13.1-vs2.1.0-rc2.3/arch/ppc/kernel/misc.S 2005-09-29 16:56:40 +0200 +@@ -1134,8 +1134,8 @@ _GLOBAL(kernel_thread) + stw r31,12(r1) + mr r30,r3 /* function */ + mr r31,r4 /* argument */ +- ori r3,r5,CLONE_VM|CLONE_KTHREAD /* flags */ +- oris r3,r3,CLONE_UNTRACED>>16 ++ ori r3,r5,CLONE_VM /* flags */ ++ oris r3,r3,(CLONE_UNTRACED|CLONE_KTHREAD)>>16 + li r4,0 /* new sp (unused) */ + li r0,__NR_clone + sc +diff -NurpP --minimal linux-2.6.13.1-vs2.1.0-rc2.2/arch/ppc64/kernel/misc.S linux-2.6.13.1-vs2.1.0-rc2.3/arch/ppc64/kernel/misc.S +--- linux-2.6.13.1-vs2.1.0-rc2.2/arch/ppc64/kernel/misc.S 2005-09-15 03:48:14 +0200 ++++ linux-2.6.13.1-vs2.1.0-rc2.3/arch/ppc64/kernel/misc.S 2005-09-29 16:56:31 +0200 +@@ -658,8 +658,8 @@ _GLOBAL(kernel_thread) + stdu r1,-STACK_FRAME_OVERHEAD(r1) + mr r29,r3 + mr r30,r4 +- ori r3,r5,(CLONE_VM|CLONE_KTHREAD) /* flags */ +- oris r3,r3,(CLONE_UNTRACED>>16) ++ ori r3,r5,CLONE_VM /* flags */ ++ oris r3,r3,(CLONE_UNTRACED|CLONE_KTHREAD)>>16 + li r4,0 /* new sp (unused) */ + li r0,__NR_clone + sc ================================================================ Index: SOURCES/delta-rkill-fix01.diff diff -u /dev/null SOURCES/delta-rkill-fix01.diff:1.1 --- /dev/null Tue Oct 4 19:51:49 2005 +++ SOURCES/delta-rkill-fix01.diff Tue Oct 4 19:51:44 2005 @@ -0,0 +1,25 @@ +--- linux-2.6.13-rc7-vs2.1.0-pre5/kernel/vserver/helper.c 2005-08-26 04:06:10 +0200 ++++ linux-2.6.13.1-vs2.1.0-rc2.1/kernel/vserver/helper.c 2005-09-14 23:08:50 +0200 +@@ -16,6 +16,7 @@ + #include <linux/reboot.h> + #include <linux/vs_context.h> + #include <linux/vs_network.h> ++#include <linux/vserver/signal_cmd.h> + + #include <asm/uaccess.h> + #include <asm/unistd.h> +@@ -106,11 +107,12 @@ long vs_reboot(unsigned int cmd, void * + + if (vx_info_flags(vxi, VXF_REBOOT_KILL, 0)) { + vx_info_kill(vxi, 0, SIGKILL); +- ++ vx_info_kill(vxi, 1, SIGKILL); ++ return 0; + } else { + ret = vs_reboot_helper(vxi, cmd, arg); + } +- return ret; ++ return ret; + } + + ================================================================ Index: SOURCES/delta-rkill-feat01.diff diff -u /dev/null SOURCES/delta-rkill-feat01.diff:1.1 --- /dev/null Tue Oct 4 19:51:49 2005 +++ SOURCES/delta-rkill-feat01.diff Tue Oct 4 19:51:44 2005 @@ -0,0 +1,189 @@ +--- linux-2.6.13-rc7-vs2.1.0-pre4/include/linux/vserver/context.h 2005-08-24 20:59:58 +0200 ++++ linux-2.6.13-rc7-vs2.1.0-pre5/include/linux/vserver/context.h 2005-08-26 01:23:45 +0200 +@@ -36,7 +36,8 @@ + #define VXF_STATE_SETUP (1ULL<<32) + #define VXF_STATE_INIT (1ULL<<33) + +-#define VXF_STATE_HELPER (1ULL<<36) ++#define VXF_SC_HELPER (1ULL<<36) ++#define VXF_REBOOT_KILL (1ULL<<37) + + #define VXF_FORK_RSS (1ULL<<48) + #define VXF_PROLIFIC (1ULL<<49) +only in patch2: +unchanged: +--- linux-2.6.13-rc7-vs2.1.0-pre4/include/linux/vserver/network.h 2005-08-24 20:59:58 +0200 ++++ linux-2.6.13-rc7-vs2.1.0-pre5/include/linux/vserver/network.h 2005-08-26 01:26:23 +0200 +@@ -15,7 +15,7 @@ + + #define NXF_STATE_SETUP (1ULL<<32) + +-#define NXF_STATE_HELPER (1ULL<<36) ++#define NXF_SC_HELPER (1ULL<<36) + + #define NXF_ONE_TIME (0x0001ULL<<32) + +only in patch2: +unchanged: +--- linux-2.6.13-rc7-vs2.1.0-pre4/kernel/vserver/helper.c 2005-08-24 20:59:58 +0200 ++++ linux-2.6.13-rc7-vs2.1.0-pre5/kernel/vserver/helper.c 2005-08-26 04:06:10 +0200 +@@ -52,7 +52,7 @@ int do_vshelper(char *name, char *argv[] + * envp [*] = type-specific parameters + */ + +-long vs_reboot(unsigned int cmd, void * arg) ++long vs_reboot_helper(struct vx_info *vxi, int cmd, void *arg) + { + char id_buf[8], cmd_buf[16]; + char uid_buf[16], pid_buf[16]; +@@ -63,7 +63,7 @@ long vs_reboot(unsigned int cmd, void * + "PATH=/sbin:/usr/sbin:/bin:/usr/bin", + uid_buf, pid_buf, cmd_buf, 0}; + +- snprintf(id_buf, sizeof(id_buf)-1, "%d", vx_current_xid()); ++ snprintf(id_buf, sizeof(id_buf)-1, "%d", vxi->vx_id); + + snprintf(cmd_buf, sizeof(cmd_buf)-1, "VS_CMD=%08x", cmd); + snprintf(uid_buf, sizeof(uid_buf)-1, "VS_UID=%d", current->uid); +@@ -99,6 +99,21 @@ long vs_reboot(unsigned int cmd, void * + } + + ++long vs_reboot(unsigned int cmd, void * arg) ++{ ++ struct vx_info *vxi = current->vx_info; ++ long ret; ++ ++ if (vx_info_flags(vxi, VXF_REBOOT_KILL, 0)) { ++ vx_info_kill(vxi, 0, SIGKILL); ++ ++ } else { ++ ret = vs_reboot_helper(vxi, cmd, arg); ++ } ++ return ret; ++} ++ ++ + /* + * argv [0] = vshelper_path; + * argv [1] = action: "startup", "shutdown" +@@ -114,7 +129,7 @@ long vs_state_change(struct vx_info *vxi + char *envp[] = {"HOME=/", "TERM=linux", + "PATH=/sbin:/usr/sbin:/bin:/usr/bin", cmd_buf, 0}; + +- if (!vx_info_flags(vxi, VXF_STATE_HELPER, 0)) ++ if (!vx_info_flags(vxi, VXF_SC_HELPER, 0)) + return 0; + + snprintf(id_buf, sizeof(id_buf)-1, "%d", vxi->vx_id); +@@ -151,7 +166,7 @@ long vs_net_change(struct nx_info *nxi, + char *envp[] = {"HOME=/", "TERM=linux", + "PATH=/sbin:/usr/sbin:/bin:/usr/bin", cmd_buf, 0}; + +- if (!nx_info_flags(nxi, NXF_STATE_HELPER, 0)) ++ if (!nx_info_flags(nxi, NXF_SC_HELPER, 0)) + return 0; + + snprintf(id_buf, sizeof(id_buf)-1, "%d", nxi->nx_id); +only in patch2: +unchanged: +--- linux-2.6.13-rc7-vs2.1.0-pre4/kernel/vserver/signal.c 2005-08-24 20:59:58 +0200 ++++ linux-2.6.13-rc7-vs2.1.0-pre5/kernel/vserver/signal.c 2005-08-26 03:28:14 +0200 +@@ -19,37 +19,26 @@ + #include <linux/vserver/signal_cmd.h> + + +-int vc_ctx_kill(uint32_t id, void __user *data) ++int vx_info_kill(struct vx_info *vxi, int pid, int sig) + { + int retval, count=0; +- struct vcmd_ctx_kill_v0 vc_data; + struct task_struct *p; +- struct vx_info *vxi; + unsigned long priv = 0; + +- if (!vx_check(0, VX_ADMIN)) +- return -ENOSYS; +- if (copy_from_user (&vc_data, data, sizeof(vc_data))) +- return -EFAULT; +- +- vxi = locate_vx_info(id); +- if (!vxi) +- return -ESRCH; +- + retval = -ESRCH; + read_lock(&tasklist_lock); +- switch (vc_data.pid) { ++ switch (pid) { + case 0: + priv = 1; + case -1: + for_each_process(p) { + int err = 0; + +- if (vx_task_xid(p) != id || p->pid <= 1 || +- (vc_data.pid && vxi->vx_initpid == p->pid)) ++ if (vx_task_xid(p) != vxi->vx_id || p->pid <= 1 || ++ (pid && vxi->vx_initpid == p->pid)) + continue; + +- err = group_send_sig_info(vc_data.sig, (void*)priv, p); ++ err = group_send_sig_info(sig, (void*)priv, p); + ++count; + if (err != -EPERM) + retval = err; +@@ -58,20 +47,39 @@ int vc_ctx_kill(uint32_t id, void __user + + case 1: + if (vxi->vx_initpid) { +- vc_data.pid = vxi->vx_initpid; ++ pid = vxi->vx_initpid; + priv = 1; + } + /* fallthrough */ + default: +- p = find_task_by_real_pid(vc_data.pid); ++ p = find_task_by_real_pid(pid); + if (p) { +- if ((id == -1) || (vx_task_xid(p) == id)) +- retval = group_send_sig_info(vc_data.sig, ++ if (vx_task_xid(p) == vxi->vx_id) ++ retval = group_send_sig_info(sig, + (void*)priv, p); + } + break; + } + read_unlock(&tasklist_lock); ++ return retval; ++} ++ ++int vc_ctx_kill(uint32_t id, void __user *data) ++{ ++ int retval; ++ struct vcmd_ctx_kill_v0 vc_data; ++ struct vx_info *vxi; ++ ++ if (!vx_check(0, VX_ADMIN)) ++ return -ENOSYS; ++ if (copy_from_user (&vc_data, data, sizeof(vc_data))) ++ return -EFAULT; ++ ++ vxi = locate_vx_info(id); ++ if (!vxi) ++ return -ESRCH; ++ ++ retval = vx_info_kill(vxi, vc_data.pid, vc_data.sig); + put_vx_info(vxi); + return retval; + } +diff -NurpP --minimal linux-2.6.13.2/include/linux/vserver/signal_cmd.h linux-2.6.13.2-vs2.0.1-pre2/include/linux/vserver/signal_cmd.h +--- linux-2.6.13.2/include/linux/vserver/signal_cmd.h 1970-01-01 01:00:00 +0100 ++++ linux-2.6.13.2-vs2.0.1-pre2/include/linux/vserver/signal_cmd.h 2005-09-26 16:14:25 +0200 +@@ -17,6 +17,7 @@ + + #ifdef __KERNEL__ + ++extern int vx_info_kill(struct vx_info *vxi, int pid, int sig); + extern int vc_ctx_kill(uint32_t, void __user *); + extern int vc_wait_exit(uint32_t, void __user *); + ================================================================ _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit