-diff -NurpP --minimal linux-3.7/Documentation/vserver/debug.txt linux-3.7-vs2.3.5.1/Documentation/vserver/debug.txt
---- linux-3.7/Documentation/vserver/debug.txt 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/Documentation/vserver/debug.txt 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/Documentation/vserver/debug.txt linux-3.10.15-vs2.3.6.6/Documentation/vserver/debug.txt
+--- linux-3.10.15/Documentation/vserver/debug.txt 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/Documentation/vserver/debug.txt 2013-08-22 20:29:59.000000000 +0000
@@ -0,0 +1,154 @@
+
+debug_cvirt:
+ m 2^m "vx_acc_page[%5d,%s,%2d]: %5d%s"
+ "vx_acc_pages[%5d,%s,%2d]: %5d += %5d"
+ "vx_pages_avail[%5d,%s,%2d]: %5ld > %5d + %5d"
-diff -NurpP --minimal linux-3.7/arch/alpha/Kconfig linux-3.7-vs2.3.5.1/arch/alpha/Kconfig
---- linux-3.7/arch/alpha/Kconfig 2012-12-11 15:45:43.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/alpha/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -668,6 +668,8 @@ config DUMMY_CONSOLE
+diff -NurpP --minimal linux-3.10.15/arch/alpha/Kconfig linux-3.10.15-vs2.3.6.6/arch/alpha/Kconfig
+--- linux-3.10.15/arch/alpha/Kconfig 2013-07-14 17:00:13.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/alpha/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -665,6 +665,8 @@ config DUMMY_CONSOLE
depends on VGA_HOSE
default y
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/alpha/kernel/systbls.S linux-3.7-vs2.3.5.1/arch/alpha/kernel/systbls.S
---- linux-3.7/arch/alpha/kernel/systbls.S 2012-10-04 13:26:43.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/alpha/kernel/systbls.S 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/alpha/kernel/systbls.S linux-3.10.15-vs2.3.6.6/arch/alpha/kernel/systbls.S
+--- linux-3.10.15/arch/alpha/kernel/systbls.S 2013-02-19 13:56:11.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/alpha/kernel/systbls.S 2013-08-22 20:29:59.000000000 +0000
@@ -446,7 +446,7 @@ sys_call_table:
.quad sys_stat64 /* 425 */
.quad sys_lstat64
.quad sys_ni_syscall /* sys_mbind */
.quad sys_ni_syscall /* sys_get_mempolicy */
.quad sys_ni_syscall /* sys_set_mempolicy */
-diff -NurpP --minimal linux-3.7/arch/alpha/kernel/traps.c linux-3.7-vs2.3.5.1/arch/alpha/kernel/traps.c
---- linux-3.7/arch/alpha/kernel/traps.c 2012-12-11 15:45:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/alpha/kernel/traps.c 2012-12-11 15:56:32.000000000 +0000
-@@ -184,7 +184,8 @@ die_if_kernel(char * str, struct pt_regs
+diff -NurpP --minimal linux-3.10.15/arch/alpha/kernel/traps.c linux-3.10.15-vs2.3.6.6/arch/alpha/kernel/traps.c
+--- linux-3.10.15/arch/alpha/kernel/traps.c 2013-07-14 17:00:13.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/alpha/kernel/traps.c 2013-08-22 20:29:59.000000000 +0000
+@@ -177,7 +177,8 @@ die_if_kernel(char * str, struct pt_regs
#ifdef CONFIG_SMP
printk("CPU %d ", hard_smp_processor_id());
#endif
- printk("%s(%d): %s %ld\n", current->comm, task_pid_nr(current), str, err);
-+ printk("%s(%d[#%u]): %s %ld\n", current->comm,
++ printk("%s(%d:#%u): %s %ld\n", current->comm,
+ task_pid_nr(current), current->xid, str, err);
dik_show_regs(regs, r9_15);
- add_taint(TAINT_DIE);
+ add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
dik_show_trace((unsigned long *)(regs+1));
-diff -NurpP --minimal linux-3.7/arch/arm/Kconfig linux-3.7-vs2.3.5.1/arch/arm/Kconfig
---- linux-3.7/arch/arm/Kconfig 2012-12-11 15:45:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/arm/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -2307,6 +2307,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/arm/Kconfig linux-3.10.15-vs2.3.6.6/arch/arm/Kconfig
+--- linux-3.10.15/arch/arm/Kconfig 2013-10-09 17:35:15.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/arm/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -2238,6 +2238,8 @@ source "fs/Kconfig"
source "arch/arm/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/arm/kernel/calls.S linux-3.7-vs2.3.5.1/arch/arm/kernel/calls.S
---- linux-3.7/arch/arm/kernel/calls.S 2012-12-11 15:45:45.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/arm/kernel/calls.S 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/arm/kernel/calls.S linux-3.10.15-vs2.3.6.6/arch/arm/kernel/calls.S
+--- linux-3.10.15/arch/arm/kernel/calls.S 2013-05-31 13:44:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/arm/kernel/calls.S 2013-08-22 20:29:59.000000000 +0000
@@ -322,7 +322,7 @@
/* 310 */ CALL(sys_request_key)
CALL(sys_keyctl)
CALL(sys_ioprio_set)
/* 315 */ CALL(sys_ioprio_get)
CALL(sys_inotify_init)
-diff -NurpP --minimal linux-3.7/arch/arm/kernel/process.c linux-3.7-vs2.3.5.1/arch/arm/kernel/process.c
---- linux-3.7/arch/arm/kernel/process.c 2012-12-11 15:45:45.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/arm/kernel/process.c 2012-12-11 15:56:32.000000000 +0000
-@@ -337,7 +337,8 @@ void __show_regs(struct pt_regs *regs)
- void show_regs(struct pt_regs * regs)
- {
- printk("\n");
-- printk("Pid: %d, comm: %20s\n", task_pid_nr(current), current->comm);
-+ printk("Pid: %d[#%u], comm: %20s\n",
-+ task_pid_nr(current), current->xid, current->comm);
- __show_regs(regs);
- dump_stack();
- }
-diff -NurpP --minimal linux-3.7/arch/arm/kernel/traps.c linux-3.7-vs2.3.5.1/arch/arm/kernel/traps.c
---- linux-3.7/arch/arm/kernel/traps.c 2012-10-04 13:26:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/arm/kernel/traps.c 2012-12-11 15:56:32.000000000 +0000
-@@ -249,8 +249,8 @@ static int __die(const char *str, int er
+diff -NurpP --minimal linux-3.10.15/arch/arm/kernel/traps.c linux-3.10.15-vs2.3.6.6/arch/arm/kernel/traps.c
+--- linux-3.10.15/arch/arm/kernel/traps.c 2013-10-09 17:35:15.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/arm/kernel/traps.c 2013-08-22 20:29:59.000000000 +0000
+@@ -240,8 +240,8 @@ static int __die(const char *str, int er
print_modules();
__show_regs(regs);
if (!user_mode(regs) || in_interrupt()) {
dump_mem(KERN_EMERG, "Stack: ", regs->ARM_sp,
-diff -NurpP --minimal linux-3.7/arch/cris/Kconfig linux-3.7-vs2.3.5.1/arch/cris/Kconfig
---- linux-3.7/arch/cris/Kconfig 2012-12-11 15:46:01.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/cris/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -670,6 +670,8 @@ source "drivers/staging/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/cris/Kconfig linux-3.10.15-vs2.3.6.6/arch/cris/Kconfig
+--- linux-3.10.15/arch/cris/Kconfig 2013-07-14 17:00:25.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/cris/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -673,6 +673,8 @@ source "drivers/staging/Kconfig"
source "arch/cris/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/h8300/Kconfig linux-3.7-vs2.3.5.1/arch/h8300/Kconfig
---- linux-3.7/arch/h8300/Kconfig 2012-12-11 15:46:02.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/h8300/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -217,6 +217,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/h8300/Kconfig linux-3.10.15-vs2.3.6.6/arch/h8300/Kconfig
+--- linux-3.10.15/arch/h8300/Kconfig 2013-07-14 17:00:25.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/h8300/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -218,6 +218,8 @@ source "fs/Kconfig"
source "arch/h8300/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/ia64/Kconfig linux-3.7-vs2.3.5.1/arch/ia64/Kconfig
---- linux-3.7/arch/ia64/Kconfig 2012-12-11 15:46:03.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/ia64/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -644,6 +644,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/ia64/Kconfig linux-3.10.15-vs2.3.6.6/arch/ia64/Kconfig
+--- linux-3.10.15/arch/ia64/Kconfig 2013-07-14 17:00:25.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/ia64/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -643,6 +643,8 @@ source "fs/Kconfig"
source "arch/ia64/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/ia64/kernel/entry.S linux-3.7-vs2.3.5.1/arch/ia64/kernel/entry.S
---- linux-3.7/arch/ia64/kernel/entry.S 2012-03-19 18:46:40.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/ia64/kernel/entry.S 2012-12-11 15:56:32.000000000 +0000
-@@ -1714,7 +1714,7 @@ sys_call_table:
+diff -NurpP --minimal linux-3.10.15/arch/ia64/kernel/entry.S linux-3.10.15-vs2.3.6.6/arch/ia64/kernel/entry.S
+--- linux-3.10.15/arch/ia64/kernel/entry.S 2013-05-31 13:44:38.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/ia64/kernel/entry.S 2013-08-22 20:29:59.000000000 +0000
+@@ -1719,7 +1719,7 @@ sys_call_table:
data8 sys_mq_notify
data8 sys_mq_getsetattr
data8 sys_kexec_load
data8 sys_waitid // 1270
data8 sys_add_key
data8 sys_request_key
-diff -NurpP --minimal linux-3.7/arch/ia64/kernel/process.c linux-3.7-vs2.3.5.1/arch/ia64/kernel/process.c
---- linux-3.7/arch/ia64/kernel/process.c 2012-12-11 15:46:03.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/ia64/kernel/process.c 2012-12-11 15:56:32.000000000 +0000
-@@ -111,8 +111,8 @@ show_regs (struct pt_regs *regs)
- unsigned long ip = regs->cr_iip + ia64_psr(regs)->ri;
-
- print_modules();
-- printk("\nPid: %d, CPU %d, comm: %20s\n", task_pid_nr(current),
-- smp_processor_id(), current->comm);
-+ printk("\nPid: %d[#%u], CPU %d, comm: %20s\n", task_pid_nr(current),
-+ current->xid, smp_processor_id(), current->comm);
- printk("psr : %016lx ifs : %016lx ip : [<%016lx>] %s (%s)\n",
- regs->cr_ipsr, regs->cr_ifs, ip, print_tainted(),
- init_utsname()->release);
-diff -NurpP --minimal linux-3.7/arch/ia64/kernel/ptrace.c linux-3.7-vs2.3.5.1/arch/ia64/kernel/ptrace.c
---- linux-3.7/arch/ia64/kernel/ptrace.c 2012-05-21 16:06:26.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/ia64/kernel/ptrace.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/ia64/kernel/ptrace.c linux-3.10.15-vs2.3.6.6/arch/ia64/kernel/ptrace.c
+--- linux-3.10.15/arch/ia64/kernel/ptrace.c 2013-02-19 13:56:51.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/ia64/kernel/ptrace.c 2013-08-22 20:29:59.000000000 +0000
@@ -21,6 +21,7 @@
#include <linux/regset.h>
#include <linux/elf.h>
#include <asm/pgtable.h>
#include <asm/processor.h>
-diff -NurpP --minimal linux-3.7/arch/ia64/kernel/traps.c linux-3.7-vs2.3.5.1/arch/ia64/kernel/traps.c
---- linux-3.7/arch/ia64/kernel/traps.c 2012-05-21 16:06:26.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/ia64/kernel/traps.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/ia64/kernel/traps.c linux-3.10.15-vs2.3.6.6/arch/ia64/kernel/traps.c
+--- linux-3.10.15/arch/ia64/kernel/traps.c 2013-05-31 13:44:38.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/ia64/kernel/traps.c 2013-08-22 20:29:59.000000000 +0000
@@ -60,8 +60,9 @@ die (const char *str, struct pt_regs *re
put_cpu();
if (++die.lock_owner_depth < 3) {
- printk("%s[%d]: %s %ld [%d]\n",
- current->comm, task_pid_nr(current), str, err, ++die_counter);
-+ printk("%s[%d[#%u]]: %s %ld [%d]\n",
++ printk("%s[%d:#%u]: %s %ld [%d]\n",
+ current->comm, task_pid_nr(current), current->xid,
+ str, err, ++die_counter);
if (notify_die(DIE_OOPS, str, regs, err, 255, SIGSEGV)
printk(KERN_WARNING
- "%s(%d): floating-point assist fault at ip %016lx, isr %016lx\n",
- current->comm, task_pid_nr(current), regs->cr_iip + ia64_psr(regs)->ri, isr);
-+ "%s(%d[#%u]): floating-point assist fault at ip %016lx, isr %016lx\n",
++ "%s(%d:#%u): floating-point assist fault at ip %016lx, isr %016lx\n",
+ current->comm, task_pid_nr(current), current->xid,
+ regs->cr_iip + ia64_psr(regs)->ri, isr);
}
}
}
-diff -NurpP --minimal linux-3.7/arch/m32r/kernel/traps.c linux-3.7-vs2.3.5.1/arch/m32r/kernel/traps.c
---- linux-3.7/arch/m32r/kernel/traps.c 2012-05-21 16:06:26.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/m32r/kernel/traps.c 2012-12-11 15:56:32.000000000 +0000
-@@ -195,8 +195,9 @@ static void show_registers(struct pt_reg
+diff -NurpP --minimal linux-3.10.15/arch/m32r/kernel/traps.c linux-3.10.15-vs2.3.6.6/arch/m32r/kernel/traps.c
+--- linux-3.10.15/arch/m32r/kernel/traps.c 2013-07-14 17:00:26.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/m32r/kernel/traps.c 2013-08-22 20:29:59.000000000 +0000
+@@ -184,8 +184,9 @@ static void show_registers(struct pt_reg
} else {
printk("SPI: %08lx\n", sp);
}
- printk("Process %s (pid: %d, process nr: %d, stackpage=%08lx)",
- current->comm, task_pid_nr(current), 0xffff & i, 4096+(unsigned long)current);
-+ printk("Process %s (pid: %d[#%u], process nr: %d, stackpage=%08lx)",
++ printk("Process %s (pid: %d:#%u, process nr: %d, stackpage=%08lx)",
+ current->comm, task_pid_nr(current), current->xid,
+ 0xffff & i, 4096+(unsigned long)current);
/*
* When in-kernel, we also print out the stack and code at the
-diff -NurpP --minimal linux-3.7/arch/m68k/Kconfig linux-3.7-vs2.3.5.1/arch/m68k/Kconfig
---- linux-3.7/arch/m68k/Kconfig 2012-12-11 15:46:03.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/m68k/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -135,6 +135,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/m68k/Kconfig linux-3.10.15-vs2.3.6.6/arch/m68k/Kconfig
+--- linux-3.10.15/arch/m68k/Kconfig 2013-07-14 17:00:26.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/m68k/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -134,6 +134,8 @@ source "fs/Kconfig"
source "arch/m68k/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/mips/Kconfig linux-3.7-vs2.3.5.1/arch/mips/Kconfig
---- linux-3.7/arch/mips/Kconfig 2012-12-11 15:46:05.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/mips/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -2574,6 +2574,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/mips/Kconfig linux-3.10.15-vs2.3.6.6/arch/mips/Kconfig
+--- linux-3.10.15/arch/mips/Kconfig 2013-10-09 17:35:16.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/mips/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -2583,6 +2583,8 @@ source "fs/Kconfig"
source "arch/mips/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/mips/kernel/ptrace.c linux-3.7-vs2.3.5.1/arch/mips/kernel/ptrace.c
---- linux-3.7/arch/mips/kernel/ptrace.c 2012-07-22 21:38:52.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/mips/kernel/ptrace.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/mips/kernel/ptrace.c linux-3.10.15-vs2.3.6.6/arch/mips/kernel/ptrace.c
+--- linux-3.10.15/arch/mips/kernel/ptrace.c 2013-05-31 13:44:42.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/mips/kernel/ptrace.c 2013-08-22 20:29:59.000000000 +0000
@@ -25,6 +25,7 @@
#include <linux/security.h>
#include <linux/audit.h>
switch (request) {
/* when I and D space are separate, these will need to be fixed. */
case PTRACE_PEEKTEXT: /* read word at location addr. */
-diff -NurpP --minimal linux-3.7/arch/mips/kernel/scall32-o32.S linux-3.7-vs2.3.5.1/arch/mips/kernel/scall32-o32.S
---- linux-3.7/arch/mips/kernel/scall32-o32.S 2012-12-11 15:46:07.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/mips/kernel/scall32-o32.S 2012-12-11 15:56:32.000000000 +0000
-@@ -512,7 +512,7 @@ einval: li v0, -ENOSYS
+diff -NurpP --minimal linux-3.10.15/arch/mips/kernel/scall32-o32.S linux-3.10.15-vs2.3.6.6/arch/mips/kernel/scall32-o32.S
+--- linux-3.10.15/arch/mips/kernel/scall32-o32.S 2013-07-14 17:00:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/mips/kernel/scall32-o32.S 2013-08-22 20:29:59.000000000 +0000
+@@ -521,7 +521,7 @@ einval: li v0, -ENOSYS
sys sys_mq_timedreceive 5
sys sys_mq_notify 2 /* 4275 */
sys sys_mq_getsetattr 3
sys sys_waitid 5
sys sys_ni_syscall 0 /* available, was setaltroot */
sys sys_add_key 5 /* 4280 */
-diff -NurpP --minimal linux-3.7/arch/mips/kernel/scall64-64.S linux-3.7-vs2.3.5.1/arch/mips/kernel/scall64-64.S
---- linux-3.7/arch/mips/kernel/scall64-64.S 2012-12-11 15:46:07.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/mips/kernel/scall64-64.S 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/mips/kernel/scall64-64.S linux-3.10.15-vs2.3.6.6/arch/mips/kernel/scall64-64.S
+--- linux-3.10.15/arch/mips/kernel/scall64-64.S 2013-07-14 17:00:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/mips/kernel/scall64-64.S 2013-08-22 20:29:59.000000000 +0000
@@ -351,7 +351,7 @@ sys_call_table:
PTR sys_mq_timedreceive
PTR sys_mq_notify
PTR sys_waitid
PTR sys_ni_syscall /* available, was setaltroot */
PTR sys_add_key
-diff -NurpP --minimal linux-3.7/arch/mips/kernel/scall64-n32.S linux-3.7-vs2.3.5.1/arch/mips/kernel/scall64-n32.S
---- linux-3.7/arch/mips/kernel/scall64-n32.S 2012-12-11 15:46:07.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/mips/kernel/scall64-n32.S 2012-12-11 15:56:32.000000000 +0000
-@@ -350,7 +350,7 @@ EXPORT(sysn32_call_table)
+diff -NurpP --minimal linux-3.10.15/arch/mips/kernel/scall64-n32.S linux-3.10.15-vs2.3.6.6/arch/mips/kernel/scall64-n32.S
+--- linux-3.10.15/arch/mips/kernel/scall64-n32.S 2013-07-14 17:00:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/mips/kernel/scall64-n32.S 2013-08-22 20:29:59.000000000 +0000
+@@ -344,7 +344,7 @@ EXPORT(sysn32_call_table)
PTR compat_sys_mq_timedreceive
PTR compat_sys_mq_notify
PTR compat_sys_mq_getsetattr
PTR compat_sys_waitid
PTR sys_ni_syscall /* available, was setaltroot */
PTR sys_add_key
-diff -NurpP --minimal linux-3.7/arch/mips/kernel/scall64-o32.S linux-3.7-vs2.3.5.1/arch/mips/kernel/scall64-o32.S
---- linux-3.7/arch/mips/kernel/scall64-o32.S 2012-12-11 15:46:07.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/mips/kernel/scall64-o32.S 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/mips/kernel/scall64-o32.S linux-3.10.15-vs2.3.6.6/arch/mips/kernel/scall64-o32.S
+--- linux-3.10.15/arch/mips/kernel/scall64-o32.S 2013-07-14 17:00:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/mips/kernel/scall64-o32.S 2013-08-22 20:29:59.000000000 +0000
@@ -469,7 +469,7 @@ sys_call_table:
PTR compat_sys_mq_timedreceive
PTR compat_sys_mq_notify /* 4275 */
PTR compat_sys_mq_getsetattr
- PTR sys_ni_syscall /* sys_vserver */
+ PTR sys32_vserver
- PTR sys_32_waitid
+ PTR compat_sys_waitid
PTR sys_ni_syscall /* available, was setaltroot */
PTR sys_add_key /* 4280 */
-diff -NurpP --minimal linux-3.7/arch/mips/kernel/traps.c linux-3.7-vs2.3.5.1/arch/mips/kernel/traps.c
---- linux-3.7/arch/mips/kernel/traps.c 2012-10-04 13:26:53.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/mips/kernel/traps.c 2012-12-11 15:56:32.000000000 +0000
-@@ -347,9 +347,10 @@ void show_registers(struct pt_regs *regs
+diff -NurpP --minimal linux-3.10.15/arch/mips/kernel/traps.c linux-3.10.15-vs2.3.6.6/arch/mips/kernel/traps.c
+--- linux-3.10.15/arch/mips/kernel/traps.c 2013-07-14 17:00:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/mips/kernel/traps.c 2013-08-22 20:29:59.000000000 +0000
+@@ -331,9 +331,10 @@ void show_registers(struct pt_regs *regs
__show_regs(regs);
print_modules();
if (cpu_has_userlocal) {
unsigned long tls;
-diff -NurpP --minimal linux-3.7/arch/parisc/Kconfig linux-3.7-vs2.3.5.1/arch/parisc/Kconfig
---- linux-3.7/arch/parisc/Kconfig 2012-12-11 15:46:08.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/parisc/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -284,6 +284,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/parisc/Kconfig linux-3.10.15-vs2.3.6.6/arch/parisc/Kconfig
+--- linux-3.10.15/arch/parisc/Kconfig 2013-07-14 17:00:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/parisc/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -318,6 +318,8 @@ source "fs/Kconfig"
source "arch/parisc/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/parisc/kernel/syscall_table.S linux-3.7-vs2.3.5.1/arch/parisc/kernel/syscall_table.S
---- linux-3.7/arch/parisc/kernel/syscall_table.S 2012-12-11 15:46:09.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/parisc/kernel/syscall_table.S 2012-12-11 15:56:32.000000000 +0000
-@@ -361,7 +361,7 @@
+diff -NurpP --minimal linux-3.10.15/arch/parisc/kernel/syscall_table.S linux-3.10.15-vs2.3.6.6/arch/parisc/kernel/syscall_table.S
+--- linux-3.10.15/arch/parisc/kernel/syscall_table.S 2013-07-14 17:00:31.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/parisc/kernel/syscall_table.S 2013-08-22 20:29:59.000000000 +0000
+@@ -358,7 +358,7 @@
ENTRY_COMP(mbind) /* 260 */
ENTRY_COMP(get_mempolicy)
ENTRY_COMP(set_mempolicy)
ENTRY_SAME(add_key)
ENTRY_SAME(request_key) /* 265 */
ENTRY_SAME(keyctl)
-diff -NurpP --minimal linux-3.7/arch/parisc/kernel/traps.c linux-3.7-vs2.3.5.1/arch/parisc/kernel/traps.c
---- linux-3.7/arch/parisc/kernel/traps.c 2012-05-21 16:06:28.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/parisc/kernel/traps.c 2012-12-11 15:56:32.000000000 +0000
-@@ -235,8 +235,9 @@ void die_if_kernel(char *str, struct pt_
+diff -NurpP --minimal linux-3.10.15/arch/parisc/kernel/traps.c linux-3.10.15-vs2.3.6.6/arch/parisc/kernel/traps.c
+--- linux-3.10.15/arch/parisc/kernel/traps.c 2013-07-14 17:00:31.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/parisc/kernel/traps.c 2013-08-22 20:29:59.000000000 +0000
+@@ -229,8 +229,9 @@ void die_if_kernel(char *str, struct pt_
if (err == 0)
return; /* STFU */
#ifdef PRINT_USER_FAULTS
/* XXX for debugging only */
show_regs(regs);
-@@ -269,8 +270,8 @@ void die_if_kernel(char *str, struct pt_
+@@ -263,8 +264,8 @@ void die_if_kernel(char *str, struct pt_
pdc_console_restart();
if (err)
/* Wot's wrong wif bein' racy? */
if (current->thread.flags & PARISC_KERNEL_DEATH) {
-diff -NurpP --minimal linux-3.7/arch/parisc/mm/fault.c linux-3.7-vs2.3.5.1/arch/parisc/mm/fault.c
---- linux-3.7/arch/parisc/mm/fault.c 2010-08-02 14:52:06.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/parisc/mm/fault.c 2012-12-11 15:56:32.000000000 +0000
-@@ -237,8 +237,9 @@ bad_area:
+diff -NurpP --minimal linux-3.10.15/arch/parisc/mm/fault.c linux-3.10.15-vs2.3.6.6/arch/parisc/mm/fault.c
+--- linux-3.10.15/arch/parisc/mm/fault.c 2013-05-31 13:44:44.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/parisc/mm/fault.c 2013-08-22 20:29:59.000000000 +0000
+@@ -257,8 +257,9 @@ bad_area:
#ifdef PRINT_USER_FAULTS
printk(KERN_DEBUG "\n");
if (vma) {
printk(KERN_DEBUG "vm_start = 0x%08lx, vm_end = 0x%08lx\n",
vma->vm_start, vma->vm_end);
-diff -NurpP --minimal linux-3.7/arch/powerpc/Kconfig linux-3.7-vs2.3.5.1/arch/powerpc/Kconfig
---- linux-3.7/arch/powerpc/Kconfig 2012-12-11 15:46:09.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/powerpc/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -1014,6 +1014,8 @@ source "lib/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/powerpc/Kconfig linux-3.10.15-vs2.3.6.6/arch/powerpc/Kconfig
+--- linux-3.10.15/arch/powerpc/Kconfig 2013-10-09 17:35:16.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/powerpc/Kconfig 2013-10-09 17:37:21.000000000 +0000
+@@ -1010,6 +1010,8 @@ source "lib/Kconfig"
source "arch/powerpc/Kconfig.debug"
source "security/Kconfig"
config KEYS_COMPAT
-diff -NurpP --minimal linux-3.7/arch/powerpc/include/uapi/asm/unistd.h linux-3.7-vs2.3.5.1/arch/powerpc/include/uapi/asm/unistd.h
---- linux-3.7/arch/powerpc/include/uapi/asm/unistd.h 2012-12-11 15:46:10.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/powerpc/include/uapi/asm/unistd.h 2012-12-11 16:48:48.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/powerpc/include/uapi/asm/unistd.h linux-3.10.15-vs2.3.6.6/arch/powerpc/include/uapi/asm/unistd.h
+--- linux-3.10.15/arch/powerpc/include/uapi/asm/unistd.h 2013-05-31 13:44:44.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/powerpc/include/uapi/asm/unistd.h 2013-08-22 20:29:59.000000000 +0000
@@ -275,7 +275,7 @@
#endif
#define __NR_rtas 255
#define __NR_migrate_pages 258
#define __NR_mbind 259
#define __NR_get_mempolicy 260
-diff -NurpP --minimal linux-3.7/arch/powerpc/kernel/process.c linux-3.7-vs2.3.5.1/arch/powerpc/kernel/process.c
---- linux-3.7/arch/powerpc/kernel/process.c 2012-12-11 15:46:10.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/powerpc/kernel/process.c 2012-12-11 15:56:32.000000000 +0000
-@@ -660,8 +660,9 @@ void show_regs(struct pt_regs * regs)
- #else
- printk("DAR: "REG", DSISR: %08lx\n", regs->dar, regs->dsisr);
- #endif
-- printk("TASK = %p[%d] '%s' THREAD: %p",
-- current, task_pid_nr(current), current->comm, task_thread_info(current));
-+ printk("TASK = %p[%d,#%u] '%s' THREAD: %p",
-+ current, task_pid_nr(current), current->xid,
-+ current->comm, task_thread_info(current));
-
- #ifdef CONFIG_SMP
- printk(" CPU: %d", raw_smp_processor_id());
-diff -NurpP --minimal linux-3.7/arch/powerpc/kernel/traps.c linux-3.7-vs2.3.5.1/arch/powerpc/kernel/traps.c
---- linux-3.7/arch/powerpc/kernel/traps.c 2012-12-11 15:46:10.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/powerpc/kernel/traps.c 2012-12-11 15:56:32.000000000 +0000
-@@ -1120,8 +1120,9 @@ void nonrecoverable_exception(struct pt_
+diff -NurpP --minimal linux-3.10.15/arch/powerpc/kernel/traps.c linux-3.10.15-vs2.3.6.6/arch/powerpc/kernel/traps.c
+--- linux-3.10.15/arch/powerpc/kernel/traps.c 2013-10-09 17:35:16.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/powerpc/kernel/traps.c 2013-08-22 20:29:59.000000000 +0000
+@@ -1231,8 +1231,9 @@ void nonrecoverable_exception(struct pt_
void trace_syscall(struct pt_regs *regs)
{
- printk("Task: %p(%d), PC: %08lX/%08lX, Syscall: %3ld, Result: %s%ld %s\n",
- current, task_pid_nr(current), regs->nip, regs->link, regs->gpr[0],
-+ printk("Task: %p(%d[#%u]), PC: %08lX/%08lX, Syscall: %3ld, Result: %s%ld %s\n",
++ printk("Task: %p(%d:#%u), PC: %08lX/%08lX, Syscall: %3ld, Result: %s%ld %s\n",
+ current, task_pid_nr(current), current->xid,
+ regs->nip, regs->link, regs->gpr[0],
regs->ccr&0x10000000?"Error=":"", regs->gpr[3], print_tainted());
}
-diff -NurpP --minimal linux-3.7/arch/s390/Kconfig linux-3.7-vs2.3.5.1/arch/s390/Kconfig
---- linux-3.7/arch/s390/Kconfig 2012-12-11 15:46:14.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/s390/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -530,6 +530,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/s390/Kconfig linux-3.10.15-vs2.3.6.6/arch/s390/Kconfig
+--- linux-3.10.15/arch/s390/Kconfig 2013-10-09 17:35:16.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/s390/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -579,6 +579,8 @@ source "fs/Kconfig"
source "arch/s390/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/s390/include/asm/tlb.h linux-3.7-vs2.3.5.1/arch/s390/include/asm/tlb.h
---- linux-3.7/arch/s390/include/asm/tlb.h 2012-12-11 15:46:14.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/s390/include/asm/tlb.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/s390/include/asm/tlb.h linux-3.10.15-vs2.3.6.6/arch/s390/include/asm/tlb.h
+--- linux-3.10.15/arch/s390/include/asm/tlb.h 2013-10-09 17:35:16.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/s390/include/asm/tlb.h 2013-08-22 20:29:59.000000000 +0000
@@ -24,6 +24,7 @@
#include <linux/mm.h>
#include <linux/pagemap.h>
#include <asm/processor.h>
#include <asm/pgalloc.h>
#include <asm/tlbflush.h>
-diff -NurpP --minimal linux-3.7/arch/s390/include/uapi/asm/unistd.h linux-3.7-vs2.3.5.1/arch/s390/include/uapi/asm/unistd.h
---- linux-3.7/arch/s390/include/uapi/asm/unistd.h 2012-12-11 15:46:14.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/s390/include/uapi/asm/unistd.h 2012-12-11 16:47:45.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/s390/include/uapi/asm/unistd.h linux-3.10.15-vs2.3.6.6/arch/s390/include/uapi/asm/unistd.h
+--- linux-3.10.15/arch/s390/include/uapi/asm/unistd.h 2013-02-19 13:57:16.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/s390/include/uapi/asm/unistd.h 2013-08-22 20:29:59.000000000 +0000
@@ -200,7 +200,7 @@
#define __NR_clock_gettime (__NR_timer_create+6)
#define __NR_clock_getres (__NR_timer_create+7)
#define __NR_statfs64 265
#define __NR_fstatfs64 266
#define __NR_remap_file_pages 267
-diff -NurpP --minimal linux-3.7/arch/s390/kernel/ptrace.c linux-3.7-vs2.3.5.1/arch/s390/kernel/ptrace.c
---- linux-3.7/arch/s390/kernel/ptrace.c 2012-12-11 15:46:15.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/s390/kernel/ptrace.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/s390/kernel/ptrace.c linux-3.10.15-vs2.3.6.6/arch/s390/kernel/ptrace.c
+--- linux-3.10.15/arch/s390/kernel/ptrace.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/s390/kernel/ptrace.c 2013-08-22 20:29:59.000000000 +0000
@@ -21,6 +21,7 @@
#include <linux/tracehook.h>
#include <linux/seccomp.h>
#include <trace/syscall.h>
#include <asm/segment.h>
#include <asm/page.h>
-diff -NurpP --minimal linux-3.7/arch/s390/kernel/syscalls.S linux-3.7-vs2.3.5.1/arch/s390/kernel/syscalls.S
---- linux-3.7/arch/s390/kernel/syscalls.S 2012-12-11 15:46:15.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/s390/kernel/syscalls.S 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/s390/kernel/syscalls.S linux-3.10.15-vs2.3.6.6/arch/s390/kernel/syscalls.S
+--- linux-3.10.15/arch/s390/kernel/syscalls.S 2013-07-14 17:00:34.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/s390/kernel/syscalls.S 2013-08-22 20:29:59.000000000 +0000
@@ -271,7 +271,7 @@ SYSCALL(sys_clock_settime,sys_clock_sett
SYSCALL(sys_clock_gettime,sys_clock_gettime,sys32_clock_gettime_wrapper) /* 260 */
SYSCALL(sys_clock_getres,sys_clock_getres,sys32_clock_getres_wrapper)
SYSCALL(sys_s390_fadvise64_64,sys_ni_syscall,sys32_fadvise64_64_wrapper)
SYSCALL(sys_statfs64,sys_statfs64,compat_sys_statfs64_wrapper)
SYSCALL(sys_fstatfs64,sys_fstatfs64,compat_sys_fstatfs64_wrapper)
-diff -NurpP --minimal linux-3.7/arch/sh/Kconfig linux-3.7-vs2.3.5.1/arch/sh/Kconfig
---- linux-3.7/arch/sh/Kconfig 2012-12-11 15:46:15.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/sh/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -945,6 +945,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/sh/Kconfig linux-3.10.15-vs2.3.6.6/arch/sh/Kconfig
+--- linux-3.10.15/arch/sh/Kconfig 2013-07-14 17:00:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/sh/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -928,6 +928,8 @@ source "fs/Kconfig"
source "arch/sh/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/sh/kernel/irq.c linux-3.7-vs2.3.5.1/arch/sh/kernel/irq.c
---- linux-3.7/arch/sh/kernel/irq.c 2012-10-04 13:26:56.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/sh/kernel/irq.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/sh/kernel/irq.c linux-3.10.15-vs2.3.6.6/arch/sh/kernel/irq.c
+--- linux-3.10.15/arch/sh/kernel/irq.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/sh/kernel/irq.c 2013-08-22 20:29:59.000000000 +0000
@@ -14,6 +14,7 @@
#include <linux/ftrace.h>
#include <linux/delay.h>
#include <asm/processor.h>
#include <asm/machvec.h>
#include <asm/uaccess.h>
-diff -NurpP --minimal linux-3.7/arch/sparc/Kconfig linux-3.7-vs2.3.5.1/arch/sparc/Kconfig
---- linux-3.7/arch/sparc/Kconfig 2012-12-11 15:46:15.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/sparc/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -564,6 +564,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/sparc/Kconfig linux-3.10.15-vs2.3.6.6/arch/sparc/Kconfig
+--- linux-3.10.15/arch/sparc/Kconfig 2013-07-14 17:00:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/sparc/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -550,6 +550,8 @@ source "fs/Kconfig"
source "arch/sparc/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/sparc/include/uapi/asm/unistd.h linux-3.7-vs2.3.5.1/arch/sparc/include/uapi/asm/unistd.h
---- linux-3.7/arch/sparc/include/uapi/asm/unistd.h 2012-12-11 15:46:16.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/sparc/include/uapi/asm/unistd.h 2012-12-11 16:43:01.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/sparc/include/uapi/asm/unistd.h linux-3.10.15-vs2.3.6.6/arch/sparc/include/uapi/asm/unistd.h
+--- linux-3.10.15/arch/sparc/include/uapi/asm/unistd.h 2013-02-19 13:57:17.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/sparc/include/uapi/asm/unistd.h 2013-08-22 20:29:59.000000000 +0000
@@ -332,7 +332,7 @@
#define __NR_timer_getoverrun 264
#define __NR_timer_delete 265
#define __NR_io_setup 268
#define __NR_io_destroy 269
#define __NR_io_submit 270
-diff -NurpP --minimal linux-3.7/arch/sparc/kernel/systbls_32.S linux-3.7-vs2.3.5.1/arch/sparc/kernel/systbls_32.S
---- linux-3.7/arch/sparc/kernel/systbls_32.S 2012-12-11 15:46:17.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/sparc/kernel/systbls_32.S 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/sparc/kernel/systbls_32.S linux-3.10.15-vs2.3.6.6/arch/sparc/kernel/systbls_32.S
+--- linux-3.10.15/arch/sparc/kernel/systbls_32.S 2013-05-31 13:44:48.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/sparc/kernel/systbls_32.S 2013-08-22 20:29:59.000000000 +0000
@@ -70,7 +70,7 @@ sys_call_table:
/*250*/ .long sys_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_ni_syscall
/*255*/ .long sys_sync_file_range, sys_clock_settime, sys_clock_gettime, sys_clock_getres, sys_clock_nanosleep
/*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
/*275*/ .long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
/*280*/ .long sys_tee, sys_add_key, sys_request_key, sys_keyctl, sys_openat
-diff -NurpP --minimal linux-3.7/arch/sparc/kernel/systbls_64.S linux-3.7-vs2.3.5.1/arch/sparc/kernel/systbls_64.S
---- linux-3.7/arch/sparc/kernel/systbls_64.S 2012-12-11 15:46:17.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/sparc/kernel/systbls_64.S 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/sparc/kernel/systbls_64.S linux-3.10.15-vs2.3.6.6/arch/sparc/kernel/systbls_64.S
+--- linux-3.10.15/arch/sparc/kernel/systbls_64.S 2013-07-14 17:00:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/sparc/kernel/systbls_64.S 2013-08-22 20:29:59.000000000 +0000
@@ -71,7 +71,7 @@ sys_call_table32:
- /*250*/ .word sys_mremap, compat_sys_sysctl, sys32_getsid, sys_fdatasync, sys_nis_syscall
+ /*250*/ .word sys_mremap, compat_sys_sysctl, sys_getsid, sys_fdatasync, sys_nis_syscall
.word sys32_sync_file_range, compat_sys_clock_settime, compat_sys_clock_gettime, compat_sys_clock_getres, sys32_clock_nanosleep
/*260*/ .word compat_sys_sched_getaffinity, compat_sys_sched_setaffinity, sys32_timer_settime, compat_sys_timer_gettime, sys_timer_getoverrun
- .word sys_timer_delete, compat_sys_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy
+ .word sys_timer_delete, compat_sys_timer_create, sys32_vserver, compat_sys_io_setup, sys_io_destroy
/*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink
.word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid
- /*280*/ .word sys32_tee, sys_add_key, sys_request_key, compat_sys_keyctl, compat_sys_openat
+ /*280*/ .word sys_tee, sys_add_key, sys_request_key, compat_sys_keyctl, compat_sys_openat
@@ -149,7 +149,7 @@ sys_call_table:
/*250*/ .word sys_64_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nis_syscall
.word sys_sync_file_range, sys_clock_settime, sys_clock_gettime, sys_clock_getres, sys_clock_nanosleep
/*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
.word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
/*280*/ .word sys_tee, sys_add_key, sys_request_key, sys_keyctl, sys_openat
-diff -NurpP --minimal linux-3.7/arch/um/Kconfig.rest linux-3.7-vs2.3.5.1/arch/um/Kconfig.rest
---- linux-3.7/arch/um/Kconfig.rest 2012-01-09 15:14:09.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/um/Kconfig.rest 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/um/Kconfig.rest linux-3.10.15-vs2.3.6.6/arch/um/Kconfig.rest
+--- linux-3.10.15/arch/um/Kconfig.rest 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/um/Kconfig.rest 2013-08-22 20:29:59.000000000 +0000
@@ -12,6 +12,8 @@ source "arch/um/Kconfig.net"
source "fs/Kconfig"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/um/include/shared/kern_constants.h linux-3.7-vs2.3.5.1/arch/um/include/shared/kern_constants.h
---- linux-3.7/arch/um/include/shared/kern_constants.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/um/include/shared/kern_constants.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1 @@
-+#include "../../../../include/generated/asm-offsets.h"
-diff -NurpP --minimal linux-3.7/arch/um/include/shared/user_constants.h linux-3.7-vs2.3.5.1/arch/um/include/shared/user_constants.h
---- linux-3.7/arch/um/include/shared/user_constants.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/um/include/shared/user_constants.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,40 @@
-+/*
-+ * DO NOT MODIFY.
-+ *
-+ * This file was generated by arch/um/Makefile
-+ *
-+ */
-+
-+#define HOST_SC_CR2 176 /* offsetof(struct sigcontext, cr2) # */
-+#define HOST_SC_ERR 152 /* offsetof(struct sigcontext, err) # */
-+#define HOST_SC_TRAPNO 160 /* offsetof(struct sigcontext, trapno) # */
-+#define HOST_FP_SIZE 64 /* sizeof(struct _fpstate) / sizeof(unsigned long) # */
-+#define HOST_RBX 5 /* RBX # */
-+#define HOST_RCX 11 /* RCX # */
-+#define HOST_RDI 14 /* RDI # */
-+#define HOST_RSI 13 /* RSI # */
-+#define HOST_RDX 12 /* RDX # */
-+#define HOST_RBP 4 /* RBP # */
-+#define HOST_RAX 10 /* RAX # */
-+#define HOST_R8 9 /* R8 # */
-+#define HOST_R9 8 /* R9 # */
-+#define HOST_R10 7 /* R10 # */
-+#define HOST_R11 6 /* R11 # */
-+#define HOST_R12 3 /* R12 # */
-+#define HOST_R13 2 /* R13 # */
-+#define HOST_R14 1 /* R14 # */
-+#define HOST_R15 0 /* R15 # */
-+#define HOST_ORIG_RAX 15 /* ORIG_RAX # */
-+#define HOST_CS 17 /* CS # */
-+#define HOST_SS 20 /* SS # */
-+#define HOST_EFLAGS 18 /* EFLAGS # */
-+#define HOST_IP 16 /* RIP # */
-+#define HOST_SP 19 /* RSP # */
-+#define UM_FRAME_SIZE 216 /* sizeof(struct user_regs_struct) # */
-+#define UM_POLLIN 1 /* POLLIN # */
-+#define UM_POLLPRI 2 /* POLLPRI # */
-+#define UM_POLLOUT 4 /* POLLOUT # */
-+#define UM_PROT_READ 1 /* PROT_READ # */
-+#define UM_PROT_WRITE 2 /* PROT_WRITE # */
-+#define UM_PROT_EXEC 4 /* PROT_EXEC # */
-+
-diff -NurpP --minimal linux-3.7/arch/x86/Kconfig linux-3.7-vs2.3.5.1/arch/x86/Kconfig
---- linux-3.7/arch/x86/Kconfig 2012-12-11 15:46:18.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/x86/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -2248,6 +2248,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-3.10.15/arch/x86/Kconfig linux-3.10.15-vs2.3.6.6/arch/x86/Kconfig
+--- linux-3.10.15/arch/x86/Kconfig 2013-07-14 17:00:36.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/x86/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -2339,6 +2339,8 @@ source "fs/Kconfig"
source "arch/x86/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-3.7/arch/x86/syscalls/syscall_32.tbl linux-3.7-vs2.3.5.1/arch/x86/syscalls/syscall_32.tbl
---- linux-3.7/arch/x86/syscalls/syscall_32.tbl 2012-12-11 15:46:21.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/x86/syscalls/syscall_32.tbl 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/x86/syscalls/syscall_32.tbl linux-3.10.15-vs2.3.6.6/arch/x86/syscalls/syscall_32.tbl
+--- linux-3.10.15/arch/x86/syscalls/syscall_32.tbl 2013-07-14 17:00:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/x86/syscalls/syscall_32.tbl 2013-08-22 20:29:59.000000000 +0000
@@ -279,7 +279,7 @@
270 i386 tgkill sys_tgkill
271 i386 utimes sys_utimes compat_sys_utimes
274 i386 mbind sys_mbind
275 i386 get_mempolicy sys_get_mempolicy compat_sys_get_mempolicy
276 i386 set_mempolicy sys_set_mempolicy
-diff -NurpP --minimal linux-3.7/arch/x86/syscalls/syscall_64.tbl linux-3.7-vs2.3.5.1/arch/x86/syscalls/syscall_64.tbl
---- linux-3.7/arch/x86/syscalls/syscall_64.tbl 2012-10-04 13:27:01.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/arch/x86/syscalls/syscall_64.tbl 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/arch/x86/syscalls/syscall_64.tbl linux-3.10.15-vs2.3.6.6/arch/x86/syscalls/syscall_64.tbl
+--- linux-3.10.15/arch/x86/syscalls/syscall_64.tbl 2013-05-31 13:44:50.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/arch/x86/syscalls/syscall_64.tbl 2013-08-22 20:29:59.000000000 +0000
@@ -242,7 +242,7 @@
233 common epoll_ctl sys_epoll_ctl
234 common tgkill sys_tgkill
237 common mbind sys_mbind
238 common set_mempolicy sys_set_mempolicy
239 common get_mempolicy sys_get_mempolicy
-diff -NurpP --minimal linux-3.7/drivers/block/Kconfig linux-3.7-vs2.3.5.1/drivers/block/Kconfig
---- linux-3.7/drivers/block/Kconfig 2012-12-11 15:46:23.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/block/Kconfig 2012-12-11 15:56:32.000000000 +0000
-@@ -291,6 +291,13 @@ config BLK_DEV_CRYPTOLOOP
+diff -NurpP --minimal linux-3.10.15/drivers/block/Kconfig linux-3.10.15-vs2.3.6.6/drivers/block/Kconfig
+--- linux-3.10.15/drivers/block/Kconfig 2013-05-31 13:44:51.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/block/Kconfig 2013-08-22 20:29:59.000000000 +0000
+@@ -278,6 +278,13 @@ config BLK_DEV_CRYPTOLOOP
source "drivers/block/drbd/Kconfig"
config BLK_DEV_NBD
tristate "Network block device support"
depends on NET
-diff -NurpP --minimal linux-3.7/drivers/block/Makefile linux-3.7-vs2.3.5.1/drivers/block/Makefile
---- linux-3.7/drivers/block/Makefile 2012-12-11 15:46:23.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/block/Makefile 2012-12-11 15:56:32.000000000 +0000
-@@ -34,6 +34,7 @@ obj-$(CONFIG_VIRTIO_BLK) += virtio_blk.o
+diff -NurpP --minimal linux-3.10.15/drivers/block/Makefile linux-3.10.15-vs2.3.6.6/drivers/block/Makefile
+--- linux-3.10.15/drivers/block/Makefile 2013-07-14 17:00:41.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/block/Makefile 2013-08-22 20:29:59.000000000 +0000
+@@ -33,6 +33,7 @@ obj-$(CONFIG_VIRTIO_BLK) += virtio_blk.o
obj-$(CONFIG_VIODASD) += viodasd.o
obj-$(CONFIG_BLK_DEV_SX8) += sx8.o
obj-$(CONFIG_BLK_DEV_HD) += hd.o
obj-$(CONFIG_XEN_BLKDEV_FRONTEND) += xen-blkfront.o
obj-$(CONFIG_XEN_BLKDEV_BACKEND) += xen-blkback/
-diff -NurpP --minimal linux-3.7/drivers/block/loop.c linux-3.7-vs2.3.5.1/drivers/block/loop.c
---- linux-3.7/drivers/block/loop.c 2012-12-11 15:46:24.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/block/loop.c 2012-12-11 16:49:59.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/drivers/block/loop.c linux-3.10.15-vs2.3.6.6/drivers/block/loop.c
+--- linux-3.10.15/drivers/block/loop.c 2013-07-14 17:00:41.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/block/loop.c 2013-08-22 20:29:59.000000000 +0000
@@ -76,6 +76,7 @@
#include <linux/sysfs.h>
#include <linux/miscdevice.h>
#include <asm/uaccess.h>
-@@ -869,6 +870,7 @@ static int loop_set_fd(struct loop_devic
+@@ -884,6 +885,7 @@ static int loop_set_fd(struct loop_devic
lo->lo_blocksize = lo_blocksize;
lo->lo_device = bdev;
lo->lo_flags = lo_flags;
lo->lo_backing_file = file;
lo->transfer = transfer_none;
lo->ioctl = NULL;
-@@ -1014,6 +1016,7 @@ static int loop_clr_fd(struct loop_devic
+@@ -1035,6 +1037,7 @@ static int loop_clr_fd(struct loop_devic
lo->lo_sizelimit = 0;
lo->lo_encrypt_key_size = 0;
lo->lo_thread = NULL;
memset(lo->lo_encrypt_key, 0, LO_KEY_SIZE);
memset(lo->lo_crypt_name, 0, LO_NAME_SIZE);
memset(lo->lo_file_name, 0, LO_NAME_SIZE);
-@@ -1055,7 +1058,7 @@ loop_set_status(struct loop_device *lo,
+@@ -1078,7 +1081,7 @@ loop_set_status(struct loop_device *lo,
if (lo->lo_encrypt_key_size &&
!uid_eq(lo->lo_key_owner, uid) &&
return -EPERM;
if (lo->lo_state != Lo_bound)
return -ENXIO;
-@@ -1145,7 +1148,8 @@ loop_get_status(struct loop_device *lo,
+@@ -1168,7 +1171,8 @@ loop_get_status(struct loop_device *lo,
memcpy(info->lo_crypt_name, lo->lo_crypt_name, LO_NAME_SIZE);
info->lo_encrypt_type =
lo->lo_encryption ? lo->lo_encryption->number : 0;
info->lo_encrypt_key_size = lo->lo_encrypt_key_size;
memcpy(info->lo_encrypt_key, lo->lo_encrypt_key,
lo->lo_encrypt_key_size);
-@@ -1505,6 +1509,11 @@ static int lo_open(struct block_device *
+@@ -1510,6 +1514,11 @@ static int lo_open(struct block_device *
goto out;
}
mutex_lock(&lo->lo_ctl_mutex);
lo->lo_refcnt++;
mutex_unlock(&lo->lo_ctl_mutex);
-diff -NurpP --minimal linux-3.7/drivers/block/vroot.c linux-3.7-vs2.3.5.1/drivers/block/vroot.c
---- linux-3.7/drivers/block/vroot.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/block/vroot.c 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,291 @@
+diff -NurpP --minimal linux-3.10.15/drivers/block/vroot.c linux-3.10.15-vs2.3.6.6/drivers/block/vroot.c
+--- linux-3.10.15/drivers/block/vroot.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/block/vroot.c 2013-08-23 00:23:45.000000000 +0000
+@@ -0,0 +1,290 @@
+/*
+ * linux/drivers/block/vroot.c
+ *
+ return 0;
+}
+
-+static int vr_release(struct gendisk *disk, fmode_t mode)
++static void vr_release(struct gendisk *disk, fmode_t mode)
+{
+ struct vroot_device *vr = disk->private_data;
+
+ down(&vr->vr_ctl_mutex);
+ --vr->vr_refcnt;
+ up(&vr->vr_ctl_mutex);
-+ return 0;
+}
+
+static struct block_device_operations vr_fops = {
+
+#endif
+
-diff -NurpP --minimal linux-3.7/drivers/infiniband/Kconfig linux-3.7-vs2.3.5.1/drivers/infiniband/Kconfig
---- linux-3.7/drivers/infiniband/Kconfig 2012-07-22 21:39:06.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/infiniband/Kconfig 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/drivers/infiniband/Kconfig linux-3.10.15-vs2.3.6.6/drivers/infiniband/Kconfig
+--- linux-3.10.15/drivers/infiniband/Kconfig 2013-07-14 17:00:49.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/infiniband/Kconfig 2013-08-22 20:29:59.000000000 +0000
@@ -39,7 +39,7 @@ config INFINIBAND_USER_MEM
config INFINIBAND_ADDR_TRANS
bool
default y
source "drivers/infiniband/hw/mthca/Kconfig"
-diff -NurpP --minimal linux-3.7/drivers/infiniband/core/addr.c linux-3.7-vs2.3.5.1/drivers/infiniband/core/addr.c
---- linux-3.7/drivers/infiniband/core/addr.c 2012-12-11 15:46:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/infiniband/core/addr.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/drivers/infiniband/core/addr.c linux-3.10.15-vs2.3.6.6/drivers/infiniband/core/addr.c
+--- linux-3.10.15/drivers/infiniband/core/addr.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/infiniband/core/addr.c 2013-08-22 20:29:59.000000000 +0000
@@ -261,7 +261,7 @@ static int addr6_resolve(struct sockaddr
if (ipv6_addr_any(&fl6.saddr)) {
if (ret)
goto put;
-diff -NurpP --minimal linux-3.7/drivers/md/dm-ioctl.c linux-3.7-vs2.3.5.1/drivers/md/dm-ioctl.c
---- linux-3.7/drivers/md/dm-ioctl.c 2012-10-04 13:27:11.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/md/dm-ioctl.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/drivers/md/dm-ioctl.c linux-3.10.15-vs2.3.6.6/drivers/md/dm-ioctl.c
+--- linux-3.10.15/drivers/md/dm-ioctl.c 2013-10-09 17:35:19.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/md/dm-ioctl.c 2013-08-22 20:29:59.000000000 +0000
@@ -16,6 +16,7 @@
#include <linux/dm-ioctl.h>
#include <linux/hdreg.h>
if (old_nl)
old_nl->next = (uint32_t) ((void *) nl -
(void *) old_nl);
-@@ -1619,8 +1631,8 @@ static int ctl_ioctl(uint command, struc
- ioctl_fn fn = NULL;
+@@ -1725,8 +1737,8 @@ static int ctl_ioctl(uint command, struc
size_t input_param_size;
+ struct dm_ioctl param_kernel;
- /* only root can play with this */
- if (!capable(CAP_SYS_ADMIN))
return -EACCES;
if (_IOC_TYPE(command) != DM_IOCTL)
-diff -NurpP --minimal linux-3.7/drivers/md/dm.c linux-3.7-vs2.3.5.1/drivers/md/dm.c
---- linux-3.7/drivers/md/dm.c 2012-12-11 15:46:38.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/md/dm.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/drivers/md/dm.c linux-3.10.15-vs2.3.6.6/drivers/md/dm.c
+--- linux-3.10.15/drivers/md/dm.c 2013-10-09 17:35:19.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/md/dm.c 2013-10-09 17:37:21.000000000 +0000
@@ -19,6 +19,7 @@
#include <linux/idr.h>
#include <linux/hdreg.h>
#include <trace/events/block.h>
-@@ -137,6 +138,7 @@ struct mapped_device {
+@@ -125,6 +126,7 @@ struct mapped_device {
rwlock_t map_lock;
atomic_t holders;
atomic_t open_count;
-+ xid_t xid;
++ vxid_t xid;
unsigned long flags;
-@@ -345,6 +347,7 @@ int dm_deleting_md(struct mapped_device
+@@ -317,6 +319,7 @@ int dm_deleting_md(struct mapped_device
static int dm_blk_open(struct block_device *bdev, fmode_t mode)
{
struct mapped_device *md;
spin_lock(&_minor_lock);
-@@ -353,18 +356,19 @@ static int dm_blk_open(struct block_devi
+@@ -325,18 +328,19 @@ static int dm_blk_open(struct block_devi
goto out;
if (test_bit(DMF_FREEING, &md->flags) ||
+ return ret;
}
- static int dm_blk_close(struct gendisk *disk, fmode_t mode)
-@@ -575,6 +579,14 @@ int dm_set_geometry(struct mapped_device
+ static void dm_blk_close(struct gendisk *disk, fmode_t mode)
+@@ -552,6 +556,14 @@ int dm_set_geometry(struct mapped_device
return 0;
}
+/*
+ * Get the xid associated with a dm device
+ */
-+xid_t dm_get_xid(struct mapped_device *md)
++vxid_t dm_get_xid(struct mapped_device *md)
+{
+ return md->xid;
+}
/*-----------------------------------------------------------------
* CRUD START:
* A more elegant soln is in the works that uses the queue
-@@ -1852,6 +1864,7 @@ static struct mapped_device *alloc_dev(i
+@@ -1889,6 +1901,7 @@ static struct mapped_device *alloc_dev(i
INIT_LIST_HEAD(&md->uevent_list);
spin_lock_init(&md->uevent_lock);
md->queue = blk_alloc_queue(GFP_KERNEL);
if (!md->queue)
goto bad_queue;
-diff -NurpP --minimal linux-3.7/drivers/md/dm.h linux-3.7-vs2.3.5.1/drivers/md/dm.h
---- linux-3.7/drivers/md/dm.h 2012-10-04 13:27:11.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/md/dm.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/drivers/md/dm.h linux-3.10.15-vs2.3.6.6/drivers/md/dm.h
+--- linux-3.10.15/drivers/md/dm.h 2013-02-19 13:57:51.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/md/dm.h 2013-08-22 20:29:59.000000000 +0000
@@ -46,6 +46,8 @@ struct dm_dev_internal {
struct dm_table;
struct dm_md_mempools;
-+xid_t dm_get_xid(struct mapped_device *md);
++vxid_t dm_get_xid(struct mapped_device *md);
+
/*-----------------------------------------------------------------
* Internal table functions.
*---------------------------------------------------------------*/
-diff -NurpP --minimal linux-3.7/drivers/net/tun.c linux-3.7-vs2.3.5.1/drivers/net/tun.c
---- linux-3.7/drivers/net/tun.c 2012-12-11 15:47:01.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/net/tun.c 2012-12-12 00:07:34.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/drivers/net/tun.c linux-3.10.15-vs2.3.6.6/drivers/net/tun.c
+--- linux-3.10.15/drivers/net/tun.c 2013-10-09 17:35:20.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/net/tun.c 2013-10-09 17:37:21.000000000 +0000
@@ -64,6 +64,7 @@
#include <linux/nsproxy.h>
#include <linux/virtio_net.h>
#include <net/net_namespace.h>
#include <net/netns/generic.h>
#include <net/rtnetlink.h>
-@@ -123,6 +124,7 @@ struct tun_struct {
+@@ -164,6 +165,7 @@ struct tun_struct {
unsigned int flags;
kuid_t owner;
kgid_t group;
-+ nid_t nid;
++ vnid_t nid;
struct net_device *dev;
netdev_features_t set_features;
-@@ -1034,6 +1036,7 @@ static void tun_setup(struct net_device
+@@ -380,6 +382,7 @@ static inline bool tun_not_capable(struc
+ return ((uid_valid(tun->owner) && !uid_eq(cred->euid, tun->owner)) ||
+ (gid_valid(tun->group) && !in_egroup_p(tun->group))) &&
+ !ns_capable(net->user_ns, CAP_NET_ADMIN);
++ /* !cap_raised(current_cap(), CAP_NET_ADMIN) */
+ }
+
+ static void tun_set_real_num_queues(struct tun_struct *tun)
+@@ -1425,6 +1428,7 @@ static void tun_setup(struct net_device
tun->owner = INVALID_UID;
tun->group = INVALID_GID;
dev->ethtool_ops = &tun_ethtool_ops;
dev->destructor = tun_free_netdev;
-@@ -1198,7 +1201,7 @@ static int tun_set_iff(struct net *net,
-
- if (((uid_valid(tun->owner) && !uid_eq(cred->euid, tun->owner)) ||
- (gid_valid(tun->group) && !in_egroup_p(tun->group))) &&
-- !capable(CAP_NET_ADMIN))
-+ !cap_raised(current_cap(), CAP_NET_ADMIN))
- return -EPERM;
- err = security_tun_dev_attach(tun->socket.sk);
- if (err < 0)
-@@ -1212,7 +1215,7 @@ static int tun_set_iff(struct net *net,
- char *name;
- unsigned long flags = 0;
-
-- if (!capable(CAP_NET_ADMIN))
-+ if (!nx_capable(CAP_NET_ADMIN, NXC_TUN_CREATE))
- return -EPERM;
- err = security_tun_dev_create();
+@@ -1616,6 +1620,9 @@ static int tun_set_iff(struct net *net,
if (err < 0)
-@@ -1283,6 +1286,9 @@ static int tun_set_iff(struct net *net,
-
- sk->sk_destruct = tun_sock_destruct;
+ return err;
+ if (!nx_check(tun->nid, VS_IDENT | VS_HOSTID | VS_ADMIN_P))
+ return -EPERM;
+
err = tun_attach(tun, file);
if (err < 0)
- goto failed;
-@@ -1478,6 +1484,16 @@ static long __tun_chr_ioctl(struct file
+ return err;
+@@ -1634,7 +1641,7 @@ static int tun_set_iff(struct net *net,
+ int queues = ifr->ifr_flags & IFF_MULTI_QUEUE ?
+ MAX_TAP_QUEUES : 1;
+
+- if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
++ if (!vx_ns_capable(net->user_ns, CAP_NET_ADMIN, NXC_TUN_CREATE))
+ return -EPERM;
+ err = security_tun_dev_create();
+ if (err < 0)
+@@ -1980,6 +1987,16 @@ static long __tun_chr_ioctl(struct file
from_kgid(&init_user_ns, tun->group));
break;
+ return -EPERM;
+
+ /* Set nid owner of the device */
-+ tun->nid = (nid_t) arg;
++ tun->nid = (vnid_t) arg;
+
+ tun_debug(KERN_INFO, tun, "nid owner set to %u\n", tun->nid);
+ break;
case TUNSETLINK:
/* Only allow setting the type when the interface is down */
if (tun->dev->flags & IFF_UP) {
-diff -NurpP --minimal linux-3.7/drivers/staging/csr/csr_wifi_hip_xbv.c linux-3.7-vs2.3.5.1/drivers/staging/csr/csr_wifi_hip_xbv.c
---- linux-3.7/drivers/staging/csr/csr_wifi_hip_xbv.c 2012-10-04 13:27:30.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/staging/csr/csr_wifi_hip_xbv.c 2012-12-11 15:56:32.000000000 +0000
-@@ -55,7 +55,7 @@ typedef struct
- {
- char t_name[4];
- u32 t_len;
--} tag_t;
-+} ctag_t;
-
-
- #define TAG_EQ(i, v) (((i)[0] == (v)[0]) && \
-@@ -90,7 +90,7 @@ typedef struct
- u32 ptr;
- } xbv_stack_t;
-
--static s32 read_tag(card_t *card, ct_t *ct, tag_t *tag);
-+static s32 read_tag(card_t *card, ct_t *ct, ctag_t *tag);
- static s32 read_bytes(card_t *card, ct_t *ct, void *buf, u32 len);
- static s32 read_uint(card_t *card, ct_t *ct, u32 *u, u32 len);
- static s32 xbv_check(xbv1_t *fwinfo, const xbv_stack_t *stack,
-@@ -160,7 +160,7 @@ static u32 write_fwdl_to_ptdl(void *buf,
- CsrResult xbv1_parse(card_t *card, fwreadfn_t readfn, void *dlpriv, xbv1_t *fwinfo)
- {
- ct_t ct;
-- tag_t tag;
-+ ctag_t tag;
- xbv_stack_t stack;
-
- ct.dlpriv = dlpriv;
-@@ -505,7 +505,7 @@ static u32 xbv2uint(u8 *ptr, s32 len)
- }
-
-
--static s32 read_tag(card_t *card, ct_t *ct, tag_t *tag)
-+static s32 read_tag(card_t *card, ct_t *ct, ctag_t *tag)
- {
- u8 buf[8];
- s32 n;
-diff -NurpP --minimal linux-3.7/drivers/tty/sysrq.c linux-3.7-vs2.3.5.1/drivers/tty/sysrq.c
---- linux-3.7/drivers/tty/sysrq.c 2012-12-11 15:47:24.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/tty/sysrq.c 2012-12-11 16:52:41.000000000 +0000
-@@ -41,6 +41,7 @@
- #include <linux/slab.h>
- #include <linux/input.h>
+diff -NurpP --minimal linux-3.10.15/drivers/tty/sysrq.c linux-3.10.15-vs2.3.6.6/drivers/tty/sysrq.c
+--- linux-3.10.15/drivers/tty/sysrq.c 2013-07-14 17:01:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/tty/sysrq.c 2013-08-22 20:58:35.000000000 +0000
+@@ -44,6 +44,7 @@
#include <linux/uaccess.h>
+ #include <linux/moduleparam.h>
+ #include <linux/jiffies.h>
+#include <linux/vserver/debug.h>
#include <asm/ptrace.h>
#include <asm/irq_regs.h>
-@@ -398,6 +399,21 @@ static struct sysrq_key_op sysrq_unrt_op
+@@ -405,6 +406,21 @@ static struct sysrq_key_op sysrq_unrt_op
.enable_mask = SYSRQ_ENABLE_RTNICE,
};
/* Key Operations table and lock */
static DEFINE_SPINLOCK(sysrq_key_table_lock);
-@@ -453,7 +469,11 @@ static struct sysrq_key_op *sysrq_key_ta
+@@ -460,7 +476,11 @@ static struct sysrq_key_op *sysrq_key_ta
&sysrq_showstate_blocked_op, /* w */
/* x: May be registered on ppc/powerpc for xmon */
/* x: May be registered on sparc64 for global PMU dump */
-- NULL, /* x */
+#ifdef CONFIG_VSERVER_DEBUG
+ &sysrq_showvxinfo_op, /* x */
+#else
-+ NULL, /* x */
+ NULL, /* x */
+#endif
/* y: May be registered on sparc64 for global register dump */
NULL, /* y */
&sysrq_ftrace_dump_op, /* z */
-@@ -468,6 +488,8 @@ static int sysrq_key_table_key2index(int
+@@ -475,6 +495,8 @@ static int sysrq_key_table_key2index(int
retval = key - '0';
else if ((key >= 'a') && (key <= 'z'))
retval = key + 10 - 'a';
else
retval = -1;
return retval;
-diff -NurpP --minimal linux-3.7/drivers/tty/tty_io.c linux-3.7-vs2.3.5.1/drivers/tty/tty_io.c
---- linux-3.7/drivers/tty/tty_io.c 2012-12-11 15:47:24.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/drivers/tty/tty_io.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/drivers/tty/tty_io.c linux-3.10.15-vs2.3.6.6/drivers/tty/tty_io.c
+--- linux-3.10.15/drivers/tty/tty_io.c 2013-10-09 17:35:21.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/drivers/tty/tty_io.c 2013-10-09 17:37:22.000000000 +0000
@@ -104,6 +104,7 @@
#include <linux/kmod.h>
#undef TTY_DEBUG_HANGUP
-@@ -2139,7 +2140,8 @@ static int tiocsti(struct tty_struct *tt
+@@ -2213,7 +2214,8 @@ static int tiocsti(struct tty_struct *tt
char ch, mbz = 0;
struct tty_ldisc *ld;
return -EPERM;
if (get_user(ch, p))
return -EFAULT;
-@@ -2426,6 +2428,7 @@ static int tiocspgrp(struct tty_struct *
+@@ -2501,6 +2503,7 @@ static int tiocspgrp(struct tty_struct *
return -ENOTTY;
if (get_user(pgrp_nr, p))
return -EFAULT;
if (pgrp_nr < 0)
return -EINVAL;
rcu_read_lock();
-diff -NurpP --minimal linux-3.7/fs/attr.c linux-3.7-vs2.3.5.1/fs/attr.c
---- linux-3.7/fs/attr.c 2012-12-11 15:47:31.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/attr.c 2012-12-11 19:10:54.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/attr.c linux-3.10.15-vs2.3.6.6/fs/attr.c
+--- linux-3.10.15/fs/attr.c 2013-02-19 13:58:46.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/attr.c 2013-08-22 20:29:59.000000000 +0000
@@ -15,6 +15,9 @@
#include <linux/security.h>
#include <linux/evm.h>
/**
* inode_change_ok - check if attribute changes to an inode are allowed
-@@ -75,6 +78,10 @@ int inode_change_ok(const struct inode *
+@@ -77,6 +80,10 @@ int inode_change_ok(const struct inode *
return -EPERM;
}
return 0;
}
EXPORT_SYMBOL(inode_change_ok);
-@@ -145,6 +152,8 @@ void setattr_copy(struct inode *inode, c
+@@ -147,6 +154,8 @@ void setattr_copy(struct inode *inode, c
inode->i_uid = attr->ia_uid;
if (ia_valid & ATTR_GID)
inode->i_gid = attr->ia_gid;
if (ia_valid & ATTR_ATIME)
inode->i_atime = timespec_trunc(attr->ia_atime,
inode->i_sb->s_time_gran);
-@@ -174,7 +183,8 @@ int notify_change(struct dentry * dentry
+@@ -177,7 +186,8 @@ int notify_change(struct dentry * dentry
WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex));
if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
return -EPERM;
}
-diff -NurpP --minimal linux-3.7/fs/block_dev.c linux-3.7-vs2.3.5.1/fs/block_dev.c
---- linux-3.7/fs/block_dev.c 2012-12-11 15:47:31.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/block_dev.c 2012-12-11 15:56:32.000000000 +0000
-@@ -27,6 +27,7 @@
- #include <linux/namei.h>
+diff -NurpP --minimal linux-3.10.15/fs/block_dev.c linux-3.10.15-vs2.3.6.6/fs/block_dev.c
+--- linux-3.10.15/fs/block_dev.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/block_dev.c 2013-08-22 21:20:35.000000000 +0000
+@@ -28,6 +28,7 @@
#include <linux/log2.h>
#include <linux/cleancache.h>
+ #include <linux/aio.h>
+#include <linux/vs_device.h>
#include <asm/uaccess.h>
#include "internal.h"
-@@ -528,6 +529,7 @@ struct block_device *bdget(dev_t dev)
+@@ -536,6 +537,7 @@ struct block_device *bdget(dev_t dev)
bdev->bd_invalidated = 0;
inode->i_mode = S_IFBLK;
inode->i_rdev = dev;
inode->i_bdev = bdev;
inode->i_data.a_ops = &def_blk_aops;
mapping_set_gfp_mask(&inode->i_data, GFP_USER);
-@@ -574,6 +576,11 @@ EXPORT_SYMBOL(bdput);
+@@ -583,6 +585,11 @@ EXPORT_SYMBOL(bdput);
static struct block_device *bd_acquire(struct inode *inode)
{
struct block_device *bdev;
spin_lock(&bdev_lock);
bdev = inode->i_bdev;
-@@ -584,7 +591,7 @@ static struct block_device *bd_acquire(s
+@@ -593,7 +600,7 @@ static struct block_device *bd_acquire(s
}
spin_unlock(&bdev_lock);
if (bdev) {
spin_lock(&bdev_lock);
if (!inode->i_bdev) {
-diff -NurpP --minimal linux-3.7/fs/btrfs/ctree.h linux-3.7-vs2.3.5.1/fs/btrfs/ctree.h
---- linux-3.7/fs/btrfs/ctree.h 2012-12-11 15:47:31.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/btrfs/ctree.h 2012-12-11 15:56:32.000000000 +0000
-@@ -692,11 +692,14 @@ struct btrfs_inode_item {
+diff -NurpP --minimal linux-3.10.15/fs/btrfs/ctree.h linux-3.10.15-vs2.3.6.6/fs/btrfs/ctree.h
+--- linux-3.10.15/fs/btrfs/ctree.h 2013-07-14 17:01:26.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/btrfs/ctree.h 2013-08-22 20:29:59.000000000 +0000
+@@ -707,11 +707,14 @@ struct btrfs_inode_item {
/* modification sequence number for NFS */
__le64 sequence;
struct btrfs_timespec atime;
struct btrfs_timespec ctime;
struct btrfs_timespec mtime;
-@@ -1757,6 +1760,8 @@ struct btrfs_ioctl_defrag_range_args {
+@@ -1928,6 +1931,8 @@ struct btrfs_ioctl_defrag_range_args {
#define BTRFS_MOUNT_CHECK_INTEGRITY_INCLUDING_EXTENT_DATA (1 << 21)
#define BTRFS_MOUNT_PANIC_ON_FATAL_ERROR (1 << 22)
+
#define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt)
#define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt)
- #define btrfs_test_opt(root, opt) ((root)->fs_info->mount_opt & \
-@@ -2025,6 +2030,7 @@ BTRFS_SETGET_FUNCS(inode_block_group, st
+ #define btrfs_raw_test_opt(o, opt) ((o) & BTRFS_MOUNT_##opt)
+@@ -2197,6 +2202,7 @@ BTRFS_SETGET_FUNCS(inode_block_group, st
BTRFS_SETGET_FUNCS(inode_nlink, struct btrfs_inode_item, nlink, 32);
BTRFS_SETGET_FUNCS(inode_uid, struct btrfs_inode_item, uid, 32);
BTRFS_SETGET_FUNCS(inode_gid, struct btrfs_inode_item, gid, 32);
BTRFS_SETGET_FUNCS(inode_mode, struct btrfs_inode_item, mode, 32);
BTRFS_SETGET_FUNCS(inode_rdev, struct btrfs_inode_item, rdev, 64);
BTRFS_SETGET_FUNCS(inode_flags, struct btrfs_inode_item, flags, 64);
-@@ -2078,6 +2084,10 @@ BTRFS_SETGET_FUNCS(extent_flags, struct
+@@ -2250,6 +2256,10 @@ BTRFS_SETGET_FUNCS(extent_flags, struct
BTRFS_SETGET_FUNCS(extent_refs_v0, struct btrfs_extent_item_v0, refs, 32);
BTRFS_SETGET_FUNCS(tree_block_level, struct btrfs_tree_block_info, level, 8);
-@@ -3363,6 +3373,7 @@ extern const struct dentry_operations bt
+@@ -3578,6 +3588,7 @@ extern const struct dentry_operations bt
long btrfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
void btrfs_update_iflags(struct inode *inode);
void btrfs_inherit_iflags(struct inode *inode, struct inode *dir);
int btrfs_defrag_file(struct inode *inode, struct file *file,
struct btrfs_ioctl_defrag_range_args *range,
u64 newer_than, unsigned long max_pages);
-diff -NurpP --minimal linux-3.7/fs/btrfs/disk-io.c linux-3.7-vs2.3.5.1/fs/btrfs/disk-io.c
---- linux-3.7/fs/btrfs/disk-io.c 2012-12-11 15:47:31.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/btrfs/disk-io.c 2012-12-11 15:56:32.000000000 +0000
-@@ -2197,6 +2197,9 @@ int open_ctree(struct super_block *sb,
+diff -NurpP --minimal linux-3.10.15/fs/btrfs/disk-io.c linux-3.10.15-vs2.3.6.6/fs/btrfs/disk-io.c
+--- linux-3.10.15/fs/btrfs/disk-io.c 2013-07-14 17:01:26.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/btrfs/disk-io.c 2013-08-22 20:29:59.000000000 +0000
+@@ -2360,6 +2360,9 @@ int open_ctree(struct super_block *sb,
goto fail_alloc;
}
features = btrfs_super_incompat_flags(disk_super) &
~BTRFS_FEATURE_INCOMPAT_SUPP;
if (features) {
-diff -NurpP --minimal linux-3.7/fs/btrfs/inode.c linux-3.7-vs2.3.5.1/fs/btrfs/inode.c
---- linux-3.7/fs/btrfs/inode.c 2012-12-11 15:47:31.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/btrfs/inode.c 2012-12-11 21:52:49.000000000 +0000
-@@ -39,6 +39,7 @@
- #include <linux/slab.h>
- #include <linux/ratelimit.h>
+diff -NurpP --minimal linux-3.10.15/fs/btrfs/inode.c linux-3.10.15-vs2.3.6.6/fs/btrfs/inode.c
+--- linux-3.10.15/fs/btrfs/inode.c 2013-07-14 17:01:26.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/btrfs/inode.c 2013-08-22 20:29:59.000000000 +0000
+@@ -42,6 +42,7 @@
#include <linux/mount.h>
+ #include <linux/btrfs.h>
+ #include <linux/blkdev.h>
+#include <linux/vs_tag.h>
#include "compat.h"
#include "ctree.h"
#include "disk-io.h"
-@@ -2530,6 +2531,8 @@ static void btrfs_read_locked_inode(stru
+@@ -3327,6 +3328,9 @@ static void btrfs_read_locked_inode(stru
struct btrfs_key location;
int maybe_acls;
u32 rdev;
-+ uid_t uid;
-+ gid_t gid;
++ kuid_t kuid;
++ kgid_t kgid;
++ ktag_t ktag;
int ret;
bool filled = false;
-@@ -2557,8 +2560,13 @@ static void btrfs_read_locked_inode(stru
+@@ -3354,8 +3358,14 @@ static void btrfs_read_locked_inode(stru
struct btrfs_inode_item);
inode->i_mode = btrfs_inode_mode(leaf, inode_item);
set_nlink(inode, btrfs_inode_nlink(leaf, inode_item));
- i_uid_write(inode, btrfs_inode_uid(leaf, inode_item));
- i_gid_write(inode, btrfs_inode_gid(leaf, inode_item));
+
-+ uid = btrfs_inode_uid(leaf, inode_item);
-+ gid = btrfs_inode_gid(leaf, inode_item);
-+ i_uid_write(inode, INOTAG_UID(DX_TAG(inode), uid, gid));
-+ i_gid_write(inode, INOTAG_GID(DX_TAG(inode), uid, gid));
-+ i_tag_write(inode, INOTAG_TAG(DX_TAG(inode), uid, gid,
-+ btrfs_inode_tag(leaf, inode_item)));
++ kuid = make_kuid(&init_user_ns, btrfs_inode_uid(leaf, inode_item));
++ kgid = make_kgid(&init_user_ns, btrfs_inode_gid(leaf, inode_item));
++ ktag = make_ktag(&init_user_ns, btrfs_inode_tag(leaf, inode_item));
++
++ inode->i_uid = INOTAG_KUID(DX_TAG(inode), kuid, kgid);
++ inode->i_gid = INOTAG_KGID(DX_TAG(inode), kuid, kgid);
++ inode->i_tag = INOTAG_KTAG(DX_TAG(inode), kuid, kgid, ktag);
btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item));
tspec = btrfs_inode_atime(inode_item);
-@@ -2648,8 +2656,16 @@ static void fill_inode_item(struct btrfs
- struct btrfs_inode_item *item,
+@@ -3446,11 +3456,18 @@ static void fill_inode_item(struct btrfs
struct inode *inode)
{
-- btrfs_set_inode_uid(leaf, item, i_uid_read(inode));
-- btrfs_set_inode_gid(leaf, item, i_gid_read(inode));
-+ uid_t uid = TAGINO_UID(DX_TAG(inode),
-+ i_uid_read(inode), i_tag_read(inode));
-+ gid_t gid = TAGINO_GID(DX_TAG(inode),
-+ i_gid_read(inode), i_tag_read(inode));
-+
-+ btrfs_set_inode_uid(leaf, item, uid);
-+ btrfs_set_inode_gid(leaf, item, gid);
+ struct btrfs_map_token token;
++ uid_t uid = from_kuid(&init_user_ns,
++ TAGINO_KUID(DX_TAG(inode), inode->i_uid, inode->i_tag));
++ gid_t gid = from_kgid(&init_user_ns,
++ TAGINO_KGID(DX_TAG(inode), inode->i_gid, inode->i_tag));
+
+ btrfs_init_map_token(&token);
+
+- btrfs_set_token_inode_uid(leaf, item, i_uid_read(inode), &token);
+- btrfs_set_token_inode_gid(leaf, item, i_gid_read(inode), &token);
++ btrfs_set_token_inode_uid(leaf, item, uid, &token);
++ btrfs_set_token_inode_gid(leaf, item, gid, &token);
+#ifdef CONFIG_TAGGING_INTERN
-+ btrfs_set_inode_tag(leaf, item, i_tag_read(inode));
++ btrfs_set_token_inode_tag(leaf, item, i_tag_read(inode), &token);
+#endif
- btrfs_set_inode_size(leaf, item, BTRFS_I(inode)->disk_i_size);
- btrfs_set_inode_mode(leaf, item, inode->i_mode);
- btrfs_set_inode_nlink(leaf, item, inode->i_nlink);
-@@ -7786,11 +7802,13 @@ static const struct inode_operations btr
+ btrfs_set_token_inode_size(leaf, item, BTRFS_I(inode)->disk_i_size,
+ &token);
+ btrfs_set_token_inode_mode(leaf, item, inode->i_mode, &token);
+@@ -8720,11 +8737,13 @@ static const struct inode_operations btr
.listxattr = btrfs_listxattr,
.removexattr = btrfs_removexattr,
.permission = btrfs_permission,
.get_acl = btrfs_get_acl,
};
-diff -NurpP --minimal linux-3.7/fs/btrfs/ioctl.c linux-3.7-vs2.3.5.1/fs/btrfs/ioctl.c
---- linux-3.7/fs/btrfs/ioctl.c 2012-12-11 15:47:31.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/btrfs/ioctl.c 2012-12-11 15:56:32.000000000 +0000
-@@ -74,10 +74,13 @@ static unsigned int btrfs_flags_to_ioctl
+diff -NurpP --minimal linux-3.10.15/fs/btrfs/ioctl.c linux-3.10.15-vs2.3.6.6/fs/btrfs/ioctl.c
+--- linux-3.10.15/fs/btrfs/ioctl.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/btrfs/ioctl.c 2013-10-09 17:37:22.000000000 +0000
+@@ -75,10 +75,13 @@ static unsigned int btrfs_flags_to_ioctl
{
unsigned int iflags = 0;
if (flags & BTRFS_INODE_APPEND)
iflags |= FS_APPEND_FL;
if (flags & BTRFS_INODE_NODUMP)
-@@ -94,28 +97,78 @@ static unsigned int btrfs_flags_to_ioctl
+@@ -95,28 +98,78 @@ static unsigned int btrfs_flags_to_ioctl
else if (flags & BTRFS_INODE_NOCOMPRESS)
iflags |= FS_NOCOMP_FL;
}
/*
-@@ -131,6 +184,7 @@ void btrfs_inherit_iflags(struct inode *
+@@ -132,6 +185,7 @@ void btrfs_inherit_iflags(struct inode *
return;
flags = BTRFS_I(dir)->flags;
if (flags & BTRFS_INODE_NOCOMPRESS) {
BTRFS_I(inode)->flags &= ~BTRFS_INODE_COMPRESS;
-@@ -146,6 +200,30 @@ void btrfs_inherit_iflags(struct inode *
+@@ -150,6 +204,30 @@ void btrfs_inherit_iflags(struct inode *
btrfs_update_iflags(inode);
}
+
static int btrfs_ioctl_getflags(struct file *file, void __user *arg)
{
- struct btrfs_inode *ip = BTRFS_I(file->f_path.dentry->d_inode);
-@@ -208,21 +286,27 @@ static int btrfs_ioctl_setflags(struct f
+ struct btrfs_inode *ip = BTRFS_I(file_inode(file));
+@@ -212,21 +290,27 @@ static int btrfs_ioctl_setflags(struct f
flags = btrfs_mask_flags(inode->i_mode, flags);
oldflags = btrfs_flags_to_ioctl(ip->flags);
if (flags & FS_APPEND_FL)
ip->flags |= BTRFS_INODE_APPEND;
else
-diff -NurpP --minimal linux-3.7/fs/btrfs/super.c linux-3.7-vs2.3.5.1/fs/btrfs/super.c
---- linux-3.7/fs/btrfs/super.c 2012-12-11 15:47:31.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/btrfs/super.c 2012-12-11 15:56:32.000000000 +0000
-@@ -312,7 +312,7 @@ enum {
+diff -NurpP --minimal linux-3.10.15/fs/btrfs/super.c linux-3.10.15-vs2.3.6.6/fs/btrfs/super.c
+--- linux-3.10.15/fs/btrfs/super.c 2013-07-14 17:01:26.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/btrfs/super.c 2013-08-22 20:29:59.000000000 +0000
+@@ -319,7 +319,7 @@ enum {
Opt_no_space_cache, Opt_recovery, Opt_skip_balance,
Opt_check_integrity, Opt_check_integrity_including_extent_data,
Opt_check_integrity_print_mask, Opt_fatal_errors,
};
static match_table_t tokens = {
-@@ -352,6 +352,9 @@ static match_table_t tokens = {
+@@ -359,6 +359,9 @@ static match_table_t tokens = {
{Opt_check_integrity_including_extent_data, "check_int_data"},
{Opt_check_integrity_print_mask, "check_int_print_mask=%d"},
{Opt_fatal_errors, "fatal_errors=%s"},
{Opt_err, NULL},
};
-@@ -614,6 +617,22 @@ int btrfs_parse_options(struct btrfs_roo
+@@ -624,6 +627,22 @@ int btrfs_parse_options(struct btrfs_roo
goto out;
}
break;
case Opt_err:
printk(KERN_INFO "btrfs: unrecognized mount option "
"'%s'\n", p);
-@@ -1211,6 +1230,12 @@ static int btrfs_remount(struct super_bl
+@@ -1251,6 +1270,12 @@ static int btrfs_remount(struct super_bl
btrfs_resize_thread_pool(fs_info,
fs_info->thread_pool_size, old_thread_pool_size);
+ }
+
if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
- return 0;
+ goto out;
-diff -NurpP --minimal linux-3.7/fs/char_dev.c linux-3.7-vs2.3.5.1/fs/char_dev.c
---- linux-3.7/fs/char_dev.c 2012-12-11 15:47:32.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/char_dev.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/char_dev.c linux-3.10.15-vs2.3.6.6/fs/char_dev.c
+--- linux-3.10.15/fs/char_dev.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/char_dev.c 2013-08-22 20:29:59.000000000 +0000
@@ -21,6 +21,8 @@
#include <linux/mutex.h>
#include <linux/backing-dev.h>
if (!kobj)
return -ENXIO;
new = container_of(kobj, struct cdev, kobj);
-diff -NurpP --minimal linux-3.7/fs/dcache.c linux-3.7-vs2.3.5.1/fs/dcache.c
---- linux-3.7/fs/dcache.c 2012-12-11 15:47:32.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/dcache.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/dcache.c linux-3.10.15-vs2.3.6.6/fs/dcache.c
+--- linux-3.10.15/fs/dcache.c 2013-07-14 17:01:27.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/dcache.c 2013-08-22 20:29:59.000000000 +0000
@@ -37,6 +37,7 @@
#include <linux/rculist_bl.h>
#include <linux/prefetch.h>
#include "internal.h"
#include "mount.h"
-@@ -617,6 +618,8 @@ int d_invalidate(struct dentry * dentry)
+@@ -578,6 +579,8 @@ int d_invalidate(struct dentry * dentry)
spin_lock(&dentry->d_lock);
}
/*
* Somebody else still using it?
*
-@@ -646,6 +649,7 @@ EXPORT_SYMBOL(d_invalidate);
+@@ -607,6 +610,7 @@ EXPORT_SYMBOL(d_invalidate);
static inline void __dget_dlock(struct dentry *dentry)
{
dentry->d_count++;
}
static inline void __dget(struct dentry *dentry)
-@@ -1276,6 +1280,9 @@ struct dentry *__d_alloc(struct super_bl
+@@ -1239,6 +1243,9 @@ struct dentry *__d_alloc(struct super_bl
struct dentry *dentry;
char *dname;
dentry = kmem_cache_alloc(dentry_cache, GFP_KERNEL);
if (!dentry)
return NULL;
-@@ -1308,6 +1315,7 @@ struct dentry *__d_alloc(struct super_bl
+@@ -1271,6 +1278,7 @@ struct dentry *__d_alloc(struct super_bl
dentry->d_count = 1;
dentry->d_flags = 0;
spin_lock_init(&dentry->d_lock);
seqcount_init(&dentry->d_seq);
dentry->d_inode = NULL;
-@@ -2012,6 +2020,7 @@ struct dentry *__d_lookup(struct dentry
+@@ -1971,6 +1979,7 @@ struct dentry *__d_lookup(const struct d
}
dentry->d_count++;
found = dentry;
spin_unlock(&dentry->d_lock);
break;
-diff -NurpP --minimal linux-3.7/fs/devpts/inode.c linux-3.7-vs2.3.5.1/fs/devpts/inode.c
---- linux-3.7/fs/devpts/inode.c 2012-10-04 13:27:39.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/devpts/inode.c 2012-12-11 19:18:53.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/devpts/inode.c linux-3.10.15-vs2.3.6.6/fs/devpts/inode.c
+--- linux-3.10.15/fs/devpts/inode.c 2013-05-31 13:45:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/devpts/inode.c 2013-08-22 20:29:59.000000000 +0000
@@ -25,6 +25,7 @@
#include <linux/parser.h>
#include <linux/fsnotify.h>
+ int ret = -EACCES;
+
+ /* devpts is xid tagged */
-+ if (vx_check((xid_t)i_tag_read(inode), VS_WATCH_P | VS_IDENT))
++ if (vx_check((vxid_t)i_tag_read(inode), VS_WATCH_P | VS_IDENT))
+ ret = generic_permission(inode, mask);
+ return ret;
+}
/*
* sysctl support for setting limits on the number of Unix98 ptys allocated.
* Otherwise one can eat up all kernel memory by opening /dev/ptmx repeatedly.
-@@ -336,6 +352,34 @@ static int devpts_show_options(struct se
+@@ -345,6 +361,34 @@ static int devpts_show_options(struct se
return 0;
}
+static int devpts_filter(struct dentry *de)
+{
-+ xid_t xid = 0;
++ vxid_t xid = 0;
+
+ /* devpts is xid tagged */
+ if (de && de->d_inode)
-+ xid = (xid_t)i_tag_read(de->d_inode);
++ xid = (vxid_t)i_tag_read(de->d_inode);
+#ifdef CONFIG_VSERVER_WARN_DEVPTS
+ else
+ vxwprintk_task(1, "devpts " VS_Q("%.*s") " without inode.",
static const struct super_operations devpts_sops = {
.statfs = simple_statfs,
.remount_fs = devpts_remount,
-@@ -379,8 +423,10 @@ devpts_fill_super(struct super_block *s,
+@@ -388,8 +432,10 @@ devpts_fill_super(struct super_block *s,
inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR;
inode->i_op = &simple_dir_inode_operations;
+ inode->i_fop = &devpts_dir_operations;
set_nlink(inode, 2);
+ /* devpts is xid tagged */
-+ i_tag_write(inode, (tag_t)vx_current_xid());
++ i_tag_write(inode, (vtag_t)vx_current_xid());
s->s_root = d_make_root(inode);
if (s->s_root)
-@@ -572,6 +618,9 @@ int devpts_pty_new(struct inode *ptmx_in
+@@ -592,6 +638,9 @@ struct inode *devpts_pty_new(struct inod
inode->i_gid = opts->setgid ? opts->gid : current_fsgid();
inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
init_special_inode(inode, S_IFCHR|opts->mode, device);
+ /* devpts is xid tagged */
-+ i_tag_write(inode, (tag_t)vx_current_xid());
++ i_tag_write(inode, (vtag_t)vx_current_xid());
+ inode->i_op = &devpts_file_inode_operations;
- inode->i_private = tty;
- tty->driver_data = inode;
+ inode->i_private = priv;
-diff -NurpP --minimal linux-3.7/fs/ext2/balloc.c linux-3.7-vs2.3.5.1/fs/ext2/balloc.c
---- linux-3.7/fs/ext2/balloc.c 2012-12-11 15:47:32.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext2/balloc.c 2012-12-11 15:56:32.000000000 +0000
-@@ -699,7 +699,6 @@ ext2_try_to_allocate(struct super_block
+ sprintf(s, "%d", index);
+diff -NurpP --minimal linux-3.10.15/fs/ext2/balloc.c linux-3.10.15-vs2.3.6.6/fs/ext2/balloc.c
+--- linux-3.10.15/fs/ext2/balloc.c 2013-05-31 13:45:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext2/balloc.c 2013-08-22 20:29:59.000000000 +0000
+@@ -693,7 +693,6 @@ ext2_try_to_allocate(struct super_block
start = 0;
end = EXT2_BLOCKS_PER_GROUP(sb);
}
BUG_ON(start > EXT2_BLOCKS_PER_GROUP(sb));
repeat:
-diff -NurpP --minimal linux-3.7/fs/ext2/ext2.h linux-3.7-vs2.3.5.1/fs/ext2/ext2.h
---- linux-3.7/fs/ext2/ext2.h 2012-07-22 21:39:39.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext2/ext2.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext2/ext2.h linux-3.10.15-vs2.3.6.6/fs/ext2/ext2.h
+--- linux-3.10.15/fs/ext2/ext2.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext2/ext2.h 2013-08-22 20:29:59.000000000 +0000
@@ -244,8 +244,12 @@ struct ext2_group_desc
#define EXT2_NOTAIL_FL FS_NOTAIL_FL /* file tail should not be merged */
#define EXT2_DIRSYNC_FL FS_DIRSYNC_FL /* dirsync behaviour (directories only) */
/* ioctl.c */
extern long ext2_ioctl(struct file *, unsigned int, unsigned long);
-diff -NurpP --minimal linux-3.7/fs/ext2/file.c linux-3.7-vs2.3.5.1/fs/ext2/file.c
---- linux-3.7/fs/ext2/file.c 2011-10-24 16:45:27.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext2/file.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext2/file.c linux-3.10.15-vs2.3.6.6/fs/ext2/file.c
+--- linux-3.10.15/fs/ext2/file.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext2/file.c 2013-08-22 20:29:59.000000000 +0000
@@ -104,4 +104,5 @@ const struct inode_operations ext2_file_
.setattr = ext2_setattr,
.get_acl = ext2_get_acl,
.fiemap = ext2_fiemap,
+ .sync_flags = ext2_sync_flags,
};
-diff -NurpP --minimal linux-3.7/fs/ext2/ialloc.c linux-3.7-vs2.3.5.1/fs/ext2/ialloc.c
---- linux-3.7/fs/ext2/ialloc.c 2012-10-04 13:27:39.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext2/ialloc.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext2/ialloc.c linux-3.10.15-vs2.3.6.6/fs/ext2/ialloc.c
+--- linux-3.10.15/fs/ext2/ialloc.c 2013-05-31 13:45:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext2/ialloc.c 2013-08-22 20:29:59.000000000 +0000
@@ -17,6 +17,7 @@
#include <linux/backing-dev.h>
#include <linux/buffer_head.h>
#include "ext2.h"
#include "xattr.h"
#include "acl.h"
-@@ -547,6 +548,7 @@ got:
+@@ -546,6 +547,7 @@ got:
inode->i_mode = mode;
inode->i_uid = current_fsuid();
inode->i_gid = dir->i_gid;
-+ inode->i_tag = dx_current_fstag(sb);
++ i_tag_write(inode, dx_current_fstag(sb));
} else
inode_init_owner(inode, dir, mode);
-diff -NurpP --minimal linux-3.7/fs/ext2/inode.c linux-3.7-vs2.3.5.1/fs/ext2/inode.c
---- linux-3.7/fs/ext2/inode.c 2012-10-04 13:27:39.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext2/inode.c 2012-12-11 19:22:08.000000000 +0000
-@@ -31,6 +31,7 @@
- #include <linux/mpage.h>
+diff -NurpP --minimal linux-3.10.15/fs/ext2/inode.c linux-3.10.15-vs2.3.6.6/fs/ext2/inode.c
+--- linux-3.10.15/fs/ext2/inode.c 2013-07-14 17:01:27.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext2/inode.c 2013-08-22 21:46:54.000000000 +0000
+@@ -32,6 +32,7 @@
#include <linux/fiemap.h>
#include <linux/namei.h>
+ #include <linux/aio.h>
+#include <linux/vs_tag.h>
#include "ext2.h"
#include "acl.h"
#include "xip.h"
-@@ -1165,7 +1166,7 @@ static void ext2_truncate_blocks(struct
+@@ -1180,7 +1181,7 @@ static void ext2_truncate_blocks(struct
return;
if (ext2_inode_is_fast_symlink(inode))
return;
return;
__ext2_truncate_blocks(inode, offset);
}
-@@ -1256,36 +1257,61 @@ void ext2_set_inode_flags(struct inode *
+@@ -1271,36 +1272,61 @@ void ext2_set_inode_flags(struct inode *
{
unsigned int flags = EXT2_I(inode)->i_flags;
}
struct inode *ext2_iget (struct super_block *sb, unsigned long ino)
-@@ -1321,8 +1347,10 @@ struct inode *ext2_iget (struct super_bl
+@@ -1336,8 +1362,10 @@ struct inode *ext2_iget (struct super_bl
i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16;
i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16;
}
set_nlink(inode, le16_to_cpu(raw_inode->i_links_count));
inode->i_size = le32_to_cpu(raw_inode->i_size);
inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime);
-@@ -1420,8 +1448,10 @@ static int __ext2_write_inode(struct ino
+@@ -1435,8 +1463,10 @@ static int __ext2_write_inode(struct ino
struct ext2_inode_info *ei = EXT2_I(inode);
struct super_block *sb = inode->i_sb;
ino_t ino = inode->i_ino;
- uid_t uid = i_uid_read(inode);
- gid_t gid = i_gid_read(inode);
-+ uid_t uid = TAGINO_UID(DX_TAG(inode),
-+ i_uid_read(inode), i_tag_read(inode));
-+ gid_t gid = TAGINO_GID(DX_TAG(inode),
-+ i_gid_read(inode), i_tag_read(inode));
++ uid_t uid = from_kuid(&init_user_ns,
++ TAGINO_KUID(DX_TAG(inode), inode->i_uid, inode->i_tag));
++ gid_t gid = from_kgid(&init_user_ns,
++ TAGINO_KGID(DX_TAG(inode), inode->i_gid, inode->i_tag));
struct buffer_head * bh;
struct ext2_inode * raw_inode = ext2_get_inode(sb, ino, &bh);
int n;
-@@ -1457,6 +1487,9 @@ static int __ext2_write_inode(struct ino
+@@ -1472,6 +1502,9 @@ static int __ext2_write_inode(struct ino
raw_inode->i_uid_high = 0;
raw_inode->i_gid_high = 0;
}
raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
raw_inode->i_size = cpu_to_le32(inode->i_size);
raw_inode->i_atime = cpu_to_le32(inode->i_atime.tv_sec);
-@@ -1537,7 +1570,8 @@ int ext2_setattr(struct dentry *dentry,
+@@ -1552,7 +1585,8 @@ int ext2_setattr(struct dentry *dentry,
if (is_quota_modification(inode, iattr))
dquot_initialize(inode);
if ((iattr->ia_valid & ATTR_UID && !uid_eq(iattr->ia_uid, inode->i_uid)) ||
error = dquot_transfer(inode, iattr);
if (error)
return error;
-diff -NurpP --minimal linux-3.7/fs/ext2/ioctl.c linux-3.7-vs2.3.5.1/fs/ext2/ioctl.c
---- linux-3.7/fs/ext2/ioctl.c 2012-03-19 18:47:25.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext2/ioctl.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext2/ioctl.c linux-3.10.15-vs2.3.6.6/fs/ext2/ioctl.c
+--- linux-3.10.15/fs/ext2/ioctl.c 2013-05-31 13:45:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext2/ioctl.c 2013-08-22 20:29:59.000000000 +0000
@@ -17,6 +17,16 @@
#include <asm/uaccess.h>
+
long ext2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
- struct inode *inode = filp->f_dentry->d_inode;
+ struct inode *inode = file_inode(filp);
@@ -51,6 +61,11 @@ long ext2_ioctl(struct file *filp, unsig
flags = ext2_mask_flags(inode->i_mode, flags);
flags |= oldflags & ~EXT2_FL_USER_MODIFIABLE;
ei->i_flags = flags;
-diff -NurpP --minimal linux-3.7/fs/ext2/namei.c linux-3.7-vs2.3.5.1/fs/ext2/namei.c
---- linux-3.7/fs/ext2/namei.c 2012-10-04 13:27:39.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext2/namei.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext2/namei.c linux-3.10.15-vs2.3.6.6/fs/ext2/namei.c
+--- linux-3.10.15/fs/ext2/namei.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext2/namei.c 2013-08-22 20:29:59.000000000 +0000
@@ -32,6 +32,7 @@
#include <linux/pagemap.h>
.get_acl = ext2_get_acl,
};
-diff -NurpP --minimal linux-3.7/fs/ext2/super.c linux-3.7-vs2.3.5.1/fs/ext2/super.c
---- linux-3.7/fs/ext2/super.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext2/super.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext2/super.c linux-3.10.15-vs2.3.6.6/fs/ext2/super.c
+--- linux-3.10.15/fs/ext2/super.c 2013-05-31 13:45:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext2/super.c 2013-08-22 20:29:59.000000000 +0000
@@ -395,7 +395,8 @@ enum {
Opt_err_ro, Opt_nouid32, Opt_nocheck, Opt_debug,
Opt_oldalloc, Opt_orlov, Opt_nobh, Opt_user_xattr, Opt_nouser_xattr,
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
((sbi->s_mount_opt & EXT2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
-diff -NurpP --minimal linux-3.7/fs/ext3/ext3.h linux-3.7-vs2.3.5.1/fs/ext3/ext3.h
---- linux-3.7/fs/ext3/ext3.h 2012-07-22 21:39:39.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext3/ext3.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext3/ext3.h linux-3.10.15-vs2.3.6.6/fs/ext3/ext3.h
+--- linux-3.10.15/fs/ext3/ext3.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext3/ext3.h 2013-08-22 20:29:59.000000000 +0000
@@ -151,10 +151,14 @@ struct ext3_group_desc
#define EXT3_NOTAIL_FL 0x00008000 /* file tail should not be merged */
#define EXT3_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */
/* ioctl.c */
extern long ext3_ioctl(struct file *, unsigned int, unsigned long);
-diff -NurpP --minimal linux-3.7/fs/ext3/file.c linux-3.7-vs2.3.5.1/fs/ext3/file.c
---- linux-3.7/fs/ext3/file.c 2012-05-21 16:07:20.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext3/file.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext3/file.c linux-3.10.15-vs2.3.6.6/fs/ext3/file.c
+--- linux-3.10.15/fs/ext3/file.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext3/file.c 2013-08-22 20:29:59.000000000 +0000
@@ -76,5 +76,6 @@ const struct inode_operations ext3_file_
#endif
.get_acl = ext3_get_acl,
+ .sync_flags = ext3_sync_flags,
};
-diff -NurpP --minimal linux-3.7/fs/ext3/ialloc.c linux-3.7-vs2.3.5.1/fs/ext3/ialloc.c
---- linux-3.7/fs/ext3/ialloc.c 2012-07-22 21:39:39.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext3/ialloc.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext3/ialloc.c linux-3.10.15-vs2.3.6.6/fs/ext3/ialloc.c
+--- linux-3.10.15/fs/ext3/ialloc.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext3/ialloc.c 2013-08-22 20:29:59.000000000 +0000
@@ -14,6 +14,7 @@
#include <linux/quotaops.h>
inode->i_mode = mode;
inode->i_uid = current_fsuid();
inode->i_gid = dir->i_gid;
-+ inode->i_tag = dx_current_fstag(sb);
++ i_tag_write(inode, dx_current_fstag(sb));
} else
inode_init_owner(inode, dir, mode);
-diff -NurpP --minimal linux-3.7/fs/ext3/inode.c linux-3.7-vs2.3.5.1/fs/ext3/inode.c
---- linux-3.7/fs/ext3/inode.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext3/inode.c 2012-12-11 19:24:12.000000000 +0000
-@@ -27,6 +27,8 @@
- #include <linux/writeback.h>
+diff -NurpP --minimal linux-3.10.15/fs/ext3/inode.c linux-3.10.15-vs2.3.6.6/fs/ext3/inode.c
+--- linux-3.10.15/fs/ext3/inode.c 2013-07-14 17:01:27.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext3/inode.c 2013-08-22 21:21:18.000000000 +0000
+@@ -28,6 +28,8 @@
#include <linux/mpage.h>
#include <linux/namei.h>
+ #include <linux/aio.h>
+#include <linux/vs_tag.h>
+
#include "ext3.h"
#include "xattr.h"
#include "acl.h"
-@@ -2848,36 +2850,60 @@ void ext3_set_inode_flags(struct inode *
+@@ -2853,36 +2855,60 @@ void ext3_set_inode_flags(struct inode *
{
unsigned int flags = EXT3_I(inode)->i_flags;
}
struct inode *ext3_iget(struct super_block *sb, unsigned long ino)
-@@ -2915,8 +2941,10 @@ struct inode *ext3_iget(struct super_blo
+@@ -2920,8 +2946,10 @@ struct inode *ext3_iget(struct super_blo
i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16;
i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16;
}
set_nlink(inode, le16_to_cpu(raw_inode->i_links_count));
inode->i_size = le32_to_cpu(raw_inode->i_size);
inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime);
-@@ -3088,8 +3116,10 @@ again:
+@@ -3093,8 +3121,10 @@ again:
ext3_get_inode_flags(ei);
raw_inode->i_mode = cpu_to_le16(inode->i_mode);
- i_uid = i_uid_read(inode);
- i_gid = i_gid_read(inode);
-+ i_uid = TAGINO_UID(DX_TAG(inode),
-+ i_uid_read(inode), i_tag_read(inode));
-+ i_gid = TAGINO_GID(DX_TAG(inode),
-+ i_gid_read(inode), i_tag_read(inode));
++ i_uid = from_kuid(&init_user_ns,
++ TAGINO_KUID(DX_TAG(inode), inode->i_uid, inode->i_tag));
++ i_gid = from_kgid(&init_user_ns,
++ TAGINO_KGID(DX_TAG(inode), inode->i_gid, inode->i_tag));
if(!(test_opt(inode->i_sb, NO_UID32))) {
raw_inode->i_uid_low = cpu_to_le16(low_16_bits(i_uid));
raw_inode->i_gid_low = cpu_to_le16(low_16_bits(i_gid));
-@@ -3114,6 +3144,9 @@ again:
+@@ -3119,6 +3149,9 @@ again:
raw_inode->i_uid_high = 0;
raw_inode->i_gid_high = 0;
}
raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
disksize = cpu_to_le32(ei->i_disksize);
if (disksize != raw_inode->i_size) {
-@@ -3282,7 +3315,8 @@ int ext3_setattr(struct dentry *dentry,
+@@ -3287,7 +3320,8 @@ int ext3_setattr(struct dentry *dentry,
if (is_quota_modification(inode, attr))
dquot_initialize(inode);
if ((ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) ||
handle_t *handle;
/* (user+group)*(old+new) structure, inode write (sb,
-@@ -3304,6 +3338,8 @@ int ext3_setattr(struct dentry *dentry,
+@@ -3309,6 +3343,8 @@ int ext3_setattr(struct dentry *dentry,
inode->i_uid = attr->ia_uid;
if (attr->ia_valid & ATTR_GID)
inode->i_gid = attr->ia_gid;
error = ext3_mark_inode_dirty(handle, inode);
ext3_journal_stop(handle);
}
-diff -NurpP --minimal linux-3.7/fs/ext3/ioctl.c linux-3.7-vs2.3.5.1/fs/ext3/ioctl.c
---- linux-3.7/fs/ext3/ioctl.c 2012-05-21 16:07:20.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext3/ioctl.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext3/ioctl.c linux-3.10.15-vs2.3.6.6/fs/ext3/ioctl.c
+--- linux-3.10.15/fs/ext3/ioctl.c 2013-05-31 13:45:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext3/ioctl.c 2013-08-22 20:29:59.000000000 +0000
@@ -12,6 +12,34 @@
#include <asm/uaccess.h>
#include "ext3.h"
+
long ext3_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
- struct inode *inode = filp->f_dentry->d_inode;
+ struct inode *inode = file_inode(filp);
@@ -45,6 +73,11 @@ long ext3_ioctl(struct file *filp, unsig
flags = ext3_mask_flags(inode->i_mode, flags);
flags |= oldflags & ~EXT3_FL_USER_MODIFIABLE;
ei->i_flags = flags;
-diff -NurpP --minimal linux-3.7/fs/ext3/namei.c linux-3.7-vs2.3.5.1/fs/ext3/namei.c
---- linux-3.7/fs/ext3/namei.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext3/namei.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext3/namei.c linux-3.10.15-vs2.3.6.6/fs/ext3/namei.c
+--- linux-3.10.15/fs/ext3/namei.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext3/namei.c 2013-08-22 20:29:59.000000000 +0000
@@ -25,6 +25,8 @@
*/
#include "ext3.h"
#include "namei.h"
#include "xattr.h"
-@@ -919,6 +921,7 @@ restart:
+@@ -915,6 +917,7 @@ restart:
submit_bh(READ | REQ_META | REQ_PRIO,
bh);
}
}
}
if ((bh = bh_use[ra_ptr++]) == NULL)
-@@ -2528,6 +2531,7 @@ const struct inode_operations ext3_dir_i
+@@ -2524,6 +2527,7 @@ const struct inode_operations ext3_dir_i
.listxattr = ext3_listxattr,
.removexattr = generic_removexattr,
#endif
.get_acl = ext3_get_acl,
};
-diff -NurpP --minimal linux-3.7/fs/ext3/super.c linux-3.7-vs2.3.5.1/fs/ext3/super.c
---- linux-3.7/fs/ext3/super.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext3/super.c 2012-12-11 15:56:32.000000000 +0000
-@@ -816,7 +816,8 @@ enum {
+diff -NurpP --minimal linux-3.10.15/fs/ext3/super.c linux-3.10.15-vs2.3.6.6/fs/ext3/super.c
+--- linux-3.10.15/fs/ext3/super.c 2013-07-14 17:01:27.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext3/super.c 2013-08-22 20:29:59.000000000 +0000
+@@ -813,7 +813,8 @@ enum {
Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
Opt_noquota, Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err,
};
static const match_table_t tokens = {
-@@ -873,6 +874,9 @@ static const match_table_t tokens = {
+@@ -870,6 +871,9 @@ static const match_table_t tokens = {
{Opt_barrier, "barrier"},
{Opt_nobarrier, "nobarrier"},
{Opt_resize, "resize"},
{Opt_err, NULL},
};
-@@ -1038,6 +1042,20 @@ static int parse_options (char *options,
+@@ -1037,6 +1041,20 @@ static int parse_options (char *options,
case Opt_nouid32:
set_opt (sbi->s_mount_opt, NO_UID32);
break;
case Opt_nocheck:
clear_opt (sbi->s_mount_opt, CHECK);
break;
-@@ -1738,6 +1756,9 @@ static int ext3_fill_super (struct super
+@@ -1734,6 +1752,9 @@ static int ext3_fill_super (struct super
NULL, 0))
goto failed_mount;
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
(test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0);
-@@ -2622,6 +2643,14 @@ static int ext3_remount (struct super_bl
+@@ -2629,6 +2650,14 @@ static int ext3_remount (struct super_bl
if (test_opt(sb, ABORT))
ext3_abort(sb, __func__, "Abort forced by user");
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
(test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0);
-diff -NurpP --minimal linux-3.7/fs/ext4/ext4.h linux-3.7-vs2.3.5.1/fs/ext4/ext4.h
---- linux-3.7/fs/ext4/ext4.h 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext4/ext4.h 2012-12-11 15:56:32.000000000 +0000
-@@ -392,8 +392,12 @@ struct flex_groups {
+diff -NurpP --minimal linux-3.10.15/fs/ext4/ext4.h linux-3.10.15-vs2.3.6.6/fs/ext4/ext4.h
+--- linux-3.10.15/fs/ext4/ext4.h 2013-07-14 17:01:27.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext4/ext4.h 2013-08-22 20:29:59.000000000 +0000
+@@ -387,7 +387,10 @@ struct flex_groups {
#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */
#define EXT4_EA_INODE_FL 0x00200000 /* Inode used for large EA */
#define EXT4_EOFBLOCKS_FL 0x00400000 /* Blocks allocated beyond EOF */
++#define EXT4_BARRIER_FL 0x04000000 /* Barrier for chroot() */
+#define EXT4_IXUNLINK_FL 0x08000000 /* Immutable invert on unlink */
+ #define EXT4_INLINE_DATA_FL 0x10000000 /* Inode has inline data. */
++#define EXT4_COW_FL 0x20000000 /* Copy on Write marker */
#define EXT4_RESERVED_FL 0x80000000 /* reserved for ext4 lib */
-+#define EXT4_BARRIER_FL 0x04000000 /* Barrier for chroot() */
-+#define EXT4_COW_FL 0x20000000 /* Copy on Write marker */
-+
#define EXT4_FL_USER_VISIBLE 0x004BDFFF /* User visible flags */
- #define EXT4_FL_USER_MODIFIABLE 0x004B80FF /* User modifiable flags */
-
-@@ -665,7 +669,7 @@ struct ext4_inode {
+@@ -663,7 +666,7 @@ struct ext4_inode {
__le16 l_i_uid_high; /* these 2 fields */
__le16 l_i_gid_high; /* were reserved2[0] */
__le16 l_i_checksum_lo;/* crc32c(uuid+inum+inode) LE */
} linux2;
struct {
__le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */
-@@ -783,6 +787,7 @@ do { \
+@@ -781,6 +784,7 @@ do { \
#define i_gid_low i_gid
#define i_uid_high osd2.linux2.l_i_uid_high
#define i_gid_high osd2.linux2.l_i_gid_high
#define i_checksum_lo osd2.linux2.l_i_checksum_lo
#elif defined(__GNU__)
-@@ -961,6 +966,7 @@ struct ext4_inode_info {
+@@ -958,6 +962,7 @@ struct ext4_inode_info {
#define EXT4_MOUNT_POSIX_ACL 0x08000 /* POSIX Access Control Lists */
#define EXT4_MOUNT_NO_AUTO_DA_ALLOC 0x10000 /* No auto delalloc mapping */
#define EXT4_MOUNT_BARRIER 0x20000 /* Use block barriers */
#define EXT4_MOUNT_QUOTA 0x80000 /* Some quota option set */
#define EXT4_MOUNT_USRQUOTA 0x100000 /* "old" user quota */
#define EXT4_MOUNT_GRPQUOTA 0x200000 /* "old" group quota */
-@@ -2412,6 +2418,7 @@ extern int ext4_map_blocks(handle_t *han
- struct ext4_map_blocks *map, int flags);
- extern int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
- __u64 start, __u64 len);
+@@ -2538,6 +2543,7 @@ extern struct buffer_head *ext4_get_firs
+ extern int ext4_inline_data_fiemap(struct inode *inode,
+ struct fiemap_extent_info *fieinfo,
+ int *has_inline);
+extern int ext4_sync_flags(struct inode *, int, int);
- /* move_extent.c */
- extern int ext4_move_extents(struct file *o_filp, struct file *d_filp,
- __u64 start_orig, __u64 start_donor,
-diff -NurpP --minimal linux-3.7/fs/ext4/file.c linux-3.7-vs2.3.5.1/fs/ext4/file.c
---- linux-3.7/fs/ext4/file.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext4/file.c 2012-12-11 15:56:32.000000000 +0000
-@@ -334,5 +334,6 @@ const struct inode_operations ext4_file_
- #endif
+ extern int ext4_try_to_evict_inline_data(handle_t *handle,
+ struct inode *inode,
+ int needed);
+diff -NurpP --minimal linux-3.10.15/fs/ext4/file.c linux-3.10.15-vs2.3.6.6/fs/ext4/file.c
+--- linux-3.10.15/fs/ext4/file.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext4/file.c 2013-08-22 20:29:59.000000000 +0000
+@@ -651,5 +651,6 @@ const struct inode_operations ext4_file_
+ .removexattr = generic_removexattr,
.get_acl = ext4_get_acl,
.fiemap = ext4_fiemap,
+ .sync_flags = ext4_sync_flags,
};
-diff -NurpP --minimal linux-3.7/fs/ext4/ialloc.c linux-3.7-vs2.3.5.1/fs/ext4/ialloc.c
---- linux-3.7/fs/ext4/ialloc.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext4/ialloc.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext4/ialloc.c linux-3.10.15-vs2.3.6.6/fs/ext4/ialloc.c
+--- linux-3.10.15/fs/ext4/ialloc.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext4/ialloc.c 2013-08-22 20:29:59.000000000 +0000
@@ -22,6 +22,7 @@
#include <linux/random.h>
#include <linux/bitops.h>
#include <asm/byteorder.h>
#include "ext4.h"
-@@ -848,6 +849,7 @@ got:
+@@ -679,6 +680,7 @@ struct inode *__ext4_new_inode(handle_t
inode->i_mode = mode;
inode->i_uid = current_fsuid();
inode->i_gid = dir->i_gid;
-+ inode->i_tag = dx_current_fstag(sb);
++ i_tag_write(inode, dx_current_fstag(sb));
} else
inode_init_owner(inode, dir, mode);
-
-diff -NurpP --minimal linux-3.7/fs/ext4/inode.c linux-3.7-vs2.3.5.1/fs/ext4/inode.c
---- linux-3.7/fs/ext4/inode.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext4/inode.c 2012-12-11 19:25:58.000000000 +0000
-@@ -37,6 +37,7 @@
- #include <linux/printk.h>
+ dquot_initialize(inode);
+diff -NurpP --minimal linux-3.10.15/fs/ext4/inode.c linux-3.10.15-vs2.3.6.6/fs/ext4/inode.c
+--- linux-3.10.15/fs/ext4/inode.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext4/inode.c 2013-10-09 17:37:22.000000000 +0000
+@@ -38,6 +38,7 @@
#include <linux/slab.h>
#include <linux/ratelimit.h>
+ #include <linux/aio.h>
+#include <linux/vs_tag.h>
#include "ext4_jbd2.h"
#include "xattr.h"
-@@ -3695,41 +3696,64 @@ void ext4_set_inode_flags(struct inode *
+@@ -4057,41 +4058,64 @@ void ext4_set_inode_flags(struct inode *
{
unsigned int flags = EXT4_I(inode)->i_flags;
} while (cmpxchg(&ei->i_flags, old_fl, new_fl) != old_fl);
}
-@@ -3821,8 +3845,10 @@ struct inode *ext4_iget(struct super_blo
+@@ -4196,8 +4220,10 @@ struct inode *ext4_iget(struct super_blo
i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16;
i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16;
}
set_nlink(inode, le16_to_cpu(raw_inode->i_links_count));
ext4_clear_state_flags(ei); /* Only relevant on 32-bit archs */
-@@ -4046,8 +4072,10 @@ static int ext4_do_update_inode(handle_t
+@@ -4425,8 +4451,10 @@ static int ext4_do_update_inode(handle_t
ext4_get_inode_flags(ei);
raw_inode->i_mode = cpu_to_le16(inode->i_mode);
- i_uid = i_uid_read(inode);
- i_gid = i_gid_read(inode);
-+ i_uid = TAGINO_UID(DX_TAG(inode),
-+ i_uid_read(inode), i_tag_read(inode));
-+ i_gid = TAGINO_GID(DX_TAG(inode),
-+ i_gid_read(inode), i_tag_read(inode));
++ i_uid = from_kuid(&init_user_ns,
++ TAGINO_KUID(DX_TAG(inode), inode->i_uid, inode->i_tag));
++ i_gid = from_kgid(&init_user_ns,
++ TAGINO_KGID(DX_TAG(inode), inode->i_gid, inode->i_tag));
if (!(test_opt(inode->i_sb, NO_UID32))) {
raw_inode->i_uid_low = cpu_to_le16(low_16_bits(i_uid));
raw_inode->i_gid_low = cpu_to_le16(low_16_bits(i_gid));
-@@ -4070,6 +4098,9 @@ static int ext4_do_update_inode(handle_t
+@@ -4449,6 +4477,9 @@ static int ext4_do_update_inode(handle_t
raw_inode->i_uid_high = 0;
raw_inode->i_gid_high = 0;
}
raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
EXT4_INODE_SET_XTIME(i_ctime, inode, raw_inode);
-@@ -4258,7 +4289,8 @@ int ext4_setattr(struct dentry *dentry,
+@@ -4679,7 +4710,8 @@ int ext4_setattr(struct dentry *dentry,
if (is_quota_modification(inode, attr))
dquot_initialize(inode);
if ((ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) ||
handle_t *handle;
/* (user+group)*(old+new) structure, inode write (sb,
-@@ -4280,6 +4312,8 @@ int ext4_setattr(struct dentry *dentry,
+@@ -4702,6 +4734,8 @@ int ext4_setattr(struct dentry *dentry,
inode->i_uid = attr->ia_uid;
if (attr->ia_valid & ATTR_GID)
inode->i_gid = attr->ia_gid;
error = ext4_mark_inode_dirty(handle, inode);
ext4_journal_stop(handle);
}
-diff -NurpP --minimal linux-3.7/fs/ext4/ioctl.c linux-3.7-vs2.3.5.1/fs/ext4/ioctl.c
---- linux-3.7/fs/ext4/ioctl.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext4/ioctl.c 2012-12-11 15:56:32.000000000 +0000
-@@ -14,12 +14,40 @@
+diff -NurpP --minimal linux-3.10.15/fs/ext4/ioctl.c linux-3.10.15-vs2.3.6.6/fs/ext4/ioctl.c
+--- linux-3.10.15/fs/ext4/ioctl.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext4/ioctl.c 2013-08-22 22:22:39.000000000 +0000
+@@ -14,6 +14,7 @@
#include <linux/compat.h>
#include <linux/mount.h>
#include <linux/file.h>
#include <asm/uaccess.h>
#include "ext4_jbd2.h"
#include "ext4.h"
-
- #define MAX_32_NUM ((((unsigned long long) 1) << 32) - 1)
+@@ -214,6 +215,33 @@ swap_boot_out:
+ return err;
+ }
+int ext4_sync_flags(struct inode *inode, int flags, int vflags)
+{
+ struct ext4_iloc iloc;
+ int err;
+
-+ handle = ext4_journal_start(inode, 1);
++ handle = ext4_journal_start(inode, EXT4_HT_INODE, 1);
+ if (IS_ERR(handle))
+ return PTR_ERR(handle);
+
+
long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
- struct inode *inode = filp->f_dentry->d_inode;
-@@ -53,6 +81,11 @@ long ext4_ioctl(struct file *filp, unsig
+ struct inode *inode = file_inode(filp);
+@@ -247,6 +275,11 @@ long ext4_ioctl(struct file *filp, unsig
flags = ext4_mask_flags(inode->i_mode, flags);
err = -EPERM;
mutex_lock(&inode->i_mutex);
/* Is it quota file? Do not allow user to mess with it */
-@@ -70,7 +103,9 @@ long ext4_ioctl(struct file *filp, unsig
+@@ -264,7 +297,9 @@ long ext4_ioctl(struct file *filp, unsig
*
* This test looks nicer. Thanks to Pauline Middelink
*/
if (!capable(CAP_LINUX_IMMUTABLE))
goto flags_out;
}
-diff -NurpP --minimal linux-3.7/fs/ext4/namei.c linux-3.7-vs2.3.5.1/fs/ext4/namei.c
---- linux-3.7/fs/ext4/namei.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext4/namei.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ext4/namei.c linux-3.10.15-vs2.3.6.6/fs/ext4/namei.c
+--- linux-3.10.15/fs/ext4/namei.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext4/namei.c 2013-08-22 20:29:59.000000000 +0000
@@ -34,6 +34,7 @@
#include <linux/quotaops.h>
#include <linux/buffer_head.h>
#include "ext4.h"
#include "ext4_jbd2.h"
-@@ -1232,6 +1233,7 @@ restart:
+@@ -1299,6 +1300,7 @@ restart:
ll_rw_block(READ | REQ_META | REQ_PRIO,
1, &bh);
}
}
if ((bh = bh_use[ra_ptr++]) == NULL)
goto next;
-@@ -3051,6 +3053,7 @@ const struct inode_operations ext4_dir_i
- #endif
+@@ -3177,6 +3179,7 @@ const struct inode_operations ext4_dir_i
+ .removexattr = generic_removexattr,
.get_acl = ext4_get_acl,
.fiemap = ext4_fiemap,
+ .sync_flags = ext4_sync_flags,
};
const struct inode_operations ext4_special_inode_operations = {
-diff -NurpP --minimal linux-3.7/fs/ext4/super.c linux-3.7-vs2.3.5.1/fs/ext4/super.c
---- linux-3.7/fs/ext4/super.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ext4/super.c 2012-12-11 19:16:16.000000000 +0000
-@@ -1222,7 +1222,7 @@ enum {
+diff -NurpP --minimal linux-3.10.15/fs/ext4/super.c linux-3.10.15-vs2.3.6.6/fs/ext4/super.c
+--- linux-3.10.15/fs/ext4/super.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ext4/super.c 2013-08-22 20:29:59.000000000 +0000
+@@ -1129,7 +1129,7 @@ enum {
Opt_inode_readahead_blks, Opt_journal_ioprio,
Opt_dioread_nolock, Opt_dioread_lock,
Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
};
static const match_table_t tokens = {
-@@ -1302,6 +1302,9 @@ static const match_table_t tokens = {
+@@ -1209,6 +1209,9 @@ static const match_table_t tokens = {
{Opt_removed, "reservation"}, /* mount option from ext2/3 */
{Opt_removed, "noreservation"}, /* mount option from ext2/3 */
{Opt_removed, "journal=%u"}, /* mount option from ext2/3 */
{Opt_err, NULL},
};
-@@ -1549,6 +1552,20 @@ static int handle_mount_opt(struct super
- return -1;
- *journal_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, arg);
+@@ -1439,6 +1442,20 @@ static int handle_mount_opt(struct super
+ case Opt_i_version:
+ sb->s_flags |= MS_I_VERSION;
return 1;
+#ifndef CONFIG_TAGGING_NONE
+ case Opt_tag:
+#endif
}
- for (m = ext4_mount_opts; m->token != Opt_err; m++) {
-@@ -3455,6 +3472,9 @@ static int ext4_fill_super(struct super_
- }
+ for (m = ext4_mount_opts; m->token != Opt_err; m++)
+@@ -3452,6 +3469,9 @@ static int ext4_fill_super(struct super_
+ clear_opt(sb, DELALLOC);
}
+ if (EXT4_SB(sb)->s_mount_opt & EXT4_MOUNT_TAGGED)
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
(test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0);
-@@ -4618,6 +4638,14 @@ static int ext4_remount(struct super_blo
+@@ -4664,6 +4684,14 @@ static int ext4_remount(struct super_blo
if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED)
ext4_abort(sb, "Abort forced by user");
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
(test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0);
-diff -NurpP --minimal linux-3.7/fs/fcntl.c linux-3.7-vs2.3.5.1/fs/fcntl.c
---- linux-3.7/fs/fcntl.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/fcntl.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/fcntl.c linux-3.10.15-vs2.3.6.6/fs/fcntl.c
+--- linux-3.10.15/fs/fcntl.c 2013-05-31 13:45:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/fcntl.c 2013-08-22 20:29:59.000000000 +0000
@@ -21,6 +21,7 @@
#include <linux/rcupdate.h>
#include <linux/pid_namespace.h>
if (unlikely(f.file->f_mode & FMODE_PATH)) {
if (!check_fcntl_cmd(cmd))
-diff -NurpP --minimal linux-3.7/fs/file.c linux-3.7-vs2.3.5.1/fs/file.c
---- linux-3.7/fs/file.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/file.c 2012-12-11 21:51:51.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/file.c linux-3.10.15-vs2.3.6.6/fs/file.c
+--- linux-3.10.15/fs/file.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/file.c 2013-08-22 20:29:59.000000000 +0000
@@ -22,6 +22,7 @@
#include <linux/spinlock.h>
#include <linux/rcupdate.h>
#include <linux/workqueue.h>
+#include <linux/vs_limit.h>
- struct fdtable_defer {
- spinlock_t lock;
-@@ -364,6 +365,8 @@ struct files_struct *dup_fd(struct files
+ int sysctl_nr_open __read_mostly = 1024*1024;
+ int sysctl_nr_open_min = BITS_PER_LONG;
+@@ -311,6 +312,8 @@ struct files_struct *dup_fd(struct files
struct file *f = *old_fds++;
if (f) {
get_file(f);
} else {
/*
* The fd may be claimed in the fd bitmap but not yet
-@@ -429,9 +432,11 @@ static void close_files(struct files_str
+@@ -376,9 +379,11 @@ static void close_files(struct files_str
filp_close(file, files);
cond_resched();
}
}
}
}
-@@ -573,6 +578,7 @@ repeat:
+@@ -503,6 +508,7 @@ repeat:
else
__clear_close_on_exec(fd, fdt);
error = fd;
#if 1
/* Sanity check */
if (rcu_dereference_raw(fdt->fd[fd]) != NULL) {
-@@ -603,6 +609,7 @@ static void __put_unused_fd(struct files
+@@ -533,6 +539,7 @@ static void __put_unused_fd(struct files
__clear_open_fd(fd, fdt);
if (fd < files->next_fd)
files->next_fd = fd;
}
void put_unused_fd(unsigned int fd)
-@@ -882,6 +889,8 @@ static int do_dup2(struct files_struct *
+@@ -812,6 +819,8 @@ static int do_dup2(struct files_struct *
if (tofree)
filp_close(tofree, files);
return fd;
-diff -NurpP --minimal linux-3.7/fs/file_table.c linux-3.7-vs2.3.5.1/fs/file_table.c
---- linux-3.7/fs/file_table.c 2012-12-11 15:47:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/file_table.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/file_table.c linux-3.10.15-vs2.3.6.6/fs/file_table.c
+--- linux-3.10.15/fs/file_table.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/file_table.c 2013-08-22 20:29:59.000000000 +0000
@@ -26,6 +26,8 @@
#include <linux/hardirq.h>
#include <linux/task_work.h>
#include <linux/atomic.h>
-@@ -136,6 +138,8 @@ struct file *get_empty_filp(void)
+@@ -140,6 +142,8 @@ struct file *get_empty_filp(void)
spin_lock_init(&f->f_lock);
eventpoll_init_file(f);
/* f->f_version: 0 */
+ file->f_xid = 0;
file->f_path.dentry = NULL;
file->f_path.mnt = NULL;
- file_free(file);
-@@ -343,6 +349,8 @@ void put_filp(struct file *file)
+ file->f_inode = NULL;
+@@ -345,6 +351,8 @@ void put_filp(struct file *file)
{
if (atomic_long_dec_and_test(&file->f_count)) {
security_file_free(file);
file_sb_list_del(file);
file_free(file);
}
-diff -NurpP --minimal linux-3.7/fs/fs_struct.c linux-3.7-vs2.3.5.1/fs/fs_struct.c
---- linux-3.7/fs/fs_struct.c 2012-10-04 13:27:39.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/fs_struct.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/fs_struct.c linux-3.10.15-vs2.3.6.6/fs/fs_struct.c
+--- linux-3.10.15/fs/fs_struct.c 2013-05-31 13:45:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/fs_struct.c 2013-08-22 20:29:59.000000000 +0000
@@ -4,6 +4,7 @@
#include <linux/path.h>
#include <linux/slab.h>
}
return fs;
}
-diff -NurpP --minimal linux-3.7/fs/gfs2/file.c linux-3.7-vs2.3.5.1/fs/gfs2/file.c
---- linux-3.7/fs/gfs2/file.c 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/gfs2/file.c 2012-12-11 15:56:32.000000000 +0000
-@@ -143,6 +143,9 @@ static const u32 fsflags_to_gfs2[32] = {
+diff -NurpP --minimal linux-3.10.15/fs/gfs2/file.c linux-3.10.15-vs2.3.6.6/fs/gfs2/file.c
+--- linux-3.10.15/fs/gfs2/file.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/gfs2/file.c 2013-08-22 20:29:59.000000000 +0000
+@@ -144,6 +144,9 @@ static const u32 fsflags_to_gfs2[32] = {
[12] = GFS2_DIF_EXHASH,
[14] = GFS2_DIF_INHERIT_JDATA,
[17] = GFS2_DIF_TOPDIR,
};
static const u32 gfs2_to_fsflags[32] = {
-@@ -153,6 +156,9 @@ static const u32 gfs2_to_fsflags[32] = {
+@@ -154,6 +157,9 @@ static const u32 gfs2_to_fsflags[32] = {
[gfs2fl_ExHash] = FS_INDEX_FL,
[gfs2fl_TopLevel] = FS_TOPDIR_FL,
[gfs2fl_InheritJdata] = FS_JOURNAL_DATA_FL,
};
static int gfs2_get_flags(struct file *filp, u32 __user *ptr)
-@@ -183,12 +189,18 @@ void gfs2_set_inode_flags(struct inode *
+@@ -184,12 +190,18 @@ void gfs2_set_inode_flags(struct inode *
{
struct gfs2_inode *ip = GFS2_I(inode);
unsigned int flags = inode->i_flags;
if (ip->i_diskflags & GFS2_DIF_APPENDONLY)
flags |= S_APPEND;
if (ip->i_diskflags & GFS2_DIF_NOATIME)
-@@ -196,6 +208,43 @@ void gfs2_set_inode_flags(struct inode *
+@@ -197,6 +209,43 @@ void gfs2_set_inode_flags(struct inode *
if (ip->i_diskflags & GFS2_DIF_SYNC)
flags |= S_SYNC;
inode->i_flags = flags;
}
/* Flags that can be set by user space */
-@@ -309,6 +358,37 @@ static int gfs2_set_flags(struct file *f
+@@ -310,6 +359,37 @@ static int gfs2_set_flags(struct file *f
return do_gfs2_set_flags(filp, gfsflags, ~GFS2_DIF_JDATA);
}
+ error = gfs2_meta_inode_buffer(ip, &bh);
+ if (error)
+ goto out_trans_end;
-+ gfs2_trans_add_bh(ip->i_gl, bh, 1);
++ gfs2_trans_add_meta(ip->i_gl, bh);
+ inode->i_flags = flags;
+ inode->i_vflags = vflags;
+ gfs2_get_inode_flags(inode);
static long gfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
switch(cmd) {
-diff -NurpP --minimal linux-3.7/fs/gfs2/inode.h linux-3.7-vs2.3.5.1/fs/gfs2/inode.h
---- linux-3.7/fs/gfs2/inode.h 2012-07-22 21:39:40.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/gfs2/inode.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/gfs2/inode.h linux-3.10.15-vs2.3.6.6/fs/gfs2/inode.h
+--- linux-3.10.15/fs/gfs2/inode.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/gfs2/inode.h 2013-08-22 20:29:59.000000000 +0000
@@ -117,6 +117,7 @@ extern const struct file_operations gfs2
extern const struct file_operations gfs2_dir_fops_nolock;
#ifdef CONFIG_GFS2_FS_LOCKING_DLM
extern const struct file_operations gfs2_file_fops;
-diff -NurpP --minimal linux-3.7/fs/hostfs/hostfs.h linux-3.7-vs2.3.5.1/fs/hostfs/hostfs.h
---- linux-3.7/fs/hostfs/hostfs.h 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/hostfs/hostfs.h 2012-12-11 16:35:58.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/hostfs/hostfs.h linux-3.10.15-vs2.3.6.6/fs/hostfs/hostfs.h
+--- linux-3.10.15/fs/hostfs/hostfs.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/hostfs/hostfs.h 2013-08-22 20:29:59.000000000 +0000
@@ -42,6 +42,7 @@ struct hostfs_iattr {
unsigned short ia_mode;
uid_t ia_uid;
gid_t ia_gid;
-+ tag_t ia_tag;
++ vtag_t ia_tag;
loff_t ia_size;
struct timespec ia_atime;
struct timespec ia_mtime;
-diff -NurpP --minimal linux-3.7/fs/inode.c linux-3.7-vs2.3.5.1/fs/inode.c
---- linux-3.7/fs/inode.c 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/inode.c 2012-12-11 19:26:31.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/inode.c linux-3.10.15-vs2.3.6.6/fs/inode.c
+--- linux-3.10.15/fs/inode.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/inode.c 2013-08-22 20:29:59.000000000 +0000
@@ -17,6 +17,7 @@
#include <linux/prefetch.h>
#include <linux/buffer_head.h> /* for inode_has_buffers */
/**
* __remove_inode_hash - remove an inode from the hash
* @inode: inode to unhash
-@@ -1804,9 +1811,11 @@ void init_special_inode(struct inode *in
+@@ -1799,9 +1806,11 @@ void init_special_inode(struct inode *in
if (S_ISCHR(mode)) {
inode->i_fop = &def_chr_fops;
inode->i_rdev = rdev;
inode->i_rdev = rdev;
+ inode->i_mdev = rdev;
} else if (S_ISFIFO(mode))
- inode->i_fop = &def_fifo_fops;
+ inode->i_fop = &pipefifo_fops;
else if (S_ISSOCK(mode))
-@@ -1835,6 +1844,7 @@ void inode_init_owner(struct inode *inod
+@@ -1830,6 +1839,7 @@ void inode_init_owner(struct inode *inod
} else
inode->i_gid = current_fsgid();
inode->i_mode = mode;
-+ inode->i_tag = dx_current_fstag(inode->i_sb);
++ i_tag_write(inode, dx_current_fstag(inode->i_sb));
}
EXPORT_SYMBOL(inode_init_owner);
-diff -NurpP --minimal linux-3.7/fs/ioctl.c linux-3.7-vs2.3.5.1/fs/ioctl.c
---- linux-3.7/fs/ioctl.c 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ioctl.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ioctl.c linux-3.10.15-vs2.3.6.6/fs/ioctl.c
+--- linux-3.10.15/fs/ioctl.c 2013-05-31 13:45:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ioctl.c 2013-08-22 20:29:59.000000000 +0000
@@ -15,6 +15,9 @@
#include <linux/writeback.h>
#include <linux/buffer_head.h>
#include <asm/ioctls.h>
-diff -NurpP --minimal linux-3.7/fs/ioprio.c linux-3.7-vs2.3.5.1/fs/ioprio.c
---- linux-3.7/fs/ioprio.c 2012-07-22 21:39:40.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ioprio.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ioprio.c linux-3.10.15-vs2.3.6.6/fs/ioprio.c
+--- linux-3.10.15/fs/ioprio.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ioprio.c 2013-08-22 20:29:59.000000000 +0000
@@ -28,6 +28,7 @@
#include <linux/syscalls.h>
#include <linux/security.h>
tmpio = get_task_ioprio(p);
if (tmpio < 0)
continue;
-diff -NurpP --minimal linux-3.7/fs/jfs/file.c linux-3.7-vs2.3.5.1/fs/jfs/file.c
---- linux-3.7/fs/jfs/file.c 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/jfs/file.c 2012-12-11 17:20:13.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/jfs/file.c linux-3.10.15-vs2.3.6.6/fs/jfs/file.c
+--- linux-3.10.15/fs/jfs/file.c 2013-02-19 13:58:48.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/jfs/file.c 2013-08-22 20:29:59.000000000 +0000
@@ -109,7 +109,8 @@ int jfs_setattr(struct dentry *dentry, s
if (is_quota_modification(inode, iattr))
dquot_initialize(inode);
rc = dquot_transfer(inode, iattr);
if (rc)
return rc;
-@@ -142,6 +143,7 @@ const struct inode_operations jfs_file_i
+@@ -144,6 +145,7 @@ const struct inode_operations jfs_file_i
#ifdef CONFIG_JFS_POSIX_ACL
.get_acl = jfs_get_acl,
#endif
};
const struct file_operations jfs_file_operations = {
-diff -NurpP --minimal linux-3.7/fs/jfs/ioctl.c linux-3.7-vs2.3.5.1/fs/jfs/ioctl.c
---- linux-3.7/fs/jfs/ioctl.c 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/jfs/ioctl.c 2012-12-11 17:34:44.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/jfs/ioctl.c linux-3.10.15-vs2.3.6.6/fs/jfs/ioctl.c
+--- linux-3.10.15/fs/jfs/ioctl.c 2013-05-31 13:45:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/jfs/ioctl.c 2013-08-22 20:29:59.000000000 +0000
@@ -12,6 +12,7 @@
#include <linux/time.h>
#include <linux/sched.h>
+
long jfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
- struct inode *inode = filp->f_dentry->d_inode;
+ struct inode *inode = file_inode(filp);
@@ -89,6 +100,11 @@ long jfs_ioctl(struct file *filp, unsign
if (!S_ISDIR(inode->i_mode))
flags &= ~JFS_DIRSYNC_FL;
flags |= oldflags & ~JFS_FL_USER_MODIFIABLE;
jfs_inode->mode2 = flags;
-diff -NurpP --minimal linux-3.7/fs/jfs/jfs_dinode.h linux-3.7-vs2.3.5.1/fs/jfs/jfs_dinode.h
---- linux-3.7/fs/jfs/jfs_dinode.h 2008-12-24 23:26:37.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/jfs/jfs_dinode.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/jfs/jfs_dinode.h linux-3.10.15-vs2.3.6.6/fs/jfs/jfs_dinode.h
+--- linux-3.10.15/fs/jfs/jfs_dinode.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/jfs/jfs_dinode.h 2013-08-22 20:29:59.000000000 +0000
@@ -161,9 +161,13 @@ struct dinode {
#define JFS_APPEND_FL 0x01000000 /* writes to file may only append */
#define JFS_FL_INHERIT 0x03C80000
/* These are identical to EXT[23]_IOC_GETFLAGS/SETFLAGS */
-diff -NurpP --minimal linux-3.7/fs/jfs/jfs_filsys.h linux-3.7-vs2.3.5.1/fs/jfs/jfs_filsys.h
---- linux-3.7/fs/jfs/jfs_filsys.h 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/jfs/jfs_filsys.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/jfs/jfs_filsys.h linux-3.10.15-vs2.3.6.6/fs/jfs/jfs_filsys.h
+--- linux-3.10.15/fs/jfs/jfs_filsys.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/jfs/jfs_filsys.h 2013-08-22 20:29:59.000000000 +0000
@@ -266,6 +266,7 @@
#define JFS_NAME_MAX 255
#define JFS_PATH_MAX BPSIZE
/*
* file system state (superblock state)
-diff -NurpP --minimal linux-3.7/fs/jfs/jfs_imap.c linux-3.7-vs2.3.5.1/fs/jfs/jfs_imap.c
---- linux-3.7/fs/jfs/jfs_imap.c 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/jfs/jfs_imap.c 2012-12-11 22:02:05.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/jfs/jfs_imap.c linux-3.10.15-vs2.3.6.6/fs/jfs/jfs_imap.c
+--- linux-3.10.15/fs/jfs/jfs_imap.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/jfs/jfs_imap.c 2013-08-22 20:29:59.000000000 +0000
@@ -46,6 +46,7 @@
#include <linux/pagemap.h>
#include <linux/quotaops.h>
{
struct jfs_inode_info *jfs_ip = JFS_IP(ip);
struct jfs_sb_info *sbi = JFS_SBI(ip->i_sb);
-+ kuid_t uid;
-+ kgid_t gid;
++ kuid_t kuid;
++ kgid_t kgid;
jfs_ip->fileset = le32_to_cpu(dip->di_fileset);
jfs_ip->mode2 = le32_to_cpu(dip->di_mode);
-@@ -3078,14 +3081,19 @@ static int copy_from_dinode(struct dinod
+@@ -3078,14 +3081,18 @@ static int copy_from_dinode(struct dinod
}
set_nlink(ip, le32_to_cpu(dip->di_nlink));
- jfs_ip->saved_uid = make_kuid(&init_user_ns, le32_to_cpu(dip->di_uid));
-+ uid = make_kuid(&init_user_ns, le32_to_cpu(dip->di_uid));
-+ gid = make_kgid(&init_user_ns, le32_to_cpu(dip->di_gid));
-+ ip->i_tag = make_ktag(&init_user_ns,
-+ INOTAG_TAG(DX_TAG(ip), uid, gid, 0));
++ kuid = make_kuid(&init_user_ns, le32_to_cpu(dip->di_uid));
++ kgid = make_kgid(&init_user_ns, le32_to_cpu(dip->di_gid));
++ ip->i_tag = INOTAG_KTAG(DX_TAG(ip), kuid, kgid, GLOBAL_ROOT_TAG);
+
-+ jfs_ip->saved_uid = INOTAG_UID(DX_TAG(ip), uid, gid);
++ jfs_ip->saved_uid = INOTAG_KUID(DX_TAG(ip), kuid, kgid);
if (!uid_valid(sbi->uid))
ip->i_uid = jfs_ip->saved_uid;
else {
}
- jfs_ip->saved_gid = make_kgid(&init_user_ns, le32_to_cpu(dip->di_gid));
-+ jfs_ip->saved_gid = INOTAG_GID(DX_TAG(ip), uid, gid);
++ jfs_ip->saved_gid = INOTAG_KGID(DX_TAG(ip), kuid, kgid);
if (!gid_valid(sbi->gid))
ip->i_gid = jfs_ip->saved_gid;
else {
-@@ -3150,16 +3158,14 @@ static void copy_to_dinode(struct dinode
+@@ -3150,16 +3157,14 @@ static void copy_to_dinode(struct dinode
dip->di_size = cpu_to_le64(ip->i_size);
dip->di_nblocks = cpu_to_le64(PBLK2LBLK(ip->i_sb, ip->i_blocks));
dip->di_nlink = cpu_to_le32(ip->i_nlink);
- dip->di_gid = cpu_to_le32(from_kgid(&init_user_ns,
- jfs_ip->saved_gid));
+ dip->di_uid = cpu_to_le32(from_kuid(&init_user_ns,
-+ TAGINO_UID(DX_TAG(ip),
++ TAGINO_KUID(DX_TAG(ip),
+ !uid_valid(sbi->uid) ? ip->i_uid : jfs_ip->saved_uid,
+ ip->i_tag)));
-+ dip->di_gid = cpu_to_le32(from_kuid(&init_user_ns,
-+ TAGINO_GID(DX_TAG(ip),
++ dip->di_gid = cpu_to_le32(from_kgid(&init_user_ns,
++ TAGINO_KGID(DX_TAG(ip),
+ !gid_valid(sbi->gid) ? ip->i_gid : jfs_ip->saved_gid,
+ ip->i_tag)));
jfs_get_inode_flags(jfs_ip);
/*
* mode2 is only needed for storing the higher order bits.
-diff -NurpP --minimal linux-3.7/fs/jfs/jfs_inode.c linux-3.7-vs2.3.5.1/fs/jfs/jfs_inode.c
---- linux-3.7/fs/jfs/jfs_inode.c 2012-01-09 15:14:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/jfs/jfs_inode.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/jfs/jfs_inode.c linux-3.10.15-vs2.3.6.6/fs/jfs/jfs_inode.c
+--- linux-3.10.15/fs/jfs/jfs_inode.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/jfs/jfs_inode.c 2013-08-22 20:29:59.000000000 +0000
@@ -18,6 +18,7 @@
#include <linux/fs.h>
}
/*
-diff -NurpP --minimal linux-3.7/fs/jfs/jfs_inode.h linux-3.7-vs2.3.5.1/fs/jfs/jfs_inode.h
---- linux-3.7/fs/jfs/jfs_inode.h 2011-10-24 16:45:27.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/jfs/jfs_inode.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/jfs/jfs_inode.h linux-3.10.15-vs2.3.6.6/fs/jfs/jfs_inode.h
+--- linux-3.10.15/fs/jfs/jfs_inode.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/jfs/jfs_inode.h 2013-08-22 20:29:59.000000000 +0000
@@ -39,6 +39,7 @@ extern struct dentry *jfs_fh_to_dentry(s
extern struct dentry *jfs_fh_to_parent(struct super_block *sb, struct fid *fid,
int fh_len, int fh_type);
extern int jfs_get_block(struct inode *, sector_t, struct buffer_head *, int);
extern int jfs_setattr(struct dentry *, struct iattr *);
-diff -NurpP --minimal linux-3.7/fs/jfs/namei.c linux-3.7-vs2.3.5.1/fs/jfs/namei.c
---- linux-3.7/fs/jfs/namei.c 2012-10-04 13:27:40.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/jfs/namei.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/jfs/namei.c linux-3.10.15-vs2.3.6.6/fs/jfs/namei.c
+--- linux-3.10.15/fs/jfs/namei.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/jfs/namei.c 2013-08-22 20:29:59.000000000 +0000
@@ -22,6 +22,7 @@
#include <linux/ctype.h>
#include <linux/quotaops.h>
};
const struct file_operations jfs_dir_operations = {
-diff -NurpP --minimal linux-3.7/fs/jfs/super.c linux-3.7-vs2.3.5.1/fs/jfs/super.c
---- linux-3.7/fs/jfs/super.c 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/jfs/super.c 2012-12-11 17:36:00.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/jfs/super.c linux-3.10.15-vs2.3.6.6/fs/jfs/super.c
+--- linux-3.10.15/fs/jfs/super.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/jfs/super.c 2013-08-22 20:29:59.000000000 +0000
@@ -199,7 +199,8 @@ enum {
Opt_integrity, Opt_nointegrity, Opt_iocharset, Opt_resize,
Opt_resize_nosize, Opt_errors, Opt_ignore, Opt_err, Opt_quota,
if (newLVSize) {
pr_err("resize option for remount only\n");
-diff -NurpP --minimal linux-3.7/fs/libfs.c linux-3.7-vs2.3.5.1/fs/libfs.c
---- linux-3.7/fs/libfs.c 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/libfs.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/libfs.c linux-3.10.15-vs2.3.6.6/fs/libfs.c
+--- linux-3.10.15/fs/libfs.c 2013-02-19 13:58:48.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/libfs.c 2013-08-22 20:29:59.000000000 +0000
@@ -135,7 +135,8 @@ static inline unsigned char dt_type(stru
* both impossible due to the lock on directory.
*/
ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
{
return -EISDIR;
-@@ -983,6 +997,7 @@ EXPORT_SYMBOL(dcache_dir_close);
+@@ -981,6 +995,7 @@ EXPORT_SYMBOL(dcache_dir_close);
EXPORT_SYMBOL(dcache_dir_lseek);
EXPORT_SYMBOL(dcache_dir_open);
EXPORT_SYMBOL(dcache_readdir);
EXPORT_SYMBOL(generic_read_dir);
EXPORT_SYMBOL(mount_pseudo);
EXPORT_SYMBOL(simple_write_begin);
-diff -NurpP --minimal linux-3.7/fs/locks.c linux-3.7-vs2.3.5.1/fs/locks.c
---- linux-3.7/fs/locks.c 2012-12-11 15:47:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/locks.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/locks.c linux-3.10.15-vs2.3.6.6/fs/locks.c
+--- linux-3.10.15/fs/locks.c 2013-05-31 13:45:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/locks.c 2013-08-22 20:29:59.000000000 +0000
@@ -126,6 +126,8 @@
#include <linux/time.h>
#include <linux/rcupdate.h>
-static int __posix_lock_file(struct inode *inode, struct file_lock *request, struct file_lock *conflock)
+static int __posix_lock_file(struct inode *inode, struct file_lock *request,
-+ struct file_lock *conflock, xid_t xid)
++ struct file_lock *conflock, vxid_t xid)
{
struct file_lock *fl;
struct file_lock *new_fl = NULL;
int posix_lock_file(struct file *filp, struct file_lock *fl,
struct file_lock *conflock)
{
-- return __posix_lock_file(filp->f_path.dentry->d_inode, fl, conflock);
-+ return __posix_lock_file(filp->f_path.dentry->d_inode,
+- return __posix_lock_file(file_inode(filp), fl, conflock);
++ return __posix_lock_file(file_inode(filp),
+ fl, conflock, filp->f_xid);
}
EXPORT_SYMBOL(posix_lock_file);
return 0;
}
-diff -NurpP --minimal linux-3.7/fs/mount.h linux-3.7-vs2.3.5.1/fs/mount.h
---- linux-3.7/fs/mount.h 2012-10-04 13:27:40.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/mount.h 2012-12-11 15:56:32.000000000 +0000
-@@ -46,6 +46,7 @@ struct mount {
+diff -NurpP --minimal linux-3.10.15/fs/mount.h linux-3.10.15-vs2.3.6.6/fs/mount.h
+--- linux-3.10.15/fs/mount.h 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/mount.h 2013-08-22 20:29:59.000000000 +0000
+@@ -56,6 +56,7 @@ struct mount {
int mnt_expiry_mark; /* true if marked for expiry */
int mnt_pinned;
int mnt_ghosts;
-+ tag_t mnt_tag; /* tagging used for vfsmount */
++ vtag_t mnt_tag; /* tagging used for vfsmount */
};
#define MNT_NS_INTERNAL ERR_PTR(-EINVAL) /* distinct from any mnt_namespace */
-diff -NurpP --minimal linux-3.7/fs/namei.c linux-3.7-vs2.3.5.1/fs/namei.c
---- linux-3.7/fs/namei.c 2012-12-11 15:47:35.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/namei.c 2012-12-11 21:44:51.000000000 +0000
-@@ -34,6 +34,14 @@
+diff -NurpP --minimal linux-3.10.15/fs/namei.c linux-3.10.15-vs2.3.6.6/fs/namei.c
+--- linux-3.10.15/fs/namei.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/namei.c 2013-08-22 23:36:09.000000000 +0000
+@@ -34,9 +34,19 @@
#include <linux/device_cgroup.h>
#include <linux/fs_struct.h>
#include <linux/posix_acl.h>
+#include <linux/proc_fs.h>
++#include <linux/magic.h>
+#include <linux/vserver/inode.h>
+#include <linux/vs_base.h>
+#include <linux/vs_tag.h>
#include <asm/uaccess.h>
#include "internal.h"
-@@ -266,6 +274,89 @@ static int check_acl(struct inode *inode
++#include "proc/internal.h"
+ #include "mount.h"
+
+ /* [Feb-1997 T. Schoebel-Theuer]
+@@ -266,6 +276,89 @@ static int check_acl(struct inode *inode
return -EAGAIN;
}
+ if (inode->i_sb->s_magic == DEVPTS_SUPER_MAGIC) {
+ /* devpts is xid tagged */
+ if (S_ISDIR(inode->i_mode) ||
-+ vx_check((xid_t)i_tag_read(inode), VS_IDENT | VS_WATCH_P))
++ vx_check((vxid_t)i_tag_read(inode), VS_IDENT | VS_WATCH_P))
+ return 0;
+
+ /* just pretend we didn't find anything */
+ }
+ else {
+ if (dx_notagcheck(inode->i_sb) ||
-+ dx_check((xid_t)i_tag_read(inode),
++ dx_check((vxid_t)i_tag_read(inode),
+ DX_HOSTID | DX_ADMIN | DX_WATCH | DX_IDENT))
+ return 0;
+ }
+#endif
+ vxwprintk_task(1,
+ "denied [0x%x] access to inode %s:%p[#%d,%lu]",
-+ mask, inode->i_sb->s_id, inode, inode->i_tag,
-+ inode->i_ino);
++ mask, inode->i_sb->s_id, inode,
++ i_tag_read(inode), inode->i_ino);
+ }
+ return ret;
+}
/*
* This does the basic permission checking
*/
-@@ -388,10 +479,14 @@ int __inode_permission(struct inode *ino
+@@ -388,10 +481,14 @@ int __inode_permission(struct inode *ino
/*
* Nobody gets write access to an immutable file.
*/
retval = do_inode_permission(inode, mask);
if (retval)
return retval;
-@@ -1244,7 +1339,8 @@ static void follow_dotdot(struct nameida
+@@ -1238,7 +1335,8 @@ static void follow_dotdot(struct nameida
if (nd->path.dentry == nd->root.dentry &&
nd->path.mnt == nd->root.mnt) {
}
if (nd->path.dentry != nd->path.mnt->mnt_root) {
/* rare case of legitimate dget_parent()... */
-@@ -1393,6 +1489,9 @@ static int lookup_fast(struct nameidata
+@@ -1383,6 +1481,9 @@ static int lookup_fast(struct nameidata
goto unlazy;
}
}
path->mnt = mnt;
path->dentry = dentry;
if (unlikely(!__follow_mount_rcu(nd, path, inode)))
-@@ -1428,6 +1527,8 @@ unlazy:
+@@ -1413,6 +1514,8 @@ unlazy:
}
}
path->mnt = mnt;
path->dentry = dentry;
err = follow_managed(path, nd->flags);
-@@ -2258,7 +2359,7 @@ static int may_delete(struct inode *dir,
+@@ -2237,7 +2340,7 @@ static int may_delete(struct inode *dir,
if (IS_APPEND(dir))
return -EPERM;
if (check_sticky(dir, victim->d_inode)||IS_APPEND(victim->d_inode)||
return -EPERM;
if (isdir) {
if (!S_ISDIR(victim->d_inode->i_mode))
-@@ -2337,19 +2438,25 @@ int vfs_create(struct inode *dir, struct
+@@ -2316,19 +2419,25 @@ int vfs_create(struct inode *dir, struct
bool want_excl)
{
int error = may_create(dir, dentry);
return error;
}
-@@ -2384,6 +2491,15 @@ static int may_open(struct path *path, i
+@@ -2363,6 +2472,15 @@ static int may_open(struct path *path, i
break;
}
error = inode_permission(inode, acc_mode);
if (error)
return error;
-@@ -2886,6 +3002,16 @@ finish_open:
+@@ -2865,6 +2983,16 @@ finish_open:
}
finish_open_created:
error = may_open(&nd->path, acc_mode, open_flag);
if (error)
goto out;
file->f_path.mnt = nd->path.mnt;
-@@ -2950,6 +3076,7 @@ static struct file *path_openat(int dfd,
+@@ -2929,6 +3057,7 @@ static struct file *path_openat(int dfd,
int opened = 0;
int error;
+restart:
file = get_empty_filp();
- if (!file)
- return ERR_PTR(-ENFILE);
-@@ -2986,6 +3113,16 @@ static struct file *path_openat(int dfd,
+ if (IS_ERR(file))
+ return file;
+@@ -2965,6 +3094,16 @@ static struct file *path_openat(int dfd,
error = do_last(nd, &path, file, op, &opened, pathname);
put_link(nd, &link, cookie);
}
out:
if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT))
path_put(&nd->root);
-@@ -3090,6 +3227,11 @@ struct dentry *kern_path_create(int dfd,
+@@ -3079,6 +3218,11 @@ struct dentry *kern_path_create(int dfd,
goto fail;
}
*path = nd.path;
return dentry;
fail:
dput(dentry);
-@@ -3556,7 +3698,7 @@ int vfs_link(struct dentry *old_dentry,
+@@ -3573,7 +3717,7 @@ int vfs_link(struct dentry *old_dentry,
/*
* A link to an append-only or immutable file cannot be created.
*/
return -EPERM;
if (!dir->i_op->link)
return -EPERM;
-@@ -3945,6 +4087,275 @@ int vfs_follow_link(struct nameidata *nd
+@@ -3976,6 +4120,287 @@ int vfs_follow_link(struct nameidata *nd
return __vfs_follow_link(nd, link);
}
+long do_cow_splice(struct file *in, struct file *out, size_t len)
+{
+ loff_t ppos = 0;
++ loff_t opos = 0;
+
-+ return do_splice_direct(in, &ppos, out, len, 0);
++ return do_splice_direct(in, &ppos, out, &opos, len, 0);
+}
+
+struct dentry *cow_break_link(const char *pathname)
+{
-+ int ret, mode, pathlen, redo = 0;
++ int ret, mode, pathlen, redo = 0, drop = 1;
+ struct nameidata old_nd, dir_nd;
+ struct path dir_path, *old_path, *new_path;
+ struct dentry *dir, *old_dentry, *new_dentry = NULL;
+
+ /* this puppy downs the dir inode mutex if successful.
+ dir_path will hold refs to dentry and mnt and
-+ we'll have get write access to the mnt */
++ we'll have write access to the mnt */
+ new_dentry = kern_path_create(AT_FDCWD, to, &dir_path, 0);
+ if (!new_dentry || IS_ERR(new_dentry)) {
+ path_put(&dir_nd.path);
+ vxdprintk(VXD_CBIT(misc, 2),
+ "vfs_create(new): %d", ret);
+ if (ret == -EEXIST) {
-+ mutex_unlock(&dir->d_inode->i_mutex);
+ path_put(&dir_nd.path);
++ mutex_unlock(&dir->d_inode->i_mutex);
+ mnt_drop_write(new_path->mnt);
+ path_put(new_path);
+ new_dentry = NULL;
+ goto out_fput_old;
+ }
+
++ /* unlock the inode mutex from kern_path_create() */
++ mutex_unlock(&dir->d_inode->i_mutex);
++
++ /* drop write access to mnt */
++ mnt_drop_write(new_path->mnt);
++
++ drop = 0;
++
+ size = i_size_read(old_file->f_dentry->d_inode);
+ ret = do_cow_splice(old_file, new_file, size);
+ vxdprintk(VXD_CBIT(misc, 2), "do_splice_direct: %d", ret);
+ /* drop references from dir_nd.path */
+ path_put(&dir_nd.path);
+
-+ /* drop write access to mnt */
-+ mnt_drop_write(new_path->mnt);
++ if (drop) {
++ /* unlock the inode mutex from kern_path_create() */
++ mutex_unlock(&dir->d_inode->i_mutex);
++
++ /* drop write access to mnt */
++ mnt_drop_write(new_path->mnt);
++ }
+
-+ /* unlock the inode mutex from kern_path_create() */
-+ mutex_unlock(&dir->d_inode->i_mutex);
+ if (!ret)
+ goto out_redo;
+
/* get the link contents into pagecache */
static char *page_getlink(struct dentry * dentry, struct page **ppage)
{
-@@ -4068,3 +4479,4 @@ EXPORT_SYMBOL(vfs_symlink);
+@@ -4099,3 +4524,4 @@ EXPORT_SYMBOL(vfs_symlink);
EXPORT_SYMBOL(vfs_unlink);
EXPORT_SYMBOL(dentry_unhash);
EXPORT_SYMBOL(generic_readlink);
+EXPORT_SYMBOL(vx_info_mnt_namespace);
-diff -NurpP --minimal linux-3.7/fs/namespace.c linux-3.7-vs2.3.5.1/fs/namespace.c
---- linux-3.7/fs/namespace.c 2012-12-11 15:47:35.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/namespace.c 2012-12-11 17:17:30.000000000 +0000
-@@ -20,6 +20,11 @@
- #include <linux/fs_struct.h> /* get_fs_root et.al. */
- #include <linux/fsnotify.h> /* fsnotify_vfsmount_delete */
+diff -NurpP --minimal linux-3.10.15/fs/namespace.c linux-3.10.15-vs2.3.6.6/fs/namespace.c
+--- linux-3.10.15/fs/namespace.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/namespace.c 2013-10-09 17:37:22.000000000 +0000
+@@ -23,6 +23,11 @@
#include <linux/uaccess.h>
+ #include <linux/proc_ns.h>
+ #include <linux/magic.h>
+#include <linux/vs_base.h>
+#include <linux/vs_context.h>
+#include <linux/vs_tag.h>
#include "pnode.h"
#include "internal.h"
-@@ -749,6 +754,10 @@ vfs_kern_mount(struct file_system_type *
+@@ -780,6 +785,10 @@ vfs_kern_mount(struct file_system_type *
if (!type)
return ERR_PTR(-ENODEV);
mnt = alloc_vfsmnt(name);
if (!mnt)
return ERR_PTR(-ENOMEM);
-@@ -801,6 +810,7 @@ static struct mount *clone_mnt(struct mo
+@@ -836,6 +845,7 @@ static struct mount *clone_mnt(struct mo
mnt->mnt.mnt_root = dget(root);
mnt->mnt_mountpoint = mnt->mnt.mnt_root;
mnt->mnt_parent = mnt;
br_write_lock(&vfsmount_lock);
list_add_tail(&mnt->mnt_instance, &sb->s_mounts);
br_write_unlock(&vfsmount_lock);
-@@ -1266,7 +1276,7 @@ SYSCALL_DEFINE2(umount, char __user *, n
- goto dput_and_out;
-
- retval = -EPERM;
-- if (!capable(CAP_SYS_ADMIN))
-+ if (!vx_capable(CAP_SYS_ADMIN, VXC_SECURE_MOUNT))
- goto dput_and_out;
-
- retval = do_umount(mnt, flags);
-@@ -1292,7 +1302,7 @@ SYSCALL_DEFINE1(oldumount, char __user *
-
- static int mount_is_safe(struct path *path)
- {
-- if (capable(CAP_SYS_ADMIN))
-+ if (vx_capable(CAP_SYS_ADMIN, VXC_SECURE_MOUNT))
- return 0;
- return -EPERM;
- #ifdef notyet
-@@ -1610,7 +1620,7 @@ static int do_change_type(struct path *p
- int type;
- int err = 0;
-
-- if (!capable(CAP_SYS_ADMIN))
-+ if (!vx_capable(CAP_SYS_ADMIN, VXC_NAMESPACE))
- return -EPERM;
-
- if (path->dentry != path->mnt->mnt_root)
-@@ -1626,6 +1636,7 @@ static int do_change_type(struct path *p
+@@ -1685,6 +1695,7 @@ static int do_change_type(struct path *p
if (err)
goto out_unlock;
}
br_write_lock(&vfsmount_lock);
for (m = mnt; m; m = (recurse ? next_mnt(m, mnt) : NULL))
-@@ -1641,12 +1652,14 @@ static int do_change_type(struct path *p
+@@ -1700,12 +1711,14 @@ static int do_change_type(struct path *p
* do loopback mount.
*/
static int do_loopback(struct path *path, const char *old_name,
- int recurse)
-+ tag_t tag, unsigned long flags, int mnt_flags)
++ vtag_t tag, unsigned long flags, int mnt_flags)
{
- LIST_HEAD(umount_list);
struct path old_path;
- struct mount *mnt = NULL, *old;
- int err = mount_is_safe(path);
+ struct mount *mnt = NULL, *old, *parent;
+ struct mountpoint *mp;
+ int recurse = flags & MS_REC;
+ int err;
+
- if (err)
- return err;
if (!old_name || !*old_name)
-@@ -1715,13 +1728,13 @@ static int change_mount_flags(struct vfs
+ return -EINVAL;
+ err = kern_path(old_name, LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT, &old_path);
+@@ -1780,7 +1793,7 @@ static int change_mount_flags(struct vfs
* on it - tough luck.
*/
static int do_remount(struct path *path, int flags, int mnt_flags,
- void *data)
-+ void *data, xid_t xid)
++ void *data, vxid_t xid)
{
int err;
struct super_block *sb = path->mnt->mnt_sb;
- struct mount *mnt = real_mount(path->mnt);
-
-- if (!capable(CAP_SYS_ADMIN))
-+ if (!vx_capable(CAP_SYS_ADMIN, VXC_SECURE_REMOUNT))
- return -EPERM;
-
- if (!check_mnt(mnt))
-@@ -1770,7 +1783,7 @@ static int do_move_mount(struct path *pa
- struct mount *p;
- struct mount *old;
- int err = 0;
-- if (!capable(CAP_SYS_ADMIN))
-+ if (!vx_capable(CAP_SYS_ADMIN, VXC_SECURE_MOUNT))
- return -EPERM;
- if (!old_name || !*old_name)
- return -EINVAL;
-@@ -1927,7 +1940,7 @@ static int do_new_mount(struct path *pat
- return -EINVAL;
-
- /* we need capabilities... */
-- if (!capable(CAP_SYS_ADMIN))
-+ if (!vx_capable(CAP_SYS_ADMIN, VXC_SECURE_MOUNT))
- return -EPERM;
-
- mnt = do_kern_mount(type, flags, name, data);
-@@ -2197,6 +2210,7 @@ long do_mount(const char *dev_name, cons
+@@ -2264,6 +2277,7 @@ long do_mount(const char *dev_name, cons
struct path path;
int retval = 0;
int mnt_flags = 0;
-+ tag_t tag = 0;
++ vtag_t tag = 0;
/* Discard magic */
if ((flags & MS_MGC_MSK) == MS_MGC_VAL)
-@@ -2224,6 +2238,12 @@ long do_mount(const char *dev_name, cons
+@@ -2293,6 +2307,12 @@ long do_mount(const char *dev_name, cons
if (!(flags & MS_NOATIME))
mnt_flags |= MNT_RELATIME;
/* Separate the per-mountpoint flags */
if (flags & MS_NOSUID)
mnt_flags |= MNT_NOSUID;
-@@ -2240,15 +2260,17 @@ long do_mount(const char *dev_name, cons
+@@ -2309,15 +2329,17 @@ long do_mount(const char *dev_name, cons
if (flags & MS_RDONLY)
mnt_flags |= MNT_READONLY;
-+ if (!capable(CAP_SYS_ADMIN))
++ if (!vx_capable(CAP_SYS_ADMIN, VXC_DEV_MOUNT))
+ mnt_flags |= MNT_NODEV;
flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE | MS_BORN |
MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
else if (flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE))
retval = do_change_type(&path, flags);
else if (flags & MS_MOVE)
-@@ -2329,6 +2351,7 @@ static struct mnt_namespace *dup_mnt_ns(
+@@ -2426,6 +2448,7 @@ static struct mnt_namespace *dup_mnt_ns(
q = next_mnt(q, new);
}
- up_write(&namespace_sem);
+ namespace_unlock();
+ atomic_inc(&vs_global_mnt_ns);
if (rootmnt)
mntput(rootmnt);
-@@ -2524,9 +2547,10 @@ SYSCALL_DEFINE2(pivot_root, const char _
- error = -EINVAL;
+@@ -2624,9 +2647,10 @@ SYSCALL_DEFINE2(pivot_root, const char _
new_mnt = real_mount(new.mnt);
root_mnt = real_mount(root.mnt);
-- if (IS_MNT_SHARED(real_mount(old.mnt)) ||
-+ if ((IS_MNT_SHARED(real_mount(old.mnt)) ||
+ old_mnt = real_mount(old.mnt);
+- if (IS_MNT_SHARED(old_mnt) ||
++ if ((IS_MNT_SHARED(old_mnt) ||
IS_MNT_SHARED(new_mnt->mnt_parent) ||
- IS_MNT_SHARED(root_mnt->mnt_parent))
+ IS_MNT_SHARED(root_mnt->mnt_parent)) &&
goto out4;
if (!check_mnt(root_mnt) || !check_mnt(new_mnt))
goto out4;
-@@ -2647,6 +2671,7 @@ void put_mnt_ns(struct mnt_namespace *ns
+@@ -2752,6 +2776,7 @@ void put_mnt_ns(struct mnt_namespace *ns
+ umount_tree(ns->root, 0);
br_write_unlock(&vfsmount_lock);
- up_write(&namespace_sem);
- release_mounts(&umount_list);
+ namespace_unlock();
+ atomic_dec(&vs_global_mnt_ns);
- kfree(ns);
+ free_mnt_ns(ns);
}
-diff -NurpP --minimal linux-3.7/fs/nfs/client.c linux-3.7-vs2.3.5.1/fs/nfs/client.c
---- linux-3.7/fs/nfs/client.c 2012-12-11 15:47:35.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/nfs/client.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/nfs/client.c linux-3.10.15-vs2.3.6.6/fs/nfs/client.c
+--- linux-3.10.15/fs/nfs/client.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/nfs/client.c 2013-08-22 20:29:59.000000000 +0000
@@ -684,6 +684,9 @@ int nfs_init_server_rpcclient(struct nfs
if (server->flags & NFS_MOUNT_SOFT)
server->client->cl_softrtry = 1;
server->maxfilesize = fsinfo->maxfilesize;
server->time_delta = fsinfo->time_delta;
-diff -NurpP --minimal linux-3.7/fs/nfs/dir.c linux-3.7-vs2.3.5.1/fs/nfs/dir.c
---- linux-3.7/fs/nfs/dir.c 2012-12-11 15:47:35.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/nfs/dir.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/nfs/dir.c linux-3.10.15-vs2.3.6.6/fs/nfs/dir.c
+--- linux-3.10.15/fs/nfs/dir.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/nfs/dir.c 2013-08-22 20:29:59.000000000 +0000
@@ -36,6 +36,7 @@
#include <linux/sched.h>
#include <linux/kmemleak.h>
#include "delegation.h"
#include "iostat.h"
-@@ -1252,6 +1253,7 @@ struct dentry *nfs_lookup(struct inode *
+@@ -1300,6 +1301,7 @@ struct dentry *nfs_lookup(struct inode *
/* Success: notify readdir to use READDIRPLUS */
nfs_advise_use_readdirplus(dir);
no_entry:
res = d_materialise_unique(dentry, inode);
if (res != NULL) {
-diff -NurpP --minimal linux-3.7/fs/nfs/inode.c linux-3.7-vs2.3.5.1/fs/nfs/inode.c
---- linux-3.7/fs/nfs/inode.c 2012-12-11 15:47:35.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/nfs/inode.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/nfs/inode.c linux-3.10.15-vs2.3.6.6/fs/nfs/inode.c
+--- linux-3.10.15/fs/nfs/inode.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/nfs/inode.c 2013-08-22 20:29:59.000000000 +0000
@@ -39,6 +39,7 @@
#include <linux/compat.h>
#include <linux/freezer.h>
#include <asm/uaccess.h>
-@@ -279,6 +280,8 @@ nfs_fhget(struct super_block *sb, struct
+@@ -290,6 +291,8 @@ nfs_fhget(struct super_block *sb, struct
if (inode->i_state & I_NEW) {
struct nfs_inode *nfsi = NFS_I(inode);
unsigned long now = jiffies;
-+ uid_t uid;
-+ gid_t gid;
++ kuid_t kuid;
++ kgid_t kgid;
/* We set i_ino for the few things that still rely on it,
* such as stat(2) */
-@@ -323,8 +326,8 @@ nfs_fhget(struct super_block *sb, struct
+@@ -334,8 +337,8 @@ nfs_fhget(struct super_block *sb, struct
inode->i_version = 0;
inode->i_size = 0;
clear_nlink(inode);
-- inode->i_uid = -2;
-- inode->i_gid = -2;
-+ uid = -2;
-+ gid = -2;
+- inode->i_uid = make_kuid(&init_user_ns, -2);
+- inode->i_gid = make_kgid(&init_user_ns, -2);
++ kuid = make_kuid(&init_user_ns, -2);
++ kgid = make_kgid(&init_user_ns, -2);
inode->i_blocks = 0;
memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
nfsi->write_io = 0;
-@@ -358,11 +361,11 @@ nfs_fhget(struct super_block *sb, struct
+@@ -369,11 +372,11 @@ nfs_fhget(struct super_block *sb, struct
else if (nfs_server_capable(inode, NFS_CAP_NLINK))
nfsi->cache_validity |= NFS_INO_INVALID_ATTR;
if (fattr->valid & NFS_ATTR_FATTR_OWNER)
- inode->i_uid = fattr->uid;
-+ uid = fattr->uid;
++ kuid = fattr->uid;
else if (nfs_server_capable(inode, NFS_CAP_OWNER))
nfsi->cache_validity |= NFS_INO_INVALID_ATTR;
if (fattr->valid & NFS_ATTR_FATTR_GROUP)
- inode->i_gid = fattr->gid;
-+ gid = fattr->gid;
++ kgid = fattr->gid;
else if (nfs_server_capable(inode, NFS_CAP_OWNER_GROUP))
nfsi->cache_validity |= NFS_INO_INVALID_ATTR;
if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED)
-@@ -373,6 +376,11 @@ nfs_fhget(struct super_block *sb, struct
+@@ -384,6 +387,11 @@ nfs_fhget(struct super_block *sb, struct
*/
inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used);
}
-+ inode->i_uid = INOTAG_UID(DX_TAG(inode), uid, gid);
-+ inode->i_gid = INOTAG_GID(DX_TAG(inode), uid, gid);
-+ inode->i_tag = INOTAG_TAG(DX_TAG(inode), uid, gid, 0);
++ inode->i_uid = INOTAG_KUID(DX_TAG(inode), kuid, kgid);
++ inode->i_gid = INOTAG_KGID(DX_TAG(inode), kuid, kgid);
++ inode->i_tag = INOTAG_KTAG(DX_TAG(inode), kuid, kgid, GLOBAL_ROOT_TAG);
+ /* maybe fattr->xid someday */
+
nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
nfsi->attrtimeo_timestamp = now;
nfsi->access_cache = RB_ROOT;
-@@ -494,6 +502,8 @@ void nfs_setattr_update_inode(struct ino
+@@ -505,6 +513,8 @@ void nfs_setattr_update_inode(struct ino
inode->i_uid = attr->ia_uid;
if ((attr->ia_valid & ATTR_GID) != 0)
inode->i_gid = attr->ia_gid;
NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
spin_unlock(&inode->i_lock);
}
-@@ -968,6 +978,9 @@ static int nfs_check_inode_attributes(st
+@@ -982,7 +992,9 @@ static int nfs_check_inode_attributes(st
struct nfs_inode *nfsi = NFS_I(inode);
loff_t cur_size, new_isize;
unsigned long invalid = 0;
-+ uid_t uid;
-+ gid_t gid;
-+ tag_t tag;
-
+-
++ kuid_t kuid;
++ kgid_t kgid;
++ ktag_t ktag;
if (nfs_have_delegated_attributes(inode))
-@@ -993,13 +1006,18 @@ static int nfs_check_inode_attributes(st
+ return 0;
+@@ -1007,13 +1019,18 @@ static int nfs_check_inode_attributes(st
invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
}
-+ uid = INOTAG_UID(DX_TAG(inode), fattr->uid, fattr->gid);
-+ gid = INOTAG_GID(DX_TAG(inode), fattr->uid, fattr->gid);
-+ tag = INOTAG_TAG(DX_TAG(inode), fattr->uid, fattr->gid, 0);
++ kuid = INOTAG_KUID(DX_TAG(inode), fattr->uid, fattr->gid);
++ kgid = INOTAG_KGID(DX_TAG(inode), fattr->uid, fattr->gid);
++ ktag = INOTAG_KTAG(DX_TAG(inode), fattr->uid, fattr->gid, GLOBAL_ROOT_TAG);
+
/* Have any file permissions changed? */
if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
-- if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && inode->i_uid != fattr->uid)
-+ if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && uid != fattr->uid)
+- if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && !uid_eq(inode->i_uid, fattr->uid))
++ if ((fattr->valid & NFS_ATTR_FATTR_OWNER) && !uid_eq(inode->i_uid, kuid))
invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
-- if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && inode->i_gid != fattr->gid)
-+ if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && gid != fattr->gid)
+- if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && !gid_eq(inode->i_gid, fattr->gid))
++ if ((fattr->valid & NFS_ATTR_FATTR_GROUP) && !gid_eq(inode->i_gid, kgid))
invalid |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS | NFS_INO_INVALID_ACL;
+ /* maybe check for tag too? */
/* Has the link count changed? */
if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
-@@ -1303,6 +1321,9 @@ static int nfs_update_inode(struct inode
+@@ -1319,6 +1336,9 @@ static int nfs_update_inode(struct inode
unsigned long invalid = 0;
unsigned long now = jiffies;
unsigned long save_cache_validity;
-+ uid_t uid;
-+ gid_t gid;
-+ tag_t tag;
++ kuid_t kuid;
++ kgid_t kgid;
++ ktag_t ktag;
dfprintk(VFS, "NFS: %s(%s/%ld fh_crc=0x%08x ct=%d info=0x%x)\n",
__func__, inode->i_sb->s_id, inode->i_ino,
-@@ -1404,6 +1425,9 @@ static int nfs_update_inode(struct inode
+@@ -1420,6 +1440,9 @@ static int nfs_update_inode(struct inode
| NFS_INO_REVAL_PAGECACHE
| NFS_INO_REVAL_FORCED);
-+ uid = TAGINO_UID(DX_TAG(inode), inode->i_uid, inode->i_tag);
-+ gid = TAGINO_GID(DX_TAG(inode), inode->i_gid, inode->i_tag);
-+ tag = inode->i_tag;
++ kuid = TAGINO_KUID(DX_TAG(inode), inode->i_uid, inode->i_tag);
++ kgid = TAGINO_KGID(DX_TAG(inode), inode->i_gid, inode->i_tag);
++ ktag = TAGINO_KTAG(DX_TAG(inode), inode->i_tag);
if (fattr->valid & NFS_ATTR_FATTR_ATIME)
memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime));
-@@ -1425,9 +1449,9 @@ static int nfs_update_inode(struct inode
- | NFS_INO_REVAL_FORCED);
-
- if (fattr->valid & NFS_ATTR_FATTR_OWNER) {
-- if (inode->i_uid != fattr->uid) {
-+ if (uid != fattr->uid) {
- invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
-- inode->i_uid = fattr->uid;
-+ uid = fattr->uid;
- }
- } else if (server->caps & NFS_CAP_OWNER)
- invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
-@@ -1436,9 +1460,9 @@ static int nfs_update_inode(struct inode
- | NFS_INO_REVAL_FORCED);
-
- if (fattr->valid & NFS_ATTR_FATTR_GROUP) {
-- if (inode->i_gid != fattr->gid) {
-+ if (gid != fattr->gid) {
- invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
-- inode->i_gid = fattr->gid;
-+ gid = fattr->gid;
- }
- } else if (server->caps & NFS_CAP_OWNER_GROUP)
- invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
-@@ -1446,6 +1470,10 @@ static int nfs_update_inode(struct inode
+@@ -1462,6 +1485,10 @@ static int nfs_update_inode(struct inode
| NFS_INO_INVALID_ACL
| NFS_INO_REVAL_FORCED);
-+ inode->i_uid = INOTAG_UID(DX_TAG(inode), uid, gid);
-+ inode->i_gid = INOTAG_GID(DX_TAG(inode), uid, gid);
-+ inode->i_tag = INOTAG_TAG(DX_TAG(inode), uid, gid, tag);
++ inode->i_uid = INOTAG_KUID(DX_TAG(inode), kuid, kgid);
++ inode->i_gid = INOTAG_KGID(DX_TAG(inode), kuid, kgid);
++ inode->i_tag = INOTAG_KTAG(DX_TAG(inode), kuid, kgid, ktag);
+
if (fattr->valid & NFS_ATTR_FATTR_NLINK) {
if (inode->i_nlink != fattr->nlink) {
invalid |= NFS_INO_INVALID_ATTR;
-diff -NurpP --minimal linux-3.7/fs/nfs/nfs3xdr.c linux-3.7-vs2.3.5.1/fs/nfs/nfs3xdr.c
---- linux-3.7/fs/nfs/nfs3xdr.c 2012-10-04 13:27:40.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/nfs/nfs3xdr.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/nfs/nfs3xdr.c linux-3.10.15-vs2.3.6.6/fs/nfs/nfs3xdr.c
+--- linux-3.10.15/fs/nfs/nfs3xdr.c 2013-05-31 13:45:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/nfs/nfs3xdr.c 2013-08-22 20:29:59.000000000 +0000
@@ -20,6 +20,7 @@
#include <linux/nfs3.h>
#include <linux/nfs_fs.h>
#include "internal.h"
#define NFSDBG_FACILITY NFSDBG_XDR
-@@ -560,7 +561,8 @@ static __be32 *xdr_decode_nfstime3(__be3
+@@ -558,7 +559,8 @@ static __be32 *xdr_decode_nfstime3(__be3
* set_mtime mtime;
* };
*/
{
u32 nbytes;
__be32 *p;
-@@ -592,15 +594,19 @@ static void encode_sattr3(struct xdr_str
+@@ -590,15 +592,19 @@ static void encode_sattr3(struct xdr_str
} else
*p++ = xdr_zero;
+ if (attr->ia_valid & ATTR_UID ||
+ (tag && (attr->ia_valid & ATTR_TAG))) {
*p++ = xdr_one;
-- *p++ = cpu_to_be32(attr->ia_uid);
-+ *p++ = cpu_to_be32(TAGINO_UID(tag,
-+ attr->ia_uid, attr->ia_tag));
+- *p++ = cpu_to_be32(from_kuid(&init_user_ns, attr->ia_uid));
++ *p++ = cpu_to_be32(from_kuid(&init_user_ns,
++ TAGINO_KUID(tag, attr->ia_uid, attr->ia_tag)));
} else
*p++ = xdr_zero;
+ if (attr->ia_valid & ATTR_GID ||
+ (tag && (attr->ia_valid & ATTR_TAG))) {
*p++ = xdr_one;
-- *p++ = cpu_to_be32(attr->ia_gid);
-+ *p++ = cpu_to_be32(TAGINO_GID(tag,
-+ attr->ia_gid, attr->ia_tag));
+- *p++ = cpu_to_be32(from_kgid(&init_user_ns, attr->ia_gid));
++ *p++ = cpu_to_be32(from_kgid(&init_user_ns,
++ TAGINO_KGID(tag, attr->ia_gid, attr->ia_tag)));
} else
*p++ = xdr_zero;
-@@ -879,7 +885,7 @@ static void nfs3_xdr_enc_setattr3args(st
+@@ -887,7 +893,7 @@ static void nfs3_xdr_enc_setattr3args(st
const struct nfs3_sattrargs *args)
{
encode_nfs_fh3(xdr, args->fh);
encode_sattrguard3(xdr, args);
}
-@@ -1029,13 +1035,13 @@ static void nfs3_xdr_enc_write3args(stru
+@@ -1037,13 +1043,13 @@ static void nfs3_xdr_enc_write3args(stru
* };
*/
static void encode_createhow3(struct xdr_stream *xdr,
break;
case NFS3_CREATE_EXCLUSIVE:
encode_createverf3(xdr, args->verifier);
-@@ -1050,7 +1056,7 @@ static void nfs3_xdr_enc_create3args(str
+@@ -1058,7 +1064,7 @@ static void nfs3_xdr_enc_create3args(str
const struct nfs3_createargs *args)
{
encode_diropargs3(xdr, args->fh, args->name, args->len);
}
/*
-@@ -1066,7 +1072,7 @@ static void nfs3_xdr_enc_mkdir3args(stru
+@@ -1074,7 +1080,7 @@ static void nfs3_xdr_enc_mkdir3args(stru
const struct nfs3_mkdirargs *args)
{
encode_diropargs3(xdr, args->fh, args->name, args->len);
}
/*
-@@ -1083,9 +1089,9 @@ static void nfs3_xdr_enc_mkdir3args(stru
+@@ -1091,9 +1097,9 @@ static void nfs3_xdr_enc_mkdir3args(stru
* };
*/
static void encode_symlinkdata3(struct xdr_stream *xdr,
encode_nfspath3(xdr, args->pages, args->pathlen);
}
-@@ -1094,7 +1100,7 @@ static void nfs3_xdr_enc_symlink3args(st
+@@ -1102,7 +1108,7 @@ static void nfs3_xdr_enc_symlink3args(st
const struct nfs3_symlinkargs *args)
{
encode_diropargs3(xdr, args->fromfh, args->fromname, args->fromlen);
}
/*
-@@ -1122,24 +1128,24 @@ static void nfs3_xdr_enc_symlink3args(st
+@@ -1130,24 +1136,24 @@ static void nfs3_xdr_enc_symlink3args(st
* };
*/
static void encode_devicedata3(struct xdr_stream *xdr,
break;
case NF3REG:
case NF3DIR:
-@@ -1154,7 +1160,7 @@ static void nfs3_xdr_enc_mknod3args(stru
+@@ -1162,7 +1168,7 @@ static void nfs3_xdr_enc_mknod3args(stru
const struct nfs3_mknodargs *args)
{
encode_diropargs3(xdr, args->fh, args->name, args->len);
}
/*
-diff -NurpP --minimal linux-3.7/fs/nfs/super.c linux-3.7-vs2.3.5.1/fs/nfs/super.c
---- linux-3.7/fs/nfs/super.c 2012-12-11 15:47:35.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/nfs/super.c 2012-12-11 17:09:13.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/nfs/super.c linux-3.10.15-vs2.3.6.6/fs/nfs/super.c
+--- linux-3.10.15/fs/nfs/super.c 2013-07-14 17:01:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/nfs/super.c 2013-08-22 20:29:59.000000000 +0000
@@ -55,6 +55,7 @@
+ #include <linux/parser.h>
#include <linux/nsproxy.h>
#include <linux/rcupdate.h>
- #include <linux/kthread.h>
+#include <linux/vs_tag.h>
#include <asm/uaccess.h>
-@@ -102,6 +103,7 @@ enum {
+@@ -103,6 +104,7 @@ enum {
Opt_mountport,
Opt_mountvers,
Opt_minorversion,
/* Mount options that take string arguments */
Opt_nfsvers,
-@@ -114,6 +116,9 @@ enum {
+@@ -115,6 +117,9 @@ enum {
/* Special mount options */
Opt_userspace, Opt_deprecated, Opt_sloppy,
Opt_err
};
-@@ -183,6 +188,10 @@ static const match_table_t nfs_mount_opt
+@@ -184,6 +189,10 @@ static const match_table_t nfs_mount_opt
{ Opt_fscache_uniq, "fsc=%s" },
{ Opt_local_lock, "local_lock=%s" },
/* The following needs to be listed after all other options */
{ Opt_nfsvers, "v%s" },
-@@ -678,6 +687,7 @@ static void nfs_show_mount_options(struc
+@@ -635,6 +644,7 @@ static void nfs_show_mount_options(struc
{ NFS_MOUNT_NORDIRPLUS, ",nordirplus", "" },
{ NFS_MOUNT_UNSHARED, ",nosharecache", "" },
{ NFS_MOUNT_NORESVPORT, ",noresvport", "" },
{ 0, NULL, NULL }
};
const struct proc_nfs_info *nfs_infop;
-@@ -1304,6 +1314,14 @@ static int nfs_parse_mount_options(char
+@@ -1261,6 +1271,14 @@ static int nfs_parse_mount_options(char
case Opt_nomigration:
mnt->options &= NFS_OPTION_MIGRATION;
break;
/*
* options that take numeric values
-@@ -1390,6 +1408,12 @@ static int nfs_parse_mount_options(char
+@@ -1347,6 +1365,12 @@ static int nfs_parse_mount_options(char
goto out_invalid_value;
mnt->minorversion = option;
break;
/*
* options that take text values
-diff -NurpP --minimal linux-3.7/fs/nfsd/auth.c linux-3.7-vs2.3.5.1/fs/nfsd/auth.c
---- linux-3.7/fs/nfsd/auth.c 2012-07-22 21:39:41.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/nfsd/auth.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/nfsd/auth.c linux-3.10.15-vs2.3.6.6/fs/nfsd/auth.c
+--- linux-3.10.15/fs/nfsd/auth.c 2013-05-31 13:45:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/nfsd/auth.c 2013-08-22 20:29:59.000000000 +0000
@@ -2,6 +2,7 @@
#include <linux/sched.h>
new->fsuid = rqstp->rq_cred.cr_uid;
new->fsgid = rqstp->rq_cred.cr_gid;
+ /* FIXME: this desperately needs a tag :)
-+ new->xid = (xid_t)INOTAG_TAG(DX_TAG_NFSD, cred.cr_uid, cred.cr_gid, 0);
++ new->xid = (vxid_t)INOTAG_TAG(DX_TAG_NFSD, cred.cr_uid, cred.cr_gid, 0);
+ */
rqgi = rqstp->rq_cred.cr_group_info;
-diff -NurpP --minimal linux-3.7/fs/nfsd/nfs3xdr.c linux-3.7-vs2.3.5.1/fs/nfsd/nfs3xdr.c
---- linux-3.7/fs/nfsd/nfs3xdr.c 2012-05-21 16:07:26.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/nfsd/nfs3xdr.c 2012-12-11 15:56:32.000000000 +0000
-@@ -7,6 +7,7 @@
- */
+diff -NurpP --minimal linux-3.10.15/fs/nfsd/nfs3xdr.c linux-3.10.15-vs2.3.6.6/fs/nfsd/nfs3xdr.c
+--- linux-3.10.15/fs/nfsd/nfs3xdr.c 2013-05-31 13:45:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/nfsd/nfs3xdr.c 2013-08-22 20:29:59.000000000 +0000
+@@ -8,6 +8,7 @@
#include <linux/namei.h>
+ #include <linux/sunrpc/svc_xprt.h>
+#include <linux/vs_tag.h>
#include "xdr3.h"
#include "auth.h"
-
-@@ -95,6 +96,8 @@ static __be32 *
+ #include "netns.h"
+@@ -98,6 +99,8 @@ static __be32 *
decode_sattr3(__be32 *p, struct iattr *iap)
{
u32 tmp;
-+ uid_t uid = 0;
-+ gid_t gid = 0;
++ kuid_t kuid = GLOBAL_ROOT_UID;
++ kgid_t kgid = GLOBAL_ROOT_GID;
iap->ia_valid = 0;
-@@ -104,12 +107,15 @@ decode_sattr3(__be32 *p, struct iattr *i
+@@ -106,15 +109,18 @@ decode_sattr3(__be32 *p, struct iattr *i
+ iap->ia_mode = ntohl(*p++);
}
if (*p++) {
- iap->ia_valid |= ATTR_UID;
-- iap->ia_uid = ntohl(*p++);
-+ uid = ntohl(*p++);
+- iap->ia_uid = make_kuid(&init_user_ns, ntohl(*p++));
++ kuid = make_kuid(&init_user_ns, ntohl(*p++));
+ if (uid_valid(iap->ia_uid))
+ iap->ia_valid |= ATTR_UID;
}
if (*p++) {
- iap->ia_valid |= ATTR_GID;
-- iap->ia_gid = ntohl(*p++);
-+ gid = ntohl(*p++);
+- iap->ia_gid = make_kgid(&init_user_ns, ntohl(*p++));
++ kgid = make_kgid(&init_user_ns, ntohl(*p++));
+ if (gid_valid(iap->ia_gid))
+ iap->ia_valid |= ATTR_GID;
}
-+ iap->ia_uid = INOTAG_UID(DX_TAG_NFSD, uid, gid);
-+ iap->ia_gid = INOTAG_GID(DX_TAG_NFSD, uid, gid);
-+ iap->ia_tag = INOTAG_TAG(DX_TAG_NFSD, uid, gid, 0);
++ iap->ia_uid = INOTAG_KUID(DX_TAG_NFSD, kuid, kgid);
++ iap->ia_gid = INOTAG_KGID(DX_TAG_NFSD, kuid, kgid);
++ iap->ia_tag = INOTAG_KTAG(DX_TAG_NFSD, kuid, kgid, GLOBAL_ROOT_TAG);
if (*p++) {
u64 newsize;
-@@ -165,8 +171,12 @@ encode_fattr3(struct svc_rqst *rqstp, __
+@@ -170,8 +176,12 @@ encode_fattr3(struct svc_rqst *rqstp, __
*p++ = htonl(nfs3_ftypes[(stat->mode & S_IFMT) >> 12]);
*p++ = htonl((u32) stat->mode);
*p++ = htonl((u32) stat->nlink);
-- *p++ = htonl((u32) nfsd_ruid(rqstp, stat->uid));
-- *p++ = htonl((u32) nfsd_rgid(rqstp, stat->gid));
-+ *p++ = htonl((u32) nfsd_ruid(rqstp,
-+ TAGINO_UID(0 /* FIXME: DX_TAG(dentry->d_inode) */,
+- *p++ = htonl((u32) from_kuid(&init_user_ns, stat->uid));
+- *p++ = htonl((u32) from_kgid(&init_user_ns, stat->gid));
++ *p++ = htonl((u32) from_kuid(&init_user_ns,
++ TAGINO_KUID(0 /* FIXME: DX_TAG(dentry->d_inode) */,
+ stat->uid, stat->tag)));
-+ *p++ = htonl((u32) nfsd_rgid(rqstp,
-+ TAGINO_GID(0 /* FIXME: DX_TAG(dentry->d_inode) */,
++ *p++ = htonl((u32) from_kgid(&init_user_ns,
++ TAGINO_KGID(0 /* FIXME: DX_TAG(dentry->d_inode) */,
+ stat->gid, stat->tag)));
if (S_ISLNK(stat->mode) && stat->size > NFS3_MAXPATHLEN) {
p = xdr_encode_hyper(p, (u64) NFS3_MAXPATHLEN);
} else {
-diff -NurpP --minimal linux-3.7/fs/nfsd/nfs4xdr.c linux-3.7-vs2.3.5.1/fs/nfsd/nfs4xdr.c
---- linux-3.7/fs/nfsd/nfs4xdr.c 2012-12-11 15:47:35.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/nfsd/nfs4xdr.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/nfsd/nfs4xdr.c linux-3.10.15-vs2.3.6.6/fs/nfsd/nfs4xdr.c
+--- linux-3.10.15/fs/nfsd/nfs4xdr.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/nfsd/nfs4xdr.c 2013-08-22 20:29:59.000000000 +0000
@@ -46,6 +46,7 @@
#include <linux/utsname.h>
#include <linux/pagemap.h>
#include "idmap.h"
#include "acl.h"
-@@ -2351,14 +2352,18 @@ out_acl:
+@@ -2320,14 +2321,18 @@ out_acl:
WRITE32(stat.nlink);
}
if (bmval1 & FATTR4_WORD1_OWNER) {
- status = nfsd4_encode_user(rqstp, stat.uid, &p, &buflen);
+ status = nfsd4_encode_user(rqstp,
-+ TAGINO_UID(DX_TAG(dentry->d_inode),
++ TAGINO_KUID(DX_TAG(dentry->d_inode),
+ stat.uid, stat.tag), &p, &buflen);
if (status == nfserr_resource)
goto out_resource;
if (bmval1 & FATTR4_WORD1_OWNER_GROUP) {
- status = nfsd4_encode_group(rqstp, stat.gid, &p, &buflen);
+ status = nfsd4_encode_group(rqstp,
-+ TAGINO_GID(DX_TAG(dentry->d_inode),
++ TAGINO_KGID(DX_TAG(dentry->d_inode),
+ stat.gid, stat.tag), &p, &buflen);
if (status == nfserr_resource)
goto out_resource;
if (status)
-diff -NurpP --minimal linux-3.7/fs/nfsd/nfsxdr.c linux-3.7-vs2.3.5.1/fs/nfsd/nfsxdr.c
---- linux-3.7/fs/nfsd/nfsxdr.c 2011-05-22 14:17:53.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/nfsd/nfsxdr.c 2012-12-11 15:56:32.000000000 +0000
-@@ -6,6 +6,7 @@
-
+diff -NurpP --minimal linux-3.10.15/fs/nfsd/nfsxdr.c linux-3.10.15-vs2.3.6.6/fs/nfsd/nfsxdr.c
+--- linux-3.10.15/fs/nfsd/nfsxdr.c 2013-05-31 13:45:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/nfsd/nfsxdr.c 2013-08-22 20:29:59.000000000 +0000
+@@ -7,6 +7,7 @@
+ #include "vfs.h"
#include "xdr.h"
#include "auth.h"
+#include <linux/vs_tag.h>
#define NFSDDBG_FACILITY NFSDDBG_XDR
-@@ -88,6 +89,8 @@ static __be32 *
+@@ -89,6 +90,8 @@ static __be32 *
decode_sattr(__be32 *p, struct iattr *iap)
{
u32 tmp, tmp1;
-+ uid_t uid = 0;
-+ gid_t gid = 0;
++ kuid_t kuid = GLOBAL_ROOT_UID;
++ kgid_t kgid = GLOBAL_ROOT_GID;
iap->ia_valid = 0;
-@@ -101,12 +104,15 @@ decode_sattr(__be32 *p, struct iattr *ia
+@@ -101,15 +104,18 @@ decode_sattr(__be32 *p, struct iattr *ia
+ iap->ia_mode = tmp;
}
if ((tmp = ntohl(*p++)) != (u32)-1) {
- iap->ia_valid |= ATTR_UID;
-- iap->ia_uid = tmp;
-+ uid = tmp;
+- iap->ia_uid = make_kuid(&init_user_ns, tmp);
++ kuid = make_kuid(&init_user_ns, tmp);
+ if (uid_valid(iap->ia_uid))
+ iap->ia_valid |= ATTR_UID;
}
if ((tmp = ntohl(*p++)) != (u32)-1) {
- iap->ia_valid |= ATTR_GID;
-- iap->ia_gid = tmp;
-+ gid = tmp;
+- iap->ia_gid = make_kgid(&init_user_ns, tmp);
++ kgid = make_kgid(&init_user_ns, tmp);
+ if (gid_valid(iap->ia_gid))
+ iap->ia_valid |= ATTR_GID;
}
-+ iap->ia_uid = INOTAG_UID(DX_TAG_NFSD, uid, gid);
-+ iap->ia_gid = INOTAG_GID(DX_TAG_NFSD, uid, gid);
-+ iap->ia_tag = INOTAG_TAG(DX_TAG_NFSD, uid, gid, 0);
++ iap->ia_uid = INOTAG_KUID(DX_TAG_NFSD, kuid, kgid);
++ iap->ia_gid = INOTAG_KGID(DX_TAG_NFSD, kuid, kgid);
++ iap->ia_tag = INOTAG_KTAG(DX_TAG_NFSD, kuid, kgid, GLOBAL_ROOT_TAG);
if ((tmp = ntohl(*p++)) != (u32)-1) {
iap->ia_valid |= ATTR_SIZE;
iap->ia_size = tmp;
-@@ -151,8 +157,10 @@ encode_fattr(struct svc_rqst *rqstp, __b
+@@ -154,8 +160,10 @@ encode_fattr(struct svc_rqst *rqstp, __b
*p++ = htonl(nfs_ftypes[type >> 12]);
*p++ = htonl((u32) stat->mode);
*p++ = htonl((u32) stat->nlink);
-- *p++ = htonl((u32) nfsd_ruid(rqstp, stat->uid));
-- *p++ = htonl((u32) nfsd_rgid(rqstp, stat->gid));
-+ *p++ = htonl((u32) nfsd_ruid(rqstp,
-+ TAGINO_UID(DX_TAG(dentry->d_inode), stat->uid, stat->tag)));
-+ *p++ = htonl((u32) nfsd_rgid(rqstp,
-+ TAGINO_GID(DX_TAG(dentry->d_inode), stat->gid, stat->tag)));
+- *p++ = htonl((u32) from_kuid(&init_user_ns, stat->uid));
+- *p++ = htonl((u32) from_kgid(&init_user_ns, stat->gid));
++ *p++ = htonl((u32) from_kuid(&init_user_ns,
++ TAGINO_KUID(DX_TAG(dentry->d_inode), stat->uid, stat->tag)));
++ *p++ = htonl((u32) from_kgid(&init_user_ns,
++ TAGINO_KGID(DX_TAG(dentry->d_inode), stat->gid, stat->tag)));
if (S_ISLNK(type) && stat->size > NFS_MAXPATHLEN) {
*p++ = htonl(NFS_MAXPATHLEN);
-diff -NurpP --minimal linux-3.7/fs/ocfs2/dlmglue.c linux-3.7-vs2.3.5.1/fs/ocfs2/dlmglue.c
---- linux-3.7/fs/ocfs2/dlmglue.c 2012-07-22 21:39:41.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ocfs2/dlmglue.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ocfs2/dlmglue.c linux-3.10.15-vs2.3.6.6/fs/ocfs2/dlmglue.c
+--- linux-3.10.15/fs/ocfs2/dlmglue.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ocfs2/dlmglue.c 2013-08-22 20:29:59.000000000 +0000
@@ -2047,6 +2047,7 @@ static void __ocfs2_stuff_meta_lvb(struc
lvb->lvb_iclusters = cpu_to_be32(oi->ip_clusters);
- lvb->lvb_iuid = cpu_to_be32(inode->i_uid);
- lvb->lvb_igid = cpu_to_be32(inode->i_gid);
-+ lvb->lvb_itag = cpu_to_be16(inode->i_tag);
+ lvb->lvb_iuid = cpu_to_be32(i_uid_read(inode));
+ lvb->lvb_igid = cpu_to_be32(i_gid_read(inode));
++ lvb->lvb_itag = cpu_to_be16(i_tag_read(inode));
lvb->lvb_imode = cpu_to_be16(inode->i_mode);
lvb->lvb_inlink = cpu_to_be16(inode->i_nlink);
lvb->lvb_iatime_packed =
@@ -2097,6 +2098,7 @@ static void ocfs2_refresh_inode_from_lvb
- inode->i_uid = be32_to_cpu(lvb->lvb_iuid);
- inode->i_gid = be32_to_cpu(lvb->lvb_igid);
-+ inode->i_tag = be16_to_cpu(lvb->lvb_itag);
+ i_uid_write(inode, be32_to_cpu(lvb->lvb_iuid));
+ i_gid_write(inode, be32_to_cpu(lvb->lvb_igid));
++ i_tag_write(inode, be16_to_cpu(lvb->lvb_itag));
inode->i_mode = be16_to_cpu(lvb->lvb_imode);
set_nlink(inode, be16_to_cpu(lvb->lvb_inlink));
ocfs2_unpack_timespec(&inode->i_atime,
-diff -NurpP --minimal linux-3.7/fs/ocfs2/dlmglue.h linux-3.7-vs2.3.5.1/fs/ocfs2/dlmglue.h
---- linux-3.7/fs/ocfs2/dlmglue.h 2010-10-21 11:07:50.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ocfs2/dlmglue.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ocfs2/dlmglue.h linux-3.10.15-vs2.3.6.6/fs/ocfs2/dlmglue.h
+--- linux-3.10.15/fs/ocfs2/dlmglue.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ocfs2/dlmglue.h 2013-08-22 20:29:59.000000000 +0000
@@ -46,7 +46,8 @@ struct ocfs2_meta_lvb {
__be16 lvb_inlink;
__be32 lvb_iattr;
};
#define OCFS2_QINFO_LVB_VERSION 1
-diff -NurpP --minimal linux-3.7/fs/ocfs2/file.c linux-3.7-vs2.3.5.1/fs/ocfs2/file.c
---- linux-3.7/fs/ocfs2/file.c 2012-12-11 15:47:35.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ocfs2/file.c 2012-12-11 15:56:32.000000000 +0000
-@@ -1123,7 +1123,7 @@ int ocfs2_setattr(struct dentry *dentry,
+diff -NurpP --minimal linux-3.10.15/fs/ocfs2/file.c linux-3.10.15-vs2.3.6.6/fs/ocfs2/file.c
+--- linux-3.10.15/fs/ocfs2/file.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ocfs2/file.c 2013-08-22 20:29:59.000000000 +0000
+@@ -1124,7 +1124,7 @@ int ocfs2_setattr(struct dentry *dentry,
attr->ia_valid &= ~ATTR_SIZE;
#define OCFS2_VALID_ATTRS (ATTR_ATIME | ATTR_MTIME | ATTR_CTIME | ATTR_SIZE \
if (!(attr->ia_valid & OCFS2_VALID_ATTRS))
return 0;
-diff -NurpP --minimal linux-3.7/fs/ocfs2/inode.c linux-3.7-vs2.3.5.1/fs/ocfs2/inode.c
---- linux-3.7/fs/ocfs2/inode.c 2012-07-22 21:39:41.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ocfs2/inode.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ocfs2/inode.c linux-3.10.15-vs2.3.6.6/fs/ocfs2/inode.c
+--- linux-3.10.15/fs/ocfs2/inode.c 2013-05-31 13:45:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ocfs2/inode.c 2013-08-22 20:29:59.000000000 +0000
@@ -28,6 +28,7 @@
#include <linux/highmem.h>
#include <linux/pagemap.h>
inode->i_generation = le32_to_cpu(fe->i_generation);
inode->i_rdev = huge_decode_dev(le64_to_cpu(fe->id1.dev1.i_rdev));
inode->i_mode = le16_to_cpu(fe->i_mode);
-- inode->i_uid = le32_to_cpu(fe->i_uid);
-- inode->i_gid = le32_to_cpu(fe->i_gid);
+- i_uid_write(inode, le32_to_cpu(fe->i_uid));
+- i_gid_write(inode, le32_to_cpu(fe->i_gid));
+ uid = le32_to_cpu(fe->i_uid);
+ gid = le32_to_cpu(fe->i_gid);
-+ inode->i_uid = INOTAG_UID(DX_TAG(inode), uid, gid);
-+ inode->i_gid = INOTAG_GID(DX_TAG(inode), uid, gid);
-+ inode->i_tag = INOTAG_TAG(DX_TAG(inode), uid, gid,
-+ /* le16_to_cpu(raw_inode->i_raw_tag)i */ 0);
++ i_uid_write(inode, INOTAG_UID(DX_TAG(inode), uid, gid));
++ i_gid_write(inode, INOTAG_GID(DX_TAG(inode), uid, gid));
++ i_tag_write(inode, INOTAG_TAG(DX_TAG(inode), uid, gid,
++ /* le16_to_cpu(raw_inode->i_raw_tag) */ 0));
/* Fast symlinks will have i_size but no allocated clusters. */
if (S_ISLNK(inode->i_mode) && !fe->i_clusters) {
-diff -NurpP --minimal linux-3.7/fs/ocfs2/inode.h linux-3.7-vs2.3.5.1/fs/ocfs2/inode.h
---- linux-3.7/fs/ocfs2/inode.h 2012-01-09 15:14:55.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ocfs2/inode.h 2012-12-11 15:56:32.000000000 +0000
-@@ -154,6 +154,7 @@ struct buffer_head *ocfs2_bread(struct i
+diff -NurpP --minimal linux-3.10.15/fs/ocfs2/inode.h linux-3.10.15-vs2.3.6.6/fs/ocfs2/inode.h
+--- linux-3.10.15/fs/ocfs2/inode.h 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ocfs2/inode.h 2013-08-22 20:29:59.000000000 +0000
+@@ -152,6 +152,7 @@ struct buffer_head *ocfs2_bread(struct i
void ocfs2_set_inode_flags(struct inode *inode);
void ocfs2_get_inode_flags(struct ocfs2_inode_info *oi);
static inline blkcnt_t ocfs2_inode_sector_count(struct inode *inode)
{
-diff -NurpP --minimal linux-3.7/fs/ocfs2/ioctl.c linux-3.7-vs2.3.5.1/fs/ocfs2/ioctl.c
---- linux-3.7/fs/ocfs2/ioctl.c 2012-10-04 13:27:41.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ocfs2/ioctl.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ocfs2/ioctl.c linux-3.10.15-vs2.3.6.6/fs/ocfs2/ioctl.c
+--- linux-3.10.15/fs/ocfs2/ioctl.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ocfs2/ioctl.c 2013-08-22 20:29:59.000000000 +0000
@@ -76,7 +76,41 @@ static int ocfs2_get_inode_attr(struct i
return status;
}
unsigned mask)
{
struct ocfs2_inode_info *ocfs2_inode = OCFS2_I(inode);
-@@ -101,6 +135,11 @@ static int ocfs2_set_inode_attr(struct i
- if (!S_ISDIR(inode->i_mode))
- flags &= ~OCFS2_DIRSYNC_FL;
+@@ -116,6 +150,11 @@ static int ocfs2_set_inode_attr(struct i
+ goto bail_unlock;
+ }
+ if (IS_BARRIER(inode)) {
+ vxwprintk_task(1, "messing with the barrier.");
handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
if (IS_ERR(handle)) {
status = PTR_ERR(handle);
-@@ -879,6 +918,7 @@ bail:
+@@ -881,6 +920,7 @@ bail:
return status;
}
+
long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
- struct inode *inode = filp->f_path.dentry->d_inode;
-diff -NurpP --minimal linux-3.7/fs/ocfs2/namei.c linux-3.7-vs2.3.5.1/fs/ocfs2/namei.c
---- linux-3.7/fs/ocfs2/namei.c 2012-10-04 13:27:41.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ocfs2/namei.c 2012-12-11 15:56:32.000000000 +0000
+ struct inode *inode = file_inode(filp);
+diff -NurpP --minimal linux-3.10.15/fs/ocfs2/namei.c linux-3.10.15-vs2.3.6.6/fs/ocfs2/namei.c
+--- linux-3.10.15/fs/ocfs2/namei.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ocfs2/namei.c 2013-08-22 20:29:59.000000000 +0000
@@ -41,6 +41,7 @@
#include <linux/slab.h>
#include <linux/highmem.h>
struct ocfs2_dinode *fe = NULL;
struct ocfs2_extent_list *fel;
u16 feat;
-+ tag_t tag;
++ ktag_t ktag;
*new_fe_bh = NULL;
-@@ -512,8 +514,11 @@ static int __ocfs2_mknod_locked(struct i
+@@ -512,8 +514,13 @@ static int __ocfs2_mknod_locked(struct i
fe->i_suballoc_loc = cpu_to_le64(suballoc_loc);
fe->i_suballoc_bit = cpu_to_le16(suballoc_bit);
fe->i_suballoc_slot = cpu_to_le16(inode_ac->ac_alloc_slot);
-- fe->i_uid = cpu_to_le32(inode->i_uid);
-- fe->i_gid = cpu_to_le32(inode->i_gid);
-+
-+ tag = dx_current_fstag(osb->sb);
-+ fe->i_uid = cpu_to_le32(TAGINO_UID(DX_TAG(inode), inode->i_uid, tag));
-+ fe->i_gid = cpu_to_le32(TAGINO_GID(DX_TAG(inode), inode->i_gid, tag));
-+ inode->i_tag = tag;
+- fe->i_uid = cpu_to_le32(i_uid_read(inode));
+- fe->i_gid = cpu_to_le32(i_gid_read(inode));
++
++ ktag = make_ktag(&init_user_ns, dx_current_fstag(osb->sb));
++ fe->i_uid = cpu_to_le32(from_kuid(&init_user_ns,
++ TAGINO_KUID(DX_TAG(inode), inode->i_uid, ktag)));
++ fe->i_gid = cpu_to_le32(from_kgid(&init_user_ns,
++ TAGINO_KGID(DX_TAG(inode), inode->i_gid, ktag)));
++ inode->i_tag = ktag; /* is this correct? */
fe->i_mode = cpu_to_le16(inode->i_mode);
if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
fe->id1.dev1.i_rdev = cpu_to_le64(huge_encode_dev(dev));
-diff -NurpP --minimal linux-3.7/fs/ocfs2/ocfs2.h linux-3.7-vs2.3.5.1/fs/ocfs2/ocfs2.h
---- linux-3.7/fs/ocfs2/ocfs2.h 2012-01-09 15:14:55.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ocfs2/ocfs2.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ocfs2/ocfs2.h linux-3.10.15-vs2.3.6.6/fs/ocfs2/ocfs2.h
+--- linux-3.10.15/fs/ocfs2/ocfs2.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ocfs2/ocfs2.h 2013-08-22 20:29:59.000000000 +0000
@@ -272,6 +272,7 @@ enum ocfs2_mount_options
writes */
OCFS2_MOUNT_HB_NONE = 1 << 13, /* No heartbeat */
};
#define OCFS2_OSB_SOFT_RO 0x0001
-diff -NurpP --minimal linux-3.7/fs/ocfs2/ocfs2_fs.h linux-3.7-vs2.3.5.1/fs/ocfs2/ocfs2_fs.h
---- linux-3.7/fs/ocfs2/ocfs2_fs.h 2011-05-22 14:17:53.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ocfs2/ocfs2_fs.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ocfs2/ocfs2_fs.h linux-3.10.15-vs2.3.6.6/fs/ocfs2/ocfs2_fs.h
+--- linux-3.10.15/fs/ocfs2/ocfs2_fs.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ocfs2/ocfs2_fs.h 2013-08-22 20:29:59.000000000 +0000
@@ -266,6 +266,11 @@
#define OCFS2_TOPDIR_FL FS_TOPDIR_FL /* Top of directory hierarchies*/
#define OCFS2_RESERVED_FL FS_RESERVED_FL /* reserved for ext2 lib */
#define OCFS2_FL_VISIBLE FS_FL_USER_VISIBLE /* User visible flags */
#define OCFS2_FL_MODIFIABLE FS_FL_USER_MODIFIABLE /* User modifiable flags */
-diff -NurpP --minimal linux-3.7/fs/ocfs2/super.c linux-3.7-vs2.3.5.1/fs/ocfs2/super.c
---- linux-3.7/fs/ocfs2/super.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/ocfs2/super.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/ocfs2/super.c linux-3.10.15-vs2.3.6.6/fs/ocfs2/super.c
+--- linux-3.10.15/fs/ocfs2/super.c 2013-05-31 13:45:25.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/ocfs2/super.c 2013-08-22 20:29:59.000000000 +0000
@@ -185,6 +185,7 @@ enum {
Opt_coherency_full,
Opt_resv_level,
if (ocfs2_mount_local(osb))
snprintf(nodestr, sizeof(nodestr), "local");
else
-@@ -1503,6 +1517,20 @@ static int ocfs2_parse_options(struct su
+@@ -1504,6 +1518,20 @@ static int ocfs2_parse_options(struct su
option < OCFS2_MAX_RESV_LEVEL)
mopt->dir_resv_level = option;
break;
default:
mlog(ML_ERROR,
"Unrecognized mount option \"%s\" "
-diff -NurpP --minimal linux-3.7/fs/open.c linux-3.7-vs2.3.5.1/fs/open.c
---- linux-3.7/fs/open.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/open.c 2012-12-11 15:56:32.000000000 +0000
-@@ -30,6 +30,11 @@
- #include <linux/fs_struct.h>
+diff -NurpP --minimal linux-3.10.15/fs/open.c linux-3.10.15-vs2.3.6.6/fs/open.c
+--- linux-3.10.15/fs/open.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/open.c 2013-08-22 20:29:59.000000000 +0000
+@@ -31,6 +31,11 @@
#include <linux/ima.h>
#include <linux/dnotify.h>
+ #include <linux/compat.h>
+#include <linux/vs_base.h>
+#include <linux/vs_limit.h>
+#include <linux/vs_tag.h>
#include "internal.h"
-@@ -74,6 +79,12 @@ static long do_sys_truncate(const char _
- error = user_path(pathname, &path);
- if (error)
- goto out;
-+
+@@ -67,6 +72,11 @@ long vfs_truncate(struct path *path, lof
+ struct inode *inode;
+ long error;
+
+#ifdef CONFIG_VSERVER_COWBL
-+ error = cow_check_and_break(&path);
++ error = cow_check_and_break(path);
+ if (error)
-+ goto dput_and_out;
++ goto out;
+#endif
- inode = path.dentry->d_inode;
+ inode = path->dentry->d_inode;
/* For directories it's -EISDIR, for other non-regulars - -EINVAL */
-@@ -492,6 +503,10 @@ SYSCALL_DEFINE3(fchmodat, int, dfd, cons
-
- error = user_path_at(dfd, filename, LOOKUP_FOLLOW, &path);
- if (!error) {
+@@ -504,6 +514,13 @@ SYSCALL_DEFINE3(fchmodat, int, dfd, cons
+ unsigned int lookup_flags = LOOKUP_FOLLOW;
+ retry:
+ error = user_path_at(dfd, filename, lookup_flags, &path);
+#ifdef CONFIG_VSERVER_COWBL
++ if (!error) {
+ error = cow_check_and_break(&path);
-+ if (!error)
++ if (error)
++ path_put(&path);
++ }
+#endif
+ if (!error) {
error = chmod_common(&path, mode);
path_put(&path);
- }
-@@ -519,13 +534,13 @@ static int chown_common(struct path *pat
+@@ -536,13 +553,15 @@ static int chown_common(struct path *pat
if (!uid_valid(uid))
return -EINVAL;
newattrs.ia_valid |= ATTR_UID;
- newattrs.ia_uid = uid;
-+ newattrs.ia_uid = dx_map_uid(user);
++ newattrs.ia_uid = make_kuid(&init_user_ns,
++ dx_map_uid(user));
}
if (group != (gid_t) -1) {
if (!gid_valid(gid))
return -EINVAL;
newattrs.ia_valid |= ATTR_GID;
- newattrs.ia_gid = gid;
-+ newattrs.ia_gid = dx_map_gid(group);
++ newattrs.ia_gid = make_kgid(&init_user_ns,
++ dx_map_gid(group));
}
if (!S_ISDIR(inode->i_mode))
newattrs.ia_valid |=
-@@ -558,6 +573,18 @@ SYSCALL_DEFINE5(fchownat, int, dfd, cons
+@@ -576,6 +595,18 @@ retry:
error = mnt_want_write(path.mnt);
if (error)
goto out_release;
error = chown_common(&path, user, group);
mnt_drop_write(path.mnt);
out_release:
-diff -NurpP --minimal linux-3.7/fs/proc/array.c linux-3.7-vs2.3.5.1/fs/proc/array.c
---- linux-3.7/fs/proc/array.c 2012-07-22 21:39:42.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc/array.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/proc/array.c linux-3.10.15-vs2.3.6.6/fs/proc/array.c
+--- linux-3.10.15/fs/proc/array.c 2013-05-31 13:45:25.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/array.c 2013-08-22 20:29:59.000000000 +0000
@@ -82,6 +82,8 @@
#include <linux/ptrace.h>
#include <linux/tracehook.h>
#include <asm/pgtable.h>
#include <asm/processor.h>
-@@ -172,6 +174,9 @@ static inline void task_state(struct seq
+@@ -173,6 +175,9 @@ static inline void task_state(struct seq
rcu_read_lock();
ppid = pid_alive(p) ?
task_tgid_nr_ns(rcu_dereference(p->real_parent), ns) : 0;
tpid = 0;
if (pid_alive(p)) {
struct task_struct *tracer = ptrace_parent(p);
-@@ -296,7 +301,7 @@ static inline void task_sig(struct seq_f
+@@ -297,7 +302,7 @@ static inline void task_sig(struct seq_f
}
static void render_cap_t(struct seq_file *m, const char *header,
{
unsigned __capi;
-@@ -321,10 +326,11 @@ static inline void task_cap(struct seq_f
- cap_bset = cred->cap_bset;
- rcu_read_unlock();
+@@ -331,10 +336,11 @@ static inline void task_cap(struct seq_f
+ NORM_CAPS(cap_effective);
+ NORM_CAPS(cap_bset);
- render_cap_t(m, "CapInh:\t", &cap_inheritable);
- render_cap_t(m, "CapPrm:\t", &cap_permitted);
+ render_cap_t(m, "CapBnd:\t", p->vx_info, &cap_bset);
}
- static inline void task_context_switch_counts(struct seq_file *m,
-@@ -346,6 +352,42 @@ static void task_cpus_allowed(struct seq
+ static inline void task_seccomp(struct seq_file *m, struct task_struct *p)
+@@ -363,6 +369,42 @@ static void task_cpus_allowed(struct seq
seq_putc(m, '\n');
}
int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
-@@ -362,6 +404,7 @@ int proc_pid_status(struct seq_file *m,
- task_cap(m, task);
+@@ -380,6 +422,7 @@ int proc_pid_status(struct seq_file *m,
+ task_seccomp(m, task);
task_cpus_allowed(m, task);
cpuset_task_status_allowed(m, task);
+ task_vs_id(m, task);
task_context_switch_counts(m, task);
return 0;
}
-@@ -471,6 +514,17 @@ static int do_task_stat(struct seq_file
+@@ -489,6 +532,17 @@ static int do_task_stat(struct seq_file
/* convert nsec -> ticks */
start_time = nsec_to_clock_t(start_time);
seq_printf(m, "%d (%s) %c", pid_nr_ns(pid, ns), tcomm, state);
seq_put_decimal_ll(m, ' ', ppid);
seq_put_decimal_ll(m, ' ', pgid);
-diff -NurpP --minimal linux-3.7/fs/proc/base.c linux-3.7-vs2.3.5.1/fs/proc/base.c
---- linux-3.7/fs/proc/base.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc/base.c 2012-12-11 19:34:49.000000000 +0000
-@@ -85,6 +85,8 @@
- #include <linux/fs_struct.h>
+diff -NurpP --minimal linux-3.10.15/fs/proc/base.c linux-3.10.15-vs2.3.6.6/fs/proc/base.c
+--- linux-3.10.15/fs/proc/base.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/base.c 2013-08-22 22:18:21.000000000 +0000
+@@ -87,6 +87,8 @@
#include <linux/slab.h>
#include <linux/flex_array.h>
+ #include <linux/posix-timers.h>
+#include <linux/vs_context.h>
+#include <linux/vs_network.h>
#ifdef CONFIG_HARDWALL
#include <asm/hardwall.h>
#endif
-@@ -950,11 +952,15 @@ static ssize_t oom_adj_write(struct file
+@@ -976,11 +978,15 @@ static ssize_t oom_adj_write(struct file
oom_adj = (oom_adj * OOM_SCORE_ADJ_MAX) / -OOM_DISABLE;
if (oom_adj < task->signal->oom_score_adj &&
/*
* /proc/pid/oom_adj is provided for legacy purposes, ask users to use
* /proc/pid/oom_score_adj instead.
-@@ -1534,6 +1540,8 @@ struct inode *proc_pid_make_inode(struct
+@@ -1559,6 +1565,8 @@ struct inode *proc_pid_make_inode(struct
inode->i_gid = cred->egid;
rcu_read_unlock();
}
+ /* procfs is xid tagged */
-+ i_tag_write(inode, (tag_t)vx_task_xid(task));
++ i_tag_write(inode, (vtag_t)vx_task_xid(task));
security_task_to_inode(task, inode);
out:
-@@ -1579,6 +1587,8 @@ int pid_getattr(struct vfsmount *mnt, st
+@@ -1604,6 +1612,8 @@ int pid_getattr(struct vfsmount *mnt, st
/* dentry stuff */
/*
* Exceptional case: normally we are not allowed to unhash a busy
* directory. In this case, however, we can do it - no aliasing problems
-@@ -1607,6 +1617,12 @@ int pid_revalidate(struct dentry *dentry
+@@ -1632,6 +1642,12 @@ int pid_revalidate(struct dentry *dentry
task = get_proc_task(inode);
if (task) {
if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
task_dumpable(task)) {
rcu_read_lock();
-@@ -1623,6 +1639,7 @@ int pid_revalidate(struct dentry *dentry
+@@ -1648,6 +1664,7 @@ int pid_revalidate(struct dentry *dentry
put_task_struct(task);
return 1;
}
d_drop(dentry);
return 0;
}
-@@ -2065,6 +2082,13 @@ static struct dentry *proc_pident_lookup
+@@ -2196,6 +2213,13 @@ static struct dentry *proc_pident_lookup
if (!task)
goto out_no_task;
/*
* Yes, it does not scale. And it should not. Don't add
* new entries into /proc/<tgid>/ without very good reasons.
-@@ -2451,7 +2475,7 @@ out_iput:
- static struct dentry *proc_base_lookup(struct inode *dir, struct dentry *dentry)
- {
- struct dentry *error;
-- struct task_struct *task = get_proc_task(dir);
-+ struct task_struct *task = get_proc_task_real(dir);
- const struct pid_entry *p, *last;
-
- error = ERR_PTR(-ENOENT);
-@@ -2639,6 +2663,9 @@ static int proc_pid_personality(struct s
+@@ -2630,6 +2654,9 @@ static int proc_pid_personality(struct s
static const struct file_operations proc_task_operations;
static const struct inode_operations proc_task_inode_operations;
static const struct pid_entry tgid_base_stuff[] = {
DIR("task", S_IRUGO|S_IXUGO, proc_task_inode_operations, proc_task_operations),
DIR("fd", S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations),
-@@ -2705,6 +2732,8 @@ static const struct pid_entry tgid_base_
+@@ -2696,6 +2723,8 @@ static const struct pid_entry tgid_base_
#ifdef CONFIG_CGROUPS
REG("cgroup", S_IRUGO, proc_cgroup_operations),
#endif
INF("oom_score", S_IRUGO, proc_oom_score),
REG("oom_adj", S_IRUGO|S_IWUSR, proc_oom_adj_operations),
REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),
-@@ -2729,6 +2758,7 @@ static const struct pid_entry tgid_base_
- REG("gid_map", S_IRUGO|S_IWUSR, proc_gid_map_operations),
- REG("projid_map", S_IRUGO|S_IWUSR, proc_projid_map_operations),
- #endif
-+ ONE("nsproxy", S_IRUGO, proc_pid_nsproxy),
- };
-
- static int proc_tgid_base_readdir(struct file * filp,
-@@ -2923,7 +2953,7 @@ retry:
+@@ -2910,7 +2939,7 @@ retry:
iter.task = NULL;
pid = find_ge_pid(iter.tgid, ns);
if (pid) {
iter.task = pid_task(pid, PIDTYPE_PID);
/* What we to know is if the pid we have find is the
* pid of a thread_group_leader. Testing for task
-@@ -2953,7 +2983,7 @@ static int proc_pid_fill_cache(struct fi
+@@ -2940,7 +2969,7 @@ static int proc_pid_fill_cache(struct fi
struct tgid_iter iter)
{
char name[PROC_NUMBUF];
return proc_fill_cache(filp, dirent, filldir, name, len,
proc_pid_instantiate, iter.task, NULL);
}
-@@ -2977,7 +3007,7 @@ int proc_pid_readdir(struct file * filp,
- goto out_no_task;
- nr = filp->f_pos - FIRST_PROCESS_ENTRY;
-
-- reaper = get_proc_task(filp->f_path.dentry->d_inode);
-+ reaper = get_proc_task_real(filp->f_path.dentry->d_inode);
- if (!reaper)
- goto out_no_task;
-
-@@ -2999,6 +3029,8 @@ int proc_pid_readdir(struct file * filp,
+@@ -2981,6 +3010,8 @@ int proc_pid_readdir(struct file * filp,
__filldir = fake_filldir;
filp->f_pos = iter.tgid + TGID_OFFSET;
if (proc_pid_fill_cache(filp, dirent, __filldir, iter) < 0) {
put_task_struct(iter.task);
goto out;
-@@ -3161,6 +3193,8 @@ static struct dentry *proc_task_lookup(s
+@@ -3073,6 +3104,7 @@ static const struct pid_entry tid_base_s
+ REG("gid_map", S_IRUGO|S_IWUSR, proc_gid_map_operations),
+ REG("projid_map", S_IRUGO|S_IWUSR, proc_projid_map_operations),
+ #endif
++ ONE("nsproxy", S_IRUGO, proc_pid_nsproxy),
+ };
+
+ static int proc_tid_base_readdir(struct file * filp,
+@@ -3141,6 +3173,8 @@ static struct dentry *proc_task_lookup(s
tid = name_to_int(dentry);
if (tid == ~0U)
goto out;
ns = dentry->d_sb->s_fs_info;
rcu_read_lock();
-diff -NurpP --minimal linux-3.7/fs/proc/generic.c linux-3.7-vs2.3.5.1/fs/proc/generic.c
---- linux-3.7/fs/proc/generic.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc/generic.c 2012-12-11 19:15:21.000000000 +0000
-@@ -22,6 +22,7 @@
+diff -NurpP --minimal linux-3.10.15/fs/proc/generic.c linux-3.10.15-vs2.3.6.6/fs/proc/generic.c
+--- linux-3.10.15/fs/proc/generic.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/generic.c 2013-08-22 20:29:59.000000000 +0000
+@@ -23,6 +23,7 @@
#include <linux/bitops.h>
#include <linux/spinlock.h>
#include <linux/completion.h>
#include <asm/uaccess.h>
#include "internal.h"
-@@ -424,11 +425,15 @@ struct dentry *proc_lookup_de(struct pro
+@@ -203,6 +204,8 @@ struct dentry *proc_lookup_de(struct pro
for (de = de->subdir; de ; de = de->next) {
if (de->namelen != dentry->d_name.len)
continue;
if (!memcmp(dentry->d_name.name, de->name, de->namelen)) {
pde_get(de);
spin_unlock(&proc_subdir_lock);
- error = -ENOMEM;
- inode = proc_get_inode(dir->i_sb, de);
+@@ -211,6 +214,8 @@ struct dentry *proc_lookup_de(struct pro
+ return ERR_PTR(-ENOMEM);
+ d_set_d_op(dentry, &proc_dentry_operations);
+ d_add(dentry, inode);
+ /* generic proc entries belong to the host */
+ i_tag_write(inode, 0);
- goto out_unlock;
+ return NULL;
}
}
-@@ -506,6 +511,8 @@ int proc_readdir_de(struct proc_dir_entr
+@@ -279,6 +284,8 @@ int proc_readdir_de(struct proc_dir_entr
/* filldir passes info to user space */
pde_get(de);
spin_unlock(&proc_subdir_lock);
if (filldir(dirent, de->name, de->namelen, filp->f_pos,
de->low_ino, de->mode >> 12) < 0) {
-@@ -513,6 +520,7 @@ int proc_readdir_de(struct proc_dir_entr
+@@ -286,6 +293,7 @@ int proc_readdir_de(struct proc_dir_entr
goto out;
}
spin_lock(&proc_subdir_lock);
filp->f_pos++;
next = de->next;
pde_put(de);
-@@ -625,6 +633,7 @@ static struct proc_dir_entry *__proc_cre
+@@ -395,6 +403,7 @@ static struct proc_dir_entry *__proc_cre
ent->namelen = len;
ent->mode = mode;
ent->nlink = nlink;
atomic_set(&ent->count, 1);
spin_lock_init(&ent->pde_unload_lock);
INIT_LIST_HEAD(&ent->pde_openers);
-@@ -648,7 +657,8 @@ struct proc_dir_entry *proc_symlink(cons
+@@ -418,7 +427,8 @@ struct proc_dir_entry *proc_symlink(cons
kfree(ent->data);
kfree(ent);
ent = NULL;
} else {
kfree(ent);
ent = NULL;
-diff -NurpP --minimal linux-3.7/fs/proc/inode.c linux-3.7-vs2.3.5.1/fs/proc/inode.c
---- linux-3.7/fs/proc/inode.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc/inode.c 2012-12-11 15:56:32.000000000 +0000
-@@ -457,6 +457,8 @@ struct inode *proc_get_inode(struct supe
+diff -NurpP --minimal linux-3.10.15/fs/proc/inode.c linux-3.10.15-vs2.3.6.6/fs/proc/inode.c
+--- linux-3.10.15/fs/proc/inode.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/inode.c 2013-08-22 20:29:59.000000000 +0000
+@@ -387,6 +387,8 @@ struct inode *proc_get_inode(struct supe
inode->i_uid = de->uid;
inode->i_gid = de->gid;
}
if (de->size)
inode->i_size = de->size;
if (de->nlink)
-diff -NurpP --minimal linux-3.7/fs/proc/internal.h linux-3.7-vs2.3.5.1/fs/proc/internal.h
---- linux-3.7/fs/proc/internal.h 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc/internal.h 2012-12-11 15:56:32.000000000 +0000
-@@ -11,6 +11,8 @@
-
- #include <linux/sched.h>
- #include <linux/proc_fs.h>
+diff -NurpP --minimal linux-3.10.15/fs/proc/internal.h linux-3.10.15-vs2.3.6.6/fs/proc/internal.h
+--- linux-3.10.15/fs/proc/internal.h 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/internal.h 2013-08-22 21:52:30.000000000 +0000
+@@ -14,6 +14,7 @@
+ #include <linux/spinlock.h>
+ #include <linux/atomic.h>
+ #include <linux/binfmts.h>
+#include <linux/vs_pid.h>
-+
- struct ctl_table_header;
- struct mempolicy;
-@@ -54,6 +56,9 @@ extern int proc_pid_status(struct seq_fi
- struct pid *pid, struct task_struct *task);
- extern int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns,
- struct pid *pid, struct task_struct *task);
-+extern int proc_pid_nsproxy(struct seq_file *m, struct pid_namespace *ns,
-+ struct pid *pid, struct task_struct *task);
+ struct ctl_table_header;
+ struct mempolicy;
+@@ -35,6 +36,7 @@ struct proc_dir_entry {
+ nlink_t nlink;
+ kuid_t uid;
+ kgid_t gid;
++ int vx_flags;
+ loff_t size;
+ const struct inode_operations *proc_iops;
+ const struct file_operations *proc_fops;
+@@ -50,16 +52,23 @@ struct proc_dir_entry {
+ char name[];
+ };
+
++struct vx_info;
++struct nx_info;
+
- extern loff_t mem_lseek(struct file *file, loff_t offset, int orig);
+ union proc_op {
+ int (*proc_get_link)(struct dentry *, struct path *);
+ int (*proc_read)(struct task_struct *task, char *page);
+ int (*proc_show)(struct seq_file *m,
+ struct pid_namespace *ns, struct pid *pid,
+ struct task_struct *task);
++ int (*proc_vs_read)(char *page);
++ int (*proc_vxi_read)(struct vx_info *vxi, char *page);
++ int (*proc_nxi_read)(struct nx_info *nxi, char *page);
+ };
- extern const struct file_operations proc_tid_children_operations;
-@@ -87,11 +92,16 @@ static inline struct pid *proc_pid(struc
+ struct proc_inode {
+ struct pid *pid;
++ int vx_flags;
+ int fd;
+ union proc_op op;
+ struct proc_dir_entry *pde;
+@@ -92,11 +101,16 @@ static inline struct pid *proc_pid(struc
return PROC_I(inode)->pid;
}
+ return vx_get_proc_task(inode, proc_pid(inode));
+}
+
- static inline int proc_fd(struct inode *inode)
+ static inline int task_dumpable(struct task_struct *task)
{
- return PROC_I(inode)->fd;
-diff -NurpP --minimal linux-3.7/fs/proc/loadavg.c linux-3.7-vs2.3.5.1/fs/proc/loadavg.c
---- linux-3.7/fs/proc/loadavg.c 2009-09-10 13:26:23.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc/loadavg.c 2012-12-11 15:56:32.000000000 +0000
+ int dumpable = 0;
+@@ -155,6 +169,8 @@ extern int proc_pid_status(struct seq_fi
+ struct pid *, struct task_struct *);
+ extern int proc_pid_statm(struct seq_file *, struct pid_namespace *,
+ struct pid *, struct task_struct *);
++extern int proc_pid_nsproxy(struct seq_file *m, struct pid_namespace *ns,
++ struct pid *pid, struct task_struct *task);
+
+ /*
+ * base.c
+diff -NurpP --minimal linux-3.10.15/fs/proc/loadavg.c linux-3.10.15-vs2.3.6.6/fs/proc/loadavg.c
+--- linux-3.10.15/fs/proc/loadavg.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/loadavg.c 2013-08-22 20:30:00.000000000 +0000
@@ -12,15 +12,27 @@
static int loadavg_proc_show(struct seq_file *m, void *v)
task_active_pid_ns(current)->last_pid);
return 0;
}
-diff -NurpP --minimal linux-3.7/fs/proc/meminfo.c linux-3.7-vs2.3.5.1/fs/proc/meminfo.c
---- linux-3.7/fs/proc/meminfo.c 2012-01-09 15:14:55.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc/meminfo.c 2012-12-11 15:56:32.000000000 +0000
-@@ -39,7 +39,8 @@ static int meminfo_proc_show(struct seq_
+diff -NurpP --minimal linux-3.10.15/fs/proc/meminfo.c linux-3.10.15-vs2.3.6.6/fs/proc/meminfo.c
+--- linux-3.10.15/fs/proc/meminfo.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/meminfo.c 2013-08-22 20:30:00.000000000 +0000
+@@ -40,7 +40,8 @@ static int meminfo_proc_show(struct seq_
allowed = ((totalram_pages - hugetlb_total_pages())
* sysctl_overcommit_ratio / 100) + total_swap_pages;
- cached = global_page_state(NR_FILE_PAGES) -
+ cached = vx_flags(VXF_VIRT_MEM, 0) ?
+ vx_vsi_cached(&i) : global_page_state(NR_FILE_PAGES) -
- total_swapcache_pages - i.bufferram;
+ total_swapcache_pages() - i.bufferram;
if (cached < 0)
cached = 0;
-diff -NurpP --minimal linux-3.7/fs/proc/root.c linux-3.7-vs2.3.5.1/fs/proc/root.c
---- linux-3.7/fs/proc/root.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc/root.c 2012-12-11 15:56:32.000000000 +0000
-@@ -19,9 +19,14 @@
+diff -NurpP --minimal linux-3.10.15/fs/proc/root.c linux-3.10.15-vs2.3.6.6/fs/proc/root.c
+--- linux-3.10.15/fs/proc/root.c 2013-10-09 17:35:22.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/root.c 2013-10-09 17:37:22.000000000 +0000
+@@ -20,9 +20,14 @@
#include <linux/mount.h>
#include <linux/pid_namespace.h>
#include <linux/parser.h>
static int proc_test_super(struct super_block *sb, void *data)
{
return sb->s_fs_info == data;
-@@ -189,6 +194,7 @@ void __init proc_root_init(void)
+@@ -185,6 +190,7 @@ void __init proc_root_init(void)
#endif
proc_mkdir("bus", NULL);
proc_sys_init();
}
static int proc_root_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat
-@@ -255,6 +261,7 @@ struct proc_dir_entry proc_root = {
+@@ -251,6 +257,7 @@ struct proc_dir_entry proc_root = {
.proc_iops = &proc_root_inode_operations,
.proc_fops = &proc_root_operations,
.parent = &proc_root,
.name = "/proc",
};
-diff -NurpP --minimal linux-3.7/fs/proc/stat.c linux-3.7-vs2.3.5.1/fs/proc/stat.c
---- linux-3.7/fs/proc/stat.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc/stat.c 2012-12-12 13:54:26.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/proc/self.c linux-3.10.15-vs2.3.6.6/fs/proc/self.c
+--- linux-3.10.15/fs/proc/self.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/self.c 2013-08-23 00:07:45.000000000 +0000
+@@ -2,6 +2,7 @@
+ #include <linux/namei.h>
+ #include <linux/slab.h>
+ #include <linux/pid_namespace.h>
++#include <linux/vserver/inode.h>
+ #include "internal.h"
+
+ /*
+@@ -62,6 +63,8 @@ int proc_setup_self(struct super_block *
+ self = d_alloc_name(s->s_root, "self");
+ if (self) {
+ struct inode *inode = new_inode_pseudo(s);
++
++ // self->vx_flags = IATTR_PROC_SYMLINK;
+ if (inode) {
+ inode->i_ino = self_inum;
+ inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
+diff -NurpP --minimal linux-3.10.15/fs/proc/stat.c linux-3.10.15-vs2.3.6.6/fs/proc/stat.c
+--- linux-3.10.15/fs/proc/stat.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/stat.c 2013-08-22 20:30:00.000000000 +0000
@@ -9,8 +9,10 @@
#include <linux/slab.h>
#include <linux/time.h>
/* Copy values here to work around gcc-2.95.3, gcc-2.96 */
user = kcpustat_cpu(i).cpustat[CPUTIME_USER];
nice = kcpustat_cpu(i).cpustat[CPUTIME_NICE];
-diff -NurpP --minimal linux-3.7/fs/proc/uptime.c linux-3.7-vs2.3.5.1/fs/proc/uptime.c
---- linux-3.7/fs/proc/uptime.c 2012-03-19 18:47:26.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc/uptime.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/proc/uptime.c linux-3.10.15-vs2.3.6.6/fs/proc/uptime.c
+--- linux-3.10.15/fs/proc/uptime.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc/uptime.c 2013-08-22 20:30:00.000000000 +0000
@@ -5,6 +5,7 @@
#include <linux/seq_file.h>
#include <linux/time.h>
seq_printf(m, "%lu.%02lu %lu.%02lu\n",
(unsigned long) uptime.tv_sec,
(uptime.tv_nsec / (NSEC_PER_SEC / 100)),
-diff -NurpP --minimal linux-3.7/fs/proc_namespace.c linux-3.7-vs2.3.5.1/fs/proc_namespace.c
---- linux-3.7/fs/proc_namespace.c 2012-10-04 13:27:41.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/proc_namespace.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/proc_namespace.c linux-3.10.15-vs2.3.6.6/fs/proc_namespace.c
+--- linux-3.10.15/fs/proc_namespace.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/proc_namespace.c 2013-08-22 20:30:00.000000000 +0000
@@ -44,6 +44,8 @@ static int show_sb_opts(struct seq_file
{ MS_SYNCHRONOUS, ",sync" },
{ MS_DIRSYNC, ",dirsync" },
/* file system type */
seq_puts(m, "with fstype ");
show_type(m, sb);
-diff -NurpP --minimal linux-3.7/fs/quota/dquot.c linux-3.7-vs2.3.5.1/fs/quota/dquot.c
---- linux-3.7/fs/quota/dquot.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/quota/dquot.c 2012-12-11 15:56:32.000000000 +0000
-@@ -1582,6 +1582,9 @@ int __dquot_alloc_space(struct inode *in
+diff -NurpP --minimal linux-3.10.15/fs/quota/dquot.c linux-3.10.15-vs2.3.6.6/fs/quota/dquot.c
+--- linux-3.10.15/fs/quota/dquot.c 2013-05-31 13:45:25.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/quota/dquot.c 2013-08-22 20:30:00.000000000 +0000
+@@ -1585,6 +1585,9 @@ int __dquot_alloc_space(struct inode *in
struct dquot **dquots = inode->i_dquot;
int reserve = flags & DQUOT_SPACE_RESERVE;
/*
* First test before acquiring mutex - solves deadlocks when we
* re-enter the quota code and are already holding the mutex
-@@ -1637,6 +1640,9 @@ int dquot_alloc_inode(const struct inode
+@@ -1640,6 +1643,9 @@ int dquot_alloc_inode(const struct inode
struct dquot_warn warn[MAXQUOTAS];
struct dquot * const *dquots = inode->i_dquot;
/* First test before acquiring mutex - solves deadlocks when we
* re-enter the quota code and are already holding the mutex */
if (!dquot_active(inode))
-@@ -1708,6 +1714,8 @@ void __dquot_free_space(struct inode *in
+@@ -1711,6 +1717,8 @@ void __dquot_free_space(struct inode *in
struct dquot **dquots = inode->i_dquot;
int reserve = flags & DQUOT_SPACE_RESERVE;
/* First test before acquiring mutex - solves deadlocks when we
* re-enter the quota code and are already holding the mutex */
if (!dquot_active(inode)) {
-@@ -1752,6 +1760,8 @@ void dquot_free_inode(const struct inode
+@@ -1755,6 +1763,8 @@ void dquot_free_inode(const struct inode
struct dquot_warn warn[MAXQUOTAS];
struct dquot * const *dquots = inode->i_dquot;
/* First test before acquiring mutex - solves deadlocks when we
* re-enter the quota code and are already holding the mutex */
if (!dquot_active(inode))
-diff -NurpP --minimal linux-3.7/fs/quota/quota.c linux-3.7-vs2.3.5.1/fs/quota/quota.c
---- linux-3.7/fs/quota/quota.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/quota/quota.c 2012-12-11 22:07:44.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/quota/quota.c linux-3.10.15-vs2.3.6.6/fs/quota/quota.c
+--- linux-3.10.15/fs/quota/quota.c 2013-02-19 13:58:49.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/quota/quota.c 2013-08-22 20:30:00.000000000 +0000
@@ -8,6 +8,7 @@
#include <linux/fs.h>
#include <linux/namei.h>
return -EPERM;
}
-@@ -307,6 +308,46 @@ static int do_quotactl(struct super_bloc
- }
- }
+@@ -309,6 +310,46 @@ static int do_quotactl(struct super_bloc
+
+ #ifdef CONFIG_BLOCK
+#if defined(CONFIG_BLK_DEV_VROOT) || defined(CONFIG_BLK_DEV_VROOT_MODULE)
+
/* Return 1 if 'cmd' will block on frozen filesystem */
static int quotactl_cmd_write(int cmd)
{
-@@ -339,6 +380,22 @@ static struct super_block *quotactl_bloc
+@@ -343,6 +384,22 @@ static struct super_block *quotactl_bloc
putname(tmp);
if (IS_ERR(bdev))
return ERR_CAST(bdev);
if (quotactl_cmd_write(cmd))
sb = get_super_thawed(bdev);
else
-diff -NurpP --minimal linux-3.7/fs/stat.c linux-3.7-vs2.3.5.1/fs/stat.c
---- linux-3.7/fs/stat.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/stat.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/stat.c linux-3.10.15-vs2.3.6.6/fs/stat.c
+--- linux-3.10.15/fs/stat.c 2013-05-31 13:45:25.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/stat.c 2013-08-22 20:30:00.000000000 +0000
@@ -26,6 +26,7 @@ void generic_fillattr(struct inode *inod
stat->nlink = inode->i_nlink;
stat->uid = inode->i_uid;
stat->rdev = inode->i_rdev;
stat->size = i_size_read(inode);
stat->atime = inode->i_atime;
-diff -NurpP --minimal linux-3.7/fs/statfs.c linux-3.7-vs2.3.5.1/fs/statfs.c
---- linux-3.7/fs/statfs.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/statfs.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/statfs.c linux-3.10.15-vs2.3.6.6/fs/statfs.c
+--- linux-3.10.15/fs/statfs.c 2013-02-19 13:58:49.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/statfs.c 2013-08-22 20:30:00.000000000 +0000
@@ -7,6 +7,8 @@
#include <linux/statfs.h>
#include <linux/security.h>
return retval;
}
-diff -NurpP --minimal linux-3.7/fs/super.c linux-3.7-vs2.3.5.1/fs/super.c
---- linux-3.7/fs/super.c 2012-12-11 15:47:36.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/super.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/super.c linux-3.10.15-vs2.3.6.6/fs/super.c
+--- linux-3.10.15/fs/super.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/super.c 2013-08-22 20:30:00.000000000 +0000
@@ -34,6 +34,8 @@
#include <linux/cleancache.h>
#include <linux/fsnotify.h>
#include "internal.h"
-@@ -1119,6 +1121,13 @@ mount_fs(struct file_system_type *type,
+@@ -1112,6 +1114,13 @@ mount_fs(struct file_system_type *type,
WARN_ON(sb->s_bdi == &default_backing_dev_info);
sb->s_flags |= MS_BORN;
error = security_sb_kern_mount(sb, flags, secdata);
if (error)
goto out_sb;
-diff -NurpP --minimal linux-3.7/fs/sysfs/mount.c linux-3.7-vs2.3.5.1/fs/sysfs/mount.c
---- linux-3.7/fs/sysfs/mount.c 2012-10-04 13:27:41.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/sysfs/mount.c 2012-12-11 15:56:32.000000000 +0000
-@@ -47,7 +47,7 @@ static int sysfs_fill_super(struct super
+diff -NurpP --minimal linux-3.10.15/fs/sysfs/mount.c linux-3.10.15-vs2.3.6.6/fs/sysfs/mount.c
+--- linux-3.10.15/fs/sysfs/mount.c 2013-05-31 13:45:25.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/sysfs/mount.c 2013-08-22 20:30:00.000000000 +0000
+@@ -48,7 +48,7 @@ static int sysfs_fill_super(struct super
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_op = &sysfs_ops;
sb->s_time_gran = 1;
-diff -NurpP --minimal linux-3.7/fs/utimes.c linux-3.7-vs2.3.5.1/fs/utimes.c
---- linux-3.7/fs/utimes.c 2012-12-11 15:47:37.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/utimes.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/utimes.c linux-3.10.15-vs2.3.6.6/fs/utimes.c
+--- linux-3.10.15/fs/utimes.c 2013-02-19 13:58:49.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/utimes.c 2013-08-22 20:30:00.000000000 +0000
@@ -8,6 +8,8 @@
#include <linux/stat.h>
#include <linux/utime.h>
struct iattr newattrs;
- struct inode *inode = path->dentry->d_inode;
+ struct inode *inode;
++
++ error = cow_check_and_break(path);
++ if (error)
++ goto out;
error = mnt_want_write(path->mnt);
if (error)
goto out;
-+ error = cow_check_and_break(path);
-+ if (error)
-+ goto mnt_drop_write_and_out;
-+
+ inode = path->dentry->d_inode;
+
if (times && times[0].tv_nsec == UTIME_NOW &&
times[1].tv_nsec == UTIME_NOW)
times = NULL;
-diff -NurpP --minimal linux-3.7/fs/xattr.c linux-3.7-vs2.3.5.1/fs/xattr.c
---- linux-3.7/fs/xattr.c 2012-12-11 15:47:37.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xattr.c 2012-12-11 17:16:31.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/xattr.c linux-3.10.15-vs2.3.6.6/fs/xattr.c
+--- linux-3.10.15/fs/xattr.c 2013-02-19 13:58:49.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xattr.c 2013-08-22 20:30:00.000000000 +0000
@@ -21,6 +21,7 @@
#include <linux/audit.h>
#include <linux/vmalloc.h>
return (mask & MAY_WRITE) ? -EPERM : -ENODATA;
return 0;
}
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_dinode.h linux-3.7-vs2.3.5.1/fs/xfs/xfs_dinode.h
---- linux-3.7/fs/xfs/xfs_dinode.h 2012-10-04 13:27:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_dinode.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_dinode.h linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_dinode.h
+--- linux-3.10.15/fs/xfs/xfs_dinode.h 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_dinode.h 2013-08-22 20:30:00.000000000 +0000
@@ -51,7 +51,9 @@ typedef struct xfs_dinode {
__be32 di_nlink; /* number of links to file */
__be16 di_projid_lo; /* lower part of owner's project id */
__be16 di_flushiter; /* incremented on flush */
xfs_timestamp_t di_atime; /* time last accessed */
xfs_timestamp_t di_mtime; /* time last modified */
-@@ -184,6 +186,8 @@ static inline void xfs_dinode_put_rdev(s
+@@ -209,6 +211,8 @@ static inline void xfs_dinode_put_rdev(s
#define XFS_DIFLAG_EXTSZINHERIT_BIT 12 /* inherit inode extent size */
#define XFS_DIFLAG_NODEFRAG_BIT 13 /* do not reorganize/defragment */
#define XFS_DIFLAG_FILESTREAM_BIT 14 /* use filestream allocator */
#define XFS_DIFLAG_REALTIME (1 << XFS_DIFLAG_REALTIME_BIT)
#define XFS_DIFLAG_PREALLOC (1 << XFS_DIFLAG_PREALLOC_BIT)
#define XFS_DIFLAG_NEWRTBM (1 << XFS_DIFLAG_NEWRTBM_BIT)
-@@ -199,6 +203,7 @@ static inline void xfs_dinode_put_rdev(s
+@@ -224,6 +228,7 @@ static inline void xfs_dinode_put_rdev(s
#define XFS_DIFLAG_EXTSZINHERIT (1 << XFS_DIFLAG_EXTSZINHERIT_BIT)
#define XFS_DIFLAG_NODEFRAG (1 << XFS_DIFLAG_NODEFRAG_BIT)
#define XFS_DIFLAG_FILESTREAM (1 << XFS_DIFLAG_FILESTREAM_BIT)
#ifdef CONFIG_XFS_RT
#define XFS_IS_REALTIME_INODE(ip) ((ip)->i_d.di_flags & XFS_DIFLAG_REALTIME)
-@@ -211,6 +216,10 @@ static inline void xfs_dinode_put_rdev(s
+@@ -236,6 +241,10 @@ static inline void xfs_dinode_put_rdev(s
XFS_DIFLAG_IMMUTABLE | XFS_DIFLAG_APPEND | XFS_DIFLAG_SYNC | \
XFS_DIFLAG_NOATIME | XFS_DIFLAG_NODUMP | XFS_DIFLAG_RTINHERIT | \
XFS_DIFLAG_PROJINHERIT | XFS_DIFLAG_NOSYMLINKS | XFS_DIFLAG_EXTSIZE | \
+#define XFS_DIVFLAG_COW 0x02
#endif /* __XFS_DINODE_H__ */
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_fs.h linux-3.7-vs2.3.5.1/fs/xfs/xfs_fs.h
---- linux-3.7/fs/xfs/xfs_fs.h 2011-10-24 16:45:31.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_fs.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_fs.h linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_fs.h
+--- linux-3.10.15/fs/xfs/xfs_fs.h 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_fs.h 2013-08-22 20:30:00.000000000 +0000
@@ -67,6 +67,9 @@ struct fsxattr {
#define XFS_XFLAG_EXTSZINHERIT 0x00001000 /* inherit inode extent size */
#define XFS_XFLAG_NODEFRAG 0x00002000 /* do not defragment */
#define XFS_XFLAG_HASATTR 0x80000000 /* no DIFLAG for this */
/*
-@@ -302,7 +305,8 @@ typedef struct xfs_bstat {
+@@ -304,7 +307,8 @@ typedef struct xfs_bstat {
#define bs_projid bs_projid_lo /* (previously just bs_projid) */
__u16 bs_forkoff; /* inode fork offset in bytes */
__u16 bs_projid_hi; /* higher part of project id */
__u32 bs_dmevmask; /* DMIG event mask */
__u16 bs_dmstate; /* DMIG state info */
__u16 bs_aextents; /* attribute number of extents */
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_ialloc.c linux-3.7-vs2.3.5.1/fs/xfs/xfs_ialloc.c
---- linux-3.7/fs/xfs/xfs_ialloc.c 2012-12-11 15:47:37.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_ialloc.c 2012-12-11 15:56:32.000000000 +0000
-@@ -37,7 +37,6 @@
- #include "xfs_error.h"
- #include "xfs_bmap.h"
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_ialloc.c linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_ialloc.c
+--- linux-3.10.15/fs/xfs/xfs_ialloc.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_ialloc.c 2013-08-22 20:30:00.000000000 +0000
+@@ -39,7 +39,6 @@
+ #include "xfs_cksum.h"
+ #include "xfs_buf_item.h"
-
/*
* Allocation group level functions.
*/
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_inode.c linux-3.7-vs2.3.5.1/fs/xfs/xfs_inode.c
---- linux-3.7/fs/xfs/xfs_inode.c 2012-12-11 15:47:37.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_inode.c 2012-12-11 22:20:23.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_inode.c linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_inode.c
+--- linux-3.10.15/fs/xfs/xfs_inode.c 2013-07-14 17:01:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_inode.c 2013-08-22 21:50:34.000000000 +0000
@@ -16,6 +16,7 @@
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "xfs.h"
#include "xfs_fs.h"
-@@ -563,15 +564,25 @@ xfs_iformat_btree(
+@@ -836,15 +837,25 @@ xfs_iformat_btree(
STATIC void
xfs_dinode_from_disk(
xfs_icdinode_t *to,
to->di_nlink = be32_to_cpu(from->di_nlink);
to->di_projid_lo = be16_to_cpu(from->di_projid_lo);
to->di_projid_hi = be16_to_cpu(from->di_projid_hi);
-@@ -593,21 +604,26 @@ xfs_dinode_from_disk(
+@@ -866,6 +877,7 @@ xfs_dinode_from_disk(
to->di_dmevmask = be32_to_cpu(from->di_dmevmask);
to->di_dmstate = be16_to_cpu(from->di_dmstate);
to->di_flags = be16_to_cpu(from->di_flags);
+ to->di_vflags = be16_to_cpu(from->di_vflags);
to->di_gen = be32_to_cpu(from->di_gen);
- }
+ if (to->di_version == 3) {
+@@ -883,15 +895,19 @@ xfs_dinode_from_disk(
void
xfs_dinode_to_disk(
xfs_dinode_t *to,
to->di_nlink = cpu_to_be32(from->di_nlink);
to->di_projid_lo = cpu_to_be16(from->di_projid_lo);
to->di_projid_hi = cpu_to_be16(from->di_projid_hi);
-@@ -629,12 +645,14 @@ xfs_dinode_to_disk(
+@@ -913,6 +929,7 @@ xfs_dinode_to_disk(
to->di_dmevmask = cpu_to_be32(from->di_dmevmask);
to->di_dmstate = cpu_to_be16(from->di_dmstate);
to->di_flags = cpu_to_be16(from->di_flags);
+ to->di_vflags = cpu_to_be16(from->di_vflags);
to->di_gen = cpu_to_be32(from->di_gen);
- }
+
+ if (from->di_version == 3) {
+@@ -929,7 +946,8 @@ xfs_dinode_to_disk(
STATIC uint
_xfs_dic2xflags(
{
uint flags = 0;
-@@ -645,6 +663,8 @@ _xfs_dic2xflags(
+@@ -940,6 +958,8 @@ _xfs_dic2xflags(
flags |= XFS_XFLAG_PREALLOC;
if (di_flags & XFS_DIFLAG_IMMUTABLE)
flags |= XFS_XFLAG_IMMUTABLE;
if (di_flags & XFS_DIFLAG_APPEND)
flags |= XFS_XFLAG_APPEND;
if (di_flags & XFS_DIFLAG_SYNC)
-@@ -669,6 +689,10 @@ _xfs_dic2xflags(
+@@ -964,6 +984,10 @@ _xfs_dic2xflags(
flags |= XFS_XFLAG_FILESTREAM;
}
return flags;
}
-@@ -678,7 +702,7 @@ xfs_ip2xflags(
+@@ -973,7 +997,7 @@ xfs_ip2xflags(
{
xfs_icdinode_t *dic = &ip->i_d;
(XFS_IFORK_Q(ip) ? XFS_XFLAG_HASATTR : 0);
}
-@@ -686,7 +710,8 @@ uint
+@@ -981,7 +1005,8 @@ uint
xfs_dic2xflags(
xfs_dinode_t *dip)
{
(XFS_DFORK_Q(dip) ? XFS_XFLAG_HASATTR : 0);
}
-@@ -740,7 +765,8 @@ xfs_iread(
+@@ -1072,7 +1097,8 @@ xfs_iread(
* Otherwise, just get the truly permanent information.
*/
if (dip->di_mode) {
error = xfs_iformat(ip, dip);
if (error) {
#ifdef DEBUG
-@@ -927,6 +953,7 @@ xfs_ialloc(
+@@ -1270,6 +1296,7 @@ xfs_ialloc(
ASSERT(ip->i_d.di_nlink == nlink);
ip->i_d.di_uid = current_fsuid();
ip->i_d.di_gid = current_fsgid();
xfs_set_projid(ip, prid);
memset(&(ip->i_d.di_pad[0]), 0, sizeof(ip->i_d.di_pad));
-@@ -986,6 +1013,7 @@ xfs_ialloc(
+@@ -1329,6 +1356,7 @@ xfs_ialloc(
ip->i_d.di_dmevmask = 0;
ip->i_d.di_dmstate = 0;
ip->i_d.di_flags = 0;
+ ip->i_d.di_vflags = 0;
- flags = XFS_ILOG_CORE;
- switch (mode & S_IFMT) {
- case S_IFIFO:
-@@ -1668,6 +1696,7 @@ xfs_ifree(
+
+ if (ip->i_d.di_version == 3) {
+ ASSERT(ip->i_d.di_ino == ino);
+@@ -2052,6 +2080,7 @@ xfs_ifree(
}
ip->i_d.di_mode = 0; /* mark incore inode as free */
ip->i_d.di_flags = 0;
ip->i_d.di_dmevmask = 0;
ip->i_d.di_forkoff = 0; /* mark the attr fork not in use */
ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS;
-@@ -1834,7 +1863,6 @@ xfs_iroot_realloc(
+@@ -2219,7 +2248,6 @@ xfs_iroot_realloc(
return;
}
/*
* This is called when the amount of space needed for if_data
* is increased or decreased. The change in size is indicated by
-@@ -2522,7 +2550,8 @@ xfs_iflush_int(
+@@ -2899,7 +2927,8 @@ xfs_iflush_int(
* because if the inode is dirty at all the core must
* be.
*/
/* Wrap, we never let the log put out DI_MAX_FLUSH */
if (ip->i_d.di_flushiter == DI_MAX_FLUSH)
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_inode.h linux-3.7-vs2.3.5.1/fs/xfs/xfs_inode.h
---- linux-3.7/fs/xfs/xfs_inode.h 2012-10-04 13:27:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_inode.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_inode.h linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_inode.h
+--- linux-3.10.15/fs/xfs/xfs_inode.h 2013-07-14 17:01:30.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_inode.h 2013-08-22 20:30:00.000000000 +0000
@@ -134,7 +134,9 @@ typedef struct xfs_icdinode {
__uint32_t di_nlink; /* number of links to file */
__uint16_t di_projid_lo; /* lower part of owner's project id */
__uint16_t di_flushiter; /* incremented on flush */
xfs_ictimestamp_t di_atime; /* time last accessed */
xfs_ictimestamp_t di_mtime; /* time last modified */
-@@ -561,7 +563,7 @@ int xfs_imap_to_bp(struct xfs_mount *,
- int xfs_iread(struct xfs_mount *, struct xfs_trans *,
+@@ -583,7 +585,7 @@ int xfs_iread(struct xfs_mount *, struc
struct xfs_inode *, uint);
+ void xfs_dinode_calc_crc(struct xfs_mount *, struct xfs_dinode *);
void xfs_dinode_to_disk(struct xfs_dinode *,
- struct xfs_icdinode *);
+ struct xfs_icdinode *, int);
void xfs_idestroy_fork(struct xfs_inode *, int);
void xfs_idata_realloc(struct xfs_inode *, int, int);
void xfs_iroot_realloc(struct xfs_inode *, int, int);
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_ioctl.c linux-3.7-vs2.3.5.1/fs/xfs/xfs_ioctl.c
---- linux-3.7/fs/xfs/xfs_ioctl.c 2012-12-11 15:47:37.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_ioctl.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_ioctl.c linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_ioctl.c
+--- linux-3.10.15/fs/xfs/xfs_ioctl.c 2013-07-14 17:01:30.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_ioctl.c 2013-08-22 20:30:00.000000000 +0000
@@ -26,7 +26,7 @@
#include "xfs_bmap_btree.h"
#include "xfs_dinode.h"
#include "xfs_rtalloc.h"
#include "xfs_itable.h"
#include "xfs_error.h"
-@@ -762,6 +762,10 @@ xfs_merge_ioc_xflags(
+@@ -769,6 +769,10 @@ xfs_merge_ioc_xflags(
xflags |= XFS_XFLAG_IMMUTABLE;
else
xflags &= ~XFS_XFLAG_IMMUTABLE;
if (flags & FS_APPEND_FL)
xflags |= XFS_XFLAG_APPEND;
else
-@@ -790,6 +794,8 @@ xfs_di2lxflags(
+@@ -797,6 +801,8 @@ xfs_di2lxflags(
if (di_flags & XFS_DIFLAG_IMMUTABLE)
flags |= FS_IMMUTABLE_FL;
if (di_flags & XFS_DIFLAG_APPEND)
flags |= FS_APPEND_FL;
if (di_flags & XFS_DIFLAG_SYNC)
-@@ -850,6 +856,8 @@ xfs_set_diflags(
+@@ -857,6 +863,8 @@ xfs_set_diflags(
di_flags = (ip->i_d.di_flags & XFS_DIFLAG_PREALLOC);
if (xflags & XFS_XFLAG_IMMUTABLE)
di_flags |= XFS_DIFLAG_IMMUTABLE;
if (xflags & XFS_XFLAG_APPEND)
di_flags |= XFS_DIFLAG_APPEND;
if (xflags & XFS_XFLAG_SYNC)
-@@ -892,6 +900,10 @@ xfs_diflags_to_linux(
+@@ -899,6 +907,10 @@ xfs_diflags_to_linux(
inode->i_flags |= S_IMMUTABLE;
else
inode->i_flags &= ~S_IMMUTABLE;
if (xflags & XFS_XFLAG_APPEND)
inode->i_flags |= S_APPEND;
else
-@@ -1396,10 +1408,18 @@ xfs_file_ioctl(
+@@ -1403,10 +1415,18 @@ xfs_file_ioctl(
case XFS_IOC_FSGETXATTRA:
return xfs_ioc_fsgetxattr(ip, 1, arg);
case XFS_IOC_FSSETXATTR:
return xfs_ioc_setxflags(ip, filp, arg);
case XFS_IOC_FSSETDM: {
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_ioctl.h linux-3.7-vs2.3.5.1/fs/xfs/xfs_ioctl.h
---- linux-3.7/fs/xfs/xfs_ioctl.h 2011-10-24 16:45:31.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_ioctl.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_ioctl.h linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_ioctl.h
+--- linux-3.10.15/fs/xfs/xfs_ioctl.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_ioctl.h 2013-08-22 20:30:00.000000000 +0000
@@ -70,6 +70,12 @@ xfs_handle_to_dentry(
void __user *uhandle,
u32 hlen);
extern long
xfs_file_ioctl(
struct file *filp,
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_iops.c linux-3.7-vs2.3.5.1/fs/xfs/xfs_iops.c
---- linux-3.7/fs/xfs/xfs_iops.c 2012-10-04 13:27:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_iops.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_iops.c linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_iops.c
+--- linux-3.10.15/fs/xfs/xfs_iops.c 2013-07-14 17:01:30.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_iops.c 2013-08-22 20:30:00.000000000 +0000
@@ -28,6 +28,7 @@
#include "xfs_bmap_btree.h"
#include "xfs_dinode.h"
#include "xfs_bmap.h"
#include "xfs_rtalloc.h"
#include "xfs_error.h"
-@@ -46,6 +47,7 @@
+@@ -47,6 +48,7 @@
#include <linux/security.h>
#include <linux/fiemap.h>
#include <linux/slab.h>
static int
xfs_initxattrs(
-@@ -421,6 +423,7 @@ xfs_vn_getattr(
+@@ -422,6 +424,7 @@ xfs_vn_getattr(
stat->nlink = ip->i_d.di_nlink;
stat->uid = ip->i_d.di_uid;
stat->gid = ip->i_d.di_gid;
stat->ino = ip->i_ino;
stat->atime = inode->i_atime;
stat->mtime = inode->i_mtime;
-@@ -1033,6 +1036,7 @@ static const struct inode_operations xfs
+@@ -1054,6 +1057,7 @@ static const struct inode_operations xfs
.listxattr = xfs_vn_listxattr,
.fiemap = xfs_vn_fiemap,
.update_time = xfs_vn_update_time,
};
static const struct inode_operations xfs_dir_inode_operations = {
-@@ -1059,6 +1063,7 @@ static const struct inode_operations xfs
+@@ -1080,6 +1084,7 @@ static const struct inode_operations xfs
.removexattr = generic_removexattr,
.listxattr = xfs_vn_listxattr,
.update_time = xfs_vn_update_time,
};
static const struct inode_operations xfs_dir_ci_inode_operations = {
-@@ -1110,6 +1115,10 @@ xfs_diflags_to_iflags(
+@@ -1131,6 +1136,10 @@ xfs_diflags_to_iflags(
inode->i_flags |= S_IMMUTABLE;
else
inode->i_flags &= ~S_IMMUTABLE;
if (ip->i_d.di_flags & XFS_DIFLAG_APPEND)
inode->i_flags |= S_APPEND;
else
-@@ -1122,6 +1131,15 @@ xfs_diflags_to_iflags(
+@@ -1143,6 +1152,15 @@ xfs_diflags_to_iflags(
inode->i_flags |= S_NOATIME;
else
inode->i_flags &= ~S_NOATIME;
}
/*
-@@ -1153,6 +1171,7 @@ xfs_setup_inode(
+@@ -1174,6 +1192,7 @@ xfs_setup_inode(
set_nlink(inode, ip->i_d.di_nlink);
inode->i_uid = ip->i_d.di_uid;
inode->i_gid = ip->i_d.di_gid;
switch (inode->i_mode & S_IFMT) {
case S_IFBLK:
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_itable.c linux-3.7-vs2.3.5.1/fs/xfs/xfs_itable.c
---- linux-3.7/fs/xfs/xfs_itable.c 2012-10-04 13:27:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_itable.c 2012-12-11 15:56:32.000000000 +0000
-@@ -96,6 +96,7 @@ xfs_bulkstat_one_int(
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_itable.c linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_itable.c
+--- linux-3.10.15/fs/xfs/xfs_itable.c 2013-02-19 13:58:49.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_itable.c 2013-08-22 20:30:00.000000000 +0000
+@@ -97,6 +97,7 @@ xfs_bulkstat_one_int(
buf->bs_mode = dic->di_mode;
buf->bs_uid = dic->di_uid;
buf->bs_gid = dic->di_gid;
buf->bs_size = dic->di_size;
buf->bs_atime.tv_sec = dic->di_atime.t_sec;
buf->bs_atime.tv_nsec = dic->di_atime.t_nsec;
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_linux.h linux-3.7-vs2.3.5.1/fs/xfs/xfs_linux.h
---- linux-3.7/fs/xfs/xfs_linux.h 2011-10-24 16:45:31.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_linux.h 2012-12-11 15:56:32.000000000 +0000
-@@ -121,6 +121,7 @@
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_linux.h linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_linux.h
+--- linux-3.10.15/fs/xfs/xfs_linux.h 2013-07-14 17:01:30.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_linux.h 2013-08-22 20:30:00.000000000 +0000
+@@ -124,6 +124,7 @@
#define current_cpu() (raw_smp_processor_id())
#define current_pid() (current->pid)
#define current_test_flags(f) (current->flags & (f))
#define current_set_flags_nested(sp, f) \
(*(sp) = current->flags, current->flags |= (f))
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_log_recover.c linux-3.7-vs2.3.5.1/fs/xfs/xfs_log_recover.c
---- linux-3.7/fs/xfs/xfs_log_recover.c 2012-12-11 15:47:37.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_log_recover.c 2012-12-11 15:56:32.000000000 +0000
-@@ -2359,7 +2359,8 @@ xlog_recover_inode_pass2(
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_log_recover.c linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_log_recover.c
+--- linux-3.10.15/fs/xfs/xfs_log_recover.c 2013-07-14 17:01:31.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_log_recover.c 2013-08-22 21:48:01.000000000 +0000
+@@ -2662,7 +2662,7 @@ xlog_recover_inode_pass2(
}
/* The core is in in-core format */
-- xfs_dinode_to_disk(dip, item->ri_buf[1].i_addr);
-+ xfs_dinode_to_disk(dip, item->ri_buf[1].i_addr,
-+ mp->m_flags & XFS_MOUNT_TAGGED);
+- xfs_dinode_to_disk(dip, dicp);
++ xfs_dinode_to_disk(dip, dicp, mp->m_flags & XFS_MOUNT_TAGGED);
/* the rest is in on-disk format */
- if (item->ri_buf[1].i_len > sizeof(struct xfs_icdinode)) {
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_mount.h linux-3.7-vs2.3.5.1/fs/xfs/xfs_mount.h
---- linux-3.7/fs/xfs/xfs_mount.h 2012-12-11 15:47:37.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_mount.h 2012-12-11 15:56:32.000000000 +0000
-@@ -246,6 +246,7 @@ typedef struct xfs_mount {
+ if (item->ri_buf[1].i_len > isize) {
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_mount.h linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_mount.h
+--- linux-3.10.15/fs/xfs/xfs_mount.h 2013-07-14 17:01:31.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_mount.h 2013-08-22 20:30:00.000000000 +0000
+@@ -253,6 +253,7 @@ typedef struct xfs_mount {
allocator */
#define XFS_MOUNT_NOATTR2 (1ULL << 25) /* disable use of attr2 format */
/*
* Default minimum read and write sizes.
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_super.c linux-3.7-vs2.3.5.1/fs/xfs/xfs_super.c
---- linux-3.7/fs/xfs/xfs_super.c 2012-12-11 15:47:37.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_super.c 2012-12-11 17:36:47.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_super.c linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_super.c
+--- linux-3.10.15/fs/xfs/xfs_super.c 2013-07-14 17:01:31.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_super.c 2013-08-22 20:30:00.000000000 +0000
@@ -114,6 +114,9 @@ mempool_t *xfs_ioend_pool;
#define MNTOPT_NODELAYLOG "nodelaylog" /* Delayed logging disabled */
#define MNTOPT_DISCARD "discard" /* Discard unused blocks */
{Opt_err, NULL}
};
-@@ -383,6 +391,19 @@ xfs_parseargs(
+@@ -392,6 +400,19 @@ xfs_parseargs(
} else if (!strcmp(this_char, "irixsgid")) {
xfs_warn(mp,
"irixsgid is now a sysctl(2) variable, option is deprecated.");
} else {
xfs_warn(mp, "unknown mount option [%s].", this_char);
return EINVAL;
-@@ -1149,6 +1170,16 @@ xfs_fs_remount(
+@@ -1238,6 +1259,16 @@ xfs_fs_remount(
case Opt_inode32:
mp->m_maxagi = xfs_set_inode32(mp);
break;
default:
/*
* Logically we would return an error here to prevent
-@@ -1368,6 +1399,9 @@ xfs_fs_fill_super(
+@@ -1469,6 +1500,9 @@ xfs_fs_fill_super(
if (error)
goto out_free_sb;
/*
* we must configure the block size in the superblock before we run the
* full mount process as the mount process can lookup and cache inodes.
-diff -NurpP --minimal linux-3.7/fs/xfs/xfs_vnodeops.c linux-3.7-vs2.3.5.1/fs/xfs/xfs_vnodeops.c
---- linux-3.7/fs/xfs/xfs_vnodeops.c 2012-10-04 13:27:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/fs/xfs/xfs_vnodeops.c 2012-12-11 15:56:32.000000000 +0000
-@@ -103,6 +103,77 @@ xfs_readlink_bmap(
+diff -NurpP --minimal linux-3.10.15/fs/xfs/xfs_vnodeops.c linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_vnodeops.c
+--- linux-3.10.15/fs/xfs/xfs_vnodeops.c 2013-07-14 17:01:31.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/fs/xfs/xfs_vnodeops.c 2013-08-22 20:30:00.000000000 +0000
+@@ -155,6 +155,77 @@ xfs_free_eofblocks(
return error;
}
+
+
int
- xfs_readlink(
- xfs_inode_t *ip,
-diff -NurpP --minimal linux-3.7/include/linux/Kbuild linux-3.7-vs2.3.5.1/include/linux/Kbuild
---- linux-3.7/include/linux/Kbuild 2012-12-11 15:47:38.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/Kbuild 2012-12-11 16:09:38.000000000 +0000
-@@ -3,3 +3,4 @@ header-y += hdlc/
- header-y += hsi/
- header-y += raid/
- header-y += usb/
-+header-y += vserver/
-diff -NurpP --minimal linux-3.7/include/linux/cred.h linux-3.7-vs2.3.5.1/include/linux/cred.h
---- linux-3.7/include/linux/cred.h 2012-07-22 21:39:43.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/cred.h 2012-12-11 15:56:32.000000000 +0000
-@@ -157,6 +157,7 @@ extern void exit_creds(struct task_struc
+ xfs_release(
+ xfs_inode_t *ip)
+diff -NurpP --minimal linux-3.10.15/include/linux/cred.h linux-3.10.15-vs2.3.6.6/include/linux/cred.h
+--- linux-3.10.15/include/linux/cred.h 2013-02-19 13:58:50.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/cred.h 2013-08-22 20:30:00.000000000 +0000
+@@ -143,6 +143,7 @@ extern void exit_creds(struct task_struc
extern int copy_creds(struct task_struct *, unsigned long);
extern const struct cred *get_task_cred(struct task_struct *);
extern struct cred *cred_alloc_blank(void);
extern struct cred *prepare_creds(void);
extern struct cred *prepare_exec_creds(void);
extern int commit_creds(struct cred *);
-@@ -210,6 +211,31 @@ static inline void validate_process_cred
+@@ -196,6 +197,31 @@ static inline void validate_process_cred
}
#endif
/**
* get_new_cred - Get a reference on a new set of credentials
* @cred: The new credentials to reference
-diff -NurpP --minimal linux-3.7/include/linux/devpts_fs.h linux-3.7-vs2.3.5.1/include/linux/devpts_fs.h
---- linux-3.7/include/linux/devpts_fs.h 2008-12-24 23:26:37.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/devpts_fs.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/devpts_fs.h linux-3.10.15-vs2.3.6.6/include/linux/devpts_fs.h
+--- linux-3.10.15/include/linux/devpts_fs.h 2013-02-19 13:58:50.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/devpts_fs.h 2013-08-22 20:30:00.000000000 +0000
@@ -45,5 +45,4 @@ static inline void devpts_pty_kill(struc
#endif
-
#endif /* _LINUX_DEVPTS_FS_H */
-diff -NurpP --minimal linux-3.7/include/linux/fs.h linux-3.7-vs2.3.5.1/include/linux/fs.h
---- linux-3.7/include/linux/fs.h 2012-12-11 15:47:41.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/fs.h 2012-12-11 21:23:03.000000000 +0000
-@@ -210,6 +210,7 @@ typedef void (dio_iodone_t)(struct kiocb
+diff -NurpP --minimal linux-3.10.15/include/linux/fs.h linux-3.10.15-vs2.3.6.6/include/linux/fs.h
+--- linux-3.10.15/include/linux/fs.h 2013-07-14 17:01:32.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/fs.h 2013-08-22 20:30:00.000000000 +0000
+@@ -211,6 +211,7 @@ typedef void (dio_iodone_t)(struct kiocb
#define ATTR_KILL_PRIV (1 << 14)
#define ATTR_OPEN (1 << 15) /* Truncating from open(O_TRUNC) */
#define ATTR_TIMES_SET (1 << 16)
/*
* This is the Inode Attributes structure, used for notify_change(). It
-@@ -225,6 +226,7 @@ struct iattr {
+@@ -226,6 +227,7 @@ struct iattr {
umode_t ia_mode;
kuid_t ia_uid;
kgid_t ia_gid;
loff_t ia_size;
struct timespec ia_atime;
struct timespec ia_mtime;
-@@ -522,7 +524,9 @@ struct inode {
+@@ -523,7 +525,9 @@ struct inode {
unsigned short i_opflags;
kuid_t i_uid;
kgid_t i_gid;
#ifdef CONFIG_FS_POSIX_ACL
struct posix_acl *i_acl;
-@@ -551,6 +555,7 @@ struct inode {
+@@ -552,6 +556,7 @@ struct inode {
unsigned int __i_nlink;
};
dev_t i_rdev;
loff_t i_size;
struct timespec i_atime;
struct timespec i_mtime;
-@@ -701,6 +706,11 @@ static inline gid_t i_gid_read(const str
+@@ -704,6 +709,11 @@ static inline gid_t i_gid_read(const str
return from_kgid(&init_user_ns, inode->i_gid);
}
-+static inline tag_t i_tag_read(const struct inode *inode)
++static inline vtag_t i_tag_read(const struct inode *inode)
+{
+ return from_ktag(&init_user_ns, inode->i_tag);
+}
static inline void i_uid_write(struct inode *inode, uid_t uid)
{
inode->i_uid = make_kuid(&init_user_ns, uid);
-@@ -711,14 +721,19 @@ static inline void i_gid_write(struct in
+@@ -714,14 +724,19 @@ static inline void i_gid_write(struct in
inode->i_gid = make_kgid(&init_user_ns, gid);
}
-+static inline void i_tag_write(struct inode *inode, tag_t tag)
++static inline void i_tag_write(struct inode *inode, vtag_t tag)
+{
+ inode->i_tag = make_ktag(&init_user_ns, tag);
+}
}
extern struct block_device *I_BDEV(struct inode *inode);
-@@ -785,6 +800,7 @@ struct file {
+@@ -788,6 +803,7 @@ struct file {
loff_t f_pos;
struct fown_struct f_owner;
const struct cred *f_cred;
-+ xid_t f_xid;
++ vxid_t f_xid;
struct file_ra_state f_ra;
u64 f_version;
-@@ -936,6 +952,7 @@ struct file_lock {
+@@ -939,6 +955,7 @@ struct file_lock {
struct file *fl_file;
loff_t fl_start;
loff_t fl_end;
-+ xid_t fl_xid;
++ vxid_t fl_xid;
struct fasync_struct * fl_fasync; /* for lease break notifications */
/* for lease breaks: */
-@@ -1570,6 +1587,7 @@ struct inode_operations {
+@@ -1569,6 +1586,7 @@ struct inode_operations {
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
ssize_t (*listxattr) (struct dentry *, char *, size_t);
int (*removexattr) (struct dentry *, const char *);
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
u64 len);
int (*update_time)(struct inode *, struct timespec *, int);
-@@ -1584,6 +1602,7 @@ ssize_t rw_copy_check_uvector(int type,
+@@ -1581,6 +1599,7 @@ ssize_t rw_copy_check_uvector(int type,
unsigned long nr_segs, unsigned long fast_segs,
struct iovec *fast_pointer,
struct iovec **ret_pointer);
extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
-@@ -1637,6 +1656,14 @@ struct super_operations {
+@@ -1634,6 +1653,14 @@ struct super_operations {
#define S_IMA 1024 /* Inode has an associated IMA struct */
#define S_AUTOMOUNT 2048 /* Automount/referral quasi-directory */
#define S_NOSEC 4096 /* no suid or xattr security attributes */
/*
* Note that nosuid etc flags are inode-specific: setting some file-system
-@@ -1661,10 +1688,13 @@ struct super_operations {
+@@ -1658,10 +1685,13 @@ struct super_operations {
#define IS_MANDLOCK(inode) __IS_FLG(inode, MS_MANDLOCK)
#define IS_NOATIME(inode) __IS_FLG(inode, MS_RDONLY|MS_NOATIME)
#define IS_I_VERSION(inode) __IS_FLG(inode, MS_I_VERSION)
#define IS_POSIXACL(inode) __IS_FLG(inode, MS_POSIXACL)
#define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD)
-@@ -1675,6 +1705,16 @@ struct super_operations {
+@@ -1672,6 +1702,16 @@ struct super_operations {
#define IS_AUTOMOUNT(inode) ((inode)->i_flags & S_AUTOMOUNT)
#define IS_NOSEC(inode) ((inode)->i_flags & S_NOSEC)
/*
* Candidates for mandatory locking have the setgid bit set
* but no group execute bit - an otherwise meaningless combination.
-@@ -2504,6 +2547,7 @@ extern int dcache_dir_open(struct inode
+@@ -2525,6 +2568,7 @@ extern int dcache_dir_open(struct inode
extern int dcache_dir_close(struct inode *, struct file *);
extern loff_t dcache_dir_lseek(struct file *, loff_t, int);
extern int dcache_readdir(struct file *, void *, filldir_t);
extern int simple_setattr(struct dentry *, struct iattr *);
extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *);
extern int simple_statfs(struct dentry *, struct kstatfs *);
-diff -NurpP --minimal linux-3.7/include/linux/init_task.h linux-3.7-vs2.3.5.1/include/linux/init_task.h
---- linux-3.7/include/linux/init_task.h 2012-12-11 15:47:42.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/init_task.h 2012-12-11 15:56:32.000000000 +0000
-@@ -210,6 +210,10 @@ extern struct task_group root_task_group
- INIT_TRACE_RECURSION \
+diff -NurpP --minimal linux-3.10.15/include/linux/init_task.h linux-3.10.15-vs2.3.6.6/include/linux/init_task.h
+--- linux-3.10.15/include/linux/init_task.h 2013-05-31 13:45:27.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/init_task.h 2013-08-22 20:30:00.000000000 +0000
+@@ -222,6 +222,10 @@ extern struct task_group root_task_group
INIT_TASK_RCU_PREEMPT(tsk) \
INIT_CPUSET_SEQ \
+ INIT_VTIME(tsk) \
+ .xid = 0, \
+ .vx_info = NULL, \
+ .nid = 0, \
}
-diff -NurpP --minimal linux-3.7/include/linux/ipc.h linux-3.7-vs2.3.5.1/include/linux/ipc.h
---- linux-3.7/include/linux/ipc.h 2012-12-11 15:47:42.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/ipc.h 2012-12-11 22:24:37.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/ipc.h linux-3.10.15-vs2.3.6.6/include/linux/ipc.h
+--- linux-3.10.15/include/linux/ipc.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/ipc.h 2013-08-22 20:30:00.000000000 +0000
@@ -16,6 +16,7 @@ struct kern_ipc_perm
key_t key;
kuid_t uid;
kgid_t gid;
-+ xid_t xid;
++ vxid_t xid;
kuid_t cuid;
kgid_t cgid;
umode_t mode;
-diff -NurpP --minimal linux-3.7/include/linux/ipc_namespace.h linux-3.7-vs2.3.5.1/include/linux/ipc_namespace.h
---- linux-3.7/include/linux/ipc_namespace.h 2012-07-22 21:39:43.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/ipc_namespace.h 2012-12-11 15:56:32.000000000 +0000
-@@ -133,7 +133,8 @@ static inline int mq_init_ns(struct ipc_
-
- #if defined(CONFIG_IPC_NS)
- extern struct ipc_namespace *copy_ipcs(unsigned long flags,
-- struct task_struct *tsk);
-+ struct ipc_namespace *old_ns,
-+ struct user_namespace *user_ns);
- static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
- {
- if (ns)
-@@ -144,12 +145,13 @@ static inline struct ipc_namespace *get_
- extern void put_ipc_ns(struct ipc_namespace *ns);
- #else
- static inline struct ipc_namespace *copy_ipcs(unsigned long flags,
-- struct task_struct *tsk)
-+ struct ipc_namespace *old_ns,
-+ struct user_namespace *user_ns)
- {
- if (flags & CLONE_NEWIPC)
- return ERR_PTR(-EINVAL);
-
-- return tsk->nsproxy->ipc_ns;
-+ return old_ns;
- }
-
- static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
-diff -NurpP --minimal linux-3.7/include/linux/loop.h linux-3.7-vs2.3.5.1/include/linux/loop.h
---- linux-3.7/include/linux/loop.h 2012-12-11 15:47:42.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/loop.h 2012-12-11 22:34:03.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/loop.h linux-3.10.15-vs2.3.6.6/include/linux/loop.h
+--- linux-3.10.15/include/linux/loop.h 2013-02-19 13:58:51.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/loop.h 2013-08-22 20:30:00.000000000 +0000
@@ -41,6 +41,7 @@ struct loop_device {
struct loop_func_table *lo_encryption;
__u32 lo_init[2];
kuid_t lo_key_owner; /* Who set the key */
-+ xid_t lo_xid;
++ vxid_t lo_xid;
int (*ioctl)(struct loop_device *, int cmd,
unsigned long arg);
-diff -NurpP --minimal linux-3.7/include/linux/memcontrol.h linux-3.7-vs2.3.5.1/include/linux/memcontrol.h
---- linux-3.7/include/linux/memcontrol.h 2012-12-11 15:47:42.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/memcontrol.h 2012-12-11 15:56:32.000000000 +0000
-@@ -83,6 +83,13 @@ extern struct mem_cgroup *try_get_mem_cg
+diff -NurpP --minimal linux-3.10.15/include/linux/memcontrol.h linux-3.10.15-vs2.3.6.6/include/linux/memcontrol.h
+--- linux-3.10.15/include/linux/memcontrol.h 2013-05-31 13:45:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/memcontrol.h 2013-08-22 20:30:00.000000000 +0000
+@@ -86,6 +86,13 @@ extern struct mem_cgroup *try_get_mem_cg
extern struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg);
extern struct mem_cgroup *mem_cgroup_from_cont(struct cgroup *cont);
static inline
bool mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *memcg)
{
-diff -NurpP --minimal linux-3.7/include/linux/mm_types.h linux-3.7-vs2.3.5.1/include/linux/mm_types.h
---- linux-3.7/include/linux/mm_types.h 2012-12-11 15:47:43.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/mm_types.h 2012-12-11 15:56:32.000000000 +0000
-@@ -365,6 +365,7 @@ struct mm_struct {
+diff -NurpP --minimal linux-3.10.15/include/linux/mm_types.h linux-3.10.15-vs2.3.6.6/include/linux/mm_types.h
+--- linux-3.10.15/include/linux/mm_types.h 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/mm_types.h 2013-10-09 17:37:22.000000000 +0000
+@@ -381,6 +381,7 @@ struct mm_struct {
/* Architecture-specific MM context */
mm_context_t context;
unsigned long flags; /* Must use atomic bitops to access the bits */
-diff -NurpP --minimal linux-3.7/include/linux/mmzone.h linux-3.7-vs2.3.5.1/include/linux/mmzone.h
---- linux-3.7/include/linux/mmzone.h 2012-12-11 15:47:43.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/mmzone.h 2012-12-11 15:56:32.000000000 +0000
-@@ -735,6 +735,13 @@ typedef struct pglist_data {
- __pgdat->node_start_pfn + __pgdat->node_spanned_pages;\
- })
-
-+#define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
-+
-+#define node_end_pfn(nid) ({\
-+ pg_data_t *__pgdat = NODE_DATA(nid);\
-+ __pgdat->node_start_pfn + __pgdat->node_spanned_pages;\
-+})
-+
- #include <linux/memory_hotplug.h>
-
- extern struct mutex zonelists_mutex;
-diff -NurpP --minimal linux-3.7/include/linux/mount.h linux-3.7-vs2.3.5.1/include/linux/mount.h
---- linux-3.7/include/linux/mount.h 2012-03-19 18:47:28.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/mount.h 2012-12-11 15:56:32.000000000 +0000
-@@ -47,6 +47,9 @@ struct mnt_namespace;
+diff -NurpP --minimal linux-3.10.15/include/linux/mount.h linux-3.10.15-vs2.3.6.6/include/linux/mount.h
+--- linux-3.10.15/include/linux/mount.h 2013-05-31 13:45:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/mount.h 2013-08-22 20:30:00.000000000 +0000
+@@ -49,6 +49,9 @@ struct mnt_namespace;
- #define MNT_INTERNAL 0x4000
+ #define MNT_LOCK_READONLY 0x400000
+#define MNT_TAGID 0x10000
+#define MNT_NOTAG 0x20000
struct vfsmount {
struct dentry *mnt_root; /* root of the mounted tree */
struct super_block *mnt_sb; /* pointer to superblock */
-diff -NurpP --minimal linux-3.7/include/linux/net.h linux-3.7-vs2.3.5.1/include/linux/net.h
---- linux-3.7/include/linux/net.h 2012-12-11 15:47:43.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/net.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/net.h linux-3.10.15-vs2.3.6.6/include/linux/net.h
+--- linux-3.10.15/include/linux/net.h 2013-07-14 17:01:32.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/net.h 2013-08-22 20:30:00.000000000 +0000
@@ -38,6 +38,7 @@ struct net;
#define SOCK_PASSCRED 3
#define SOCK_PASSSEC 4
#ifndef ARCH_HAS_SOCKET_TYPES
/**
-diff -NurpP --minimal linux-3.7/include/linux/netdevice.h linux-3.7-vs2.3.5.1/include/linux/netdevice.h
---- linux-3.7/include/linux/netdevice.h 2012-12-11 15:47:43.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/netdevice.h 2012-12-11 15:56:32.000000000 +0000
-@@ -1637,6 +1637,7 @@ extern void netdev_resync_ops(struct ne
+diff -NurpP --minimal linux-3.10.15/include/linux/netdevice.h linux-3.10.15-vs2.3.6.6/include/linux/netdevice.h
+--- linux-3.10.15/include/linux/netdevice.h 2013-07-14 17:01:32.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/netdevice.h 2013-08-22 20:30:00.000000000 +0000
+@@ -1694,6 +1694,7 @@ extern int init_dummy_netdev(struct net
extern struct net_device *dev_get_by_index(struct net *net, int ifindex);
extern struct net_device *__dev_get_by_index(struct net *net, int ifindex);
+extern struct net_device *dev_get_by_index_real_rcu(struct net *net, int ifindex);
extern struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex);
+ extern int netdev_get_name(struct net *net, char *name, int ifindex);
extern int dev_restart(struct net_device *dev);
- #ifdef CONFIG_NETPOLL_TRAP
-diff -NurpP --minimal linux-3.7/include/linux/nsproxy.h linux-3.7-vs2.3.5.1/include/linux/nsproxy.h
---- linux-3.7/include/linux/nsproxy.h 2011-10-24 16:45:32.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/nsproxy.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/nsproxy.h linux-3.10.15-vs2.3.6.6/include/linux/nsproxy.h
+--- linux-3.10.15/include/linux/nsproxy.h 2013-02-19 13:58:51.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/nsproxy.h 2013-08-22 20:30:00.000000000 +0000
@@ -3,6 +3,7 @@
#include <linux/spinlock.h>
void switch_task_namespaces(struct task_struct *tsk, struct nsproxy *new);
void free_nsproxy(struct nsproxy *ns);
@@ -70,16 +72,26 @@ int unshare_nsproxy_namespaces(unsigned
- struct fs_struct *);
+ struct cred *, struct fs_struct *);
int __init nsproxy_cache_init(void);
-static inline void put_nsproxy(struct nsproxy *ns)
}
#endif
-diff -NurpP --minimal linux-3.7/include/linux/pid.h linux-3.7-vs2.3.5.1/include/linux/pid.h
---- linux-3.7/include/linux/pid.h 2011-07-22 09:18:11.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/pid.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/pid.h linux-3.10.15-vs2.3.6.6/include/linux/pid.h
+--- linux-3.10.15/include/linux/pid.h 2013-05-31 13:45:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/pid.h 2013-08-22 20:30:00.000000000 +0000
@@ -8,7 +8,8 @@ enum pid_type
PIDTYPE_PID,
PIDTYPE_PGID,
};
/*
-@@ -171,6 +172,7 @@ static inline pid_t pid_nr(struct pid *p
+@@ -172,6 +173,7 @@ static inline pid_t pid_nr(struct pid *p
}
pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns);
pid_t pid_vnr(struct pid *pid);
#define do_each_pid_task(pid, type, task) \
-diff -NurpP --minimal linux-3.7/include/linux/proc_fs.h linux-3.7-vs2.3.5.1/include/linux/proc_fs.h
---- linux-3.7/include/linux/proc_fs.h 2012-07-22 21:39:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/proc_fs.h 2012-12-11 15:56:32.000000000 +0000
-@@ -54,6 +54,7 @@ struct proc_dir_entry {
- nlink_t nlink;
- kuid_t uid;
- kgid_t gid;
-+ int vx_flags;
- loff_t size;
- const struct inode_operations *proc_iops;
- /*
-@@ -252,12 +253,18 @@ extern const struct proc_ns_operations n
- extern const struct proc_ns_operations utsns_operations;
- extern const struct proc_ns_operations ipcns_operations;
-
-+struct vx_info;
-+struct nx_info;
-+
- union proc_op {
- int (*proc_get_link)(struct dentry *, struct path *);
- int (*proc_read)(struct task_struct *task, char *page);
- int (*proc_show)(struct seq_file *m,
- struct pid_namespace *ns, struct pid *pid,
- struct task_struct *task);
-+ int (*proc_vs_read)(char *page);
-+ int (*proc_vxi_read)(struct vx_info *vxi, char *page);
-+ int (*proc_nxi_read)(struct nx_info *nxi, char *page);
- };
-
- struct ctl_table_header;
-@@ -265,6 +272,7 @@ struct ctl_table;
-
- struct proc_inode {
- struct pid *pid;
-+ int vx_flags;
- int fd;
- union proc_op op;
- struct proc_dir_entry *pde;
-diff -NurpP --minimal linux-3.7/include/linux/quotaops.h linux-3.7-vs2.3.5.1/include/linux/quotaops.h
---- linux-3.7/include/linux/quotaops.h 2012-12-11 15:47:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/quotaops.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/quotaops.h linux-3.10.15-vs2.3.6.6/include/linux/quotaops.h
+--- linux-3.10.15/include/linux/quotaops.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/quotaops.h 2013-08-22 20:30:00.000000000 +0000
@@ -8,6 +8,7 @@
#define _LINUX_QUOTAOPS_
}
static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number)
-diff -NurpP --minimal linux-3.7/include/linux/sched.h linux-3.7-vs2.3.5.1/include/linux/sched.h
---- linux-3.7/include/linux/sched.h 2012-12-11 15:47:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/sched.h 2012-12-11 15:56:32.000000000 +0000
-@@ -1378,6 +1378,14 @@ struct task_struct {
+diff -NurpP --minimal linux-3.10.15/include/linux/sched.h linux-3.10.15-vs2.3.6.6/include/linux/sched.h
+--- linux-3.10.15/include/linux/sched.h 2013-07-14 17:01:33.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/sched.h 2013-10-09 17:37:22.000000000 +0000
+@@ -1233,6 +1233,14 @@ struct task_struct {
#endif
struct seccomp seccomp;
+ struct vx_info *vx_info;
+ struct nx_info *nx_info;
+
-+ xid_t xid;
-+ nid_t nid;
-+ tag_t tag;
++ vxid_t xid;
++ vnid_t nid;
++ vtag_t tag;
+
/* Thread group tracking */
u32 parent_exec_id;
u32 self_exec_id;
-@@ -1627,6 +1635,11 @@ struct pid_namespace;
+@@ -1476,6 +1484,11 @@ struct pid_namespace;
pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
struct pid_namespace *ns);
static inline pid_t task_pid_nr(struct task_struct *tsk)
{
return tsk->pid;
-@@ -1640,7 +1653,8 @@ static inline pid_t task_pid_nr_ns(struc
+@@ -1489,7 +1502,8 @@ static inline pid_t task_pid_nr_ns(struc
static inline pid_t task_pid_vnr(struct task_struct *tsk)
{
}
-@@ -1653,7 +1667,7 @@ pid_t task_tgid_nr_ns(struct task_struct
+@@ -1502,7 +1516,7 @@ pid_t task_tgid_nr_ns(struct task_struct
static inline pid_t task_tgid_vnr(struct task_struct *tsk)
{
}
-diff -NurpP --minimal linux-3.7/include/linux/shmem_fs.h linux-3.7-vs2.3.5.1/include/linux/shmem_fs.h
---- linux-3.7/include/linux/shmem_fs.h 2012-12-11 15:47:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/shmem_fs.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/shmem_fs.h linux-3.10.15-vs2.3.6.6/include/linux/shmem_fs.h
+--- linux-3.10.15/include/linux/shmem_fs.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/shmem_fs.h 2013-08-22 20:30:00.000000000 +0000
@@ -9,6 +9,9 @@
/* inode in-kernel data */
struct shmem_inode_info {
spinlock_t lock;
unsigned long flags;
-diff -NurpP --minimal linux-3.7/include/linux/stat.h linux-3.7-vs2.3.5.1/include/linux/stat.h
---- linux-3.7/include/linux/stat.h 2012-12-11 15:47:45.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/stat.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/stat.h linux-3.10.15-vs2.3.6.6/include/linux/stat.h
+--- linux-3.10.15/include/linux/stat.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/stat.h 2013-08-22 20:30:00.000000000 +0000
@@ -25,6 +25,7 @@ struct kstat {
unsigned int nlink;
kuid_t uid;
kgid_t gid;
-+ tag_t tag;
++ ktag_t tag;
dev_t rdev;
loff_t size;
struct timespec atime;
-diff -NurpP --minimal linux-3.7/include/linux/sunrpc/auth.h linux-3.7-vs2.3.5.1/include/linux/sunrpc/auth.h
---- linux-3.7/include/linux/sunrpc/auth.h 2012-10-04 13:27:46.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/sunrpc/auth.h 2012-12-11 15:56:32.000000000 +0000
-@@ -25,6 +25,7 @@
+diff -NurpP --minimal linux-3.10.15/include/linux/sunrpc/auth.h linux-3.10.15-vs2.3.6.6/include/linux/sunrpc/auth.h
+--- linux-3.10.15/include/linux/sunrpc/auth.h 2013-07-14 17:01:33.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/sunrpc/auth.h 2013-08-22 20:30:00.000000000 +0000
+@@ -28,6 +28,7 @@ struct rpcsec_gss_info;
struct auth_cred {
- uid_t uid;
- gid_t gid;
-+ tag_t tag;
+ kuid_t uid;
+ kgid_t gid;
++ ktag_t tag;
struct group_info *group_info;
const char *principal;
unsigned char machine_cred : 1;
-diff -NurpP --minimal linux-3.7/include/linux/sunrpc/clnt.h linux-3.7-vs2.3.5.1/include/linux/sunrpc/clnt.h
---- linux-3.7/include/linux/sunrpc/clnt.h 2012-12-11 15:47:45.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/sunrpc/clnt.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/sunrpc/clnt.h linux-3.10.15-vs2.3.6.6/include/linux/sunrpc/clnt.h
+--- linux-3.10.15/include/linux/sunrpc/clnt.h 2013-07-14 17:01:33.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/sunrpc/clnt.h 2013-08-22 20:30:00.000000000 +0000
@@ -49,7 +49,8 @@ struct rpc_clnt {
unsigned int cl_softrtry : 1,/* soft timeouts */
cl_discrtry : 1,/* disconnect before retry */
struct rpc_rtt * cl_rtt; /* RTO estimator data */
const struct rpc_timeout *cl_timeout; /* Timeout strategy */
-diff -NurpP --minimal linux-3.7/include/linux/sysfs.h linux-3.7-vs2.3.5.1/include/linux/sysfs.h
---- linux-3.7/include/linux/sysfs.h 2012-07-22 21:39:44.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/sysfs.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/sysfs.h linux-3.10.15-vs2.3.6.6/include/linux/sysfs.h
+--- linux-3.10.15/include/linux/sysfs.h 2013-05-31 13:45:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/sysfs.h 2013-08-22 20:30:00.000000000 +0000
@@ -19,6 +19,8 @@
#include <linux/kobject_ns.h>
#include <linux/atomic.h>
struct kobject;
struct module;
enum kobj_ns_type;
-diff -NurpP --minimal linux-3.7/include/linux/types.h linux-3.7-vs2.3.5.1/include/linux/types.h
---- linux-3.7/include/linux/types.h 2012-12-11 15:47:45.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/types.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/types.h linux-3.10.15-vs2.3.6.6/include/linux/types.h
+--- linux-3.10.15/include/linux/types.h 2013-02-19 13:58:52.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/types.h 2013-08-22 20:30:00.000000000 +0000
@@ -32,6 +32,9 @@ typedef __kernel_uid32_t uid_t;
typedef __kernel_gid32_t gid_t;
typedef __kernel_uid16_t uid16_t;
typedef __kernel_gid16_t gid16_t;
-+typedef unsigned int xid_t;
-+typedef unsigned int nid_t;
-+typedef unsigned int tag_t;
++typedef unsigned int vxid_t;
++typedef unsigned int vnid_t;
++typedef unsigned int vtag_t;
typedef unsigned long uintptr_t;
-diff -NurpP --minimal linux-3.7/include/linux/uidgid.h linux-3.7-vs2.3.5.1/include/linux/uidgid.h
---- linux-3.7/include/linux/uidgid.h 2012-07-22 21:39:45.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/uidgid.h 2012-12-11 19:45:37.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/uidgid.h linux-3.10.15-vs2.3.6.6/include/linux/uidgid.h
+--- linux-3.10.15/include/linux/uidgid.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/uidgid.h 2013-08-22 20:30:00.000000000 +0000
@@ -23,13 +23,17 @@ typedef struct {
uid_t val;
} kuid_t;
} kgid_t;
+typedef struct {
-+ tag_t val;
++ vtag_t val;
+} ktag_t;
+
#define KUIDT_INIT(value) (kuid_t){ value }
return gid.val;
}
-+static inline tag_t __ktag_val(ktag_t tag)
++static inline vtag_t __ktag_val(ktag_t tag)
+{
+ return tag.val;
+}
typedef uid_t kuid_t;
typedef gid_t kgid_t;
-+typedef tag_t ktag_t;
++typedef vtag_t ktag_t;
static inline uid_t __kuid_val(kuid_t uid)
{
return gid;
}
-+static inline tag_t __ktag_val(ktag_t tag)
++static inline vtag_t __ktag_val(ktag_t tag)
+{
+ return tag;
+}
extern uid_t from_kuid(struct user_namespace *to, kuid_t uid);
extern gid_t from_kgid(struct user_namespace *to, kgid_t gid);
-+extern tag_t from_ktag(struct user_namespace *to, ktag_t tag);
++extern vtag_t from_ktag(struct user_namespace *to, ktag_t tag);
+
extern uid_t from_kuid_munged(struct user_namespace *to, kuid_t uid);
extern gid_t from_kgid_munged(struct user_namespace *to, kgid_t gid);
return KGIDT_INIT(gid);
}
-+static inline ktag_t make_ktag(struct user_namespace *from, tag_t tag)
++static inline ktag_t make_ktag(struct user_namespace *from, vtag_t tag)
+{
+ return KTAGT_INIT(tag);
+}
return __kgid_val(kgid);
}
-+static inline tag_t from_ktag(struct user_namespace *to, ktag_t ktag)
++static inline vtag_t from_ktag(struct user_namespace *to, ktag_t ktag)
+{
+ return __ktag_val(ktag);
+}
static inline uid_t from_kuid_munged(struct user_namespace *to, kuid_t kuid)
{
uid_t uid = from_kuid(to, kuid);
-diff -NurpP --minimal linux-3.7/include/linux/utsname.h linux-3.7-vs2.3.5.1/include/linux/utsname.h
---- linux-3.7/include/linux/utsname.h 2012-12-11 15:47:45.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/utsname.h 2012-12-11 15:56:32.000000000 +0000
-@@ -33,7 +33,8 @@ static inline void get_uts_ns(struct uts
- }
-
- extern struct uts_namespace *copy_utsname(unsigned long flags,
-- struct task_struct *tsk);
-+ struct uts_namespace *old_ns,
-+ struct user_namespace *user_ns);
- extern void free_uts_ns(struct kref *kref);
-
- static inline void put_uts_ns(struct uts_namespace *ns)
-@@ -50,12 +51,13 @@ static inline void put_uts_ns(struct uts
- }
-
- static inline struct uts_namespace *copy_utsname(unsigned long flags,
-- struct task_struct *tsk)
-+ struct uts_namespace *old_ns,
-+ struct user_namespace *user_ns)
- {
- if (flags & CLONE_NEWUTS)
- return ERR_PTR(-EINVAL);
-
-- return tsk->nsproxy->uts_ns;
-+ return old_ns;
- }
- #endif
-
-diff -NurpP --minimal linux-3.7/include/linux/vroot.h linux-3.7-vs2.3.5.1/include/linux/vroot.h
---- linux-3.7/include/linux/vroot.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vroot.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vroot.h linux-3.10.15-vs2.3.6.6/include/linux/vroot.h
+--- linux-3.10.15/include/linux/vroot.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vroot.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,51 @@
+
+/*
+#define VROOT_CLR_DEV 0x5601
+
+#endif /* _LINUX_VROOT_H */
-diff -NurpP --minimal linux-3.7/include/linux/vs_base.h linux-3.7-vs2.3.5.1/include/linux/vs_base.h
---- linux-3.7/include/linux/vs_base.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_base.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_base.h linux-3.10.15-vs2.3.6.6/include/linux/vs_base.h
+--- linux-3.10.15/include/linux/vs_base.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_base.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,10 @@
+#ifndef _VS_BASE_H
+#define _VS_BASE_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_context.h linux-3.7-vs2.3.5.1/include/linux/vs_context.h
---- linux-3.7/include/linux/vs_context.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_context.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_context.h linux-3.10.15-vs2.3.6.6/include/linux/vs_context.h
+--- linux-3.10.15/include/linux/vs_context.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_context.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,242 @@
+#ifndef _VS_CONTEXT_H
+#define _VS_CONTEXT_H
+static inline void __enter_vx_admin(struct vx_info_save *vxis)
+{
+ vxis->vxi = xchg(¤t->vx_info, NULL);
-+ vxis->xid = xchg(¤t->xid, (xid_t)0);
++ vxis->xid = xchg(¤t->xid, (vxid_t)0);
+}
+
+static inline void __leave_vx_admin(struct vx_info_save *vxis)
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_cowbl.h linux-3.7-vs2.3.5.1/include/linux/vs_cowbl.h
---- linux-3.7/include/linux/vs_cowbl.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_cowbl.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_cowbl.h linux-3.10.15-vs2.3.6.6/include/linux/vs_cowbl.h
+--- linux-3.10.15/include/linux/vs_cowbl.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_cowbl.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,48 @@
+#ifndef _VS_COWBL_H
+#define _VS_COWBL_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_cvirt.h linux-3.7-vs2.3.5.1/include/linux/vs_cvirt.h
---- linux-3.7/include/linux/vs_cvirt.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_cvirt.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_cvirt.h linux-3.10.15-vs2.3.6.6/include/linux/vs_cvirt.h
+--- linux-3.10.15/include/linux/vs_cvirt.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_cvirt.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,50 @@
+#ifndef _VS_CVIRT_H
+#define _VS_CVIRT_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_device.h linux-3.7-vs2.3.5.1/include/linux/vs_device.h
---- linux-3.7/include/linux/vs_device.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_device.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_device.h linux-3.10.15-vs2.3.6.6/include/linux/vs_device.h
+--- linux-3.10.15/include/linux/vs_device.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_device.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,45 @@
+#ifndef _VS_DEVICE_H
+#define _VS_DEVICE_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_dlimit.h linux-3.7-vs2.3.5.1/include/linux/vs_dlimit.h
---- linux-3.7/include/linux/vs_dlimit.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_dlimit.h 2012-12-11 19:37:05.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_dlimit.h linux-3.10.15-vs2.3.6.6/include/linux/vs_dlimit.h
+--- linux-3.10.15/include/linux/vs_dlimit.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_dlimit.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,215 @@
+#ifndef _VS_DLIMIT_H
+#define _VS_DLIMIT_H
+#define __dlimit_char(d) ((d) ? '*' : ' ')
+
+static inline int __dl_alloc_space(struct super_block *sb,
-+ tag_t tag, dlsize_t nr, const char *file, int line)
++ vtag_t tag, dlsize_t nr, const char *file, int line)
+{
+ struct dl_info *dli = NULL;
+ int ret = 0;
+}
+
+static inline void __dl_free_space(struct super_block *sb,
-+ tag_t tag, dlsize_t nr, const char *_file, int _line)
++ vtag_t tag, dlsize_t nr, const char *_file, int _line)
+{
+ struct dl_info *dli = NULL;
+
+}
+
+static inline int __dl_alloc_inode(struct super_block *sb,
-+ tag_t tag, const char *_file, int _line)
++ vtag_t tag, const char *_file, int _line)
+{
+ struct dl_info *dli;
+ int ret = 0;
+}
+
+static inline void __dl_free_inode(struct super_block *sb,
-+ tag_t tag, const char *_file, int _line)
++ vtag_t tag, const char *_file, int _line)
+{
+ struct dl_info *dli;
+
+ sb, tag, __dlimit_char(dli), _file, _line);
+}
+
-+static inline void __dl_adjust_block(struct super_block *sb, tag_t tag,
++static inline void __dl_adjust_block(struct super_block *sb, vtag_t tag,
+ unsigned long long *free_blocks, unsigned long long *root_blocks,
+ const char *_file, int _line)
+{
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_inet.h linux-3.7-vs2.3.5.1/include/linux/vs_inet.h
---- linux-3.7/include/linux/vs_inet.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_inet.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,353 @@
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_inet.h linux-3.10.15-vs2.3.6.6/include/linux/vs_inet.h
+--- linux-3.10.15/include/linux/vs_inet.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_inet.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,364 @@
+#ifndef _VS_INET_H
+#define _VS_INET_H
+
+int v4_addr_in_nx_info(struct nx_info *nxi, __be32 addr, uint16_t tmask)
+{
+ struct nx_addr_v4 *nxa;
++ unsigned long irqflags;
+ int ret = 1;
+
+ if (!nxi)
+ (nxi->v4_bcast.s_addr == addr))
+ goto out;
+ ret = 5;
++
+ /* check for v4 addresses */
++ spin_lock_irqsave(&nxi->addr_lock, irqflags);
+ for (nxa = &nxi->v4; nxa; nxa = nxa->next)
+ if (v4_addr_match(nxa, addr, tmask))
-+ goto out;
++ goto out_unlock;
+ ret = 0;
++out_unlock:
++ spin_unlock_irqrestore(&nxi->addr_lock, irqflags);
+out:
+ vxdprintk(VXD_CBIT(net, 0),
+ "v4_addr_in_nx_info(%p[#%u]," NIPQUAD_FMT ",%04x) = %d",
+int v4_nx_addr_in_nx_info(struct nx_info *nxi, struct nx_addr_v4 *nxa, uint16_t mask)
+{
+ struct nx_addr_v4 *ptr;
++ unsigned long irqflags;
++ int ret = 1;
+
++ spin_lock_irqsave(&nxi->addr_lock, irqflags);
+ for (ptr = &nxi->v4; ptr; ptr = ptr->next)
+ if (v4_nx_addr_match(ptr, nxa, mask))
-+ return 1;
-+ return 0;
++ goto out_unlock;
++ ret = 0;
++out_unlock:
++ spin_unlock_irqrestore(&nxi->addr_lock, irqflags);
++ return ret;
+}
+
+#include <net/inet_sock.h>
+#else
+// #warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_inet6.h linux-3.7-vs2.3.5.1/include/linux/vs_inet6.h
---- linux-3.7/include/linux/vs_inet6.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_inet6.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,246 @@
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_inet6.h linux-3.10.15-vs2.3.6.6/include/linux/vs_inet6.h
+--- linux-3.10.15/include/linux/vs_inet6.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_inet6.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,257 @@
+#ifndef _VS_INET6_H
+#define _VS_INET6_H
+
+ const struct in6_addr *addr, uint16_t mask)
+{
+ struct nx_addr_v6 *nxa;
++ unsigned long irqflags;
+ int ret = 1;
+
+ if (!nxi)
+ goto out;
++
++ spin_lock_irqsave(&nxi->addr_lock, irqflags);
+ for (nxa = &nxi->v6; nxa; nxa = nxa->next)
+ if (v6_addr_match(nxa, addr, mask))
-+ goto out;
++ goto out_unlock;
+ ret = 0;
++out_unlock:
++ spin_unlock_irqrestore(&nxi->addr_lock, irqflags);
+out:
+ vxdprintk(VXD_CBIT(net, 0),
+ "v6_addr_in_nx_info(%p[#%u],%pI6,%04x) = %d",
+int v6_nx_addr_in_nx_info(struct nx_info *nxi, struct nx_addr_v6 *nxa, uint16_t mask)
+{
+ struct nx_addr_v6 *ptr;
++ unsigned long irqflags;
++ int ret = 1;
+
++ spin_lock_irqsave(&nxi->addr_lock, irqflags);
+ for (ptr = &nxi->v6; ptr; ptr = ptr->next)
+ if (v6_nx_addr_match(ptr, nxa, mask))
-+ return 1;
-+ return 0;
++ goto out_unlock;
++ ret = 0;
++out_unlock:
++ spin_unlock_irqrestore(&nxi->addr_lock, irqflags);
++ return ret;
+}
+
+
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_limit.h linux-3.7-vs2.3.5.1/include/linux/vs_limit.h
---- linux-3.7/include/linux/vs_limit.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_limit.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_limit.h linux-3.10.15-vs2.3.6.6/include/linux/vs_limit.h
+--- linux-3.10.15/include/linux/vs_limit.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_limit.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,140 @@
+#ifndef _VS_LIMIT_H
+#define _VS_LIMIT_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_network.h linux-3.7-vs2.3.5.1/include/linux/vs_network.h
---- linux-3.7/include/linux/vs_network.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_network.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_network.h linux-3.10.15-vs2.3.6.6/include/linux/vs_network.h
+--- linux-3.10.15/include/linux/vs_network.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_network.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,169 @@
+#ifndef _NX_VS_NETWORK_H
+#define _NX_VS_NETWORK_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_pid.h linux-3.7-vs2.3.5.1/include/linux/vs_pid.h
---- linux-3.7/include/linux/vs_pid.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_pid.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_pid.h linux-3.10.15-vs2.3.6.6/include/linux/vs_pid.h
+--- linux-3.10.15/include/linux/vs_pid.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_pid.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,50 @@
+#ifndef _VS_PID_H
+#define _VS_PID_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_sched.h linux-3.7-vs2.3.5.1/include/linux/vs_sched.h
---- linux-3.7/include/linux/vs_sched.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_sched.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_sched.h linux-3.10.15-vs2.3.6.6/include/linux/vs_sched.h
+--- linux-3.10.15/include/linux/vs_sched.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_sched.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,40 @@
+#ifndef _VS_SCHED_H
+#define _VS_SCHED_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_socket.h linux-3.7-vs2.3.5.1/include/linux/vs_socket.h
---- linux-3.7/include/linux/vs_socket.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_socket.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_socket.h linux-3.10.15-vs2.3.6.6/include/linux/vs_socket.h
+--- linux-3.10.15/include/linux/vs_socket.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_socket.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,67 @@
+#ifndef _VS_SOCKET_H
+#define _VS_SOCKET_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_tag.h linux-3.7-vs2.3.5.1/include/linux/vs_tag.h
---- linux-3.7/include/linux/vs_tag.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_tag.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_tag.h linux-3.10.15-vs2.3.6.6/include/linux/vs_tag.h
+--- linux-3.10.15/include/linux/vs_tag.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_tag.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,47 @@
+#ifndef _VS_TAG_H
+#define _VS_TAG_H
+ * check current context for ADMIN/WATCH and
+ * optionally against supplied argument
+ */
-+static inline int __dx_check(tag_t cid, tag_t id, unsigned int mode)
++static inline int __dx_check(vtag_t cid, vtag_t id, unsigned int mode)
+{
+ if (mode & DX_ARG_MASK) {
+ if ((mode & DX_IDENT) && (id == cid))
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vs_time.h linux-3.7-vs2.3.5.1/include/linux/vs_time.h
---- linux-3.7/include/linux/vs_time.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vs_time.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vs_time.h linux-3.10.15-vs2.3.6.6/include/linux/vs_time.h
+--- linux-3.10.15/include/linux/vs_time.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vs_time.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,19 @@
+#ifndef _VS_TIME_H
+#define _VS_TIME_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vserver/Kbuild linux-3.7-vs2.3.5.1/include/linux/vserver/Kbuild
---- linux-3.7/include/linux/vserver/Kbuild 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/Kbuild 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,8 @@
-+
-+header-y += context_cmd.h network_cmd.h space_cmd.h \
-+ cacct_cmd.h cvirt_cmd.h limit_cmd.h dlimit_cmd.h \
-+ inode_cmd.h tag_cmd.h sched_cmd.h signal_cmd.h \
-+ debug_cmd.h device_cmd.h
-+
-+header-y += switch.h network.h monitor.h inode.h device.h
-+
-diff -NurpP --minimal linux-3.7/include/linux/vserver/base.h linux-3.7-vs2.3.5.1/include/linux/vserver/base.h
---- linux-3.7/include/linux/vserver/base.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/base.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,178 @@
-+#ifndef _VX_BASE_H
-+#define _VX_BASE_H
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/base.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/base.h
+--- linux-3.10.15/include/linux/vserver/base.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/base.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,181 @@
++#ifndef _VSERVER_BASE_H
++#define _VSERVER_BASE_H
+
+
+/* context state changes */
+ (cap_raised(current_cap(), b) && \
+ !((f) & ~vx_current_umask())))
+
++#define vx_ns_can_unshare(n, b, f) (ns_capable(n, b) || \
++ (cap_raised(current_cap(), b) && \
++ !((f) & ~vx_current_umask())))
+
+#define __vx_wmask(v) ((v)->vx_wmask)
+
+#define nx_info_state(n, m) (__nx_state(n) & (m))
+
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vserver/cacct.h linux-3.7-vs2.3.5.1/include/linux/vserver/cacct.h
---- linux-3.7/include/linux/vserver/cacct.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/cacct.h 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/cacct.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/cacct.h
+--- linux-3.10.15/include/linux/vserver/cacct.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/cacct.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,15 @@
-+#ifndef _VX_CACCT_H
-+#define _VX_CACCT_H
++#ifndef _VSERVER_CACCT_H
++#define _VSERVER_CACCT_H
+
+
+enum sock_acc_field {
+ VXA_SOCK_SIZE /* array size */
+};
+
-+#endif /* _VX_CACCT_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/cacct_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/cacct_cmd.h
---- linux-3.7/include/linux/vserver/cacct_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/cacct_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,23 @@
-+#ifndef _VX_CACCT_CMD_H
-+#define _VX_CACCT_CMD_H
-+
-+
-+/* virtual host info name commands */
-+
-+#define VCMD_sock_stat VC_CMD(VSTAT, 5, 0)
-+
-+struct vcmd_sock_stat_v0 {
-+ uint32_t field;
-+ uint32_t count[3];
-+ uint64_t total[3];
-+};
-+
++#endif /* _VSERVER_CACCT_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/cacct_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/cacct_cmd.h
+--- linux-3.10.15/include/linux/vserver/cacct_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/cacct_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,10 @@
++#ifndef _VSERVER_CACCT_CMD_H
++#define _VSERVER_CACCT_CMD_H
+
-+#ifdef __KERNEL__
+
+#include <linux/compiler.h>
++#include <uapi/vserver/cacct_cmd.h>
+
+extern int vc_sock_stat(struct vx_info *, void __user *);
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CACCT_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/cacct_def.h linux-3.7-vs2.3.5.1/include/linux/vserver/cacct_def.h
---- linux-3.7/include/linux/vserver/cacct_def.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/cacct_def.h 2012-12-11 15:56:32.000000000 +0000
++#endif /* _VSERVER_CACCT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/cacct_def.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/cacct_def.h
+--- linux-3.10.15/include/linux/vserver/cacct_def.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/cacct_def.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,43 @@
-+#ifndef _VX_CACCT_DEF_H
-+#define _VX_CACCT_DEF_H
++#ifndef _VSERVER_CACCT_DEF_H
++#define _VSERVER_CACCT_DEF_H
+
+#include <asm/atomic.h>
+#include <linux/vserver/cacct.h>
+
+#endif
+
-+#endif /* _VX_CACCT_DEF_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/cacct_int.h linux-3.7-vs2.3.5.1/include/linux/vserver/cacct_int.h
---- linux-3.7/include/linux/vserver/cacct_int.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/cacct_int.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,21 @@
-+#ifndef _VX_CACCT_INT_H
-+#define _VX_CACCT_INT_H
-+
-+
-+#ifdef __KERNEL__
++#endif /* _VSERVER_CACCT_DEF_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/cacct_int.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/cacct_int.h
+--- linux-3.10.15/include/linux/vserver/cacct_int.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/cacct_int.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,17 @@
++#ifndef _VSERVER_CACCT_INT_H
++#define _VSERVER_CACCT_INT_H
+
+static inline
+unsigned long vx_sock_count(struct _vx_cacct *cacct, int type, int pos)
+ return atomic_long_read(&cacct->sock[type][pos].total);
+}
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CACCT_INT_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/check.h linux-3.7-vs2.3.5.1/include/linux/vserver/check.h
---- linux-3.7/include/linux/vserver/check.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/check.h 2012-12-11 15:56:32.000000000 +0000
++#endif /* _VSERVER_CACCT_INT_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/check.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/check.h
+--- linux-3.10.15/include/linux/vserver/check.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/check.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,89 @@
-+#ifndef _VS_CHECK_H
-+#define _VS_CHECK_H
++#ifndef _VSERVER_CHECK_H
++#define _VSERVER_CHECK_H
+
+
+#define MAX_S_CONTEXT 65535 /* Arbitrary limit */
+#define nx_weak_check(c, m) ((m) ? nx_check(c, m) : 1)
+
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vserver/context.h linux-3.7-vs2.3.5.1/include/linux/vserver/context.h
---- linux-3.7/include/linux/vserver/context.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/context.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,188 @@
-+#ifndef _VX_CONTEXT_H
-+#define _VX_CONTEXT_H
-+
-+#include <linux/types.h>
-+#include <linux/capability.h>
-+
-+
-+/* context flags */
-+
-+#define VXF_INFO_SCHED 0x00000002
-+#define VXF_INFO_NPROC 0x00000004
-+#define VXF_INFO_PRIVATE 0x00000008
-+
-+#define VXF_INFO_INIT 0x00000010
-+#define VXF_INFO_HIDE 0x00000020
-+#define VXF_INFO_ULIMIT 0x00000040
-+#define VXF_INFO_NSPACE 0x00000080
-+
-+#define VXF_SCHED_HARD 0x00000100
-+#define VXF_SCHED_PRIO 0x00000200
-+#define VXF_SCHED_PAUSE 0x00000400
-+
-+#define VXF_VIRT_MEM 0x00010000
-+#define VXF_VIRT_UPTIME 0x00020000
-+#define VXF_VIRT_CPU 0x00040000
-+#define VXF_VIRT_LOAD 0x00080000
-+#define VXF_VIRT_TIME 0x00100000
-+
-+#define VXF_HIDE_MOUNT 0x01000000
-+/* was VXF_HIDE_NETIF 0x02000000 */
-+#define VXF_HIDE_VINFO 0x04000000
-+
-+#define VXF_STATE_SETUP (1ULL << 32)
-+#define VXF_STATE_INIT (1ULL << 33)
-+#define VXF_STATE_ADMIN (1ULL << 34)
-+
-+#define VXF_SC_HELPER (1ULL << 36)
-+#define VXF_REBOOT_KILL (1ULL << 37)
-+#define VXF_PERSISTENT (1ULL << 38)
-+
-+#define VXF_FORK_RSS (1ULL << 48)
-+#define VXF_PROLIFIC (1ULL << 49)
-+
-+#define VXF_IGNEG_NICE (1ULL << 52)
-+
-+#define VXF_ONE_TIME (0x0007ULL << 32)
-+
-+#define VXF_INIT_SET (VXF_STATE_SETUP | VXF_STATE_INIT | VXF_STATE_ADMIN)
-+
-+
-+/* context migration */
-+
-+#define VXM_SET_INIT 0x00000001
-+#define VXM_SET_REAPER 0x00000002
-+
-+/* context caps */
-+
-+#define VXC_SET_UTSNAME 0x00000001
-+#define VXC_SET_RLIMIT 0x00000002
-+#define VXC_FS_SECURITY 0x00000004
-+#define VXC_FS_TRUSTED 0x00000008
-+#define VXC_TIOCSTI 0x00000010
-+
-+/* was VXC_RAW_ICMP 0x00000100 */
-+#define VXC_SYSLOG 0x00001000
-+#define VXC_OOM_ADJUST 0x00002000
-+#define VXC_AUDIT_CONTROL 0x00004000
-+
-+#define VXC_SECURE_MOUNT 0x00010000
-+#define VXC_SECURE_REMOUNT 0x00020000
-+#define VXC_BINARY_MOUNT 0x00040000
-+
-+#define VXC_QUOTA_CTL 0x00100000
-+#define VXC_ADMIN_MAPPER 0x00200000
-+#define VXC_ADMIN_CLOOP 0x00400000
-+
-+#define VXC_KTHREAD 0x01000000
-+#define VXC_NAMESPACE 0x02000000
-+
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/context.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/context.h
+--- linux-3.10.15/include/linux/vserver/context.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/context.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,110 @@
++#ifndef _VSERVER_CONTEXT_H
++#define _VSERVER_CONTEXT_H
+
-+#ifdef __KERNEL__
+
+#include <linux/list.h>
+#include <linux/spinlock.h>
+#include <linux/rcupdate.h>
++#include <uapi/vserver/context.h>
+
+#include "limit_def.h"
+#include "sched_def.h"
+
+struct vx_info {
+ struct hlist_node vx_hlist; /* linked list of contexts */
-+ xid_t vx_id; /* context id */
++ vxid_t vx_id; /* context id */
+ atomic_t vx_usecnt; /* usage count */
+ atomic_t vx_tasks; /* tasks count */
+ struct vx_info *vx_parent; /* parent context */
+
+struct vx_info_save {
+ struct vx_info *vxi;
-+ xid_t xid;
++ vxid_t xid;
+};
+
+
+extern struct vx_info *lookup_or_create_vx_info(int);
+
+extern int get_xid_list(int, unsigned int *, int);
-+extern int xid_is_hashed(xid_t);
++extern int xid_is_hashed(vxid_t);
+
+extern int vx_migrate_task(struct task_struct *, struct vx_info *, int);
+
+extern long vs_state_change(struct vx_info *, unsigned int);
+
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CONTEXT_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/context_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/context_cmd.h
---- linux-3.7/include/linux/vserver/context_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/context_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,162 @@
-+#ifndef _VX_CONTEXT_CMD_H
-+#define _VX_CONTEXT_CMD_H
++#endif /* _VSERVER_CONTEXT_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/context_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/context_cmd.h
+--- linux-3.10.15/include/linux/vserver/context_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/context_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,33 @@
++#ifndef _VSERVER_CONTEXT_CMD_H
++#define _VSERVER_CONTEXT_CMD_H
+
++#include <uapi/vserver/context_cmd.h>
+
-+/* vinfo commands */
++extern int vc_task_xid(uint32_t);
+
-+#define VCMD_task_xid VC_CMD(VINFO, 1, 0)
++extern int vc_vx_info(struct vx_info *, void __user *);
+
-+#ifdef __KERNEL__
-+extern int vc_task_xid(uint32_t);
++extern int vc_ctx_stat(struct vx_info *, void __user *);
+
-+#endif /* __KERNEL__ */
++extern int vc_ctx_create(uint32_t, void __user *);
++extern int vc_ctx_migrate(struct vx_info *, void __user *);
+
-+#define VCMD_vx_info VC_CMD(VINFO, 5, 0)
++extern int vc_get_cflags(struct vx_info *, void __user *);
++extern int vc_set_cflags(struct vx_info *, void __user *);
+
-+struct vcmd_vx_info_v0 {
-+ uint32_t xid;
-+ uint32_t initpid;
-+ /* more to come */
-+};
++extern int vc_get_ccaps(struct vx_info *, void __user *);
++extern int vc_set_ccaps(struct vx_info *, void __user *);
+
-+#ifdef __KERNEL__
-+extern int vc_vx_info(struct vx_info *, void __user *);
++extern int vc_get_bcaps(struct vx_info *, void __user *);
++extern int vc_set_bcaps(struct vx_info *, void __user *);
+
-+#endif /* __KERNEL__ */
++extern int vc_get_umask(struct vx_info *, void __user *);
++extern int vc_set_umask(struct vx_info *, void __user *);
+
-+#define VCMD_ctx_stat VC_CMD(VSTAT, 0, 0)
++extern int vc_get_wmask(struct vx_info *, void __user *);
++extern int vc_set_wmask(struct vx_info *, void __user *);
+
-+struct vcmd_ctx_stat_v0 {
-+ uint32_t usecnt;
-+ uint32_t tasks;
-+ /* more to come */
-+};
++extern int vc_get_badness(struct vx_info *, void __user *);
++extern int vc_set_badness(struct vx_info *, void __user *);
+
-+#ifdef __KERNEL__
-+extern int vc_ctx_stat(struct vx_info *, void __user *);
++#endif /* _VSERVER_CONTEXT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/cvirt.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/cvirt.h
+--- linux-3.10.15/include/linux/vserver/cvirt.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/cvirt.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,18 @@
++#ifndef _VSERVER_CVIRT_H
++#define _VSERVER_CVIRT_H
+
-+#endif /* __KERNEL__ */
++struct timespec;
+
-+/* context commands */
++void vx_vsi_boottime(struct timespec *);
+
-+#define VCMD_ctx_create_v0 VC_CMD(VPROC, 1, 0)
-+#define VCMD_ctx_create VC_CMD(VPROC, 1, 1)
++void vx_vsi_uptime(struct timespec *, struct timespec *);
+
-+struct vcmd_ctx_create {
-+ uint64_t flagword;
-+};
+
-+#define VCMD_ctx_migrate_v0 VC_CMD(PROCMIG, 1, 0)
-+#define VCMD_ctx_migrate VC_CMD(PROCMIG, 1, 1)
++struct vx_info;
+
-+struct vcmd_ctx_migrate {
-+ uint64_t flagword;
-+};
++void vx_update_load(struct vx_info *);
+
-+#ifdef __KERNEL__
-+extern int vc_ctx_create(uint32_t, void __user *);
-+extern int vc_ctx_migrate(struct vx_info *, void __user *);
+
-+#endif /* __KERNEL__ */
++int vx_do_syslog(int, char __user *, int);
+
++#endif /* _VSERVER_CVIRT_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/cvirt_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/cvirt_cmd.h
+--- linux-3.10.15/include/linux/vserver/cvirt_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/cvirt_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,13 @@
++#ifndef _VSERVER_CVIRT_CMD_H
++#define _VSERVER_CVIRT_CMD_H
+
-+/* flag commands */
+
-+#define VCMD_get_cflags VC_CMD(FLAGS, 1, 0)
-+#define VCMD_set_cflags VC_CMD(FLAGS, 2, 0)
++#include <linux/compiler.h>
++#include <uapi/vserver/cvirt_cmd.h>
+
-+struct vcmd_ctx_flags_v0 {
-+ uint64_t flagword;
-+ uint64_t mask;
-+};
++extern int vc_set_vhi_name(struct vx_info *, void __user *);
++extern int vc_get_vhi_name(struct vx_info *, void __user *);
+
-+#ifdef __KERNEL__
-+extern int vc_get_cflags(struct vx_info *, void __user *);
-+extern int vc_set_cflags(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
-+
-+
-+/* context caps commands */
-+
-+#define VCMD_get_ccaps VC_CMD(FLAGS, 3, 1)
-+#define VCMD_set_ccaps VC_CMD(FLAGS, 4, 1)
-+
-+struct vcmd_ctx_caps_v1 {
-+ uint64_t ccaps;
-+ uint64_t cmask;
-+};
-+
-+#ifdef __KERNEL__
-+extern int vc_get_ccaps(struct vx_info *, void __user *);
-+extern int vc_set_ccaps(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
-+
-+
-+/* bcaps commands */
-+
-+#define VCMD_get_bcaps VC_CMD(FLAGS, 9, 0)
-+#define VCMD_set_bcaps VC_CMD(FLAGS, 10, 0)
-+
-+struct vcmd_bcaps {
-+ uint64_t bcaps;
-+ uint64_t bmask;
-+};
-+
-+#ifdef __KERNEL__
-+extern int vc_get_bcaps(struct vx_info *, void __user *);
-+extern int vc_set_bcaps(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
-+
-+
-+/* umask commands */
-+
-+#define VCMD_get_umask VC_CMD(FLAGS, 13, 0)
-+#define VCMD_set_umask VC_CMD(FLAGS, 14, 0)
-+
-+struct vcmd_umask {
-+ uint64_t umask;
-+ uint64_t mask;
-+};
-+
-+#ifdef __KERNEL__
-+extern int vc_get_umask(struct vx_info *, void __user *);
-+extern int vc_set_umask(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
-+
-+
-+/* wmask commands */
-+
-+#define VCMD_get_wmask VC_CMD(FLAGS, 15, 0)
-+#define VCMD_set_wmask VC_CMD(FLAGS, 16, 0)
-+
-+struct vcmd_wmask {
-+ uint64_t wmask;
-+ uint64_t mask;
-+};
-+
-+#ifdef __KERNEL__
-+extern int vc_get_wmask(struct vx_info *, void __user *);
-+extern int vc_set_wmask(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
-+
-+
-+/* OOM badness */
-+
-+#define VCMD_get_badness VC_CMD(MEMCTRL, 5, 0)
-+#define VCMD_set_badness VC_CMD(MEMCTRL, 6, 0)
-+
-+struct vcmd_badness_v0 {
-+ int64_t bias;
-+};
-+
-+#ifdef __KERNEL__
-+extern int vc_get_badness(struct vx_info *, void __user *);
-+extern int vc_set_badness(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CONTEXT_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/cvirt.h linux-3.7-vs2.3.5.1/include/linux/vserver/cvirt.h
---- linux-3.7/include/linux/vserver/cvirt.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/cvirt.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,22 @@
-+#ifndef _VX_CVIRT_H
-+#define _VX_CVIRT_H
-+
-+
-+#ifdef __KERNEL__
-+
-+struct timespec;
-+
-+void vx_vsi_boottime(struct timespec *);
-+
-+void vx_vsi_uptime(struct timespec *, struct timespec *);
-+
-+
-+struct vx_info;
-+
-+void vx_update_load(struct vx_info *);
-+
-+
-+int vx_do_syslog(int, char __user *, int);
-+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CVIRT_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/cvirt_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/cvirt_cmd.h
---- linux-3.7/include/linux/vserver/cvirt_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/cvirt_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,53 @@
-+#ifndef _VX_CVIRT_CMD_H
-+#define _VX_CVIRT_CMD_H
-+
-+
-+/* virtual host info name commands */
-+
-+#define VCMD_set_vhi_name VC_CMD(VHOST, 1, 0)
-+#define VCMD_get_vhi_name VC_CMD(VHOST, 2, 0)
-+
-+struct vcmd_vhi_name_v0 {
-+ uint32_t field;
-+ char name[65];
-+};
-+
-+
-+enum vhi_name_field {
-+ VHIN_CONTEXT = 0,
-+ VHIN_SYSNAME,
-+ VHIN_NODENAME,
-+ VHIN_RELEASE,
-+ VHIN_VERSION,
-+ VHIN_MACHINE,
-+ VHIN_DOMAINNAME,
-+};
-+
-+
-+#ifdef __KERNEL__
-+
-+#include <linux/compiler.h>
-+
-+extern int vc_set_vhi_name(struct vx_info *, void __user *);
-+extern int vc_get_vhi_name(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
-+
-+#define VCMD_virt_stat VC_CMD(VSTAT, 3, 0)
-+
-+struct vcmd_virt_stat_v0 {
-+ uint64_t offset;
-+ uint64_t uptime;
-+ uint32_t nr_threads;
-+ uint32_t nr_running;
-+ uint32_t nr_uninterruptible;
-+ uint32_t nr_onhold;
-+ uint32_t nr_forks;
-+ uint32_t load[3];
-+};
-+
-+#ifdef __KERNEL__
+extern int vc_virt_stat(struct vx_info *, void __user *);
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CVIRT_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/cvirt_def.h linux-3.7-vs2.3.5.1/include/linux/vserver/cvirt_def.h
---- linux-3.7/include/linux/vserver/cvirt_def.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/cvirt_def.h 2012-12-11 15:56:32.000000000 +0000
++#endif /* _VSERVER_CVIRT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/cvirt_def.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/cvirt_def.h
+--- linux-3.10.15/include/linux/vserver/cvirt_def.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/cvirt_def.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,80 @@
-+#ifndef _VX_CVIRT_DEF_H
-+#define _VX_CVIRT_DEF_H
++#ifndef _VSERVER_CVIRT_DEF_H
++#define _VSERVER_CVIRT_DEF_H
+
+#include <linux/jiffies.h>
+#include <linux/spinlock.h>
+
+#endif
+
-+#endif /* _VX_CVIRT_DEF_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/debug.h linux-3.7-vs2.3.5.1/include/linux/vserver/debug.h
---- linux-3.7/include/linux/vserver/debug.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/debug.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,145 @@
-+#ifndef _VX_DEBUG_H
-+#define _VX_DEBUG_H
++#endif /* _VSERVER_CVIRT_DEF_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/debug.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/debug.h
+--- linux-3.10.15/include/linux/vserver/debug.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/debug.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,146 @@
++#ifndef _VSERVER_DEBUG_H
++#define _VSERVER_DEBUG_H
+
+
+#define VXD_CBIT(n, m) (vs_debug_ ## n & (1 << (m)))
+#define vxwprintk_task(c, f, x...) \
+ vxwprintk(c, VX_WARN_TASK f, \
+ current->comm, current->pid, \
-+ current->xid, current->nid, current->tag, ##x)
++ current->xid, current->nid, \
++ current->tag, ##x)
+#define vxwprintk_xid(c, f, x...) \
+ vxwprintk(c, VX_WARN_XID f, current->xid, x)
+#define vxwprintk_nid(c, f, x...) \
+#endif
+
+
-+#endif /* _VX_DEBUG_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/debug_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/debug_cmd.h
---- linux-3.7/include/linux/vserver/debug_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/debug_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,58 @@
-+#ifndef _VX_DEBUG_CMD_H
-+#define _VX_DEBUG_CMD_H
-+
-+
-+/* debug commands */
-+
-+#define VCMD_dump_history VC_CMD(DEBUG, 1, 0)
-+
-+#define VCMD_read_history VC_CMD(DEBUG, 5, 0)
-+#define VCMD_read_monitor VC_CMD(DEBUG, 6, 0)
-+
-+struct vcmd_read_history_v0 {
-+ uint32_t index;
-+ uint32_t count;
-+ char __user *data;
-+};
-+
-+struct vcmd_read_monitor_v0 {
-+ uint32_t index;
-+ uint32_t count;
-+ char __user *data;
-+};
++#endif /* _VSERVER_DEBUG_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/debug_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/debug_cmd.h
+--- linux-3.10.15/include/linux/vserver/debug_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/debug_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,37 @@
++#ifndef _VSERVER_DEBUG_CMD_H
++#define _VSERVER_DEBUG_CMD_H
+
++#include <uapi/vserver/debug_cmd.h>
+
-+#ifdef __KERNEL__
+
+#ifdef CONFIG_COMPAT
+
+
+#endif /* CONFIG_COMPAT */
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_DEBUG_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/device.h linux-3.7-vs2.3.5.1/include/linux/vserver/device.h
---- linux-3.7/include/linux/vserver/device.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/device.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,15 @@
-+#ifndef _VX_DEVICE_H
-+#define _VX_DEVICE_H
-+
-+
-+#define DATTR_CREATE 0x00000001
-+#define DATTR_OPEN 0x00000002
-+
-+#define DATTR_REMAP 0x00000010
++#endif /* _VSERVER_DEBUG_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/device.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/device.h
+--- linux-3.10.15/include/linux/vserver/device.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/device.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,9 @@
++#ifndef _VSERVER_DEVICE_H
++#define _VSERVER_DEVICE_H
+
-+#define DATTR_MASK 0x00000013
+
++#include <uapi/vserver/device.h>
+
-+#else /* _VX_DEVICE_H */
++#else /* _VSERVER_DEVICE_H */
+#warning duplicate inclusion
-+#endif /* _VX_DEVICE_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/device_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/device_cmd.h
---- linux-3.7/include/linux/vserver/device_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/device_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,44 @@
-+#ifndef _VX_DEVICE_CMD_H
-+#define _VX_DEVICE_CMD_H
-+
-+
-+/* device vserver commands */
-+
-+#define VCMD_set_mapping VC_CMD(DEVICE, 1, 0)
-+#define VCMD_unset_mapping VC_CMD(DEVICE, 2, 0)
-+
-+struct vcmd_set_mapping_v0 {
-+ const char __user *device;
-+ const char __user *target;
-+ uint32_t flags;
-+};
++#endif /* _VSERVER_DEVICE_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/device_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/device_cmd.h
+--- linux-3.10.15/include/linux/vserver/device_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/device_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,31 @@
++#ifndef _VSERVER_DEVICE_CMD_H
++#define _VSERVER_DEVICE_CMD_H
+
++#include <uapi/vserver/device_cmd.h>
+
-+#ifdef __KERNEL__
+
+#ifdef CONFIG_COMPAT
+
+
+#endif /* CONFIG_COMPAT */
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_DEVICE_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/device_def.h linux-3.7-vs2.3.5.1/include/linux/vserver/device_def.h
---- linux-3.7/include/linux/vserver/device_def.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/device_def.h 2012-12-11 15:56:32.000000000 +0000
++#endif /* _VSERVER_DEVICE_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/device_def.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/device_def.h
+--- linux-3.10.15/include/linux/vserver/device_def.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/device_def.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,17 @@
-+#ifndef _VX_DEVICE_DEF_H
-+#define _VX_DEVICE_DEF_H
++#ifndef _VSERVER_DEVICE_DEF_H
++#define _VSERVER_DEVICE_DEF_H
+
+#include <linux/types.h>
+
+#endif
+};
+
-+#endif /* _VX_DEVICE_DEF_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/dlimit.h linux-3.7-vs2.3.5.1/include/linux/vserver/dlimit.h
---- linux-3.7/include/linux/vserver/dlimit.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/dlimit.h 2012-12-11 15:56:32.000000000 +0000
++#endif /* _VSERVER_DEVICE_DEF_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/dlimit.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/dlimit.h
+--- linux-3.10.15/include/linux/vserver/dlimit.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/dlimit.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,54 @@
-+#ifndef _VX_DLIMIT_H
-+#define _VX_DLIMIT_H
++#ifndef _VSERVER_DLIMIT_H
++#define _VSERVER_DLIMIT_H
+
+#include "switch.h"
+
+struct dl_info {
+ struct hlist_node dl_hlist; /* linked list of contexts */
+ struct rcu_head dl_rcu; /* the rcu head */
-+ tag_t dl_tag; /* context tag */
++ vtag_t dl_tag; /* context tag */
+ atomic_t dl_usecnt; /* usage count */
+ atomic_t dl_refcnt; /* reference count */
+
+extern void rcu_free_dl_info(struct rcu_head *);
+extern void unhash_dl_info(struct dl_info *);
+
-+extern struct dl_info *locate_dl_info(struct super_block *, tag_t);
++extern struct dl_info *locate_dl_info(struct super_block *, vtag_t);
+
+
+struct kstatfs;
+typedef uint64_t dlsize_t;
+
+#endif /* __KERNEL__ */
-+#else /* _VX_DLIMIT_H */
++#else /* _VSERVER_DLIMIT_H */
+#warning duplicate inclusion
-+#endif /* _VX_DLIMIT_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/dlimit_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/dlimit_cmd.h
---- linux-3.7/include/linux/vserver/dlimit_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/dlimit_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,109 @@
-+#ifndef _VX_DLIMIT_CMD_H
-+#define _VX_DLIMIT_CMD_H
++#endif /* _VSERVER_DLIMIT_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/dlimit_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/dlimit_cmd.h
+--- linux-3.10.15/include/linux/vserver/dlimit_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/dlimit_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,46 @@
++#ifndef _VSERVER_DLIMIT_CMD_H
++#define _VSERVER_DLIMIT_CMD_H
+
++#include <uapi/vserver/dlimit_cmd.h>
+
-+/* dlimit vserver commands */
+
-+#define VCMD_add_dlimit VC_CMD(DLIMIT, 1, 0)
-+#define VCMD_rem_dlimit VC_CMD(DLIMIT, 2, 0)
++#ifdef CONFIG_COMPAT
+
-+#define VCMD_set_dlimit VC_CMD(DLIMIT, 5, 0)
-+#define VCMD_get_dlimit VC_CMD(DLIMIT, 6, 0)
++#include <asm/compat.h>
+
-+struct vcmd_ctx_dlimit_base_v0 {
-+ const char __user *name;
++struct vcmd_ctx_dlimit_base_v0_x32 {
++ compat_uptr_t name_ptr;
+ uint32_t flags;
+};
+
-+struct vcmd_ctx_dlimit_v0 {
-+ const char __user *name;
++struct vcmd_ctx_dlimit_v0_x32 {
++ compat_uptr_t name_ptr;
+ uint32_t space_used; /* used space in kbytes */
+ uint32_t space_total; /* maximum space in kbytes */
+ uint32_t inodes_used; /* used inodes */
+ uint32_t flags;
+};
+
-+#define CDLIM_UNSET ((uint32_t)0UL)
-+#define CDLIM_INFINITY ((uint32_t)~0UL)
-+#define CDLIM_KEEP ((uint32_t)~1UL)
++#endif /* CONFIG_COMPAT */
+
-+#define DLIME_UNIT 0
-+#define DLIME_KILO 1
-+#define DLIME_MEGA 2
-+#define DLIME_GIGA 3
++#include <linux/compiler.h>
+
-+#define DLIMF_SHIFT 0x10
++extern int vc_add_dlimit(uint32_t, void __user *);
++extern int vc_rem_dlimit(uint32_t, void __user *);
+
-+#define DLIMS_USED 0
-+#define DLIMS_TOTAL 2
++extern int vc_set_dlimit(uint32_t, void __user *);
++extern int vc_get_dlimit(uint32_t, void __user *);
+
-+static inline
-+uint64_t dlimit_space_32to64(uint32_t val, uint32_t flags, int shift)
-+{
-+ int exp = (flags & DLIMF_SHIFT) ?
-+ (flags >> shift) & DLIME_GIGA : DLIME_KILO;
-+ return ((uint64_t)val) << (10 * exp);
-+}
++#ifdef CONFIG_COMPAT
+
-+static inline
-+uint32_t dlimit_space_64to32(uint64_t val, uint32_t *flags, int shift)
-+{
-+ int exp = 0;
-+
-+ if (*flags & DLIMF_SHIFT) {
-+ while (val > (1LL << 32) && (exp < 3)) {
-+ val >>= 10;
-+ exp++;
-+ }
-+ *flags &= ~(DLIME_GIGA << shift);
-+ *flags |= exp << shift;
-+ } else
-+ val >>= 10;
-+ return val;
-+}
-+
-+#ifdef __KERNEL__
-+
-+#ifdef CONFIG_COMPAT
-+
-+#include <asm/compat.h>
-+
-+struct vcmd_ctx_dlimit_base_v0_x32 {
-+ compat_uptr_t name_ptr;
-+ uint32_t flags;
-+};
-+
-+struct vcmd_ctx_dlimit_v0_x32 {
-+ compat_uptr_t name_ptr;
-+ uint32_t space_used; /* used space in kbytes */
-+ uint32_t space_total; /* maximum space in kbytes */
-+ uint32_t inodes_used; /* used inodes */
-+ uint32_t inodes_total; /* maximum inodes */
-+ uint32_t reserved; /* reserved for root in % */
-+ uint32_t flags;
-+};
-+
-+#endif /* CONFIG_COMPAT */
-+
-+#include <linux/compiler.h>
-+
-+extern int vc_add_dlimit(uint32_t, void __user *);
-+extern int vc_rem_dlimit(uint32_t, void __user *);
-+
-+extern int vc_set_dlimit(uint32_t, void __user *);
-+extern int vc_get_dlimit(uint32_t, void __user *);
-+
-+#ifdef CONFIG_COMPAT
-+
-+extern int vc_add_dlimit_x32(uint32_t, void __user *);
-+extern int vc_rem_dlimit_x32(uint32_t, void __user *);
++extern int vc_add_dlimit_x32(uint32_t, void __user *);
++extern int vc_rem_dlimit_x32(uint32_t, void __user *);
+
+extern int vc_set_dlimit_x32(uint32_t, void __user *);
+extern int vc_get_dlimit_x32(uint32_t, void __user *);
+
+#endif /* CONFIG_COMPAT */
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_DLIMIT_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/global.h linux-3.7-vs2.3.5.1/include/linux/vserver/global.h
---- linux-3.7/include/linux/vserver/global.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/global.h 2012-12-11 15:56:32.000000000 +0000
++#endif /* _VSERVER_DLIMIT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/global.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/global.h
+--- linux-3.10.15/include/linux/vserver/global.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/global.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,19 @@
-+#ifndef _VX_GLOBAL_H
-+#define _VX_GLOBAL_H
++#ifndef _VSERVER_GLOBAL_H
++#define _VSERVER_GLOBAL_H
+
+
+extern atomic_t vx_global_ctotal;
+extern atomic_t vs_global_pid_ns;
+
+
-+#endif /* _VX_GLOBAL_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/history.h linux-3.7-vs2.3.5.1/include/linux/vserver/history.h
---- linux-3.7/include/linux/vserver/history.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/history.h 2012-12-11 15:56:32.000000000 +0000
++#endif /* _VSERVER_GLOBAL_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/history.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/history.h
+--- linux-3.10.15/include/linux/vserver/history.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/history.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,197 @@
-+#ifndef _VX_HISTORY_H
-+#define _VX_HISTORY_H
++#ifndef _VSERVER_HISTORY_H
++#define _VSERVER_HISTORY_H
+
+
+enum {
+
+#endif /* CONFIG_VSERVER_HISTORY */
+
-+#endif /* _VX_HISTORY_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/inode.h linux-3.7-vs2.3.5.1/include/linux/vserver/inode.h
---- linux-3.7/include/linux/vserver/inode.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/inode.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,39 @@
-+#ifndef _VX_INODE_H
-+#define _VX_INODE_H
-+
-+
-+#define IATTR_TAG 0x01000000
-+
-+#define IATTR_ADMIN 0x00000001
-+#define IATTR_WATCH 0x00000002
-+#define IATTR_HIDE 0x00000004
-+#define IATTR_FLAGS 0x00000007
-+
-+#define IATTR_BARRIER 0x00010000
-+#define IATTR_IXUNLINK 0x00020000
-+#define IATTR_IMMUTABLE 0x00040000
-+#define IATTR_COW 0x00080000
++#endif /* _VSERVER_HISTORY_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/inode.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/inode.h
+--- linux-3.10.15/include/linux/vserver/inode.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/inode.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,19 @@
++#ifndef _VSERVER_INODE_H
++#define _VSERVER_INODE_H
+
-+#ifdef __KERNEL__
++#include <uapi/vserver/inode.h>
+
+
+#ifdef CONFIG_VSERVER_PROC_SECURE
+
+#define vx_hide_check(c, m) (((m) & IATTR_HIDE) ? vx_check(c, m) : 1)
+
-+#endif /* __KERNEL__ */
-+
-+/* inode ioctls */
-+
-+#define FIOC_GETXFLG _IOR('x', 5, long)
-+#define FIOC_SETXFLG _IOW('x', 6, long)
-+
-+#else /* _VX_INODE_H */
++#else /* _VSERVER_INODE_H */
+#warning duplicate inclusion
-+#endif /* _VX_INODE_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/inode_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/inode_cmd.h
---- linux-3.7/include/linux/vserver/inode_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/inode_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,59 @@
-+#ifndef _VX_INODE_CMD_H
-+#define _VX_INODE_CMD_H
-+
-+
-+/* inode vserver commands */
-+
-+#define VCMD_get_iattr VC_CMD(INODE, 1, 1)
-+#define VCMD_set_iattr VC_CMD(INODE, 2, 1)
-+
-+#define VCMD_fget_iattr VC_CMD(INODE, 3, 0)
-+#define VCMD_fset_iattr VC_CMD(INODE, 4, 0)
-+
-+struct vcmd_ctx_iattr_v1 {
-+ const char __user *name;
-+ uint32_t tag;
-+ uint32_t flags;
-+ uint32_t mask;
-+};
-+
-+struct vcmd_ctx_fiattr_v0 {
-+ uint32_t tag;
-+ uint32_t flags;
-+ uint32_t mask;
-+};
++#endif /* _VSERVER_INODE_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/inode_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/inode_cmd.h
+--- linux-3.10.15/include/linux/vserver/inode_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/inode_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,36 @@
++#ifndef _VSERVER_INODE_CMD_H
++#define _VSERVER_INODE_CMD_H
+
++#include <uapi/vserver/inode_cmd.h>
+
-+#ifdef __KERNEL__
+
+
+#ifdef CONFIG_COMPAT
+
+#endif /* CONFIG_COMPAT */
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_INODE_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/limit.h linux-3.7-vs2.3.5.1/include/linux/vserver/limit.h
---- linux-3.7/include/linux/vserver/limit.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/limit.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,71 @@
-+#ifndef _VX_LIMIT_H
-+#define _VX_LIMIT_H
-+
-+#define VLIMIT_NSOCK 16
-+#define VLIMIT_OPENFD 17
-+#define VLIMIT_ANON 18
-+#define VLIMIT_SHMEM 19
-+#define VLIMIT_SEMARY 20
-+#define VLIMIT_NSEMS 21
-+#define VLIMIT_DENTRY 22
-+#define VLIMIT_MAPPED 23
++#endif /* _VSERVER_INODE_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/limit.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/limit.h
+--- linux-3.10.15/include/linux/vserver/limit.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/limit.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,61 @@
++#ifndef _VSERVER_LIMIT_H
++#define _VSERVER_LIMIT_H
+
++#include <uapi/vserver/limit.h>
+
-+#ifdef __KERNEL__
+
+#define VLIM_NOCHECK ((1L << VLIMIT_DENTRY) | (1L << RLIMIT_RSS))
+
+
+#define NUM_LIMITS 24
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_LIMIT_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/limit_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/limit_cmd.h
---- linux-3.7/include/linux/vserver/limit_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/limit_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,71 @@
-+#ifndef _VX_LIMIT_CMD_H
-+#define _VX_LIMIT_CMD_H
-+
-+
-+/* rlimit vserver commands */
-+
-+#define VCMD_get_rlimit VC_CMD(RLIMIT, 1, 0)
-+#define VCMD_set_rlimit VC_CMD(RLIMIT, 2, 0)
-+#define VCMD_get_rlimit_mask VC_CMD(RLIMIT, 3, 0)
-+#define VCMD_reset_hits VC_CMD(RLIMIT, 7, 0)
-+#define VCMD_reset_minmax VC_CMD(RLIMIT, 9, 0)
-+
-+struct vcmd_ctx_rlimit_v0 {
-+ uint32_t id;
-+ uint64_t minimum;
-+ uint64_t softlimit;
-+ uint64_t maximum;
-+};
-+
-+struct vcmd_ctx_rlimit_mask_v0 {
-+ uint32_t minimum;
-+ uint32_t softlimit;
-+ uint32_t maximum;
-+};
-+
-+#define VCMD_rlimit_stat VC_CMD(VSTAT, 1, 0)
-+
-+struct vcmd_rlimit_stat_v0 {
-+ uint32_t id;
-+ uint32_t hits;
-+ uint64_t value;
-+ uint64_t minimum;
-+ uint64_t maximum;
-+};
++#endif /* _VSERVER_LIMIT_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/limit_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/limit_cmd.h
+--- linux-3.10.15/include/linux/vserver/limit_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/limit_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,35 @@
++#ifndef _VSERVER_LIMIT_CMD_H
++#define _VSERVER_LIMIT_CMD_H
+
-+#define CRLIM_UNSET (0ULL)
-+#define CRLIM_INFINITY (~0ULL)
-+#define CRLIM_KEEP (~1ULL)
++#include <uapi/vserver/limit_cmd.h>
+
-+#ifdef __KERNEL__
+
+#ifdef CONFIG_IA32_EMULATION
+
+
+#endif /* CONFIG_IA32_EMULATION */
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_LIMIT_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/limit_def.h linux-3.7-vs2.3.5.1/include/linux/vserver/limit_def.h
---- linux-3.7/include/linux/vserver/limit_def.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/limit_def.h 2012-12-11 15:56:32.000000000 +0000
++#endif /* _VSERVER_LIMIT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/limit_def.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/limit_def.h
+--- linux-3.10.15/include/linux/vserver/limit_def.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/limit_def.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,47 @@
-+#ifndef _VX_LIMIT_DEF_H
-+#define _VX_LIMIT_DEF_H
++#ifndef _VSERVER_LIMIT_DEF_H
++#define _VSERVER_LIMIT_DEF_H
+
+#include <asm/atomic.h>
+#include <asm/resource.h>
+
+#endif
+
-+#endif /* _VX_LIMIT_DEF_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/limit_int.h linux-3.7-vs2.3.5.1/include/linux/vserver/limit_int.h
---- linux-3.7/include/linux/vserver/limit_int.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/limit_int.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,198 @@
-+#ifndef _VX_LIMIT_INT_H
-+#define _VX_LIMIT_INT_H
-+
-+#include "context.h"
-+
-+#ifdef __KERNEL__
++#endif /* _VSERVER_LIMIT_DEF_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/limit_int.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/limit_int.h
+--- linux-3.10.15/include/linux/vserver/limit_int.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/limit_int.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,193 @@
++#ifndef _VSERVER_LIMIT_INT_H
++#define _VSERVER_LIMIT_INT_H
+
+#define VXD_RCRES_COND(r) VXD_CBIT(cres, r)
+#define VXD_RLIMIT_COND(r) VXD_CBIT(limit, r)
+}
+
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_LIMIT_INT_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/monitor.h linux-3.7-vs2.3.5.1/include/linux/vserver/monitor.h
---- linux-3.7/include/linux/vserver/monitor.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/monitor.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,96 @@
-+#ifndef _VX_MONITOR_H
-+#define _VX_MONITOR_H
-+
-+#include <linux/types.h>
-+
-+enum {
-+ VXM_UNUSED = 0,
-+
-+ VXM_SYNC = 0x10,
-+
-+ VXM_UPDATE = 0x20,
-+ VXM_UPDATE_1,
-+ VXM_UPDATE_2,
++#endif /* _VSERVER_LIMIT_INT_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/monitor.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/monitor.h
+--- linux-3.10.15/include/linux/vserver/monitor.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/monitor.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,6 @@
++#ifndef _VSERVER_MONITOR_H
++#define _VSERVER_MONITOR_H
+
-+ VXM_RQINFO_1 = 0x24,
-+ VXM_RQINFO_2,
++#include <uapi/vserver/monitor.h>
+
-+ VXM_ACTIVATE = 0x40,
-+ VXM_DEACTIVATE,
-+ VXM_IDLE,
++#endif /* _VSERVER_MONITOR_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/network.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/network.h
+--- linux-3.10.15/include/linux/vserver/network.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/network.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,76 @@
++#ifndef _VSERVER_NETWORK_H
++#define _VSERVER_NETWORK_H
+
-+ VXM_HOLD = 0x44,
-+ VXM_UNHOLD,
+
-+ VXM_MIGRATE = 0x48,
-+ VXM_RESCHED,
++#include <linux/list.h>
++#include <linux/spinlock.h>
++#include <linux/rcupdate.h>
++#include <linux/in.h>
++#include <linux/in6.h>
++#include <asm/atomic.h>
++#include <uapi/vserver/network.h>
+
-+ /* all other bits are flags */
-+ VXM_SCHED = 0x80,
++struct nx_addr_v4 {
++ struct nx_addr_v4 *next;
++ struct in_addr ip[2];
++ struct in_addr mask;
++ uint16_t type;
++ uint16_t flags;
+};
+
-+struct _vxm_update_1 {
-+ uint32_t tokens_max;
-+ uint32_t fill_rate;
-+ uint32_t interval;
++struct nx_addr_v6 {
++ struct nx_addr_v6 *next;
++ struct in6_addr ip;
++ struct in6_addr mask;
++ uint32_t prefix;
++ uint16_t type;
++ uint16_t flags;
+};
+
-+struct _vxm_update_2 {
-+ uint32_t tokens_min;
-+ uint32_t fill_rate;
-+ uint32_t interval;
-+};
++struct nx_info {
++ struct hlist_node nx_hlist; /* linked list of nxinfos */
++ vnid_t nx_id; /* vnet id */
++ atomic_t nx_usecnt; /* usage count */
++ atomic_t nx_tasks; /* tasks count */
++ int nx_state; /* context state */
+
-+struct _vxm_rqinfo_1 {
-+ uint16_t running;
-+ uint16_t onhold;
-+ uint16_t iowait;
-+ uint16_t uintr;
-+ uint32_t idle_tokens;
-+};
++ uint64_t nx_flags; /* network flag word */
++ uint64_t nx_ncaps; /* network capabilities */
+
-+struct _vxm_rqinfo_2 {
-+ uint32_t norm_time;
-+ uint32_t idle_time;
-+ uint32_t idle_skip;
++ spinlock_t addr_lock; /* protect address changes */
++ struct in_addr v4_lback; /* Loopback address */
++ struct in_addr v4_bcast; /* Broadcast address */
++ struct nx_addr_v4 v4; /* First/Single ipv4 address */
++#ifdef CONFIG_IPV6
++ struct nx_addr_v6 v6; /* First/Single ipv6 address */
++#endif
++ char nx_name[65]; /* network context name */
+};
+
-+struct _vxm_sched {
-+ uint32_t tokens;
-+ uint32_t norm_time;
-+ uint32_t idle_time;
-+};
+
-+struct _vxm_task {
-+ uint16_t pid;
-+ uint16_t state;
-+};
++/* status flags */
+
-+struct _vxm_event {
-+ uint32_t jif;
-+ union {
-+ uint32_t seq;
-+ uint32_t sec;
-+ };
-+ union {
-+ uint32_t tokens;
-+ uint32_t nsec;
-+ struct _vxm_task tsk;
-+ };
-+};
++#define NXS_HASHED 0x0001
++#define NXS_SHUTDOWN 0x0100
++#define NXS_RELEASED 0x8000
+
-+struct _vx_mon_entry {
-+ uint16_t type;
-+ uint16_t xid;
-+ union {
-+ struct _vxm_event ev;
-+ struct _vxm_sched sd;
-+ struct _vxm_update_1 u1;
-+ struct _vxm_update_2 u2;
-+ struct _vxm_rqinfo_1 q1;
-+ struct _vxm_rqinfo_2 q2;
-+ };
-+};
++extern struct nx_info *lookup_nx_info(int);
+
++extern int get_nid_list(int, unsigned int *, int);
++extern int nid_is_hashed(vnid_t);
+
-+#endif /* _VX_MONITOR_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/network.h linux-3.7-vs2.3.5.1/include/linux/vserver/network.h
---- linux-3.7/include/linux/vserver/network.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/network.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,148 @@
-+#ifndef _VX_NETWORK_H
-+#define _VX_NETWORK_H
++extern int nx_migrate_task(struct task_struct *, struct nx_info *);
+
-+#include <linux/types.h>
++extern long vs_net_change(struct nx_info *, unsigned int);
+
++struct sock;
+
-+#define MAX_N_CONTEXT 65535 /* Arbitrary limit */
+
++#define NX_IPV4(n) ((n)->v4.type != NXA_TYPE_NONE)
++#ifdef CONFIG_IPV6
++#define NX_IPV6(n) ((n)->v6.type != NXA_TYPE_NONE)
++#else
++#define NX_IPV6(n) (0)
++#endif
+
-+/* network flags */
++#endif /* _VSERVER_NETWORK_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/network_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/network_cmd.h
+--- linux-3.10.15/include/linux/vserver/network_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/network_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,37 @@
++#ifndef _VSERVER_NETWORK_CMD_H
++#define _VSERVER_NETWORK_CMD_H
+
-+#define NXF_INFO_PRIVATE 0x00000008
++#include <uapi/vserver/network_cmd.h>
+
-+#define NXF_SINGLE_IP 0x00000100
-+#define NXF_LBACK_REMAP 0x00000200
-+#define NXF_LBACK_ALLOW 0x00000400
++extern int vc_task_nid(uint32_t);
+
-+#define NXF_HIDE_NETIF 0x02000000
-+#define NXF_HIDE_LBACK 0x04000000
++extern int vc_nx_info(struct nx_info *, void __user *);
+
-+#define NXF_STATE_SETUP (1ULL << 32)
-+#define NXF_STATE_ADMIN (1ULL << 34)
++extern int vc_net_create(uint32_t, void __user *);
++extern int vc_net_migrate(struct nx_info *, void __user *);
+
-+#define NXF_SC_HELPER (1ULL << 36)
-+#define NXF_PERSISTENT (1ULL << 38)
++extern int vc_net_add(struct nx_info *, void __user *);
++extern int vc_net_remove(struct nx_info *, void __user *);
+
-+#define NXF_ONE_TIME (0x0005ULL << 32)
++extern int vc_net_add_ipv4_v1(struct nx_info *, void __user *);
++extern int vc_net_add_ipv4(struct nx_info *, void __user *);
+
++extern int vc_net_rem_ipv4_v1(struct nx_info *, void __user *);
++extern int vc_net_rem_ipv4(struct nx_info *, void __user *);
+
-+#define NXF_INIT_SET (__nxf_init_set())
++extern int vc_net_add_ipv6(struct nx_info *, void __user *);
++extern int vc_net_remove_ipv6(struct nx_info *, void __user *);
+
-+static inline uint64_t __nxf_init_set(void) {
-+ return NXF_STATE_ADMIN
-+#ifdef CONFIG_VSERVER_AUTO_LBACK
-+ | NXF_LBACK_REMAP
-+ | NXF_HIDE_LBACK
-+#endif
-+#ifdef CONFIG_VSERVER_AUTO_SINGLE
-+ | NXF_SINGLE_IP
-+#endif
-+ | NXF_HIDE_NETIF;
-+}
++extern int vc_add_match_ipv4(struct nx_info *, void __user *);
++extern int vc_get_match_ipv4(struct nx_info *, void __user *);
++
++extern int vc_add_match_ipv6(struct nx_info *, void __user *);
++extern int vc_get_match_ipv6(struct nx_info *, void __user *);
+
++extern int vc_get_nflags(struct nx_info *, void __user *);
++extern int vc_set_nflags(struct nx_info *, void __user *);
+
-+/* network caps */
++extern int vc_get_ncaps(struct nx_info *, void __user *);
++extern int vc_set_ncaps(struct nx_info *, void __user *);
+
-+#define NXC_TUN_CREATE 0x00000001
++#endif /* _VSERVER_CONTEXT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/percpu.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/percpu.h
+--- linux-3.10.15/include/linux/vserver/percpu.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/percpu.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,14 @@
++#ifndef _VSERVER_PERCPU_H
++#define _VSERVER_PERCPU_H
+
-+#define NXC_RAW_ICMP 0x00000100
++#include "cvirt_def.h"
++#include "sched_def.h"
+
-+#define NXC_MULTICAST 0x00001000
++struct _vx_percpu {
++ struct _vx_cvirt_pc cvirt;
++ struct _vx_sched_pc sched;
++};
+
++#define PERCPU_PERCTX (sizeof(struct _vx_percpu))
+
-+/* address types */
++#endif /* _VSERVER_PERCPU_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/pid.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/pid.h
+--- linux-3.10.15/include/linux/vserver/pid.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/pid.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,51 @@
++#ifndef _VSERVER_PID_H
++#define _VSERVER_PID_H
+
-+#define NXA_TYPE_IPV4 0x0001
-+#define NXA_TYPE_IPV6 0x0002
++/* pid faking stuff */
+
-+#define NXA_TYPE_NONE 0x0000
-+#define NXA_TYPE_ANY 0x00FF
++#define vx_info_map_pid(v, p) \
++ __vx_info_map_pid((v), (p), __func__, __FILE__, __LINE__)
++#define vx_info_map_tgid(v,p) vx_info_map_pid(v,p)
++#define vx_map_pid(p) vx_info_map_pid(current_vx_info(), p)
++#define vx_map_tgid(p) vx_map_pid(p)
+
-+#define NXA_TYPE_ADDR 0x0010
-+#define NXA_TYPE_MASK 0x0020
-+#define NXA_TYPE_RANGE 0x0040
++static inline int __vx_info_map_pid(struct vx_info *vxi, int pid,
++ const char *func, const char *file, int line)
++{
++ if (vx_info_flags(vxi, VXF_INFO_INIT, 0)) {
++ vxfprintk(VXD_CBIT(cvirt, 2),
++ "vx_map_tgid: %p/%llx: %d -> %d",
++ vxi, (long long)vxi->vx_flags, pid,
++ (pid && pid == vxi->vx_initpid) ? 1 : pid,
++ func, file, line);
++ if (pid == 0)
++ return 0;
++ if (pid == vxi->vx_initpid)
++ return 1;
++ }
++ return pid;
++}
+
-+#define NXA_MASK_ALL (NXA_TYPE_ADDR | NXA_TYPE_MASK | NXA_TYPE_RANGE)
++#define vx_info_rmap_pid(v, p) \
++ __vx_info_rmap_pid((v), (p), __func__, __FILE__, __LINE__)
++#define vx_rmap_pid(p) vx_info_rmap_pid(current_vx_info(), p)
++#define vx_rmap_tgid(p) vx_rmap_pid(p)
+
-+#define NXA_MOD_BCAST 0x0100
-+#define NXA_MOD_LBACK 0x0200
++static inline int __vx_info_rmap_pid(struct vx_info *vxi, int pid,
++ const char *func, const char *file, int line)
++{
++ if (vx_info_flags(vxi, VXF_INFO_INIT, 0)) {
++ vxfprintk(VXD_CBIT(cvirt, 2),
++ "vx_rmap_tgid: %p/%llx: %d -> %d",
++ vxi, (long long)vxi->vx_flags, pid,
++ (pid == 1) ? vxi->vx_initpid : pid,
++ func, file, line);
++ if ((pid == 1) && vxi->vx_initpid)
++ return vxi->vx_initpid;
++ if (pid == vxi->vx_initpid)
++ return ~0U;
++ }
++ return pid;
++}
+
-+#define NXA_LOOPBACK 0x1000
++#endif
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/sched.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/sched.h
+--- linux-3.10.15/include/linux/vserver/sched.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/sched.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,23 @@
++#ifndef _VSERVER_SCHED_H
++#define _VSERVER_SCHED_H
+
-+#define NXA_MASK_BIND (NXA_MASK_ALL | NXA_MOD_BCAST | NXA_MOD_LBACK)
-+#define NXA_MASK_SHOW (NXA_MASK_ALL | NXA_LOOPBACK)
+
+#ifdef __KERNEL__
+
-+#include <linux/list.h>
-+#include <linux/spinlock.h>
-+#include <linux/rcupdate.h>
-+#include <linux/in.h>
-+#include <linux/in6.h>
-+#include <asm/atomic.h>
++struct timespec;
+
-+struct nx_addr_v4 {
-+ struct nx_addr_v4 *next;
-+ struct in_addr ip[2];
-+ struct in_addr mask;
-+ uint16_t type;
-+ uint16_t flags;
-+};
++void vx_vsi_uptime(struct timespec *, struct timespec *);
+
-+struct nx_addr_v6 {
-+ struct nx_addr_v6 *next;
-+ struct in6_addr ip;
-+ struct in6_addr mask;
-+ uint32_t prefix;
-+ uint16_t type;
-+ uint16_t flags;
-+};
+
-+struct nx_info {
-+ struct hlist_node nx_hlist; /* linked list of nxinfos */
-+ nid_t nx_id; /* vnet id */
-+ atomic_t nx_usecnt; /* usage count */
-+ atomic_t nx_tasks; /* tasks count */
-+ int nx_state; /* context state */
++struct vx_info;
+
-+ uint64_t nx_flags; /* network flag word */
-+ uint64_t nx_ncaps; /* network capabilities */
++void vx_update_load(struct vx_info *);
+
-+ struct in_addr v4_lback; /* Loopback address */
-+ struct in_addr v4_bcast; /* Broadcast address */
-+ struct nx_addr_v4 v4; /* First/Single ipv4 address */
-+#ifdef CONFIG_IPV6
-+ struct nx_addr_v6 v6; /* First/Single ipv6 address */
-+#endif
-+ char nx_name[65]; /* network context name */
-+};
+
++void vx_update_sched_param(struct _vx_sched *sched,
++ struct _vx_sched_pc *sched_pc);
+
-+/* status flags */
++#endif /* __KERNEL__ */
++#else /* _VSERVER_SCHED_H */
++#warning duplicate inclusion
++#endif /* _VSERVER_SCHED_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/sched_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/sched_cmd.h
+--- linux-3.10.15/include/linux/vserver/sched_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/sched_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,11 @@
++#ifndef _VSERVER_SCHED_CMD_H
++#define _VSERVER_SCHED_CMD_H
+
-+#define NXS_HASHED 0x0001
-+#define NXS_SHUTDOWN 0x0100
-+#define NXS_RELEASED 0x8000
+
-+extern struct nx_info *lookup_nx_info(int);
++#include <linux/compiler.h>
++#include <uapi/vserver/sched_cmd.h>
+
-+extern int get_nid_list(int, unsigned int *, int);
-+extern int nid_is_hashed(nid_t);
++extern int vc_set_prio_bias(struct vx_info *, void __user *);
++extern int vc_get_prio_bias(struct vx_info *, void __user *);
+
-+extern int nx_migrate_task(struct task_struct *, struct nx_info *);
++#endif /* _VSERVER_SCHED_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/sched_def.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/sched_def.h
+--- linux-3.10.15/include/linux/vserver/sched_def.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/sched_def.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,38 @@
++#ifndef _VSERVER_SCHED_DEF_H
++#define _VSERVER_SCHED_DEF_H
+
-+extern long vs_net_change(struct nx_info *, unsigned int);
++#include <linux/spinlock.h>
++#include <linux/jiffies.h>
++#include <linux/cpumask.h>
++#include <asm/atomic.h>
++#include <asm/param.h>
+
-+struct sock;
+
++/* context sub struct */
+
-+#define NX_IPV4(n) ((n)->v4.type != NXA_TYPE_NONE)
-+#ifdef CONFIG_IPV6
-+#define NX_IPV6(n) ((n)->v6.type != NXA_TYPE_NONE)
-+#else
-+#define NX_IPV6(n) (0)
-+#endif
++struct _vx_sched {
++ int prio_bias; /* bias offset for priority */
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_NETWORK_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/network_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/network_cmd.h
---- linux-3.7/include/linux/vserver/network_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/network_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,164 @@
-+#ifndef _VX_NETWORK_CMD_H
-+#define _VX_NETWORK_CMD_H
++ cpumask_t update; /* CPUs which should update */
++};
+
++struct _vx_sched_pc {
++ int prio_bias; /* bias offset for priority */
+
-+/* vinfo commands */
++ uint64_t user_ticks; /* token tick events */
++ uint64_t sys_ticks; /* token tick events */
++ uint64_t hold_ticks; /* token ticks paused */
++};
+
-+#define VCMD_task_nid VC_CMD(VINFO, 2, 0)
+
-+#ifdef __KERNEL__
-+extern int vc_task_nid(uint32_t);
++#ifdef CONFIG_VSERVER_DEBUG
+
-+#endif /* __KERNEL__ */
++static inline void __dump_vx_sched(struct _vx_sched *sched)
++{
++ printk("\t_vx_sched:\n");
++ printk("\t priority = %4d\n", sched->prio_bias);
++}
+
-+#define VCMD_nx_info VC_CMD(VINFO, 6, 0)
++#endif
++
++#endif /* _VSERVER_SCHED_DEF_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/signal.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/signal.h
+--- linux-3.10.15/include/linux/vserver/signal.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/signal.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,14 @@
++#ifndef _VSERVER_SIGNAL_H
++#define _VSERVER_SIGNAL_H
+
-+struct vcmd_nx_info_v0 {
-+ uint32_t nid;
-+ /* more to come */
-+};
+
+#ifdef __KERNEL__
-+extern int vc_nx_info(struct nx_info *, void __user *);
+
-+#endif /* __KERNEL__ */
++struct vx_info;
+
-+#include <linux/in.h>
-+#include <linux/in6.h>
++int vx_info_kill(struct vx_info *, int, int);
+
-+#define VCMD_net_create_v0 VC_CMD(VNET, 1, 0)
-+#define VCMD_net_create VC_CMD(VNET, 1, 1)
++#endif /* __KERNEL__ */
++#else /* _VSERVER_SIGNAL_H */
++#warning duplicate inclusion
++#endif /* _VSERVER_SIGNAL_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/signal_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/signal_cmd.h
+--- linux-3.10.15/include/linux/vserver/signal_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/signal_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,14 @@
++#ifndef _VSERVER_SIGNAL_CMD_H
++#define _VSERVER_SIGNAL_CMD_H
+
-+struct vcmd_net_create {
-+ uint64_t flagword;
-+};
++#include <uapi/vserver/signal_cmd.h>
+
-+#define VCMD_net_migrate VC_CMD(NETMIG, 1, 0)
+
-+#define VCMD_net_add VC_CMD(NETALT, 1, 0)
-+#define VCMD_net_remove VC_CMD(NETALT, 2, 0)
++extern int vc_ctx_kill(struct vx_info *, void __user *);
++extern int vc_wait_exit(struct vx_info *, void __user *);
+
-+struct vcmd_net_addr_v0 {
-+ uint16_t type;
-+ uint16_t count;
-+ struct in_addr ip[4];
-+ struct in_addr mask[4];
-+};
+
-+#define VCMD_net_add_ipv4_v1 VC_CMD(NETALT, 1, 1)
-+#define VCMD_net_rem_ipv4_v1 VC_CMD(NETALT, 2, 1)
++extern int vc_get_pflags(uint32_t pid, void __user *);
++extern int vc_set_pflags(uint32_t pid, void __user *);
+
-+struct vcmd_net_addr_ipv4_v1 {
-+ uint16_t type;
-+ uint16_t flags;
-+ struct in_addr ip;
-+ struct in_addr mask;
-+};
++#endif /* _VSERVER_SIGNAL_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/space.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/space.h
+--- linux-3.10.15/include/linux/vserver/space.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/space.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,12 @@
++#ifndef _VSERVER_SPACE_H
++#define _VSERVER_SPACE_H
+
-+#define VCMD_net_add_ipv4 VC_CMD(NETALT, 1, 2)
-+#define VCMD_net_rem_ipv4 VC_CMD(NETALT, 2, 2)
++#include <linux/types.h>
+
-+struct vcmd_net_addr_ipv4_v2 {
-+ uint16_t type;
-+ uint16_t flags;
-+ struct in_addr ip;
-+ struct in_addr ip2;
-+ struct in_addr mask;
-+};
++struct vx_info;
+
-+#define VCMD_net_add_ipv6 VC_CMD(NETALT, 3, 1)
-+#define VCMD_net_remove_ipv6 VC_CMD(NETALT, 4, 1)
++int vx_set_space(struct vx_info *vxi, unsigned long mask, unsigned index);
+
-+struct vcmd_net_addr_ipv6_v1 {
-+ uint16_t type;
-+ uint16_t flags;
-+ uint32_t prefix;
-+ struct in6_addr ip;
-+ struct in6_addr mask;
-+};
++#else /* _VSERVER_SPACE_H */
++#warning duplicate inclusion
++#endif /* _VSERVER_SPACE_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/space_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/space_cmd.h
+--- linux-3.10.15/include/linux/vserver/space_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/space_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,13 @@
++#ifndef _VSERVER_SPACE_CMD_H
++#define _VSERVER_SPACE_CMD_H
+
-+#define VCMD_add_match_ipv4 VC_CMD(NETALT, 5, 0)
-+#define VCMD_get_match_ipv4 VC_CMD(NETALT, 6, 0)
++#include <uapi/vserver/space_cmd.h>
+
-+struct vcmd_match_ipv4_v0 {
-+ uint16_t type;
-+ uint16_t flags;
-+ uint16_t parent;
-+ uint16_t prefix;
-+ struct in_addr ip;
-+ struct in_addr ip2;
-+ struct in_addr mask;
-+};
+
-+#define VCMD_add_match_ipv6 VC_CMD(NETALT, 7, 0)
-+#define VCMD_get_match_ipv6 VC_CMD(NETALT, 8, 0)
++extern int vc_enter_space_v1(struct vx_info *, void __user *);
++extern int vc_set_space_v1(struct vx_info *, void __user *);
++extern int vc_enter_space(struct vx_info *, void __user *);
++extern int vc_set_space(struct vx_info *, void __user *);
++extern int vc_get_space_mask(void __user *, int);
+
-+struct vcmd_match_ipv6_v0 {
-+ uint16_t type;
-+ uint16_t flags;
-+ uint16_t parent;
-+ uint16_t prefix;
-+ struct in6_addr ip;
-+ struct in6_addr ip2;
-+ struct in6_addr mask;
-+};
++#endif /* _VSERVER_SPACE_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/switch.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/switch.h
+--- linux-3.10.15/include/linux/vserver/switch.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/switch.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,8 @@
++#ifndef _VSERVER_SWITCH_H
++#define _VSERVER_SWITCH_H
+
+
-+#ifdef __KERNEL__
-+extern int vc_net_create(uint32_t, void __user *);
-+extern int vc_net_migrate(struct nx_info *, void __user *);
++#include <linux/errno.h>
++#include <uapi/vserver/switch.h>
+
-+extern int vc_net_add(struct nx_info *, void __user *);
-+extern int vc_net_remove(struct nx_info *, void __user *);
++#endif /* _VSERVER_SWITCH_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/tag.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/tag.h
+--- linux-3.10.15/include/linux/vserver/tag.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/tag.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,160 @@
++#ifndef _DX_TAG_H
++#define _DX_TAG_H
+
-+extern int vc_net_add_ipv4_v1(struct nx_info *, void __user *);
-+extern int vc_net_add_ipv4(struct nx_info *, void __user *);
++#include <linux/types.h>
++#include <linux/uidgid.h>
+
-+extern int vc_net_rem_ipv4_v1(struct nx_info *, void __user *);
-+extern int vc_net_rem_ipv4(struct nx_info *, void __user *);
+
-+extern int vc_net_add_ipv6(struct nx_info *, void __user *);
-+extern int vc_net_remove_ipv6(struct nx_info *, void __user *);
++#define DX_TAG(in) (IS_TAGGED(in))
+
-+extern int vc_add_match_ipv4(struct nx_info *, void __user *);
-+extern int vc_get_match_ipv4(struct nx_info *, void __user *);
+
-+extern int vc_add_match_ipv6(struct nx_info *, void __user *);
-+extern int vc_get_match_ipv6(struct nx_info *, void __user *);
++#ifdef CONFIG_TAG_NFSD
++#define DX_TAG_NFSD 1
++#else
++#define DX_TAG_NFSD 0
++#endif
+
-+#endif /* __KERNEL__ */
+
++#ifdef CONFIG_TAGGING_NONE
+
-+/* flag commands */
++#define MAX_UID 0xFFFFFFFF
++#define MAX_GID 0xFFFFFFFF
+
-+#define VCMD_get_nflags VC_CMD(FLAGS, 5, 0)
-+#define VCMD_set_nflags VC_CMD(FLAGS, 6, 0)
++#define INOTAG_TAG(cond, uid, gid, tag) (0)
+
-+struct vcmd_net_flags_v0 {
-+ uint64_t flagword;
-+ uint64_t mask;
-+};
++#define TAGINO_UID(cond, uid, tag) (uid)
++#define TAGINO_GID(cond, gid, tag) (gid)
+
-+#ifdef __KERNEL__
-+extern int vc_get_nflags(struct nx_info *, void __user *);
-+extern int vc_set_nflags(struct nx_info *, void __user *);
++#endif
+
-+#endif /* __KERNEL__ */
+
++#ifdef CONFIG_TAGGING_GID16
+
-+/* network caps commands */
++#define MAX_UID 0xFFFFFFFF
++#define MAX_GID 0x0000FFFF
+
-+#define VCMD_get_ncaps VC_CMD(FLAGS, 7, 0)
-+#define VCMD_set_ncaps VC_CMD(FLAGS, 8, 0)
++#define INOTAG_TAG(cond, uid, gid, tag) \
++ ((cond) ? (((gid) >> 16) & 0xFFFF) : 0)
+
-+struct vcmd_net_caps_v0 {
-+ uint64_t ncaps;
-+ uint64_t cmask;
-+};
++#define TAGINO_UID(cond, uid, tag) (uid)
++#define TAGINO_GID(cond, gid, tag) \
++ ((cond) ? (((gid) & 0xFFFF) | ((tag) << 16)) : (gid))
+
-+#ifdef __KERNEL__
-+extern int vc_get_ncaps(struct nx_info *, void __user *);
-+extern int vc_set_ncaps(struct nx_info *, void __user *);
++#endif
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CONTEXT_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/percpu.h linux-3.7-vs2.3.5.1/include/linux/vserver/percpu.h
---- linux-3.7/include/linux/vserver/percpu.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/percpu.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,14 @@
-+#ifndef _VX_PERCPU_H
-+#define _VX_PERCPU_H
+
-+#include "cvirt_def.h"
-+#include "sched_def.h"
++#ifdef CONFIG_TAGGING_ID24
+
-+struct _vx_percpu {
-+ struct _vx_cvirt_pc cvirt;
-+ struct _vx_sched_pc sched;
-+};
++#define MAX_UID 0x00FFFFFF
++#define MAX_GID 0x00FFFFFF
+
-+#define PERCPU_PERCTX (sizeof(struct _vx_percpu))
++#define INOTAG_TAG(cond, uid, gid, tag) \
++ ((cond) ? ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) : 0)
+
-+#endif /* _VX_PERCPU_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/pid.h linux-3.7-vs2.3.5.1/include/linux/vserver/pid.h
---- linux-3.7/include/linux/vserver/pid.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/pid.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,51 @@
-+#ifndef _VSERVER_PID_H
-+#define _VSERVER_PID_H
++#define TAGINO_UID(cond, uid, tag) \
++ ((cond) ? (((uid) & 0xFFFFFF) | (((tag) & 0xFF00) << 16)) : (uid))
++#define TAGINO_GID(cond, gid, tag) \
++ ((cond) ? (((gid) & 0xFFFFFF) | (((tag) & 0x00FF) << 24)) : (gid))
+
-+/* pid faking stuff */
++#endif
+
-+#define vx_info_map_pid(v, p) \
-+ __vx_info_map_pid((v), (p), __func__, __FILE__, __LINE__)
-+#define vx_info_map_tgid(v,p) vx_info_map_pid(v,p)
-+#define vx_map_pid(p) vx_info_map_pid(current_vx_info(), p)
-+#define vx_map_tgid(p) vx_map_pid(p)
+
-+static inline int __vx_info_map_pid(struct vx_info *vxi, int pid,
-+ const char *func, const char *file, int line)
-+{
-+ if (vx_info_flags(vxi, VXF_INFO_INIT, 0)) {
-+ vxfprintk(VXD_CBIT(cvirt, 2),
-+ "vx_map_tgid: %p/%llx: %d -> %d",
-+ vxi, (long long)vxi->vx_flags, pid,
-+ (pid && pid == vxi->vx_initpid) ? 1 : pid,
-+ func, file, line);
-+ if (pid == 0)
-+ return 0;
-+ if (pid == vxi->vx_initpid)
-+ return 1;
-+ }
-+ return pid;
-+}
++#ifdef CONFIG_TAGGING_UID16
+
-+#define vx_info_rmap_pid(v, p) \
-+ __vx_info_rmap_pid((v), (p), __func__, __FILE__, __LINE__)
-+#define vx_rmap_pid(p) vx_info_rmap_pid(current_vx_info(), p)
-+#define vx_rmap_tgid(p) vx_rmap_pid(p)
++#define MAX_UID 0x0000FFFF
++#define MAX_GID 0xFFFFFFFF
+
-+static inline int __vx_info_rmap_pid(struct vx_info *vxi, int pid,
-+ const char *func, const char *file, int line)
-+{
-+ if (vx_info_flags(vxi, VXF_INFO_INIT, 0)) {
-+ vxfprintk(VXD_CBIT(cvirt, 2),
-+ "vx_rmap_tgid: %p/%llx: %d -> %d",
-+ vxi, (long long)vxi->vx_flags, pid,
-+ (pid == 1) ? vxi->vx_initpid : pid,
-+ func, file, line);
-+ if ((pid == 1) && vxi->vx_initpid)
-+ return vxi->vx_initpid;
-+ if (pid == vxi->vx_initpid)
-+ return ~0U;
-+ }
-+ return pid;
-+}
++#define INOTAG_TAG(cond, uid, gid, tag) \
++ ((cond) ? (((uid) >> 16) & 0xFFFF) : 0)
++
++#define TAGINO_UID(cond, uid, tag) \
++ ((cond) ? (((uid) & 0xFFFF) | ((tag) << 16)) : (uid))
++#define TAGINO_GID(cond, gid, tag) (gid)
+
+#endif
-diff -NurpP --minimal linux-3.7/include/linux/vserver/sched.h linux-3.7-vs2.3.5.1/include/linux/vserver/sched.h
---- linux-3.7/include/linux/vserver/sched.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/sched.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,23 @@
-+#ifndef _VX_SCHED_H
-+#define _VX_SCHED_H
+
+
-+#ifdef __KERNEL__
++#ifdef CONFIG_TAGGING_INTERN
+
-+struct timespec;
++#define MAX_UID 0xFFFFFFFF
++#define MAX_GID 0xFFFFFFFF
+
-+void vx_vsi_uptime(struct timespec *, struct timespec *);
++#define INOTAG_TAG(cond, uid, gid, tag) \
++ ((cond) ? (tag) : 0)
+
++#define TAGINO_UID(cond, uid, tag) (uid)
++#define TAGINO_GID(cond, gid, tag) (gid)
+
-+struct vx_info;
++#endif
+
-+void vx_update_load(struct vx_info *);
+
++#ifndef CONFIG_TAGGING_NONE
++#define dx_current_fstag(sb) \
++ ((sb)->s_flags & MS_TAGGED ? dx_current_tag() : 0)
++#else
++#define dx_current_fstag(sb) (0)
++#endif
+
-+void vx_update_sched_param(struct _vx_sched *sched,
-+ struct _vx_sched_pc *sched_pc);
++#ifndef CONFIG_TAGGING_INTERN
++#define TAGINO_TAG(cond, tag) (0)
++#else
++#define TAGINO_TAG(cond, tag) ((cond) ? (tag) : 0)
++#endif
+
-+#endif /* __KERNEL__ */
-+#else /* _VX_SCHED_H */
-+#warning duplicate inclusion
-+#endif /* _VX_SCHED_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/sched_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/sched_cmd.h
---- linux-3.7/include/linux/vserver/sched_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/sched_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,21 @@
-+#ifndef _VX_SCHED_CMD_H
-+#define _VX_SCHED_CMD_H
++#define TAGINO_KUID(cond, kuid, ktag) \
++ KUIDT_INIT(TAGINO_UID(cond, __kuid_val(kuid), __ktag_val(ktag)))
++#define TAGINO_KGID(cond, kgid, ktag) \
++ KGIDT_INIT(TAGINO_GID(cond, __kgid_val(kgid), __ktag_val(ktag)))
++#define TAGINO_KTAG(cond, ktag) \
++ KTAGT_INIT(TAGINO_TAG(cond, __ktag_val(ktag)))
+
+
-+struct vcmd_prio_bias {
-+ int32_t cpu_id;
-+ int32_t prio_bias;
-+};
++#define INOTAG_UID(cond, uid, gid) \
++ ((cond) ? ((uid) & MAX_UID) : (uid))
++#define INOTAG_GID(cond, uid, gid) \
++ ((cond) ? ((gid) & MAX_GID) : (gid))
+
-+#define VCMD_set_prio_bias VC_CMD(SCHED, 4, 0)
-+#define VCMD_get_prio_bias VC_CMD(SCHED, 5, 0)
++#define INOTAG_KUID(cond, kuid, kgid) \
++ KUIDT_INIT(INOTAG_UID(cond, __kuid_val(kuid), __kgid_val(kgid)))
++#define INOTAG_KGID(cond, kuid, kgid) \
++ KGIDT_INIT(INOTAG_GID(cond, __kuid_val(kuid), __kgid_val(kgid)))
++#define INOTAG_KTAG(cond, kuid, kgid, ktag) \
++ KTAGT_INIT(INOTAG_TAG(cond, \
++ __kuid_val(kuid), __kgid_val(kgid), __ktag_val(ktag)))
+
-+#ifdef __KERNEL__
+
-+#include <linux/compiler.h>
++static inline uid_t dx_map_uid(uid_t uid)
++{
++ if ((uid > MAX_UID) && (uid != -1))
++ uid = -2;
++ return (uid & MAX_UID);
++}
+
-+extern int vc_set_prio_bias(struct vx_info *, void __user *);
-+extern int vc_get_prio_bias(struct vx_info *, void __user *);
++static inline gid_t dx_map_gid(gid_t gid)
++{
++ if ((gid > MAX_GID) && (gid != -1))
++ gid = -2;
++ return (gid & MAX_GID);
++}
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_SCHED_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/sched_def.h linux-3.7-vs2.3.5.1/include/linux/vserver/sched_def.h
---- linux-3.7/include/linux/vserver/sched_def.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/sched_def.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,38 @@
-+#ifndef _VX_SCHED_DEF_H
-+#define _VX_SCHED_DEF_H
++struct peer_tag {
++ int32_t xid;
++ int32_t nid;
++};
+
-+#include <linux/spinlock.h>
-+#include <linux/jiffies.h>
-+#include <linux/cpumask.h>
-+#include <asm/atomic.h>
-+#include <asm/param.h>
++#define dx_notagcheck(sb) ((sb) && ((sb)->s_flags & MS_NOTAGCHECK))
++
++int dx_parse_tag(char *string, vtag_t *tag, int remove, int *mnt_flags,
++ unsigned long *flags);
++
++#ifdef CONFIG_PROPAGATE
++
++void __dx_propagate_tag(struct nameidata *nd, struct inode *inode);
++
++#define dx_propagate_tag(n, i) __dx_propagate_tag(n, i)
++
++#else
++#define dx_propagate_tag(n, i) do { } while (0)
++#endif
++
++#endif /* _DX_TAG_H */
+diff -NurpP --minimal linux-3.10.15/include/linux/vserver/tag_cmd.h linux-3.10.15-vs2.3.6.6/include/linux/vserver/tag_cmd.h
+--- linux-3.10.15/include/linux/vserver/tag_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/linux/vserver/tag_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,10 @@
++#ifndef _VSERVER_TAG_CMD_H
++#define _VSERVER_TAG_CMD_H
++
++#include <uapi/vserver/tag_cmd.h>
++
++extern int vc_task_tag(uint32_t);
++
++extern int vc_tag_migrate(uint32_t);
++
++#endif /* _VSERVER_TAG_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/net/addrconf.h linux-3.10.15-vs2.3.6.6/include/net/addrconf.h
+--- linux-3.10.15/include/net/addrconf.h 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/net/addrconf.h 2013-08-22 20:32:06.000000000 +0000
+@@ -85,7 +85,8 @@ extern int ipv6_dev_get_saddr(struct n
+ const struct net_device *dev,
+ const struct in6_addr *daddr,
+ unsigned int srcprefs,
+- struct in6_addr *saddr);
++ struct in6_addr *saddr,
++ struct nx_info *nxi);
+ extern int __ipv6_get_lladdr(struct inet6_dev *idev,
+ struct in6_addr *addr,
+ unsigned char banned_flags);
+diff -NurpP --minimal linux-3.10.15/include/net/af_unix.h linux-3.10.15-vs2.3.6.6/include/net/af_unix.h
+--- linux-3.10.15/include/net/af_unix.h 2013-07-14 17:01:33.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/net/af_unix.h 2013-08-22 20:30:00.000000000 +0000
+@@ -4,6 +4,7 @@
+ #include <linux/socket.h>
+ #include <linux/un.h>
+ #include <linux/mutex.h>
++#include <linux/vs_base.h>
+ #include <net/sock.h>
+
+ extern void unix_inflight(struct file *fp);
+diff -NurpP --minimal linux-3.10.15/include/net/inet_timewait_sock.h linux-3.10.15-vs2.3.6.6/include/net/inet_timewait_sock.h
+--- linux-3.10.15/include/net/inet_timewait_sock.h 2013-05-31 13:45:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/net/inet_timewait_sock.h 2013-08-22 20:30:00.000000000 +0000
+@@ -116,6 +116,10 @@ struct inet_timewait_sock {
+ #define tw_dport __tw_common.skc_dport
+ #define tw_num __tw_common.skc_num
+ #define tw_portpair __tw_common.skc_portpair
++#define tw_xid __tw_common.skc_xid
++#define tw_vx_info __tw_common.skc_vx_info
++#define tw_nid __tw_common.skc_nid
++#define tw_nx_info __tw_common.skc_nx_info
+
+ int tw_timeout;
+ volatile unsigned char tw_substate;
+diff -NurpP --minimal linux-3.10.15/include/net/ip6_route.h linux-3.10.15-vs2.3.6.6/include/net/ip6_route.h
+--- linux-3.10.15/include/net/ip6_route.h 2013-05-31 13:45:28.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/net/ip6_route.h 2013-08-22 20:30:00.000000000 +0000
+@@ -95,7 +95,8 @@ extern int ip6_route_get_saddr(struct
+ struct rt6_info *rt,
+ const struct in6_addr *daddr,
+ unsigned int prefs,
+- struct in6_addr *saddr);
++ struct in6_addr *saddr,
++ struct nx_info *nxi);
+
+ extern struct rt6_info *rt6_lookup(struct net *net,
+ const struct in6_addr *daddr,
+diff -NurpP --minimal linux-3.10.15/include/net/route.h linux-3.10.15-vs2.3.6.6/include/net/route.h
+--- linux-3.10.15/include/net/route.h 2013-02-19 13:58:52.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/net/route.h 2013-08-22 20:30:00.000000000 +0000
+@@ -207,6 +207,9 @@ static inline void ip_rt_put(struct rtab
+ dst_release(&rt->dst);
+ }
+
++#include <linux/vs_base.h>
++#include <linux/vs_inet.h>
++
+ #define IPTOS_RT_MASK (IPTOS_TOS_MASK & ~3)
+
+ extern const __u8 ip_tos2prio[16];
+@@ -256,6 +259,9 @@ static inline void ip_route_connect_init
+ protocol, flow_flags, dst, src, dport, sport);
+ }
+
++extern struct rtable *ip_v4_find_src(struct net *net, struct nx_info *,
++ struct flowi4 *);
++
+ static inline struct rtable *ip_route_connect(struct flowi4 *fl4,
+ __be32 dst, __be32 src, u32 tos,
+ int oif, u8 protocol,
+@@ -264,11 +270,25 @@ static inline struct rtable *ip_route_co
+ {
+ struct net *net = sock_net(sk);
+ struct rtable *rt;
++ struct nx_info *nx_info = current_nx_info();
+
+ ip_route_connect_init(fl4, dst, src, tos, oif, protocol,
+ sport, dport, sk, can_sleep);
+
+- if (!dst || !src) {
++ if (sk)
++ nx_info = sk->sk_nx_info;
++
++ vxdprintk(VXD_CBIT(net, 4),
++ "ip_route_connect(%p) %p,%p;%lx",
++ sk, nx_info, sk->sk_socket,
++ (sk->sk_socket?sk->sk_socket->flags:0));
++
++ rt = ip_v4_find_src(net, nx_info, fl4);
++ if (IS_ERR(rt))
++ return rt;
++ ip_rt_put(rt);
++
++ if (!fl4->daddr || !fl4->saddr) {
+ rt = __ip_route_output_key(net, fl4);
+ if (IS_ERR(rt))
+ return rt;
+diff -NurpP --minimal linux-3.10.15/include/net/sock.h linux-3.10.15-vs2.3.6.6/include/net/sock.h
+--- linux-3.10.15/include/net/sock.h 2013-07-14 17:01:33.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/net/sock.h 2013-08-22 20:30:00.000000000 +0000
+@@ -191,6 +191,10 @@ struct sock_common {
+ #ifdef CONFIG_NET_NS
+ struct net *skc_net;
+ #endif
++ vxid_t skc_xid;
++ struct vx_info *skc_vx_info;
++ vnid_t skc_nid;
++ struct nx_info *skc_nx_info;
+ /*
+ * fields between dontcopy_begin/dontcopy_end
+ * are not copied in sock_copy()
+@@ -304,6 +308,10 @@ struct sock {
+ #define sk_bind_node __sk_common.skc_bind_node
+ #define sk_prot __sk_common.skc_prot
+ #define sk_net __sk_common.skc_net
++#define sk_xid __sk_common.skc_xid
++#define sk_vx_info __sk_common.skc_vx_info
++#define sk_nid __sk_common.skc_nid
++#define sk_nx_info __sk_common.skc_nx_info
+ socket_lock_t sk_lock;
+ struct sk_buff_head sk_receive_queue;
+ /*
+diff -NurpP --minimal linux-3.10.15/include/uapi/Kbuild linux-3.10.15-vs2.3.6.6/include/uapi/Kbuild
+--- linux-3.10.15/include/uapi/Kbuild 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/Kbuild 2013-08-22 20:30:00.000000000 +0000
+@@ -12,3 +12,4 @@ header-y += video/
+ header-y += drm/
+ header-y += xen/
+ header-y += scsi/
++header-y += vserver/
+diff -NurpP --minimal linux-3.10.15/include/uapi/linux/capability.h linux-3.10.15-vs2.3.6.6/include/uapi/linux/capability.h
+--- linux-3.10.15/include/uapi/linux/capability.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/linux/capability.h 2013-08-22 20:30:00.000000000 +0000
+@@ -259,6 +259,7 @@ struct vfs_cap_data {
+ arbitrary SCSI commands */
+ /* Allow setting encryption key on loopback filesystem */
+ /* Allow setting zone reclaim policy */
++/* Allow the selection of a security context */
+
+ #define CAP_SYS_ADMIN 21
+
+@@ -345,7 +346,12 @@ struct vfs_cap_data {
+
+ #define CAP_LAST_CAP CAP_BLOCK_SUSPEND
+
+-#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP)
++/* Allow context manipulations */
++/* Allow changing context info on files */
++
++#define CAP_CONTEXT 63
++
++#define cap_valid(x) ((x) >= 0 && ((x) <= CAP_LAST_CAP || (x) == CAP_CONTEXT))
+
+ /*
+ * Bit location of each capability (used by user-space library and kernel)
+diff -NurpP --minimal linux-3.10.15/include/uapi/linux/fs.h linux-3.10.15-vs2.3.6.6/include/uapi/linux/fs.h
+--- linux-3.10.15/include/uapi/linux/fs.h 2013-07-14 17:01:34.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/linux/fs.h 2013-08-22 20:30:00.000000000 +0000
+@@ -86,6 +86,9 @@ struct inodes_stat_t {
+ #define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */
+ #define MS_I_VERSION (1<<23) /* Update inode I_version field */
+ #define MS_STRICTATIME (1<<24) /* Always perform atime updates */
++#define MS_TAGGED (1<<8) /* use generic inode tagging */
++#define MS_NOTAGCHECK (1<<9) /* don't check tags */
++#define MS_TAGID (1<<25) /* use specific tag for this mount */
+
+ /* These sb flags are internal to the kernel */
+ #define MS_NOSEC (1<<28)
+@@ -191,11 +194,14 @@ struct inodes_stat_t {
+ #define FS_EXTENT_FL 0x00080000 /* Extents */
+ #define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */
+ #define FS_NOCOW_FL 0x00800000 /* Do not cow file */
++#define FS_IXUNLINK_FL 0x08000000 /* Immutable invert on unlink */
+ #define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */
+
+-#define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
+-#define FS_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */
++#define FS_BARRIER_FL 0x04000000 /* Barrier for chroot() */
++#define FS_COW_FL 0x20000000 /* Copy on Write marker */
+
++#define FS_FL_USER_VISIBLE 0x0103DFFF /* User visible flags */
++#define FS_FL_USER_MODIFIABLE 0x010380FF /* User modifiable flags */
+
+ #define SYNC_FILE_RANGE_WAIT_BEFORE 1
+ #define SYNC_FILE_RANGE_WRITE 2
+diff -NurpP --minimal linux-3.10.15/include/uapi/linux/gfs2_ondisk.h linux-3.10.15-vs2.3.6.6/include/uapi/linux/gfs2_ondisk.h
+--- linux-3.10.15/include/uapi/linux/gfs2_ondisk.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/linux/gfs2_ondisk.h 2013-08-22 20:30:00.000000000 +0000
+@@ -225,6 +225,9 @@ enum {
+ gfs2fl_Sync = 8,
+ gfs2fl_System = 9,
+ gfs2fl_TopLevel = 10,
++ gfs2fl_IXUnlink = 16,
++ gfs2fl_Barrier = 17,
++ gfs2fl_Cow = 18,
+ gfs2fl_TruncInProg = 29,
+ gfs2fl_InheritDirectio = 30,
+ gfs2fl_InheritJdata = 31,
+@@ -242,6 +245,9 @@ enum {
+ #define GFS2_DIF_SYNC 0x00000100
+ #define GFS2_DIF_SYSTEM 0x00000200 /* New in gfs2 */
+ #define GFS2_DIF_TOPDIR 0x00000400 /* New in gfs2 */
++#define GFS2_DIF_IXUNLINK 0x00010000
++#define GFS2_DIF_BARRIER 0x00020000
++#define GFS2_DIF_COW 0x00040000
+ #define GFS2_DIF_TRUNC_IN_PROG 0x20000000 /* New in gfs2 */
+ #define GFS2_DIF_INHERIT_DIRECTIO 0x40000000 /* only in gfs1 */
+ #define GFS2_DIF_INHERIT_JDATA 0x80000000
+diff -NurpP --minimal linux-3.10.15/include/uapi/linux/if_tun.h linux-3.10.15-vs2.3.6.6/include/uapi/linux/if_tun.h
+--- linux-3.10.15/include/uapi/linux/if_tun.h 2013-02-19 13:58:55.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/linux/if_tun.h 2013-08-22 20:30:00.000000000 +0000
+@@ -56,6 +56,7 @@
+ #define TUNGETVNETHDRSZ _IOR('T', 215, int)
+ #define TUNSETVNETHDRSZ _IOW('T', 216, int)
+ #define TUNSETQUEUE _IOW('T', 217, int)
++#define TUNSETNID _IOW('T', 218, int)
+
+ /* TUNSETIFF ifr flags */
+ #define IFF_TUN 0x0001
+diff -NurpP --minimal linux-3.10.15/include/uapi/linux/major.h linux-3.10.15-vs2.3.6.6/include/uapi/linux/major.h
+--- linux-3.10.15/include/uapi/linux/major.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/linux/major.h 2013-08-22 20:30:00.000000000 +0000
+@@ -15,6 +15,7 @@
+ #define HD_MAJOR IDE0_MAJOR
+ #define PTY_SLAVE_MAJOR 3
+ #define TTY_MAJOR 4
++#define VROOT_MAJOR 4
+ #define TTYAUX_MAJOR 5
+ #define LP_MAJOR 6
+ #define VCS_MAJOR 7
+diff -NurpP --minimal linux-3.10.15/include/uapi/linux/nfs_mount.h linux-3.10.15-vs2.3.6.6/include/uapi/linux/nfs_mount.h
+--- linux-3.10.15/include/uapi/linux/nfs_mount.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/linux/nfs_mount.h 2013-08-22 20:30:00.000000000 +0000
+@@ -63,7 +63,8 @@ struct nfs_mount_data {
+ #define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */
+ #define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */
+ #define NFS_MOUNT_UNSHARED 0x8000 /* 5 */
+-#define NFS_MOUNT_FLAGMASK 0xFFFF
++#define NFS_MOUNT_TAGGED 0x10000 /* context tagging */
++#define NFS_MOUNT_FLAGMASK 0x1FFFF
+
+ /* The following are for internal use only */
+ #define NFS_MOUNT_LOOKUP_CACHE_NONEG 0x10000
+diff -NurpP --minimal linux-3.10.15/include/uapi/linux/reboot.h linux-3.10.15-vs2.3.6.6/include/uapi/linux/reboot.h
+--- linux-3.10.15/include/uapi/linux/reboot.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/linux/reboot.h 2013-08-22 20:30:00.000000000 +0000
+@@ -33,7 +33,7 @@
+ #define LINUX_REBOOT_CMD_RESTART2 0xA1B2C3D4
+ #define LINUX_REBOOT_CMD_SW_SUSPEND 0xD000FCE2
+ #define LINUX_REBOOT_CMD_KEXEC 0x45584543
+-
++#define LINUX_REBOOT_CMD_OOM 0xDEADBEEF
+
+
+ #endif /* _UAPI_LINUX_REBOOT_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/linux/sysctl.h linux-3.10.15-vs2.3.6.6/include/uapi/linux/sysctl.h
+--- linux-3.10.15/include/uapi/linux/sysctl.h 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/linux/sysctl.h 2013-08-22 20:30:00.000000000 +0000
+@@ -60,6 +60,7 @@ enum
+ CTL_ABI=9, /* Binary emulation */
+ CTL_CPU=10, /* CPU stuff (speed scaling, etc) */
+ CTL_ARLAN=254, /* arlan wireless driver */
++ CTL_VSERVER=4242, /* Linux-VServer debug */
+ CTL_S390DBF=5677, /* s390 debug */
+ CTL_SUNRPC=7249, /* sunrpc debug */
+ CTL_PM=9899, /* frv power management */
+@@ -94,6 +95,7 @@ enum
+
+ KERN_PANIC=15, /* int: panic timeout */
+ KERN_REALROOTDEV=16, /* real root device to mount after initrd */
++ KERN_VSHELPER=17, /* string: path to vshelper policy agent */
+
+ KERN_SPARC_REBOOT=21, /* reboot command on Sparc */
+ KERN_CTLALTDEL=22, /* int: allow ctl-alt-del to reboot */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/Kbuild linux-3.10.15-vs2.3.6.6/include/uapi/vserver/Kbuild
+--- linux-3.10.15/include/uapi/vserver/Kbuild 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/Kbuild 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,9 @@
++
++header-y += context_cmd.h network_cmd.h space_cmd.h \
++ cacct_cmd.h cvirt_cmd.h limit_cmd.h dlimit_cmd.h \
++ inode_cmd.h tag_cmd.h sched_cmd.h signal_cmd.h \
++ debug_cmd.h device_cmd.h
++
++header-y += switch.h context.h network.h monitor.h \
++ limit.h inode.h device.h
++
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/cacct_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/cacct_cmd.h
+--- linux-3.10.15/include/uapi/vserver/cacct_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/cacct_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,15 @@
++#ifndef _UAPI_VS_CACCT_CMD_H
++#define _UAPI_VS_CACCT_CMD_H
++
++
++/* virtual host info name commands */
++
++#define VCMD_sock_stat VC_CMD(VSTAT, 5, 0)
++
++struct vcmd_sock_stat_v0 {
++ uint32_t field;
++ uint32_t count[3];
++ uint64_t total[3];
++};
++
++#endif /* _UAPI_VS_CACCT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/context.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/context.h
+--- linux-3.10.15/include/uapi/vserver/context.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/context.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,81 @@
++#ifndef _UAPI_VS_CONTEXT_H
++#define _UAPI_VS_CONTEXT_H
++
++#include <linux/types.h>
++#include <linux/capability.h>
++
++
++/* context flags */
++
++#define VXF_INFO_SCHED 0x00000002
++#define VXF_INFO_NPROC 0x00000004
++#define VXF_INFO_PRIVATE 0x00000008
++
++#define VXF_INFO_INIT 0x00000010
++#define VXF_INFO_HIDE 0x00000020
++#define VXF_INFO_ULIMIT 0x00000040
++#define VXF_INFO_NSPACE 0x00000080
++
++#define VXF_SCHED_HARD 0x00000100
++#define VXF_SCHED_PRIO 0x00000200
++#define VXF_SCHED_PAUSE 0x00000400
++
++#define VXF_VIRT_MEM 0x00010000
++#define VXF_VIRT_UPTIME 0x00020000
++#define VXF_VIRT_CPU 0x00040000
++#define VXF_VIRT_LOAD 0x00080000
++#define VXF_VIRT_TIME 0x00100000
++
++#define VXF_HIDE_MOUNT 0x01000000
++/* was VXF_HIDE_NETIF 0x02000000 */
++#define VXF_HIDE_VINFO 0x04000000
++
++#define VXF_STATE_SETUP (1ULL << 32)
++#define VXF_STATE_INIT (1ULL << 33)
++#define VXF_STATE_ADMIN (1ULL << 34)
++
++#define VXF_SC_HELPER (1ULL << 36)
++#define VXF_REBOOT_KILL (1ULL << 37)
++#define VXF_PERSISTENT (1ULL << 38)
++
++#define VXF_FORK_RSS (1ULL << 48)
++#define VXF_PROLIFIC (1ULL << 49)
++
++#define VXF_IGNEG_NICE (1ULL << 52)
++
++#define VXF_ONE_TIME (0x0007ULL << 32)
++
++#define VXF_INIT_SET (VXF_STATE_SETUP | VXF_STATE_INIT | VXF_STATE_ADMIN)
++
++
++/* context migration */
++
++#define VXM_SET_INIT 0x00000001
++#define VXM_SET_REAPER 0x00000002
++
++/* context caps */
++
++#define VXC_SET_UTSNAME 0x00000001
++#define VXC_SET_RLIMIT 0x00000002
++#define VXC_FS_SECURITY 0x00000004
++#define VXC_FS_TRUSTED 0x00000008
++#define VXC_TIOCSTI 0x00000010
++
++/* was VXC_RAW_ICMP 0x00000100 */
++#define VXC_SYSLOG 0x00001000
++#define VXC_OOM_ADJUST 0x00002000
++#define VXC_AUDIT_CONTROL 0x00004000
++
++/* #define VXC_SECURE_MOUNT 0x00010000
++#define VXC_SECURE_REMOUNT 0x00020000 */
++#define VXC_BINARY_MOUNT 0x00040000
++#define VXC_DEV_MOUNT 0x00080000
++
++#define VXC_QUOTA_CTL 0x00100000
++#define VXC_ADMIN_MAPPER 0x00200000
++#define VXC_ADMIN_CLOOP 0x00400000
++
++#define VXC_KTHREAD 0x01000000
++#define VXC_NAMESPACE 0x02000000
++
++#endif /* _UAPI_VS_CONTEXT_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/context_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/context_cmd.h
+--- linux-3.10.15/include/uapi/vserver/context_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/context_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,115 @@
++#ifndef _UAPI_VS_CONTEXT_CMD_H
++#define _UAPI_VS_CONTEXT_CMD_H
++
++
++/* vinfo commands */
++
++#define VCMD_task_xid VC_CMD(VINFO, 1, 0)
++
++
++#define VCMD_vx_info VC_CMD(VINFO, 5, 0)
++
++struct vcmd_vx_info_v0 {
++ uint32_t xid;
++ uint32_t initpid;
++ /* more to come */
++};
++
++
++#define VCMD_ctx_stat VC_CMD(VSTAT, 0, 0)
++
++struct vcmd_ctx_stat_v0 {
++ uint32_t usecnt;
++ uint32_t tasks;
++ /* more to come */
++};
++
++
++/* context commands */
++
++#define VCMD_ctx_create_v0 VC_CMD(VPROC, 1, 0)
++#define VCMD_ctx_create VC_CMD(VPROC, 1, 1)
++
++struct vcmd_ctx_create {
++ uint64_t flagword;
++};
++
++#define VCMD_ctx_migrate_v0 VC_CMD(PROCMIG, 1, 0)
++#define VCMD_ctx_migrate VC_CMD(PROCMIG, 1, 1)
++
++struct vcmd_ctx_migrate {
++ uint64_t flagword;
++};
++
++
++
++/* flag commands */
++
++#define VCMD_get_cflags VC_CMD(FLAGS, 1, 0)
++#define VCMD_set_cflags VC_CMD(FLAGS, 2, 0)
++
++struct vcmd_ctx_flags_v0 {
++ uint64_t flagword;
++ uint64_t mask;
++};
++
++
++
++/* context caps commands */
++
++#define VCMD_get_ccaps VC_CMD(FLAGS, 3, 1)
++#define VCMD_set_ccaps VC_CMD(FLAGS, 4, 1)
++
++struct vcmd_ctx_caps_v1 {
++ uint64_t ccaps;
++ uint64_t cmask;
++};
++
++
++
++/* bcaps commands */
++
++#define VCMD_get_bcaps VC_CMD(FLAGS, 9, 0)
++#define VCMD_set_bcaps VC_CMD(FLAGS, 10, 0)
++
++struct vcmd_bcaps {
++ uint64_t bcaps;
++ uint64_t bmask;
++};
++
++
++
++/* umask commands */
++
++#define VCMD_get_umask VC_CMD(FLAGS, 13, 0)
++#define VCMD_set_umask VC_CMD(FLAGS, 14, 0)
++
++struct vcmd_umask {
++ uint64_t umask;
++ uint64_t mask;
++};
++
++
++
++/* wmask commands */
++
++#define VCMD_get_wmask VC_CMD(FLAGS, 15, 0)
++#define VCMD_set_wmask VC_CMD(FLAGS, 16, 0)
++
++struct vcmd_wmask {
++ uint64_t wmask;
++ uint64_t mask;
++};
++
++
++
++/* OOM badness */
++
++#define VCMD_get_badness VC_CMD(MEMCTRL, 5, 0)
++#define VCMD_set_badness VC_CMD(MEMCTRL, 6, 0)
++
++struct vcmd_badness_v0 {
++ int64_t bias;
++};
++
++#endif /* _UAPI_VS_CONTEXT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/cvirt_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/cvirt_cmd.h
+--- linux-3.10.15/include/uapi/vserver/cvirt_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/cvirt_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,41 @@
++#ifndef _UAPI_VS_CVIRT_CMD_H
++#define _UAPI_VS_CVIRT_CMD_H
++
++
++/* virtual host info name commands */
++
++#define VCMD_set_vhi_name VC_CMD(VHOST, 1, 0)
++#define VCMD_get_vhi_name VC_CMD(VHOST, 2, 0)
++
++struct vcmd_vhi_name_v0 {
++ uint32_t field;
++ char name[65];
++};
++
++
++enum vhi_name_field {
++ VHIN_CONTEXT = 0,
++ VHIN_SYSNAME,
++ VHIN_NODENAME,
++ VHIN_RELEASE,
++ VHIN_VERSION,
++ VHIN_MACHINE,
++ VHIN_DOMAINNAME,
++};
++
++
++
++#define VCMD_virt_stat VC_CMD(VSTAT, 3, 0)
++
++struct vcmd_virt_stat_v0 {
++ uint64_t offset;
++ uint64_t uptime;
++ uint32_t nr_threads;
++ uint32_t nr_running;
++ uint32_t nr_uninterruptible;
++ uint32_t nr_onhold;
++ uint32_t nr_forks;
++ uint32_t load[3];
++};
++
++#endif /* _UAPI_VS_CVIRT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/debug_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/debug_cmd.h
+--- linux-3.10.15/include/uapi/vserver/debug_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/debug_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,24 @@
++#ifndef _UAPI_VS_DEBUG_CMD_H
++#define _UAPI_VS_DEBUG_CMD_H
++
++
++/* debug commands */
++
++#define VCMD_dump_history VC_CMD(DEBUG, 1, 0)
++
++#define VCMD_read_history VC_CMD(DEBUG, 5, 0)
++#define VCMD_read_monitor VC_CMD(DEBUG, 6, 0)
++
++struct vcmd_read_history_v0 {
++ uint32_t index;
++ uint32_t count;
++ char __user *data;
++};
++
++struct vcmd_read_monitor_v0 {
++ uint32_t index;
++ uint32_t count;
++ char __user *data;
++};
++
++#endif /* _UAPI_VS_DEBUG_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/device.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/device.h
+--- linux-3.10.15/include/uapi/vserver/device.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/device.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,12 @@
++#ifndef _UAPI_VS_DEVICE_H
++#define _UAPI_VS_DEVICE_H
++
++
++#define DATTR_CREATE 0x00000001
++#define DATTR_OPEN 0x00000002
++
++#define DATTR_REMAP 0x00000010
++
++#define DATTR_MASK 0x00000013
++
++#endif /* _UAPI_VS_DEVICE_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/device_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/device_cmd.h
+--- linux-3.10.15/include/uapi/vserver/device_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/device_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,16 @@
++#ifndef _UAPI_VS_DEVICE_CMD_H
++#define _UAPI_VS_DEVICE_CMD_H
++
++
++/* device vserver commands */
++
++#define VCMD_set_mapping VC_CMD(DEVICE, 1, 0)
++#define VCMD_unset_mapping VC_CMD(DEVICE, 2, 0)
++
++struct vcmd_set_mapping_v0 {
++ const char __user *device;
++ const char __user *target;
++ uint32_t flags;
++};
++
++#endif /* _UAPI_VS_DEVICE_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/dlimit_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/dlimit_cmd.h
+--- linux-3.10.15/include/uapi/vserver/dlimit_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/dlimit_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,67 @@
++#ifndef _UAPI_VS_DLIMIT_CMD_H
++#define _UAPI_VS_DLIMIT_CMD_H
++
++
++/* dlimit vserver commands */
++
++#define VCMD_add_dlimit VC_CMD(DLIMIT, 1, 0)
++#define VCMD_rem_dlimit VC_CMD(DLIMIT, 2, 0)
++
++#define VCMD_set_dlimit VC_CMD(DLIMIT, 5, 0)
++#define VCMD_get_dlimit VC_CMD(DLIMIT, 6, 0)
++
++struct vcmd_ctx_dlimit_base_v0 {
++ const char __user *name;
++ uint32_t flags;
++};
++
++struct vcmd_ctx_dlimit_v0 {
++ const char __user *name;
++ uint32_t space_used; /* used space in kbytes */
++ uint32_t space_total; /* maximum space in kbytes */
++ uint32_t inodes_used; /* used inodes */
++ uint32_t inodes_total; /* maximum inodes */
++ uint32_t reserved; /* reserved for root in % */
++ uint32_t flags;
++};
++
++#define CDLIM_UNSET ((uint32_t)0UL)
++#define CDLIM_INFINITY ((uint32_t)~0UL)
++#define CDLIM_KEEP ((uint32_t)~1UL)
++
++#define DLIME_UNIT 0
++#define DLIME_KILO 1
++#define DLIME_MEGA 2
++#define DLIME_GIGA 3
++
++#define DLIMF_SHIFT 0x10
++
++#define DLIMS_USED 0
++#define DLIMS_TOTAL 2
++
++static inline
++uint64_t dlimit_space_32to64(uint32_t val, uint32_t flags, int shift)
++{
++ int exp = (flags & DLIMF_SHIFT) ?
++ (flags >> shift) & DLIME_GIGA : DLIME_KILO;
++ return ((uint64_t)val) << (10 * exp);
++}
++
++static inline
++uint32_t dlimit_space_64to32(uint64_t val, uint32_t *flags, int shift)
++{
++ int exp = 0;
++
++ if (*flags & DLIMF_SHIFT) {
++ while (val > (1LL << 32) && (exp < 3)) {
++ val >>= 10;
++ exp++;
++ }
++ *flags &= ~(DLIME_GIGA << shift);
++ *flags |= exp << shift;
++ } else
++ val >>= 10;
++ return val;
++}
+
++#endif /* _UAPI_VS_DLIMIT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/inode.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/inode.h
+--- linux-3.10.15/include/uapi/vserver/inode.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/inode.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,23 @@
++#ifndef _UAPI_VS_INODE_H
++#define _UAPI_VS_INODE_H
+
-+/* context sub struct */
+
-+struct _vx_sched {
-+ int prio_bias; /* bias offset for priority */
++#define IATTR_TAG 0x01000000
+
-+ cpumask_t update; /* CPUs which should update */
-+};
++#define IATTR_ADMIN 0x00000001
++#define IATTR_WATCH 0x00000002
++#define IATTR_HIDE 0x00000004
++#define IATTR_FLAGS 0x00000007
+
-+struct _vx_sched_pc {
-+ int prio_bias; /* bias offset for priority */
++#define IATTR_BARRIER 0x00010000
++#define IATTR_IXUNLINK 0x00020000
++#define IATTR_IMMUTABLE 0x00040000
++#define IATTR_COW 0x00080000
+
-+ uint64_t user_ticks; /* token tick events */
-+ uint64_t sys_ticks; /* token tick events */
-+ uint64_t hold_ticks; /* token ticks paused */
-+};
+
++/* inode ioctls */
+
-+#ifdef CONFIG_VSERVER_DEBUG
++#define FIOC_GETXFLG _IOR('x', 5, long)
++#define FIOC_SETXFLG _IOW('x', 6, long)
+
-+static inline void __dump_vx_sched(struct _vx_sched *sched)
-+{
-+ printk("\t_vx_sched:\n");
-+ printk("\t priority = %4d\n", sched->prio_bias);
-+}
++#endif /* _UAPI_VS_INODE_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/inode_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/inode_cmd.h
+--- linux-3.10.15/include/uapi/vserver/inode_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/inode_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,26 @@
++#ifndef _UAPI_VS_INODE_CMD_H
++#define _UAPI_VS_INODE_CMD_H
+
-+#endif
+
-+#endif /* _VX_SCHED_DEF_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/signal.h linux-3.7-vs2.3.5.1/include/linux/vserver/signal.h
---- linux-3.7/include/linux/vserver/signal.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/signal.h 2012-12-11 15:56:32.000000000 +0000
++/* inode vserver commands */
++
++#define VCMD_get_iattr VC_CMD(INODE, 1, 1)
++#define VCMD_set_iattr VC_CMD(INODE, 2, 1)
++
++#define VCMD_fget_iattr VC_CMD(INODE, 3, 0)
++#define VCMD_fset_iattr VC_CMD(INODE, 4, 0)
++
++struct vcmd_ctx_iattr_v1 {
++ const char __user *name;
++ uint32_t tag;
++ uint32_t flags;
++ uint32_t mask;
++};
++
++struct vcmd_ctx_fiattr_v0 {
++ uint32_t tag;
++ uint32_t flags;
++ uint32_t mask;
++};
++
++#endif /* _UAPI_VS_INODE_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/limit.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/limit.h
+--- linux-3.10.15/include/uapi/vserver/limit.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/limit.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,14 @@
-+#ifndef _VX_SIGNAL_H
-+#define _VX_SIGNAL_H
++#ifndef _UAPI_VS_LIMIT_H
++#define _UAPI_VS_LIMIT_H
+
+
-+#ifdef __KERNEL__
++#define VLIMIT_NSOCK 16
++#define VLIMIT_OPENFD 17
++#define VLIMIT_ANON 18
++#define VLIMIT_SHMEM 19
++#define VLIMIT_SEMARY 20
++#define VLIMIT_NSEMS 21
++#define VLIMIT_DENTRY 22
++#define VLIMIT_MAPPED 23
+
-+struct vx_info;
++#endif /* _UAPI_VS_LIMIT_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/limit_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/limit_cmd.h
+--- linux-3.10.15/include/uapi/vserver/limit_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/limit_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,40 @@
++#ifndef _UAPI_VS_LIMIT_CMD_H
++#define _UAPI_VS_LIMIT_CMD_H
+
-+int vx_info_kill(struct vx_info *, int, int);
+
-+#endif /* __KERNEL__ */
-+#else /* _VX_SIGNAL_H */
-+#warning duplicate inclusion
-+#endif /* _VX_SIGNAL_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/signal_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/signal_cmd.h
---- linux-3.7/include/linux/vserver/signal_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/signal_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,43 @@
-+#ifndef _VX_SIGNAL_CMD_H
-+#define _VX_SIGNAL_CMD_H
++/* rlimit vserver commands */
+
++#define VCMD_get_rlimit VC_CMD(RLIMIT, 1, 0)
++#define VCMD_set_rlimit VC_CMD(RLIMIT, 2, 0)
++#define VCMD_get_rlimit_mask VC_CMD(RLIMIT, 3, 0)
++#define VCMD_reset_hits VC_CMD(RLIMIT, 7, 0)
++#define VCMD_reset_minmax VC_CMD(RLIMIT, 9, 0)
+
-+/* signalling vserver commands */
++struct vcmd_ctx_rlimit_v0 {
++ uint32_t id;
++ uint64_t minimum;
++ uint64_t softlimit;
++ uint64_t maximum;
++};
+
-+#define VCMD_ctx_kill VC_CMD(PROCTRL, 1, 0)
-+#define VCMD_wait_exit VC_CMD(EVENT, 99, 0)
++struct vcmd_ctx_rlimit_mask_v0 {
++ uint32_t minimum;
++ uint32_t softlimit;
++ uint32_t maximum;
++};
+
-+struct vcmd_ctx_kill_v0 {
-+ int32_t pid;
-+ int32_t sig;
++#define VCMD_rlimit_stat VC_CMD(VSTAT, 1, 0)
++
++struct vcmd_rlimit_stat_v0 {
++ uint32_t id;
++ uint32_t hits;
++ uint64_t value;
++ uint64_t minimum;
++ uint64_t maximum;
+};
+
-+struct vcmd_wait_exit_v0 {
-+ int32_t reboot_cmd;
-+ int32_t exit_code;
++#define CRLIM_UNSET (0ULL)
++#define CRLIM_INFINITY (~0ULL)
++#define CRLIM_KEEP (~1ULL)
++
++#endif /* _UAPI_VS_LIMIT_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/monitor.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/monitor.h
+--- linux-3.10.15/include/uapi/vserver/monitor.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/monitor.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,96 @@
++#ifndef _UAPI_VS_MONITOR_H
++#define _UAPI_VS_MONITOR_H
++
++#include <linux/types.h>
++
++
++enum {
++ VXM_UNUSED = 0,
++
++ VXM_SYNC = 0x10,
++
++ VXM_UPDATE = 0x20,
++ VXM_UPDATE_1,
++ VXM_UPDATE_2,
++
++ VXM_RQINFO_1 = 0x24,
++ VXM_RQINFO_2,
++
++ VXM_ACTIVATE = 0x40,
++ VXM_DEACTIVATE,
++ VXM_IDLE,
++
++ VXM_HOLD = 0x44,
++ VXM_UNHOLD,
++
++ VXM_MIGRATE = 0x48,
++ VXM_RESCHED,
++
++ /* all other bits are flags */
++ VXM_SCHED = 0x80,
+};
+
-+#ifdef __KERNEL__
++struct _vxm_update_1 {
++ uint32_t tokens_max;
++ uint32_t fill_rate;
++ uint32_t interval;
++};
+
-+extern int vc_ctx_kill(struct vx_info *, void __user *);
-+extern int vc_wait_exit(struct vx_info *, void __user *);
++struct _vxm_update_2 {
++ uint32_t tokens_min;
++ uint32_t fill_rate;
++ uint32_t interval;
++};
+
-+#endif /* __KERNEL__ */
++struct _vxm_rqinfo_1 {
++ uint16_t running;
++ uint16_t onhold;
++ uint16_t iowait;
++ uint16_t uintr;
++ uint32_t idle_tokens;
++};
+
-+/* process alteration commands */
++struct _vxm_rqinfo_2 {
++ uint32_t norm_time;
++ uint32_t idle_time;
++ uint32_t idle_skip;
++};
+
-+#define VCMD_get_pflags VC_CMD(PROCALT, 5, 0)
-+#define VCMD_set_pflags VC_CMD(PROCALT, 6, 0)
++struct _vxm_sched {
++ uint32_t tokens;
++ uint32_t norm_time;
++ uint32_t idle_time;
++};
+
-+struct vcmd_pflags_v0 {
-+ uint32_t flagword;
-+ uint32_t mask;
++struct _vxm_task {
++ uint16_t pid;
++ uint16_t state;
+};
+
-+#ifdef __KERNEL__
++struct _vxm_event {
++ uint32_t jif;
++ union {
++ uint32_t seq;
++ uint32_t sec;
++ };
++ union {
++ uint32_t tokens;
++ uint32_t nsec;
++ struct _vxm_task tsk;
++ };
++};
+
-+extern int vc_get_pflags(uint32_t pid, void __user *);
-+extern int vc_set_pflags(uint32_t pid, void __user *);
++struct _vx_mon_entry {
++ uint16_t type;
++ uint16_t xid;
++ union {
++ struct _vxm_event ev;
++ struct _vxm_sched sd;
++ struct _vxm_update_1 u1;
++ struct _vxm_update_2 u2;
++ struct _vxm_rqinfo_1 q1;
++ struct _vxm_rqinfo_2 q2;
++ };
++};
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_SIGNAL_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/space.h linux-3.7-vs2.3.5.1/include/linux/vserver/space.h
---- linux-3.7/include/linux/vserver/space.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/space.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,12 @@
-+#ifndef _VX_SPACE_H
-+#define _VX_SPACE_H
++#endif /* _UAPI_VS_MONITOR_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/network.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/network.h
+--- linux-3.10.15/include/uapi/vserver/network.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/network.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,76 @@
++#ifndef _UAPI_VS_NETWORK_H
++#define _UAPI_VS_NETWORK_H
+
+#include <linux/types.h>
+
-+struct vx_info;
+
-+int vx_set_space(struct vx_info *vxi, unsigned long mask, unsigned index);
++#define MAX_N_CONTEXT 65535 /* Arbitrary limit */
+
-+#else /* _VX_SPACE_H */
-+#warning duplicate inclusion
-+#endif /* _VX_SPACE_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/space_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/space_cmd.h
---- linux-3.7/include/linux/vserver/space_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/space_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,38 @@
-+#ifndef _VX_SPACE_CMD_H
-+#define _VX_SPACE_CMD_H
+
++/* network flags */
+
-+#define VCMD_enter_space_v0 VC_CMD(PROCALT, 1, 0)
-+#define VCMD_enter_space_v1 VC_CMD(PROCALT, 1, 1)
-+#define VCMD_enter_space VC_CMD(PROCALT, 1, 2)
++#define NXF_INFO_PRIVATE 0x00000008
+
-+#define VCMD_set_space_v0 VC_CMD(PROCALT, 3, 0)
-+#define VCMD_set_space_v1 VC_CMD(PROCALT, 3, 1)
-+#define VCMD_set_space VC_CMD(PROCALT, 3, 2)
++#define NXF_SINGLE_IP 0x00000100
++#define NXF_LBACK_REMAP 0x00000200
++#define NXF_LBACK_ALLOW 0x00000400
+
-+#define VCMD_get_space_mask_v0 VC_CMD(PROCALT, 4, 0)
++#define NXF_HIDE_NETIF 0x02000000
++#define NXF_HIDE_LBACK 0x04000000
+
-+#define VCMD_get_space_mask VC_CMD(VSPACE, 0, 1)
-+#define VCMD_get_space_default VC_CMD(VSPACE, 1, 0)
++#define NXF_STATE_SETUP (1ULL << 32)
++#define NXF_STATE_ADMIN (1ULL << 34)
+
++#define NXF_SC_HELPER (1ULL << 36)
++#define NXF_PERSISTENT (1ULL << 38)
+
-+struct vcmd_space_mask_v1 {
-+ uint64_t mask;
-+};
++#define NXF_ONE_TIME (0x0005ULL << 32)
+
-+struct vcmd_space_mask_v2 {
-+ uint64_t mask;
-+ uint32_t index;
-+};
+
++#define NXF_INIT_SET (__nxf_init_set())
++
++static inline uint64_t __nxf_init_set(void) {
++ return NXF_STATE_ADMIN
++#ifdef CONFIG_VSERVER_AUTO_LBACK
++ | NXF_LBACK_REMAP
++ | NXF_HIDE_LBACK
++#endif
++#ifdef CONFIG_VSERVER_AUTO_SINGLE
++ | NXF_SINGLE_IP
++#endif
++ | NXF_HIDE_NETIF;
++}
++
++
++/* network caps */
++
++#define NXC_TUN_CREATE 0x00000001
++
++#define NXC_RAW_ICMP 0x00000100
+
-+#ifdef __KERNEL__
++#define NXC_MULTICAST 0x00001000
+
-+extern int vc_enter_space_v1(struct vx_info *, void __user *);
-+extern int vc_set_space_v1(struct vx_info *, void __user *);
-+extern int vc_enter_space(struct vx_info *, void __user *);
-+extern int vc_set_space(struct vx_info *, void __user *);
-+extern int vc_get_space_mask(void __user *, int);
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_SPACE_CMD_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/switch.h linux-3.7-vs2.3.5.1/include/linux/vserver/switch.h
---- linux-3.7/include/linux/vserver/switch.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/switch.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,98 @@
-+#ifndef _VX_SWITCH_H
-+#define _VX_SWITCH_H
++/* address types */
+
-+#include <linux/types.h>
++#define NXA_TYPE_IPV4 0x0001
++#define NXA_TYPE_IPV6 0x0002
+
++#define NXA_TYPE_NONE 0x0000
++#define NXA_TYPE_ANY 0x00FF
+
-+#define VC_CATEGORY(c) (((c) >> 24) & 0x3F)
-+#define VC_COMMAND(c) (((c) >> 16) & 0xFF)
-+#define VC_VERSION(c) ((c) & 0xFFF)
++#define NXA_TYPE_ADDR 0x0010
++#define NXA_TYPE_MASK 0x0020
++#define NXA_TYPE_RANGE 0x0040
+
-+#define VC_CMD(c, i, v) ((((VC_CAT_ ## c) & 0x3F) << 24) \
-+ | (((i) & 0xFF) << 16) | ((v) & 0xFFF))
++#define NXA_MASK_ALL (NXA_TYPE_ADDR | NXA_TYPE_MASK | NXA_TYPE_RANGE)
+
-+/*
++#define NXA_MOD_BCAST 0x0100
++#define NXA_MOD_LBACK 0x0200
+
-+ Syscall Matrix V2.8
++#define NXA_LOOPBACK 0x1000
+
-+ |VERSION|CREATE |MODIFY |MIGRATE|CONTROL|EXPERIM| |SPECIAL|SPECIAL|
-+ |STATS |DESTROY|ALTER |CHANGE |LIMIT |TEST | | | |
-+ |INFO |SETUP | |MOVE | | | | | |
-+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
-+ SYSTEM |VERSION|VSETUP |VHOST | | | | |DEVICE | |
-+ HOST | 00| 01| 02| 03| 04| 05| | 06| 07|
-+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
-+ CPU | |VPROC |PROCALT|PROCMIG|PROCTRL| | |SCHED. | |
-+ PROCESS| 08| 09| 10| 11| 12| 13| | 14| 15|
-+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
-+ MEMORY | | | | |MEMCTRL| | |SWAP | |
-+ | 16| 17| 18| 19| 20| 21| | 22| 23|
-+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
-+ NETWORK| |VNET |NETALT |NETMIG |NETCTL | | |SERIAL | |
-+ | 24| 25| 26| 27| 28| 29| | 30| 31|
-+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
-+ DISK | | | |TAGMIG |DLIMIT | | |INODE | |
-+ VFS | 32| 33| 34| 35| 36| 37| | 38| 39|
-+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
-+ OTHER |VSTAT | | | | | | |VINFO | |
-+ | 40| 41| 42| 43| 44| 45| | 46| 47|
-+ =======+=======+=======+=======+=======+=======+=======+ +=======+=======+
-+ SPECIAL|EVENT | | | |FLAGS | | |VSPACE | |
-+ | 48| 49| 50| 51| 52| 53| | 54| 55|
-+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
-+ SPECIAL|DEBUG | | | |RLIMIT |SYSCALL| | |COMPAT |
-+ | 56| 57| 58| 59| 60|TEST 61| | 62| 63|
-+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
++#define NXA_MASK_BIND (NXA_MASK_ALL | NXA_MOD_BCAST | NXA_MOD_LBACK)
++#define NXA_MASK_SHOW (NXA_MASK_ALL | NXA_LOOPBACK)
+
-+*/
++#endif /* _UAPI_VS_NETWORK_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/network_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/network_cmd.h
+--- linux-3.10.15/include/uapi/vserver/network_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/network_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,123 @@
++#ifndef _UAPI_VS_NETWORK_CMD_H
++#define _UAPI_VS_NETWORK_CMD_H
+
-+#define VC_CAT_VERSION 0
+
-+#define VC_CAT_VSETUP 1
-+#define VC_CAT_VHOST 2
++/* vinfo commands */
+
-+#define VC_CAT_DEVICE 6
++#define VCMD_task_nid VC_CMD(VINFO, 2, 0)
+
-+#define VC_CAT_VPROC 9
-+#define VC_CAT_PROCALT 10
-+#define VC_CAT_PROCMIG 11
-+#define VC_CAT_PROCTRL 12
+
-+#define VC_CAT_SCHED 14
-+#define VC_CAT_MEMCTRL 20
++#define VCMD_nx_info VC_CMD(VINFO, 6, 0)
+
-+#define VC_CAT_VNET 25
-+#define VC_CAT_NETALT 26
-+#define VC_CAT_NETMIG 27
-+#define VC_CAT_NETCTRL 28
++struct vcmd_nx_info_v0 {
++ uint32_t nid;
++ /* more to come */
++};
+
-+#define VC_CAT_TAGMIG 35
-+#define VC_CAT_DLIMIT 36
-+#define VC_CAT_INODE 38
+
-+#define VC_CAT_VSTAT 40
-+#define VC_CAT_VINFO 46
-+#define VC_CAT_EVENT 48
++#include <linux/in.h>
++#include <linux/in6.h>
+
-+#define VC_CAT_FLAGS 52
-+#define VC_CAT_VSPACE 54
-+#define VC_CAT_DEBUG 56
-+#define VC_CAT_RLIMIT 60
++#define VCMD_net_create_v0 VC_CMD(VNET, 1, 0)
++#define VCMD_net_create VC_CMD(VNET, 1, 1)
+
-+#define VC_CAT_SYSTEST 61
-+#define VC_CAT_COMPAT 63
++struct vcmd_net_create {
++ uint64_t flagword;
++};
+
-+/* query version */
++#define VCMD_net_migrate VC_CMD(NETMIG, 1, 0)
+
-+#define VCMD_get_version VC_CMD(VERSION, 0, 0)
-+#define VCMD_get_vci VC_CMD(VERSION, 1, 0)
++#define VCMD_net_add VC_CMD(NETALT, 1, 0)
++#define VCMD_net_remove VC_CMD(NETALT, 2, 0)
+
++struct vcmd_net_addr_v0 {
++ uint16_t type;
++ uint16_t count;
++ struct in_addr ip[4];
++ struct in_addr mask[4];
++};
+
-+#ifdef __KERNEL__
++#define VCMD_net_add_ipv4_v1 VC_CMD(NETALT, 1, 1)
++#define VCMD_net_rem_ipv4_v1 VC_CMD(NETALT, 2, 1)
+
-+#include <linux/errno.h>
++struct vcmd_net_addr_ipv4_v1 {
++ uint16_t type;
++ uint16_t flags;
++ struct in_addr ip;
++ struct in_addr mask;
++};
+
-+#endif /* __KERNEL__ */
++#define VCMD_net_add_ipv4 VC_CMD(NETALT, 1, 2)
++#define VCMD_net_rem_ipv4 VC_CMD(NETALT, 2, 2)
+
-+#endif /* _VX_SWITCH_H */
++struct vcmd_net_addr_ipv4_v2 {
++ uint16_t type;
++ uint16_t flags;
++ struct in_addr ip;
++ struct in_addr ip2;
++ struct in_addr mask;
++};
+
-diff -NurpP --minimal linux-3.7/include/linux/vserver/tag.h linux-3.7-vs2.3.5.1/include/linux/vserver/tag.h
---- linux-3.7/include/linux/vserver/tag.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/tag.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,143 @@
-+#ifndef _DX_TAG_H
-+#define _DX_TAG_H
++#define VCMD_net_add_ipv6 VC_CMD(NETALT, 3, 1)
++#define VCMD_net_remove_ipv6 VC_CMD(NETALT, 4, 1)
+
-+#include <linux/types.h>
++struct vcmd_net_addr_ipv6_v1 {
++ uint16_t type;
++ uint16_t flags;
++ uint32_t prefix;
++ struct in6_addr ip;
++ struct in6_addr mask;
++};
+
++#define VCMD_add_match_ipv4 VC_CMD(NETALT, 5, 0)
++#define VCMD_get_match_ipv4 VC_CMD(NETALT, 6, 0)
+
-+#define DX_TAG(in) (IS_TAGGED(in))
++struct vcmd_match_ipv4_v0 {
++ uint16_t type;
++ uint16_t flags;
++ uint16_t parent;
++ uint16_t prefix;
++ struct in_addr ip;
++ struct in_addr ip2;
++ struct in_addr mask;
++};
+
++#define VCMD_add_match_ipv6 VC_CMD(NETALT, 7, 0)
++#define VCMD_get_match_ipv6 VC_CMD(NETALT, 8, 0)
+
-+#ifdef CONFIG_TAG_NFSD
-+#define DX_TAG_NFSD 1
-+#else
-+#define DX_TAG_NFSD 0
-+#endif
++struct vcmd_match_ipv6_v0 {
++ uint16_t type;
++ uint16_t flags;
++ uint16_t parent;
++ uint16_t prefix;
++ struct in6_addr ip;
++ struct in6_addr ip2;
++ struct in6_addr mask;
++};
+
+
-+#ifdef CONFIG_TAGGING_NONE
+
-+#define MAX_UID 0xFFFFFFFF
-+#define MAX_GID 0xFFFFFFFF
+
-+#define INOTAG_TAG(cond, uid, gid, tag) (0)
++/* flag commands */
+
-+#define TAGINO_UID(cond, uid, tag) (uid)
-+#define TAGINO_GID(cond, gid, tag) (gid)
++#define VCMD_get_nflags VC_CMD(FLAGS, 5, 0)
++#define VCMD_set_nflags VC_CMD(FLAGS, 6, 0)
+
-+#endif
++struct vcmd_net_flags_v0 {
++ uint64_t flagword;
++ uint64_t mask;
++};
+
+
-+#ifdef CONFIG_TAGGING_GID16
+
-+#define MAX_UID 0xFFFFFFFF
-+#define MAX_GID 0x0000FFFF
++/* network caps commands */
+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? (((gid) >> 16) & 0xFFFF) : 0)
++#define VCMD_get_ncaps VC_CMD(FLAGS, 7, 0)
++#define VCMD_set_ncaps VC_CMD(FLAGS, 8, 0)
+
-+#define TAGINO_UID(cond, uid, tag) (uid)
-+#define TAGINO_GID(cond, gid, tag) \
-+ ((cond) ? (((gid) & 0xFFFF) | ((tag) << 16)) : (gid))
++struct vcmd_net_caps_v0 {
++ uint64_t ncaps;
++ uint64_t cmask;
++};
+
-+#endif
++#endif /* _UAPI_VS_NETWORK_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/sched_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/sched_cmd.h
+--- linux-3.10.15/include/uapi/vserver/sched_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/sched_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,13 @@
++#ifndef _UAPI_VS_SCHED_CMD_H
++#define _UAPI_VS_SCHED_CMD_H
+
+
-+#ifdef CONFIG_TAGGING_ID24
++struct vcmd_prio_bias {
++ int32_t cpu_id;
++ int32_t prio_bias;
++};
+
-+#define MAX_UID 0x00FFFFFF
-+#define MAX_GID 0x00FFFFFF
++#define VCMD_set_prio_bias VC_CMD(SCHED, 4, 0)
++#define VCMD_get_prio_bias VC_CMD(SCHED, 5, 0)
+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) : 0)
++#endif /* _UAPI_VS_SCHED_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/signal_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/signal_cmd.h
+--- linux-3.10.15/include/uapi/vserver/signal_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/signal_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,31 @@
++#ifndef _UAPI_VS_SIGNAL_CMD_H
++#define _UAPI_VS_SIGNAL_CMD_H
+
-+#define TAGINO_UID(cond, uid, tag) \
-+ ((cond) ? (((uid) & 0xFFFFFF) | (((tag) & 0xFF00) << 16)) : (uid))
-+#define TAGINO_GID(cond, gid, tag) \
-+ ((cond) ? (((gid) & 0xFFFFFF) | (((tag) & 0x00FF) << 24)) : (gid))
+
-+#endif
++/* signalling vserver commands */
+
++#define VCMD_ctx_kill VC_CMD(PROCTRL, 1, 0)
++#define VCMD_wait_exit VC_CMD(EVENT, 99, 0)
+
-+#ifdef CONFIG_TAGGING_UID16
++struct vcmd_ctx_kill_v0 {
++ int32_t pid;
++ int32_t sig;
++};
+
-+#define MAX_UID 0x0000FFFF
-+#define MAX_GID 0xFFFFFFFF
++struct vcmd_wait_exit_v0 {
++ int32_t reboot_cmd;
++ int32_t exit_code;
++};
+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? (((uid) >> 16) & 0xFFFF) : 0)
+
-+#define TAGINO_UID(cond, uid, tag) \
-+ ((cond) ? (((uid) & 0xFFFF) | ((tag) << 16)) : (uid))
-+#define TAGINO_GID(cond, gid, tag) (gid)
++/* process alteration commands */
+
-+#endif
++#define VCMD_get_pflags VC_CMD(PROCALT, 5, 0)
++#define VCMD_set_pflags VC_CMD(PROCALT, 6, 0)
+
++struct vcmd_pflags_v0 {
++ uint32_t flagword;
++ uint32_t mask;
++};
+
-+#ifdef CONFIG_TAGGING_INTERN
++#endif /* _UAPI_VS_SIGNAL_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/space_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/space_cmd.h
+--- linux-3.10.15/include/uapi/vserver/space_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/space_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,28 @@
++#ifndef _UAPI_VS_SPACE_CMD_H
++#define _UAPI_VS_SPACE_CMD_H
+
-+#define MAX_UID 0xFFFFFFFF
-+#define MAX_GID 0xFFFFFFFF
+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? (tag) : 0)
++#define VCMD_enter_space_v0 VC_CMD(PROCALT, 1, 0)
++#define VCMD_enter_space_v1 VC_CMD(PROCALT, 1, 1)
++#define VCMD_enter_space VC_CMD(PROCALT, 1, 2)
+
-+#define TAGINO_UID(cond, uid, tag) (uid)
-+#define TAGINO_GID(cond, gid, tag) (gid)
++#define VCMD_set_space_v0 VC_CMD(PROCALT, 3, 0)
++#define VCMD_set_space_v1 VC_CMD(PROCALT, 3, 1)
++#define VCMD_set_space VC_CMD(PROCALT, 3, 2)
+
-+#endif
++#define VCMD_get_space_mask_v0 VC_CMD(PROCALT, 4, 0)
+
++#define VCMD_get_space_mask VC_CMD(VSPACE, 0, 1)
++#define VCMD_get_space_default VC_CMD(VSPACE, 1, 0)
+
-+#ifndef CONFIG_TAGGING_NONE
-+#define dx_current_fstag(sb) \
-+ ((sb)->s_flags & MS_TAGGED ? dx_current_tag() : 0)
-+#else
-+#define dx_current_fstag(sb) (0)
-+#endif
+
-+#ifndef CONFIG_TAGGING_INTERN
-+#define TAGINO_TAG(cond, tag) (0)
-+#else
-+#define TAGINO_TAG(cond, tag) ((cond) ? (tag) : 0)
-+#endif
++struct vcmd_space_mask_v1 {
++ uint64_t mask;
++};
+
-+#define INOTAG_UID(cond, uid, gid) \
-+ ((cond) ? ((uid) & MAX_UID) : (uid))
-+#define INOTAG_GID(cond, uid, gid) \
-+ ((cond) ? ((gid) & MAX_GID) : (gid))
++struct vcmd_space_mask_v2 {
++ uint64_t mask;
++ uint32_t index;
++};
+
++#endif /* _UAPI_VS_SPACE_CMD_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/switch.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/switch.h
+--- linux-3.10.15/include/uapi/vserver/switch.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/switch.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,90 @@
++#ifndef _UAPI_VS_SWITCH_H
++#define _UAPI_VS_SWITCH_H
+
-+static inline uid_t dx_map_uid(uid_t uid)
-+{
-+ if ((uid > MAX_UID) && (uid != -1))
-+ uid = -2;
-+ return (uid & MAX_UID);
-+}
++#include <linux/types.h>
+
-+static inline gid_t dx_map_gid(gid_t gid)
-+{
-+ if ((gid > MAX_GID) && (gid != -1))
-+ gid = -2;
-+ return (gid & MAX_GID);
-+}
+
-+struct peer_tag {
-+ int32_t xid;
-+ int32_t nid;
-+};
++#define VC_CATEGORY(c) (((c) >> 24) & 0x3F)
++#define VC_COMMAND(c) (((c) >> 16) & 0xFF)
++#define VC_VERSION(c) ((c) & 0xFFF)
+
-+#define dx_notagcheck(sb) ((sb) && ((sb)->s_flags & MS_NOTAGCHECK))
++#define VC_CMD(c, i, v) ((((VC_CAT_ ## c) & 0x3F) << 24) \
++ | (((i) & 0xFF) << 16) | ((v) & 0xFFF))
+
-+int dx_parse_tag(char *string, tag_t *tag, int remove, int *mnt_flags,
-+ unsigned long *flags);
++/*
+
-+#ifdef CONFIG_PROPAGATE
++ Syscall Matrix V2.8
+
-+void __dx_propagate_tag(struct nameidata *nd, struct inode *inode);
++ |VERSION|CREATE |MODIFY |MIGRATE|CONTROL|EXPERIM| |SPECIAL|SPECIAL|
++ |STATS |DESTROY|ALTER |CHANGE |LIMIT |TEST | | | |
++ |INFO |SETUP | |MOVE | | | | | |
++ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
++ SYSTEM |VERSION|VSETUP |VHOST | | | | |DEVICE | |
++ HOST | 00| 01| 02| 03| 04| 05| | 06| 07|
++ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
++ CPU | |VPROC |PROCALT|PROCMIG|PROCTRL| | |SCHED. | |
++ PROCESS| 08| 09| 10| 11| 12| 13| | 14| 15|
++ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
++ MEMORY | | | | |MEMCTRL| | |SWAP | |
++ | 16| 17| 18| 19| 20| 21| | 22| 23|
++ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
++ NETWORK| |VNET |NETALT |NETMIG |NETCTL | | |SERIAL | |
++ | 24| 25| 26| 27| 28| 29| | 30| 31|
++ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
++ DISK | | | |TAGMIG |DLIMIT | | |INODE | |
++ VFS | 32| 33| 34| 35| 36| 37| | 38| 39|
++ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
++ OTHER |VSTAT | | | | | | |VINFO | |
++ | 40| 41| 42| 43| 44| 45| | 46| 47|
++ =======+=======+=======+=======+=======+=======+=======+ +=======+=======+
++ SPECIAL|EVENT | | | |FLAGS | | |VSPACE | |
++ | 48| 49| 50| 51| 52| 53| | 54| 55|
++ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
++ SPECIAL|DEBUG | | | |RLIMIT |SYSCALL| | |COMPAT |
++ | 56| 57| 58| 59| 60|TEST 61| | 62| 63|
++ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
+
-+#define dx_propagate_tag(n, i) __dx_propagate_tag(n, i)
++*/
+
-+#else
-+#define dx_propagate_tag(n, i) do { } while (0)
-+#endif
++#define VC_CAT_VERSION 0
+
-+#endif /* _DX_TAG_H */
-diff -NurpP --minimal linux-3.7/include/linux/vserver/tag_cmd.h linux-3.7-vs2.3.5.1/include/linux/vserver/tag_cmd.h
---- linux-3.7/include/linux/vserver/tag_cmd.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/linux/vserver/tag_cmd.h 2012-12-11 15:56:32.000000000 +0000
-@@ -0,0 +1,22 @@
-+#ifndef _VX_TAG_CMD_H
-+#define _VX_TAG_CMD_H
++#define VC_CAT_VSETUP 1
++#define VC_CAT_VHOST 2
+
++#define VC_CAT_DEVICE 6
+
-+/* vinfo commands */
++#define VC_CAT_VPROC 9
++#define VC_CAT_PROCALT 10
++#define VC_CAT_PROCMIG 11
++#define VC_CAT_PROCTRL 12
+
-+#define VCMD_task_tag VC_CMD(VINFO, 3, 0)
++#define VC_CAT_SCHED 14
++#define VC_CAT_MEMCTRL 20
+
-+#ifdef __KERNEL__
-+extern int vc_task_tag(uint32_t);
++#define VC_CAT_VNET 25
++#define VC_CAT_NETALT 26
++#define VC_CAT_NETMIG 27
++#define VC_CAT_NETCTRL 28
+
-+#endif /* __KERNEL__ */
++#define VC_CAT_TAGMIG 35
++#define VC_CAT_DLIMIT 36
++#define VC_CAT_INODE 38
+
-+/* context commands */
++#define VC_CAT_VSTAT 40
++#define VC_CAT_VINFO 46
++#define VC_CAT_EVENT 48
+
-+#define VCMD_tag_migrate VC_CMD(TAGMIG, 1, 0)
++#define VC_CAT_FLAGS 52
++#define VC_CAT_VSPACE 54
++#define VC_CAT_DEBUG 56
++#define VC_CAT_RLIMIT 60
+
-+#ifdef __KERNEL__
-+extern int vc_tag_migrate(uint32_t);
++#define VC_CAT_SYSTEST 61
++#define VC_CAT_COMPAT 63
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_TAG_CMD_H */
-diff -NurpP --minimal linux-3.7/include/net/addrconf.h linux-3.7-vs2.3.5.1/include/net/addrconf.h
---- linux-3.7/include/net/addrconf.h 2012-12-11 15:47:46.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/net/addrconf.h 2012-12-11 15:56:32.000000000 +0000
-@@ -81,7 +81,8 @@ extern int ipv6_dev_get_saddr(struct n
- const struct net_device *dev,
- const struct in6_addr *daddr,
- unsigned int srcprefs,
-- struct in6_addr *saddr);
-+ struct in6_addr *saddr,
-+ struct nx_info *nxi);
- extern int ipv6_get_lladdr(struct net_device *dev,
- struct in6_addr *addr,
- unsigned char banned_flags);
-diff -NurpP --minimal linux-3.7/include/net/af_unix.h linux-3.7-vs2.3.5.1/include/net/af_unix.h
---- linux-3.7/include/net/af_unix.h 2012-10-04 13:27:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/net/af_unix.h 2012-12-11 15:56:32.000000000 +0000
-@@ -4,6 +4,7 @@
- #include <linux/socket.h>
- #include <linux/un.h>
- #include <linux/mutex.h>
-+#include <linux/vs_base.h>
- #include <net/sock.h>
-
- extern void unix_inflight(struct file *fp);
-diff -NurpP --minimal linux-3.7/include/net/inet_timewait_sock.h linux-3.7-vs2.3.5.1/include/net/inet_timewait_sock.h
---- linux-3.7/include/net/inet_timewait_sock.h 2012-03-19 18:47:29.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/net/inet_timewait_sock.h 2012-12-11 15:56:32.000000000 +0000
-@@ -112,6 +112,10 @@ struct inet_timewait_sock {
- #define tw_net __tw_common.skc_net
- #define tw_daddr __tw_common.skc_daddr
- #define tw_rcv_saddr __tw_common.skc_rcv_saddr
-+#define tw_xid __tw_common.skc_xid
-+#define tw_vx_info __tw_common.skc_vx_info
-+#define tw_nid __tw_common.skc_nid
-+#define tw_nx_info __tw_common.skc_nx_info
- int tw_timeout;
- volatile unsigned char tw_substate;
- unsigned char tw_rcv_wscale;
-diff -NurpP --minimal linux-3.7/include/net/ip6_route.h linux-3.7-vs2.3.5.1/include/net/ip6_route.h
---- linux-3.7/include/net/ip6_route.h 2012-10-04 13:27:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/net/ip6_route.h 2012-12-11 15:56:32.000000000 +0000
-@@ -97,7 +97,8 @@ extern int ip6_route_get_saddr(struct
- struct rt6_info *rt,
- const struct in6_addr *daddr,
- unsigned int prefs,
-- struct in6_addr *saddr);
-+ struct in6_addr *saddr,
-+ struct nx_info *nxi);
-
- extern struct rt6_info *rt6_lookup(struct net *net,
- const struct in6_addr *daddr,
-diff -NurpP --minimal linux-3.7/include/net/route.h linux-3.7-vs2.3.5.1/include/net/route.h
---- linux-3.7/include/net/route.h 2012-12-11 15:47:46.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/net/route.h 2012-12-11 15:56:32.000000000 +0000
-@@ -204,6 +204,9 @@ static inline void ip_rt_put(struct rtab
- dst_release(&rt->dst);
- }
-
-+#include <linux/vs_base.h>
-+#include <linux/vs_inet.h>
++/* query version */
+
- #define IPTOS_RT_MASK (IPTOS_TOS_MASK & ~3)
-
- extern const __u8 ip_tos2prio[16];
-@@ -253,6 +256,9 @@ static inline void ip_route_connect_init
- protocol, flow_flags, dst, src, dport, sport);
- }
-
-+extern struct rtable *ip_v4_find_src(struct net *net, struct nx_info *,
-+ struct flowi4 *);
++#define VCMD_get_version VC_CMD(VERSION, 0, 0)
++#define VCMD_get_vci VC_CMD(VERSION, 1, 0)
+
- static inline struct rtable *ip_route_connect(struct flowi4 *fl4,
- __be32 dst, __be32 src, u32 tos,
- int oif, u8 protocol,
-@@ -261,11 +267,25 @@ static inline struct rtable *ip_route_co
- {
- struct net *net = sock_net(sk);
- struct rtable *rt;
-+ struct nx_info *nx_info = current_nx_info();
-
- ip_route_connect_init(fl4, dst, src, tos, oif, protocol,
- sport, dport, sk, can_sleep);
-
-- if (!dst || !src) {
-+ if (sk)
-+ nx_info = sk->sk_nx_info;
++#endif /* _UAPI_VS_SWITCH_H */
+diff -NurpP --minimal linux-3.10.15/include/uapi/vserver/tag_cmd.h linux-3.10.15-vs2.3.6.6/include/uapi/vserver/tag_cmd.h
+--- linux-3.10.15/include/uapi/vserver/tag_cmd.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/include/uapi/vserver/tag_cmd.h 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,14 @@
++#ifndef _UAPI_VS_TAG_CMD_H
++#define _UAPI_VS_TAG_CMD_H
+
-+ vxdprintk(VXD_CBIT(net, 4),
-+ "ip_route_connect(%p) %p,%p;%lx",
-+ sk, nx_info, sk->sk_socket,
-+ (sk->sk_socket?sk->sk_socket->flags:0));
+
-+ rt = ip_v4_find_src(net, nx_info, fl4);
-+ if (IS_ERR(rt))
-+ return rt;
-+ ip_rt_put(rt);
++/* vinfo commands */
+
-+ if (!fl4->daddr || !fl4->saddr) {
- rt = __ip_route_output_key(net, fl4);
- if (IS_ERR(rt))
- return rt;
-diff -NurpP --minimal linux-3.7/include/net/sock.h linux-3.7-vs2.3.5.1/include/net/sock.h
---- linux-3.7/include/net/sock.h 2012-12-11 15:47:46.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/net/sock.h 2012-12-11 15:56:32.000000000 +0000
-@@ -171,6 +171,10 @@ struct sock_common {
- #ifdef CONFIG_NET_NS
- struct net *skc_net;
- #endif
-+ xid_t skc_xid;
-+ struct vx_info *skc_vx_info;
-+ nid_t skc_nid;
-+ struct nx_info *skc_nx_info;
- /*
- * fields between dontcopy_begin/dontcopy_end
- * are not copied in sock_copy()
-@@ -283,6 +287,10 @@ struct sock {
- #define sk_bind_node __sk_common.skc_bind_node
- #define sk_prot __sk_common.skc_prot
- #define sk_net __sk_common.skc_net
-+#define sk_xid __sk_common.skc_xid
-+#define sk_vx_info __sk_common.skc_vx_info
-+#define sk_nid __sk_common.skc_nid
-+#define sk_nx_info __sk_common.skc_nx_info
- socket_lock_t sk_lock;
- struct sk_buff_head sk_receive_queue;
- /*
-diff -NurpP --minimal linux-3.7/include/uapi/linux/capability.h linux-3.7-vs2.3.5.1/include/uapi/linux/capability.h
---- linux-3.7/include/uapi/linux/capability.h 2012-12-11 15:47:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/uapi/linux/capability.h 2012-12-11 16:08:57.000000000 +0000
-@@ -259,6 +259,7 @@ struct vfs_cap_data {
- arbitrary SCSI commands */
- /* Allow setting encryption key on loopback filesystem */
- /* Allow setting zone reclaim policy */
-+/* Allow the selection of a security context */
-
- #define CAP_SYS_ADMIN 21
-
-@@ -345,7 +346,12 @@ struct vfs_cap_data {
-
- #define CAP_LAST_CAP CAP_BLOCK_SUSPEND
-
--#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP)
-+/* Allow context manipulations */
-+/* Allow changing context info on files */
++#define VCMD_task_tag VC_CMD(VINFO, 3, 0)
+
-+#define CAP_CONTEXT 63
+
-+#define cap_valid(x) ((x) >= 0 && ((x) <= CAP_LAST_CAP || (x) == CAP_CONTEXT))
-
- /*
- * Bit location of each capability (used by user-space library and kernel)
-diff -NurpP --minimal linux-3.7/include/uapi/linux/fs.h linux-3.7-vs2.3.5.1/include/uapi/linux/fs.h
---- linux-3.7/include/uapi/linux/fs.h 2012-12-11 15:47:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/uapi/linux/fs.h 2012-12-11 16:35:06.000000000 +0000
-@@ -86,6 +86,9 @@ struct inodes_stat_t {
- #define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */
- #define MS_I_VERSION (1<<23) /* Update inode I_version field */
- #define MS_STRICTATIME (1<<24) /* Always perform atime updates */
-+#define MS_TAGGED (1<<25) /* use generic inode tagging */
-+#define MS_TAGID (1<<26) /* use specific tag for this mount */
-+#define MS_NOTAGCHECK (1<<27) /* don't check tags */
- #define MS_NOSEC (1<<28)
- #define MS_BORN (1<<29)
- #define MS_ACTIVE (1<<30)
-@@ -189,11 +192,14 @@ struct inodes_stat_t {
- #define FS_EXTENT_FL 0x00080000 /* Extents */
- #define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */
- #define FS_NOCOW_FL 0x00800000 /* Do not cow file */
-+#define FS_IXUNLINK_FL 0x08000000 /* Immutable invert on unlink */
- #define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */
-
--#define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
--#define FS_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */
--
-+#define FS_BARRIER_FL 0x04000000 /* Barrier for chroot() */
-+#define FS_COW_FL 0x20000000 /* Copy on Write marker */
++/* context commands */
+
-+#define FS_FL_USER_VISIBLE 0x0103DFFF /* User visible flags */
-+#define FS_FL_USER_MODIFIABLE 0x010380FF /* User modifiable flags */
-
- #define SYNC_FILE_RANGE_WAIT_BEFORE 1
- #define SYNC_FILE_RANGE_WRITE 2
-diff -NurpP --minimal linux-3.7/include/uapi/linux/gfs2_ondisk.h linux-3.7-vs2.3.5.1/include/uapi/linux/gfs2_ondisk.h
---- linux-3.7/include/uapi/linux/gfs2_ondisk.h 2012-12-11 15:47:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/uapi/linux/gfs2_ondisk.h 2012-12-11 21:58:36.000000000 +0000
-@@ -225,6 +225,9 @@ enum {
- gfs2fl_Sync = 8,
- gfs2fl_System = 9,
- gfs2fl_TopLevel = 10,
-+ gfs2fl_IXUnlink = 16,
-+ gfs2fl_Barrier = 17,
-+ gfs2fl_Cow = 18,
- gfs2fl_TruncInProg = 29,
- gfs2fl_InheritDirectio = 30,
- gfs2fl_InheritJdata = 31,
-@@ -242,6 +245,9 @@ enum {
- #define GFS2_DIF_SYNC 0x00000100
- #define GFS2_DIF_SYSTEM 0x00000200 /* New in gfs2 */
- #define GFS2_DIF_TOPDIR 0x00000400 /* New in gfs2 */
-+#define GFS2_DIF_IXUNLINK 0x00010000
-+#define GFS2_DIF_BARRIER 0x00020000
-+#define GFS2_DIF_COW 0x00040000
- #define GFS2_DIF_TRUNC_IN_PROG 0x20000000 /* New in gfs2 */
- #define GFS2_DIF_INHERIT_DIRECTIO 0x40000000 /* only in gfs1 */
- #define GFS2_DIF_INHERIT_JDATA 0x80000000
-diff -NurpP --minimal linux-3.7/include/uapi/linux/if_tun.h linux-3.7-vs2.3.5.1/include/uapi/linux/if_tun.h
---- linux-3.7/include/uapi/linux/if_tun.h 2012-12-11 15:47:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/uapi/linux/if_tun.h 2012-12-11 16:11:03.000000000 +0000
-@@ -53,6 +53,7 @@
- #define TUNDETACHFILTER _IOW('T', 214, struct sock_fprog)
- #define TUNGETVNETHDRSZ _IOR('T', 215, int)
- #define TUNSETVNETHDRSZ _IOW('T', 216, int)
-+#define TUNSETNID _IOW('T', 217, int)
-
- /* TUNSETIFF ifr flags */
- #define IFF_TUN 0x0001
-diff -NurpP --minimal linux-3.7/include/uapi/linux/major.h linux-3.7-vs2.3.5.1/include/uapi/linux/major.h
---- linux-3.7/include/uapi/linux/major.h 2012-12-11 15:47:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/uapi/linux/major.h 2012-12-11 22:10:37.000000000 +0000
-@@ -15,6 +15,7 @@
- #define HD_MAJOR IDE0_MAJOR
- #define PTY_SLAVE_MAJOR 3
- #define TTY_MAJOR 4
-+#define VROOT_MAJOR 4
- #define TTYAUX_MAJOR 5
- #define LP_MAJOR 6
- #define VCS_MAJOR 7
-diff -NurpP --minimal linux-3.7/include/uapi/linux/nfs_mount.h linux-3.7-vs2.3.5.1/include/uapi/linux/nfs_mount.h
---- linux-3.7/include/uapi/linux/nfs_mount.h 2012-12-11 15:47:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/uapi/linux/nfs_mount.h 2012-12-11 22:05:39.000000000 +0000
-@@ -63,7 +63,8 @@ struct nfs_mount_data {
- #define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */
- #define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */
- #define NFS_MOUNT_UNSHARED 0x8000 /* 5 */
--#define NFS_MOUNT_FLAGMASK 0xFFFF
-+#define NFS_MOUNT_TAGGED 0x10000 /* context tagging */
-+#define NFS_MOUNT_FLAGMASK 0x1FFFF
-
- /* The following are for internal use only */
- #define NFS_MOUNT_LOOKUP_CACHE_NONEG 0x10000
-diff -NurpP --minimal linux-3.7/include/uapi/linux/reboot.h linux-3.7-vs2.3.5.1/include/uapi/linux/reboot.h
---- linux-3.7/include/uapi/linux/reboot.h 2012-12-11 15:47:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/uapi/linux/reboot.h 2012-12-11 16:29:23.000000000 +0000
-@@ -33,7 +33,7 @@
- #define LINUX_REBOOT_CMD_RESTART2 0xA1B2C3D4
- #define LINUX_REBOOT_CMD_SW_SUSPEND 0xD000FCE2
- #define LINUX_REBOOT_CMD_KEXEC 0x45584543
--
-+#define LINUX_REBOOT_CMD_OOM 0xDEADBEEF
-
-
- #endif /* _UAPI_LINUX_REBOOT_H */
-diff -NurpP --minimal linux-3.7/include/uapi/linux/sysctl.h linux-3.7-vs2.3.5.1/include/uapi/linux/sysctl.h
---- linux-3.7/include/uapi/linux/sysctl.h 2012-12-11 15:47:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/include/uapi/linux/sysctl.h 2012-12-11 16:42:05.000000000 +0000
-@@ -60,6 +60,7 @@ enum
- CTL_ABI=9, /* Binary emulation */
- CTL_CPU=10, /* CPU stuff (speed scaling, etc) */
- CTL_ARLAN=254, /* arlan wireless driver */
-+ CTL_VSERVER=4242, /* Linux-VServer debug */
- CTL_S390DBF=5677, /* s390 debug */
- CTL_SUNRPC=7249, /* sunrpc debug */
- CTL_PM=9899, /* frv power management */
-@@ -94,6 +95,7 @@ enum
-
- KERN_PANIC=15, /* int: panic timeout */
- KERN_REALROOTDEV=16, /* real root device to mount after initrd */
-+ KERN_VSHELPER=17, /* string: path to vshelper policy agent */
-
- KERN_SPARC_REBOOT=21, /* reboot command on Sparc */
- KERN_CTLALTDEL=22, /* int: allow ctl-alt-del to reboot */
-diff -NurpP --minimal linux-3.7/init/Kconfig linux-3.7-vs2.3.5.1/init/Kconfig
---- linux-3.7/init/Kconfig 2012-12-11 15:47:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/init/Kconfig 2012-12-11 23:14:38.000000000 +0000
-@@ -699,6 +699,7 @@ config HAVE_UNSTABLE_SCHED_CLOCK
++#define VCMD_tag_migrate VC_CMD(TAGMIG, 1, 0)
++
++#endif /* _UAPI_VS_TAG_CMD_H */
+diff -NurpP --minimal linux-3.10.15/init/Kconfig linux-3.10.15-vs2.3.6.6/init/Kconfig
+--- linux-3.10.15/init/Kconfig 2013-07-14 17:01:34.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/init/Kconfig 2013-08-22 20:30:00.000000000 +0000
+@@ -805,6 +805,7 @@ config NUMA_BALANCING
menuconfig CGROUPS
boolean "Control Group support"
depends on EVENTFD
help
This option adds support for grouping sets of processes together, for
use with process control subsystems such as Cpusets, CFS, memory
-@@ -964,6 +965,7 @@ config USER_NS
- bool "User namespace (EXPERIMENTAL)"
- depends on EXPERIMENTAL
+@@ -1067,6 +1068,7 @@ config IPC_NS
+ config USER_NS
+ bool "User namespace"
depends on UIDGID_CONVERTED
+ depends on VSERVER_DISABLED
select UIDGID_STRICT_TYPE_CHECKS
default n
-diff -NurpP --minimal linux-3.7/init/main.c linux-3.7-vs2.3.5.1/init/main.c
---- linux-3.7/init/main.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/init/main.c 2012-12-11 16:56:16.000000000 +0000
-@@ -70,6 +70,7 @@
- #include <linux/perf_event.h>
- #include <linux/file.h>
- #include <linux/ptrace.h>
+diff -NurpP --minimal linux-3.10.15/init/main.c linux-3.10.15-vs2.3.6.6/init/main.c
+--- linux-3.10.15/init/main.c 2013-07-14 17:01:34.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/init/main.c 2013-08-22 20:30:00.000000000 +0000
+@@ -74,6 +74,7 @@
+ #include <linux/blkdev.h>
+ #include <linux/elevator.h>
+ #include <linux/random.h>
+#include <linux/vserver/percpu.h>
#include <asm/io.h>
#include <asm/bugs.h>
-diff -NurpP --minimal linux-3.7/ipc/mqueue.c linux-3.7-vs2.3.5.1/ipc/mqueue.c
---- linux-3.7/ipc/mqueue.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/ipc/mqueue.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/ipc/mqueue.c linux-3.10.15-vs2.3.6.6/ipc/mqueue.c
+--- linux-3.10.15/ipc/mqueue.c 2013-05-31 13:45:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/ipc/mqueue.c 2013-08-22 20:30:00.000000000 +0000
@@ -35,6 +35,8 @@
#include <linux/ipc_namespace.h>
#include <linux/user_namespace.h>
} else if (S_ISDIR(mode)) {
inc_nlink(inode);
/* Some things misbehave if size == 0 on a directory */
-@@ -394,8 +402,11 @@ static void mqueue_evict_inode(struct in
+@@ -402,8 +410,11 @@ static void mqueue_evict_inode(struct in
user = info->user;
if (user) {
/*
* get_ns_from_inode() ensures that the
* (ipc_ns = sb->s_fs_info) is either a valid ipc_ns
-@@ -405,6 +416,7 @@ static void mqueue_evict_inode(struct in
+@@ -413,6 +424,7 @@ static void mqueue_evict_inode(struct in
if (ipc_ns)
ipc_ns->mq_queues_count--;
spin_unlock(&mq_lock);
free_uid(user);
}
if (ipc_ns)
-diff -NurpP --minimal linux-3.7/ipc/msg.c linux-3.7-vs2.3.5.1/ipc/msg.c
---- linux-3.7/ipc/msg.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/ipc/msg.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/ipc/msg.c linux-3.10.15-vs2.3.6.6/ipc/msg.c
+--- linux-3.10.15/ipc/msg.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/ipc/msg.c 2013-10-09 17:37:22.000000000 +0000
@@ -37,6 +37,7 @@
#include <linux/rwsem.h>
#include <linux/nsproxy.h>
#include <asm/current.h>
#include <asm/uaccess.h>
-@@ -190,6 +191,7 @@ static int newque(struct ipc_namespace *
+@@ -191,6 +192,7 @@ static int newque(struct ipc_namespace *
msq->q_perm.mode = msgflg & S_IRWXUGO;
msq->q_perm.key = key;
msq->q_perm.security = NULL;
retval = security_msg_queue_alloc(msq);
-diff -NurpP --minimal linux-3.7/ipc/namespace.c linux-3.7-vs2.3.5.1/ipc/namespace.c
---- linux-3.7/ipc/namespace.c 2012-07-22 21:39:46.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/ipc/namespace.c 2012-12-11 15:56:32.000000000 +0000
-@@ -13,11 +13,12 @@
- #include <linux/mount.h>
- #include <linux/user_namespace.h>
- #include <linux/proc_fs.h>
-+#include <linux/vs_base.h>
-+#include <linux/vserver/global.h>
-
- #include "util.h"
-
--static struct ipc_namespace *create_ipc_ns(struct task_struct *tsk,
-- struct ipc_namespace *old_ns)
-+static struct ipc_namespace *create_ipc_ns(struct user_namespace *user_ns)
- {
- struct ipc_namespace *ns;
- int err;
-@@ -46,19 +47,19 @@ static struct ipc_namespace *create_ipc_
- ipcns_notify(IPCNS_CREATED);
- register_ipcns_notifier(ns);
-
-- ns->user_ns = get_user_ns(task_cred_xxx(tsk, user_ns));
-+ // ns->user_ns = get_user_ns(task_cred_xxx(tsk, user_ns));
-+ ns->user_ns = get_user_ns(user_ns);
-
- return ns;
- }
-
- struct ipc_namespace *copy_ipcs(unsigned long flags,
-- struct task_struct *tsk)
-+ struct ipc_namespace *old_ns,
-+ struct user_namespace *user_ns)
- {
-- struct ipc_namespace *ns = tsk->nsproxy->ipc_ns;
--
- if (!(flags & CLONE_NEWIPC))
-- return get_ipc_ns(ns);
-- return create_ipc_ns(tsk, ns);
-+ return get_ipc_ns(old_ns);
-+ return create_ipc_ns(user_ns);
- }
-
- /*
-diff -NurpP --minimal linux-3.7/ipc/sem.c linux-3.7-vs2.3.5.1/ipc/sem.c
---- linux-3.7/ipc/sem.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/ipc/sem.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/ipc/sem.c linux-3.10.15-vs2.3.6.6/ipc/sem.c
+--- linux-3.10.15/ipc/sem.c 2013-07-14 17:01:34.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/ipc/sem.c 2013-08-22 20:30:00.000000000 +0000
@@ -86,6 +86,8 @@
#include <linux/rwsem.h>
#include <linux/nsproxy.h>
#include <asm/uaccess.h>
#include "util.h"
-@@ -306,6 +308,7 @@ static int newary(struct ipc_namespace *
+@@ -399,6 +401,7 @@ static int newary(struct ipc_namespace *
sma->sem_perm.mode = (semflg & S_IRWXUGO);
sma->sem_perm.key = key;
sma->sem_perm.security = NULL;
retval = security_sem_alloc(sma);
-@@ -321,6 +324,9 @@ static int newary(struct ipc_namespace *
+@@ -414,6 +417,9 @@ static int newary(struct ipc_namespace *
return id;
}
ns->used_sems += nsems;
sma->sem_base = (struct sem *) &sma[1];
-@@ -770,6 +776,9 @@ static void freeary(struct ipc_namespace
+@@ -903,6 +909,9 @@ static void freeary(struct ipc_namespace
wake_up_sem_queue_do(&tasks);
ns->used_sems -= sma->sem_nsems;
+ /* FIXME: obsoleted? */
+ vx_nsems_sub(sma, sma->sem_nsems);
+ vx_semary_dec(sma);
- security_sem_free(sma);
- ipc_rcu_putref(sma);
+ ipc_rcu_putref(sma, sem_rcu_free);
}
-diff -NurpP --minimal linux-3.7/ipc/shm.c linux-3.7-vs2.3.5.1/ipc/shm.c
---- linux-3.7/ipc/shm.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/ipc/shm.c 2012-12-11 15:56:32.000000000 +0000
+
+diff -NurpP --minimal linux-3.10.15/ipc/shm.c linux-3.10.15-vs2.3.6.6/ipc/shm.c
+--- linux-3.10.15/ipc/shm.c 2013-07-14 17:01:34.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/ipc/shm.c 2013-08-22 20:30:00.000000000 +0000
@@ -39,6 +39,8 @@
#include <linux/nsproxy.h>
#include <linux/mount.h>
shm_unlock(shp);
if (!is_file_hugepages(shp->shm_file))
@@ -197,6 +204,7 @@ static void shm_destroy(struct ipc_names
+ user_shm_unlock(file_inode(shp->shm_file)->i_size,
shp->mlock_user);
fput (shp->shm_file);
- security_shm_free(shp);
+ put_vx_info(vxi);
- ipc_rcu_putref(shp);
+ ipc_rcu_putref(shp, shm_rcu_free);
}
@@ -474,11 +482,15 @@ static int newseg(struct ipc_namespace *
shp->shm_perm.mode = (shmflg & S_IRWXUGO);
shp->mlock_user = NULL;
-@@ -533,6 +545,7 @@ static int newseg(struct ipc_namespace *
- ns->shm_tot += numpages;
- error = shp->shm_perm.id;
- shm_unlock(shp);
+@@ -544,6 +556,7 @@ static int newseg(struct ipc_namespace *
+
+ ipc_unlock_object(&shp->shm_perm);
+ rcu_read_unlock();
+ vx_ipcshm_add(current_vx_info(), key, numpages);
return error;
no_id:
-diff -NurpP --minimal linux-3.7/kernel/Makefile linux-3.7-vs2.3.5.1/kernel/Makefile
---- linux-3.7/kernel/Makefile 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/Makefile 2012-12-11 15:56:32.000000000 +0000
-@@ -24,6 +24,7 @@ endif
-
+diff -NurpP --minimal linux-3.10.15/kernel/Makefile linux-3.10.15-vs2.3.6.6/kernel/Makefile
+--- linux-3.10.15/kernel/Makefile 2013-07-14 17:01:34.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/Makefile 2013-08-22 21:18:32.000000000 +0000
+@@ -25,6 +25,7 @@ endif
obj-y += sched/
obj-y += power/
+ obj-y += cpu/
+obj-y += vserver/
- ifeq ($(CONFIG_CHECKPOINT_RESTORE),y)
- obj-$(CONFIG_X86) += kcmp.o
-diff -NurpP --minimal linux-3.7/kernel/auditsc.c linux-3.7-vs2.3.5.1/kernel/auditsc.c
---- linux-3.7/kernel/auditsc.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/auditsc.c 2012-12-11 15:56:32.000000000 +0000
-@@ -2372,7 +2372,7 @@ int audit_set_loginuid(kuid_t loginuid)
- if (uid_valid(task->loginuid))
+ obj-$(CONFIG_CHECKPOINT_RESTORE) += kcmp.o
+ obj-$(CONFIG_FREEZER) += freezer.o
+diff -NurpP --minimal linux-3.10.15/kernel/auditsc.c linux-3.10.15-vs2.3.6.6/kernel/auditsc.c
+--- linux-3.10.15/kernel/auditsc.c 2013-07-14 17:01:34.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/auditsc.c 2013-08-22 20:30:00.000000000 +0000
+@@ -1976,7 +1976,7 @@ int audit_set_loginuid(kuid_t loginuid)
+ if (audit_loginuid_set(task))
return -EPERM;
#else /* CONFIG_AUDIT_LOGINUID_IMMUTABLE */
- if (!capable(CAP_AUDIT_CONTROL))
return -EPERM;
#endif /* CONFIG_AUDIT_LOGINUID_IMMUTABLE */
-diff -NurpP --minimal linux-3.7/kernel/capability.c linux-3.7-vs2.3.5.1/kernel/capability.c
---- linux-3.7/kernel/capability.c 2012-07-22 21:39:46.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/capability.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/capability.c linux-3.10.15-vs2.3.6.6/kernel/capability.c
+--- linux-3.10.15/kernel/capability.c 2013-05-31 13:45:29.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/capability.c 2013-08-22 20:30:00.000000000 +0000
@@ -15,6 +15,7 @@
#include <linux/syscalls.h>
#include <linux/pid_namespace.h>
/**
* has_capability_noaudit - Does a task have a capability (unaudited) in the
* initial user ns
-diff -NurpP --minimal linux-3.7/kernel/compat.c linux-3.7-vs2.3.5.1/kernel/compat.c
---- linux-3.7/kernel/compat.c 2012-07-22 21:39:46.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/compat.c 2012-12-11 21:24:51.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/compat.c linux-3.10.15-vs2.3.6.6/kernel/compat.c
+--- linux-3.10.15/kernel/compat.c 2013-07-14 17:01:34.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/compat.c 2013-08-22 20:30:00.000000000 +0000
@@ -27,6 +27,7 @@
#include <linux/times.h>
#include <linux/ptrace.h>
#include <asm/uaccess.h>
-@@ -1054,7 +1055,7 @@ asmlinkage long compat_sys_stime(compat_
+@@ -1040,7 +1041,7 @@ asmlinkage long compat_sys_stime(compat_
if (err)
return err;
return 0;
}
-diff -NurpP --minimal linux-3.7/kernel/cred.c linux-3.7-vs2.3.5.1/kernel/cred.c
---- linux-3.7/kernel/cred.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/cred.c 2012-12-11 15:56:32.000000000 +0000
-@@ -70,31 +70,6 @@ struct cred init_cred = {
- #endif
+diff -NurpP --minimal linux-3.10.15/kernel/cred.c linux-3.10.15-vs2.3.6.6/kernel/cred.c
+--- linux-3.10.15/kernel/cred.c 2013-02-19 13:58:56.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/cred.c 2013-08-22 20:30:00.000000000 +0000
+@@ -56,31 +56,6 @@ struct cred init_cred = {
+ .group_info = &init_groups,
};
-static inline void set_cred_subscribers(struct cred *cred, int n)
-}
-
/*
- * Dispose of the shared task group credentials
+ * The RCU callback to actually dispose of a set of credentials
*/
-@@ -284,21 +259,16 @@ error:
+@@ -232,21 +207,16 @@ error:
*
* Call commit_creds() or abort_creds() to clean up.
*/
memcpy(new, old, sizeof(struct cred));
atomic_set(&new->usage, 1);
-@@ -326,6 +296,13 @@ error:
+@@ -275,6 +245,13 @@ error:
abort_creds(new);
return NULL;
}
EXPORT_SYMBOL(prepare_creds);
/*
-diff -NurpP --minimal linux-3.7/kernel/exit.c linux-3.7-vs2.3.5.1/kernel/exit.c
---- linux-3.7/kernel/exit.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/exit.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/exit.c linux-3.10.15-vs2.3.6.6/kernel/exit.c
+--- linux-3.10.15/kernel/exit.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/exit.c 2013-08-22 20:30:00.000000000 +0000
@@ -48,6 +48,10 @@
#include <linux/fs_struct.h>
#include <linux/init_task.h>
#include <trace/events/sched.h>
#include <linux/hw_breakpoint.h>
#include <linux/oom.h>
-@@ -616,15 +620,25 @@ static struct task_struct *find_new_reap
+@@ -514,15 +518,25 @@ static struct task_struct *find_new_reap
__acquires(&tasklist_lock)
{
struct pid_namespace *pid_ns = task_active_pid_ns(father);
}
if (unlikely(pid_ns->child_reaper == father)) {
-@@ -662,7 +676,9 @@ static struct task_struct *find_new_reap
+@@ -560,7 +574,9 @@ static struct task_struct *find_new_reap
}
}
}
/*
-@@ -713,10 +729,15 @@ static void forget_original_parent(struc
+@@ -611,10 +627,15 @@ static void forget_original_parent(struc
list_for_each_entry_safe(p, n, &father->children, sibling) {
struct task_struct *t = p;
do {
}
if (t->pdeath_signal)
group_send_sig_info(t->pdeath_signal,
-@@ -923,6 +944,9 @@ void do_exit(long code)
+@@ -821,6 +842,9 @@ void do_exit(long code)
*/
ptrace_put_breakpoints(tsk);
exit_notify(tsk, group_dead);
#ifdef CONFIG_NUMA
task_lock(tsk);
-@@ -976,10 +1000,15 @@ void do_exit(long code)
+@@ -874,10 +898,15 @@ void do_exit(long code)
smp_mb();
raw_spin_unlock_wait(&tsk->pi_lock);
BUG();
/* Avoid "noreturn function does return". */
for (;;)
-diff -NurpP --minimal linux-3.7/kernel/fork.c linux-3.7-vs2.3.5.1/kernel/fork.c
---- linux-3.7/kernel/fork.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/fork.c 2012-12-11 15:56:32.000000000 +0000
-@@ -70,6 +70,9 @@
- #include <linux/khugepaged.h>
+diff -NurpP --minimal linux-3.10.15/kernel/fork.c linux-3.10.15-vs2.3.6.6/kernel/fork.c
+--- linux-3.10.15/kernel/fork.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/fork.c 2013-10-09 17:37:22.000000000 +0000
+@@ -71,6 +71,9 @@
#include <linux/signalfd.h>
#include <linux/uprobes.h>
+ #include <linux/aio.h>
+#include <linux/vs_context.h>
+#include <linux/vs_network.h>
+#include <linux/vs_limit.h>
#include <asm/pgtable.h>
#include <asm/pgalloc.h>
-@@ -210,6 +213,8 @@ void free_task(struct task_struct *tsk)
+@@ -211,6 +214,8 @@ void free_task(struct task_struct *tsk)
arch_release_thread_info(tsk->stack);
free_thread_info(tsk->stack);
rt_mutex_debug_task_free(tsk);
ftrace_graph_exit_task(tsk);
put_seccomp_filter(tsk);
arch_release_task_struct(tsk);
-@@ -545,6 +550,7 @@ static struct mm_struct *mm_init(struct
+@@ -548,6 +553,7 @@ static struct mm_struct *mm_init(struct
if (likely(!mm_alloc_pgd(mm))) {
mm->def_flags = 0;
mmu_notifier_mm_init(mm);
return mm;
}
-@@ -597,6 +603,7 @@ void __mmdrop(struct mm_struct *mm)
+@@ -600,6 +606,7 @@ void __mmdrop(struct mm_struct *mm)
destroy_context(mm);
mmu_notifier_mm_destroy(mm);
check_mm(mm);
free_mm(mm);
}
EXPORT_SYMBOL_GPL(__mmdrop);
-@@ -816,6 +823,7 @@ struct mm_struct *dup_mm(struct task_str
+@@ -819,6 +826,7 @@ struct mm_struct *dup_mm(struct task_str
goto fail_nomem;
memcpy(mm, oldmm, sizeof(*mm));
mm_init_cpumask(mm);
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
-@@ -854,6 +862,7 @@ fail_nocontext:
+@@ -860,6 +868,7 @@ fail_nocontext:
* If init_new_context() failed, we cannot use mmput() to free the mm
* because it calls destroy_context()
*/
mm_free_pgd(mm);
free_mm(mm);
return NULL;
-@@ -1136,6 +1145,8 @@ static struct task_struct *copy_process(
+@@ -1138,6 +1147,8 @@ static struct task_struct *copy_process(
+ {
int retval;
struct task_struct *p;
- int cgroup_callbacks_done = 0;
+ struct vx_info *vxi;
+ struct nx_info *nxi;
if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS))
return ERR_PTR(-EINVAL);
-@@ -1183,7 +1194,12 @@ static struct task_struct *copy_process(
+@@ -1197,7 +1208,12 @@ static struct task_struct *copy_process(
DEBUG_LOCKS_WARN_ON(!p->hardirqs_enabled);
DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled);
#endif
if (atomic_read(&p->real_cred->user->processes) >=
task_rlimit(p, RLIMIT_NPROC)) {
if (!capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RESOURCE) &&
-@@ -1458,6 +1474,18 @@ static struct task_struct *copy_process(
+@@ -1478,6 +1494,18 @@ static struct task_struct *copy_process(
total_forks++;
spin_unlock(¤t->sighand->siglock);
write_unlock_irq(&tasklist_lock);
proc_fork_connector(p);
cgroup_post_fork(p);
-diff -NurpP --minimal linux-3.7/kernel/kthread.c linux-3.7-vs2.3.5.1/kernel/kthread.c
---- linux-3.7/kernel/kthread.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/kthread.c 2012-12-11 17:04:03.000000000 +0000
-@@ -17,6 +17,7 @@
- #include <linux/slab.h>
+diff -NurpP --minimal linux-3.10.15/kernel/kthread.c linux-3.10.15-vs2.3.6.6/kernel/kthread.c
+--- linux-3.10.15/kernel/kthread.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/kthread.c 2013-08-22 21:14:28.000000000 +0000
+@@ -18,6 +18,7 @@
#include <linux/freezer.h>
#include <linux/ptrace.h>
+ #include <linux/uaccess.h>
+#include <linux/vs_pid.h>
#include <trace/events/sched.h>
static DEFINE_SPINLOCK(kthread_create_lock);
-diff -NurpP --minimal linux-3.7/kernel/nsproxy.c linux-3.7-vs2.3.5.1/kernel/nsproxy.c
---- linux-3.7/kernel/nsproxy.c 2012-01-09 15:15:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/nsproxy.c 2012-12-11 15:56:32.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/nsproxy.c linux-3.10.15-vs2.3.6.6/kernel/nsproxy.c
+--- linux-3.10.15/kernel/nsproxy.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/nsproxy.c 2013-08-22 21:09:55.000000000 +0000
@@ -20,11 +20,14 @@
#include <linux/mnt_namespace.h>
#include <linux/utsname.h>
+#include <linux/vserver/debug.h>
#include <net/net_namespace.h>
#include <linux/ipc_namespace.h>
- #include <linux/proc_fs.h>
+ #include <linux/proc_ns.h>
#include <linux/file.h>
#include <linux/syscalls.h>
+#include "../fs/mount.h"
return nsproxy;
}
-@@ -56,8 +62,11 @@ static inline struct nsproxy *create_nsp
+@@ -56,9 +62,12 @@ static inline struct nsproxy *create_nsp
* Return the newly created nsproxy. Do not attach this to the task,
* leave it to the caller to do proper locking and attach it to task.
*/
-static struct nsproxy *create_new_namespaces(unsigned long flags,
-- struct task_struct *tsk, struct fs_struct *new_fs)
-+static struct nsproxy *unshare_namespaces(unsigned long flags,
-+ struct nsproxy *orig,
-+ struct fs_struct *new_fs,
-+ struct user_namespace *new_user,
-+ struct pid_namespace *new_pid)
+- struct task_struct *tsk, struct user_namespace *user_ns,
+- struct fs_struct *new_fs)
++static struct nsproxy *unshare_namespaces(
++ unsigned long flags,
++ struct nsproxy *orig,
++ struct fs_struct *new_fs,
++ struct user_namespace *new_user,
++ struct pid_namespace *new_pid)
{
struct nsproxy *new_nsp;
int err;
-@@ -66,31 +75,31 @@ static struct nsproxy *create_new_namesp
+@@ -67,31 +76,31 @@ static struct nsproxy *create_new_namesp
if (!new_nsp)
return ERR_PTR(-ENOMEM);
-- new_nsp->mnt_ns = copy_mnt_ns(flags, tsk->nsproxy->mnt_ns, new_fs);
-+ new_nsp->mnt_ns = copy_mnt_ns(flags, orig->mnt_ns, new_fs);
+- new_nsp->mnt_ns = copy_mnt_ns(flags, tsk->nsproxy->mnt_ns, user_ns, new_fs);
++ new_nsp->mnt_ns = copy_mnt_ns(flags, orig->mnt_ns, new_user, new_fs);
if (IS_ERR(new_nsp->mnt_ns)) {
err = PTR_ERR(new_nsp->mnt_ns);
goto out_ns;
}
-- new_nsp->uts_ns = copy_utsname(flags, tsk);
-+ new_nsp->uts_ns = copy_utsname(flags, orig->uts_ns, new_user);
+- new_nsp->uts_ns = copy_utsname(flags, user_ns, tsk->nsproxy->uts_ns);
++ new_nsp->uts_ns = copy_utsname(flags, new_user, orig->uts_ns);
if (IS_ERR(new_nsp->uts_ns)) {
err = PTR_ERR(new_nsp->uts_ns);
goto out_uts;
}
-- new_nsp->ipc_ns = copy_ipcs(flags, tsk);
-+ new_nsp->ipc_ns = copy_ipcs(flags, orig->ipc_ns, new_user);
+- new_nsp->ipc_ns = copy_ipcs(flags, user_ns, tsk->nsproxy->ipc_ns);
++ new_nsp->ipc_ns = copy_ipcs(flags, new_user, orig->ipc_ns);
if (IS_ERR(new_nsp->ipc_ns)) {
err = PTR_ERR(new_nsp->ipc_ns);
goto out_ipc;
}
-- new_nsp->pid_ns = copy_pid_ns(flags, task_active_pid_ns(tsk));
-+ new_nsp->pid_ns = copy_pid_ns(flags, new_pid);
+- new_nsp->pid_ns = copy_pid_ns(flags, user_ns, tsk->nsproxy->pid_ns);
++ new_nsp->pid_ns = copy_pid_ns(flags, new_user, new_pid);
if (IS_ERR(new_nsp->pid_ns)) {
err = PTR_ERR(new_nsp->pid_ns);
goto out_pid;
}
-- new_nsp->net_ns = copy_net_ns(flags, tsk->nsproxy->net_ns);
-+ new_nsp->net_ns = copy_net_ns(flags, orig->net_ns);
+- new_nsp->net_ns = copy_net_ns(flags, user_ns, tsk->nsproxy->net_ns);
++ new_nsp->net_ns = copy_net_ns(flags, new_user, orig->net_ns);
if (IS_ERR(new_nsp->net_ns)) {
err = PTR_ERR(new_nsp->net_ns);
goto out_net;
-@@ -115,6 +124,40 @@ out_ns:
+@@ -116,6 +125,41 @@ out_ns:
return ERR_PTR(err);
}
+static struct nsproxy *create_new_namespaces(unsigned long flags,
-+ struct task_struct *tsk, struct fs_struct *new_fs)
++ struct task_struct *tsk, struct user_namespace *user_ns,
++ struct fs_struct *new_fs)
++
+{
+ return unshare_namespaces(flags, tsk->nsproxy,
-+ new_fs, task_cred_xxx(tsk, user_ns),
-+ task_active_pid_ns(tsk));
++ new_fs, user_ns, task_active_pid_ns(tsk));
+}
+
+/*
/*
* called from clone. This now handles copy for nsproxy and all
* namespaces therein.
-@@ -122,9 +165,12 @@ out_ns:
- int copy_namespaces(unsigned long flags, struct task_struct *tsk)
+@@ -124,9 +168,12 @@ int copy_namespaces(unsigned long flags,
{
struct nsproxy *old_ns = tsk->nsproxy;
+ struct user_namespace *user_ns = task_cred_xxx(tsk, user_ns);
- struct nsproxy *new_ns;
+ struct nsproxy *new_ns = NULL;
int err = 0;
if (!old_ns)
return 0;
-@@ -134,7 +180,7 @@ int copy_namespaces(unsigned long flags,
+@@ -136,7 +183,7 @@ int copy_namespaces(unsigned long flags,
CLONE_NEWPID | CLONE_NEWNET)))
return 0;
-- if (!capable(CAP_SYS_ADMIN)) {
-+ if (!vx_can_unshare(CAP_SYS_ADMIN, flags)) {
+- if (!ns_capable(user_ns, CAP_SYS_ADMIN)) {
++ if (!vx_ns_can_unshare(user_ns, CAP_SYS_ADMIN, flags)) {
err = -EPERM;
goto out;
}
-@@ -161,6 +207,9 @@ int copy_namespaces(unsigned long flags,
+@@ -163,6 +210,9 @@ int copy_namespaces(unsigned long flags,
out:
put_nsproxy(old_ns);
return err;
}
-@@ -174,7 +223,9 @@ void free_nsproxy(struct nsproxy *ns)
+@@ -176,7 +226,9 @@ void free_nsproxy(struct nsproxy *ns)
put_ipc_ns(ns->ipc_ns);
if (ns->pid_ns)
put_pid_ns(ns->pid_ns);
kmem_cache_free(nsproxy_cachep, ns);
}
-@@ -187,11 +238,15 @@ int unshare_nsproxy_namespaces(unsigned
- {
+@@ -190,12 +242,16 @@ int unshare_nsproxy_namespaces(unsigned
+ struct user_namespace *user_ns;
int err = 0;
+ vxdprintk(VXD_CBIT(space, 4),
+ unshare_flags, current->nsproxy);
+
if (!(unshare_flags & (CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWIPC |
- CLONE_NEWNET)))
+ CLONE_NEWNET | CLONE_NEWPID)))
return 0;
-- if (!capable(CAP_SYS_ADMIN))
-+ if (!vx_can_unshare(CAP_SYS_ADMIN, unshare_flags))
+ user_ns = new_cred ? new_cred->user_ns : current_user_ns();
+- if (!ns_capable(user_ns, CAP_SYS_ADMIN))
++ if (!vx_ns_can_unshare(user_ns, CAP_SYS_ADMIN, unshare_flags))
return -EPERM;
- *new_nsp = create_new_namespaces(unshare_flags, current,
-diff -NurpP --minimal linux-3.7/kernel/pid.c linux-3.7-vs2.3.5.1/kernel/pid.c
---- linux-3.7/kernel/pid.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/pid.c 2012-12-11 15:56:32.000000000 +0000
-@@ -36,6 +36,7 @@
- #include <linux/pid_namespace.h>
- #include <linux/init_task.h>
+ *new_nsp = create_new_namespaces(unshare_flags, current, user_ns,
+diff -NurpP --minimal linux-3.10.15/kernel/pid.c linux-3.10.15-vs2.3.6.6/kernel/pid.c
+--- linux-3.10.15/kernel/pid.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/pid.c 2013-10-09 17:37:22.000000000 +0000
+@@ -38,6 +38,7 @@
#include <linux/syscalls.h>
+ #include <linux/proc_ns.h>
+ #include <linux/proc_fs.h>
+#include <linux/vs_pid.h>
#define pid_hashfn(nr, ns) \
hash_long((unsigned long)nr + (unsigned long)ns, pidhash_shift)
-@@ -344,7 +345,7 @@ EXPORT_SYMBOL_GPL(find_pid_ns);
+@@ -367,7 +368,7 @@ EXPORT_SYMBOL_GPL(find_pid_ns);
struct pid *find_vpid(int nr)
{
-- return find_pid_ns(nr, current->nsproxy->pid_ns);
-+ return find_pid_ns(vx_rmap_pid(nr), current->nsproxy->pid_ns);
+- return find_pid_ns(nr, task_active_pid_ns(current));
++ return find_pid_ns(vx_rmap_pid(nr), task_active_pid_ns(current));
}
EXPORT_SYMBOL_GPL(find_vpid);
-@@ -404,6 +405,9 @@ void transfer_pid(struct task_struct *ol
+@@ -427,6 +428,9 @@ void transfer_pid(struct task_struct *ol
struct task_struct *pid_task(struct pid *pid, enum pid_type type)
{
struct task_struct *result = NULL;
if (pid) {
struct hlist_node *first;
first = rcu_dereference_check(hlist_first_rcu(&pid->tasks[type]),
-@@ -423,7 +427,7 @@ struct task_struct *find_task_by_pid_ns(
+@@ -446,7 +450,7 @@ struct task_struct *find_task_by_pid_ns(
rcu_lockdep_assert(rcu_read_lock_held(),
"find_task_by_pid_ns() needs rcu_read_lock()"
" protection");
}
struct task_struct *find_task_by_vpid(pid_t vnr)
-@@ -467,7 +471,7 @@ struct pid *find_get_pid(pid_t nr)
+@@ -490,7 +494,7 @@ struct pid *find_get_pid(pid_t nr)
}
EXPORT_SYMBOL_GPL(find_get_pid);
{
struct upid *upid;
pid_t nr = 0;
-@@ -481,6 +485,11 @@ pid_t pid_nr_ns(struct pid *pid, struct
+@@ -504,6 +508,11 @@ pid_t pid_nr_ns(struct pid *pid, struct
}
EXPORT_SYMBOL_GPL(pid_nr_ns);
+
pid_t pid_vnr(struct pid *pid)
{
- return pid_nr_ns(pid, current->nsproxy->pid_ns);
-diff -NurpP --minimal linux-3.7/kernel/pid_namespace.c linux-3.7-vs2.3.5.1/kernel/pid_namespace.c
---- linux-3.7/kernel/pid_namespace.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/pid_namespace.c 2012-12-11 17:04:24.000000000 +0000
-@@ -17,6 +17,7 @@
- #include <linux/proc_fs.h>
+ return pid_nr_ns(pid, task_active_pid_ns(current));
+diff -NurpP --minimal linux-3.10.15/kernel/pid_namespace.c linux-3.10.15-vs2.3.6.6/kernel/pid_namespace.c
+--- linux-3.10.15/kernel/pid_namespace.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/pid_namespace.c 2013-08-22 20:30:00.000000000 +0000
+@@ -18,6 +18,7 @@
+ #include <linux/proc_ns.h>
#include <linux/reboot.h>
#include <linux/export.h>
+#include <linux/vserver/global.h>
- #define BITS_PER_PAGE (PAGE_SIZE*8)
-
-@@ -100,6 +101,7 @@ static struct pid_namespace *create_pid_
+ struct pid_cache {
+ int nr_ids;
+@@ -110,6 +111,7 @@ static struct pid_namespace *create_pid_
goto out_free_map;
kref_init(&ns->kref);
+ atomic_inc(&vs_global_pid_ns);
ns->level = level;
ns->parent = get_pid_ns(parent_pid_ns);
-
-@@ -131,6 +133,7 @@ static void destroy_pid_namespace(struct
-
+ ns->user_ns = get_user_ns(user_ns);
+@@ -140,6 +142,7 @@ static void destroy_pid_namespace(struct
for (i = 0; i < PIDMAP_ENTRIES; i++)
kfree(ns->pidmap[i].page);
+ put_user_ns(ns->user_ns);
+ atomic_dec(&vs_global_pid_ns);
kmem_cache_free(pid_ns_cachep, ns);
}
-diff -NurpP --minimal linux-3.7/kernel/posix-timers.c linux-3.7-vs2.3.5.1/kernel/posix-timers.c
---- linux-3.7/kernel/posix-timers.c 2012-01-09 15:15:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/posix-timers.c 2012-12-11 15:56:32.000000000 +0000
-@@ -47,6 +47,7 @@
- #include <linux/wait.h>
+diff -NurpP --minimal linux-3.10.15/kernel/posix-timers.c linux-3.10.15-vs2.3.6.6/kernel/posix-timers.c
+--- linux-3.10.15/kernel/posix-timers.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/posix-timers.c 2013-08-22 21:10:34.000000000 +0000
+@@ -48,6 +48,7 @@
#include <linux/workqueue.h>
#include <linux/export.h>
+ #include <linux/hashtable.h>
+#include <linux/vs_context.h>
/*
- * Management arrays for POSIX timers. Timers are kept in slab memory
-@@ -340,6 +341,7 @@ int posix_timer_event(struct k_itimer *t
+ * Management arrays for POSIX timers. Timers are now kept in static hash table
+@@ -398,6 +399,7 @@ int posix_timer_event(struct k_itimer *t
{
struct task_struct *task;
int shared, ret = -1;
/*
* FIXME: if ->sigq is queued we can race with
* dequeue_signal()->do_schedule_next_timer().
-@@ -356,10 +358,18 @@ int posix_timer_event(struct k_itimer *t
+@@ -414,10 +416,18 @@ int posix_timer_event(struct k_itimer *t
rcu_read_lock();
task = pid_task(timr->it_pid, PIDTYPE_PID);
if (task) {
/* If we failed to send the signal the timer stops. */
return ret > 0;
}
-diff -NurpP --minimal linux-3.7/kernel/printk.c linux-3.7-vs2.3.5.1/kernel/printk.c
---- linux-3.7/kernel/printk.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/printk.c 2012-12-11 15:56:32.000000000 +0000
-@@ -42,6 +42,7 @@
- #include <linux/notifier.h>
- #include <linux/rculist.h>
+diff -NurpP --minimal linux-3.10.15/kernel/printk.c linux-3.10.15-vs2.3.6.6/kernel/printk.c
+--- linux-3.10.15/kernel/printk.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/printk.c 2013-08-22 21:14:57.000000000 +0000
+@@ -45,6 +45,7 @@
#include <linux/poll.h>
+ #include <linux/irq_work.h>
+ #include <linux/utsname.h>
+#include <linux/vs_cvirt.h>
#include <asm/uaccess.h>
-@@ -818,7 +819,7 @@ static int check_syslog_permissions(int
+@@ -391,7 +392,7 @@ static int check_syslog_permissions(int
return 0;
if (syslog_action_restricted(type)) {
- if (capable(CAP_SYSLOG))
+ if (vx_capable(CAP_SYSLOG, VXC_SYSLOG))
return 0;
- /* For historical reasons, accept CAP_SYS_ADMIN too, with a warning */
- if (capable(CAP_SYS_ADMIN)) {
-@@ -1111,12 +1112,9 @@ int do_syslog(int type, char __user *buf
+ /*
+ * For historical reasons, accept CAP_SYS_ADMIN too, with
+@@ -1140,12 +1141,9 @@ int do_syslog(int type, char __user *buf
if (error)
return error;
error = -EINVAL;
if (!buf || len < 0)
goto out;
-@@ -1127,6 +1125,16 @@ int do_syslog(int type, char __user *buf
+@@ -1156,6 +1154,16 @@ int do_syslog(int type, char __user *buf
error = -EFAULT;
goto out;
}
error = wait_event_interruptible(log_wait,
syslog_seq != log_next_seq);
if (error)
-@@ -1139,16 +1147,6 @@ int do_syslog(int type, char __user *buf
+@@ -1168,16 +1176,6 @@ int do_syslog(int type, char __user *buf
/* FALL THRU */
/* Read last kernel messages */
case SYSLOG_ACTION_READ_ALL:
error = syslog_print_all(buf, len, clear);
break;
/* Clear ring buffer */
-diff -NurpP --minimal linux-3.7/kernel/ptrace.c linux-3.7-vs2.3.5.1/kernel/ptrace.c
---- linux-3.7/kernel/ptrace.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/ptrace.c 2012-12-11 15:56:32.000000000 +0000
-@@ -22,6 +22,7 @@
+diff -NurpP --minimal linux-3.10.15/kernel/ptrace.c linux-3.10.15-vs2.3.6.6/kernel/ptrace.c
+--- linux-3.10.15/kernel/ptrace.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/ptrace.c 2013-08-22 20:30:00.000000000 +0000
+@@ -23,6 +23,7 @@
#include <linux/syscalls.h>
#include <linux/uaccess.h>
#include <linux/regset.h>
+#include <linux/vs_context.h>
#include <linux/hw_breakpoint.h>
#include <linux/cn_proc.h>
+ #include <linux/compat.h>
+@@ -263,6 +264,11 @@ ok:
+ }
+ rcu_read_unlock();
-@@ -217,6 +218,11 @@ ok:
- dumpable = get_dumpable(task->mm);
- if (!dumpable && !ptrace_has_cap(task_user_ns(task), mode))
- return -EPERM;
+ if (!vx_check(task->xid, VS_ADMIN_P|VS_WATCH_P|VS_IDENT))
+ return -EPERM;
+ if (!vx_check(task->xid, VS_IDENT) &&
+ !task_vx_flags(task, VXF_STATE_ADMIN, 0))
+ return -EACCES;
-
return security_ptrace_access_check(task, mode);
}
-diff -NurpP --minimal linux-3.7/kernel/sched/core.c linux-3.7-vs2.3.5.1/kernel/sched/core.c
---- linux-3.7/kernel/sched/core.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/sched/core.c 2012-12-11 15:56:32.000000000 +0000
-@@ -72,6 +72,8 @@
- #include <linux/slab.h>
+
+diff -NurpP --minimal linux-3.10.15/kernel/sched/core.c linux-3.10.15-vs2.3.6.6/kernel/sched/core.c
+--- linux-3.10.15/kernel/sched/core.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/sched/core.c 2013-08-22 20:30:00.000000000 +0000
+@@ -73,6 +73,8 @@
#include <linux/init_task.h>
#include <linux/binfmts.h>
+ #include <linux/context_tracking.h>
+#include <linux/vs_sched.h>
+#include <linux/vs_cvirt.h>
#include <asm/switch_to.h>
#include <asm/tlb.h>
-@@ -2030,9 +2032,17 @@ EXPORT_SYMBOL(avenrun); /* should be rem
+@@ -2139,9 +2141,17 @@ EXPORT_SYMBOL(avenrun); /* should be rem
*/
void get_avenrun(unsigned long *loads, unsigned long offset, int shift)
{
}
static long calc_load_fold_active(struct rq *this_rq)
-@@ -3596,7 +3606,7 @@ SYSCALL_DEFINE1(nice, int, increment)
+@@ -3738,7 +3748,7 @@ SYSCALL_DEFINE1(nice, int, increment)
nice = 19;
if (increment < 0 && !can_nice(current, nice))
retval = security_task_setnice(current, nice);
if (retval)
-diff -NurpP --minimal linux-3.7/kernel/sched/cputime.c linux-3.7-vs2.3.5.1/kernel/sched/cputime.c
---- linux-3.7/kernel/sched/cputime.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/sched/cputime.c 2012-12-11 21:13:27.000000000 +0000
-@@ -3,6 +3,7 @@
- #include <linux/tsacct_kern.h>
+diff -NurpP --minimal linux-3.10.15/kernel/sched/cputime.c linux-3.10.15-vs2.3.6.6/kernel/sched/cputime.c
+--- linux-3.10.15/kernel/sched/cputime.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/sched/cputime.c 2013-10-09 17:37:22.000000000 +0000
+@@ -4,6 +4,7 @@
#include <linux/kernel_stat.h>
#include <linux/static_key.h>
+ #include <linux/context_tracking.h>
+#include <linux/vs_sched.h>
#include "sched.h"
-@@ -150,14 +151,17 @@ static inline void task_group_account_fi
+@@ -135,14 +136,17 @@ static inline void task_group_account_fi
void account_user_time(struct task_struct *p, cputime_t cputime,
cputime_t cputime_scaled)
{
/* Add user time to cpustat. */
task_group_account_field(p, index, (__force u64) cputime);
-@@ -204,9 +208,12 @@ static inline
+@@ -189,9 +193,12 @@ static inline
void __account_system_time(struct task_struct *p, cputime_t cputime,
cputime_t cputime_scaled, int index)
{
account_group_system_time(p, cputime);
/* Add system time to cpustat. */
-diff -NurpP --minimal linux-3.7/kernel/sched/fair.c linux-3.7-vs2.3.5.1/kernel/sched/fair.c
---- linux-3.7/kernel/sched/fair.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/sched/fair.c 2012-12-11 15:56:33.000000000 +0000
-@@ -26,6 +26,7 @@
- #include <linux/slab.h>
- #include <linux/profile.h>
- #include <linux/interrupt.h>
+diff -NurpP --minimal linux-3.10.15/kernel/sched/fair.c linux-3.10.15-vs2.3.6.6/kernel/sched/fair.c
+--- linux-3.10.15/kernel/sched/fair.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/sched/fair.c 2013-10-09 17:37:22.000000000 +0000
+@@ -29,6 +29,7 @@
+ #include <linux/mempolicy.h>
+ #include <linux/migrate.h>
+ #include <linux/task_work.h>
+#include <linux/vs_cvirt.h>
#include <trace/events/sched.h>
-@@ -1111,6 +1112,8 @@ enqueue_entity(struct cfs_rq *cfs_rq, st
+@@ -1736,6 +1737,8 @@ enqueue_entity(struct cfs_rq *cfs_rq, st
__enqueue_entity(cfs_rq, se);
se->on_rq = 1;
if (cfs_rq->nr_running == 1) {
list_add_leaf_cfs_rq(cfs_rq);
check_enqueue_throttle(cfs_rq);
-@@ -1191,6 +1194,8 @@ dequeue_entity(struct cfs_rq *cfs_rq, st
+@@ -1817,6 +1820,8 @@ dequeue_entity(struct cfs_rq *cfs_rq, st
if (se != cfs_rq->curr)
__dequeue_entity(cfs_rq, se);
se->on_rq = 0;
+ if (entity_is_task(se))
+ vx_deactivate_task(task_of(se));
- update_cfs_load(cfs_rq, 0);
account_entity_dequeue(cfs_rq, se);
-diff -NurpP --minimal linux-3.7/kernel/signal.c linux-3.7-vs2.3.5.1/kernel/signal.c
---- linux-3.7/kernel/signal.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/signal.c 2012-12-11 15:56:33.000000000 +0000
-@@ -31,6 +31,8 @@
- #include <linux/nsproxy.h>
- #include <linux/user_namespace.h>
+ /*
+diff -NurpP --minimal linux-3.10.15/kernel/signal.c linux-3.10.15-vs2.3.6.6/kernel/signal.c
+--- linux-3.10.15/kernel/signal.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/signal.c 2013-08-22 21:13:50.000000000 +0000
+@@ -33,6 +33,8 @@
#include <linux/uprobes.h>
+ #include <linux/compat.h>
+ #include <linux/cn_proc.h>
+#include <linux/vs_context.h>
+#include <linux/vs_pid.h>
#define CREATE_TRACE_POINTS
#include <trace/events/signal.h>
-@@ -791,9 +793,18 @@ static int check_kill_permission(int sig
+@@ -790,9 +792,18 @@ static int check_kill_permission(int sig
struct pid *sid;
int error;
if (!si_fromuser(info))
return 0;
-@@ -817,6 +828,20 @@ static int check_kill_permission(int sig
+@@ -816,6 +827,20 @@ static int check_kill_permission(int sig
}
}
return security_task_kill(t, info, sig, 0);
}
-@@ -1352,7 +1377,7 @@ int kill_pid_info(int sig, struct siginf
+@@ -1353,7 +1378,7 @@ int kill_pid_info(int sig, struct siginf
rcu_read_lock();
retry:
p = pid_task(pid, PIDTYPE_PID);
error = group_send_sig_info(sig, info, p);
if (unlikely(error == -ESRCH))
/*
-@@ -1400,7 +1425,7 @@ int kill_pid_info_as_cred(int sig, struc
+@@ -1401,7 +1426,7 @@ int kill_pid_info_as_cred(int sig, struc
rcu_read_lock();
p = pid_task(pid, PIDTYPE_PID);
ret = -ESRCH;
goto out_unlock;
}
-@@ -1452,8 +1477,10 @@ static int kill_something_info(int sig,
+@@ -1453,8 +1478,10 @@ static int kill_something_info(int sig,
struct task_struct * p;
for_each_process(p) {
if (sig_kernel_stop(signr)) {
/*
* The default action is to stop all threads in
-diff -NurpP --minimal linux-3.7/kernel/softirq.c linux-3.7-vs2.3.5.1/kernel/softirq.c
---- linux-3.7/kernel/softirq.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/softirq.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/softirq.c linux-3.10.15-vs2.3.6.6/kernel/softirq.c
+--- linux-3.10.15/kernel/softirq.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/softirq.c 2013-08-22 20:30:00.000000000 +0000
@@ -25,6 +25,7 @@
#include <linux/smp.h>
#include <linux/smpboot.h>
#define CREATE_TRACE_POINTS
#include <trace/events/irq.h>
-diff -NurpP --minimal linux-3.7/kernel/sys.c linux-3.7-vs2.3.5.1/kernel/sys.c
---- linux-3.7/kernel/sys.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/sys.c 2012-12-11 15:56:33.000000000 +0000
-@@ -47,6 +47,7 @@
- #include <linux/syscalls.h>
- #include <linux/kprobes.h>
- #include <linux/user_namespace.h>
-+#include <linux/vs_pid.h>
+diff -NurpP --minimal linux-3.10.15/kernel/sys.c linux-3.10.15-vs2.3.6.6/kernel/sys.c
+--- linux-3.10.15/kernel/sys.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/sys.c 2013-08-22 20:30:00.000000000 +0000
+@@ -55,6 +55,7 @@
+ #include <linux/cred.h>
#include <linux/kmsg_dump.h>
++#include <linux/vs_pid.h>
/* Move somewhere else to avoid recompiling? */
-@@ -154,7 +155,10 @@ static int set_one_prio(struct task_stru
+ #include <generated/utsrelease.h>
+
+@@ -160,7 +161,10 @@ static int set_one_prio(struct task_stru
goto out;
}
if (niceval < task_nice(p) && !can_nice(p, niceval)) {
goto out;
}
no_nice = security_task_setnice(p, niceval);
-@@ -205,6 +209,8 @@ SYSCALL_DEFINE3(setpriority, int, which,
+@@ -211,6 +215,8 @@ SYSCALL_DEFINE3(setpriority, int, which,
else
pgrp = task_pgrp(current);
do_each_pid_thread(pgrp, PIDTYPE_PGID, p) {
error = set_one_prio(p, niceval, error);
} while_each_pid_thread(pgrp, PIDTYPE_PGID, p);
break;
-@@ -270,6 +276,8 @@ SYSCALL_DEFINE2(getpriority, int, which,
+@@ -276,6 +282,8 @@ SYSCALL_DEFINE2(getpriority, int, which,
else
pgrp = task_pgrp(current);
do_each_pid_thread(pgrp, PIDTYPE_PGID, p) {
niceval = 20 - task_nice(p);
if (niceval > retval)
retval = niceval;
-@@ -422,6 +430,8 @@ EXPORT_SYMBOL_GPL(kernel_power_off);
+@@ -452,6 +460,8 @@ EXPORT_SYMBOL_GPL(kernel_power_off);
static DEFINE_MUTEX(reboot_mutex);
/*
* Reboot system call: for obvious reasons only root may call it,
* and even root needs to set up some magic numbers in the registers
-@@ -463,6 +473,9 @@ SYSCALL_DEFINE4(reboot, int, magic1, int
+@@ -494,6 +504,9 @@ SYSCALL_DEFINE4(reboot, int, magic1, int
if ((cmd == LINUX_REBOOT_CMD_POWER_OFF) && !pm_power_off)
cmd = LINUX_REBOOT_CMD_HALT;
mutex_lock(&reboot_mutex);
switch (cmd) {
case LINUX_REBOOT_CMD_RESTART:
-@@ -1370,7 +1383,8 @@ SYSCALL_DEFINE2(sethostname, char __user
+@@ -1462,7 +1475,8 @@ SYSCALL_DEFINE2(sethostname, char __user
int errno;
char tmp[__NEW_UTS_LEN];
return -EPERM;
if (len < 0 || len > __NEW_UTS_LEN)
-@@ -1421,7 +1435,8 @@ SYSCALL_DEFINE2(setdomainname, char __us
+@@ -1513,7 +1527,8 @@ SYSCALL_DEFINE2(setdomainname, char __us
int errno;
char tmp[__NEW_UTS_LEN];
return -EPERM;
if (len < 0 || len > __NEW_UTS_LEN)
return -EINVAL;
-@@ -1540,7 +1555,7 @@ int do_prlimit(struct task_struct *tsk,
+@@ -1632,7 +1647,7 @@ int do_prlimit(struct task_struct *tsk,
/* Keep the capable check against init_user_ns until
cgroups can contain all limits */
if (new_rlim->rlim_max > rlim->rlim_max &&
retval = -EPERM;
if (!retval)
retval = security_task_setrlimit(tsk->group_leader,
-@@ -1593,7 +1608,8 @@ static int check_prlimit_permission(stru
+@@ -1685,7 +1700,8 @@ static int check_prlimit_permission(stru
gid_eq(cred->gid, tcred->sgid) &&
gid_eq(cred->gid, tcred->gid))
return 0;
return 0;
return -EPERM;
-diff -NurpP --minimal linux-3.7/kernel/sysctl.c linux-3.7-vs2.3.5.1/kernel/sysctl.c
---- linux-3.7/kernel/sysctl.c 2012-12-11 15:47:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/sysctl.c 2012-12-11 15:56:33.000000000 +0000
-@@ -82,6 +82,7 @@
+diff -NurpP --minimal linux-3.10.15/kernel/sysctl.c linux-3.10.15-vs2.3.6.6/kernel/sysctl.c
+--- linux-3.10.15/kernel/sysctl.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/sysctl.c 2013-08-22 20:30:00.000000000 +0000
+@@ -83,6 +83,7 @@
#if defined(CONFIG_PROVE_LOCKING) || defined(CONFIG_LOCK_STAT)
#include <linux/lockdep.h>
#endif
#ifdef CONFIG_CHR_DEV_SG
#include <scsi/sg.h>
#endif
-@@ -574,6 +575,13 @@ static struct ctl_table kern_table[] = {
+@@ -628,6 +629,13 @@ static struct ctl_table kern_table[] = {
+ .mode = 0644,
.proc_handler = proc_dostring,
},
- #endif
+ {
+ .procname = "vshelper",
+ .data = &vshelper_path,
+ .mode = 0644,
+ .proc_handler = &proc_dostring,
+ },
+
#ifdef CONFIG_CHR_DEV_SG
{
- .procname = "sg-big-buff",
-diff -NurpP --minimal linux-3.7/kernel/sysctl_binary.c linux-3.7-vs2.3.5.1/kernel/sysctl_binary.c
---- linux-3.7/kernel/sysctl_binary.c 2012-10-04 13:27:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/sysctl_binary.c 2012-12-11 15:56:33.000000000 +0000
-@@ -73,6 +73,7 @@ static const struct bin_table bin_kern_t
+diff -NurpP --minimal linux-3.10.15/kernel/sysctl_binary.c linux-3.10.15-vs2.3.6.6/kernel/sysctl_binary.c
+--- linux-3.10.15/kernel/sysctl_binary.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/sysctl_binary.c 2013-08-22 20:30:00.000000000 +0000
+@@ -74,6 +74,7 @@ static const struct bin_table bin_kern_t
{ CTL_INT, KERN_PANIC, "panic" },
{ CTL_INT, KERN_REALROOTDEV, "real-root-dev" },
{ CTL_STR, KERN_SPARC_REBOOT, "reboot-cmd" },
{ CTL_INT, KERN_CTLALTDEL, "ctrl-alt-del" },
-diff -NurpP --minimal linux-3.7/kernel/time/timekeeping.c linux-3.7-vs2.3.5.1/kernel/time/timekeeping.c
---- linux-3.7/kernel/time/timekeeping.c 2012-12-11 15:47:49.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/time/timekeeping.c 2012-12-11 21:13:56.000000000 +0000
-@@ -21,6 +21,7 @@
- #include <linux/time.h>
+diff -NurpP --minimal linux-3.10.15/kernel/time/timekeeping.c linux-3.10.15-vs2.3.6.6/kernel/time/timekeeping.c
+--- linux-3.10.15/kernel/time/timekeeping.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/time/timekeeping.c 2013-10-09 17:37:22.000000000 +0000
+@@ -22,6 +22,7 @@
#include <linux/tick.h>
#include <linux/stop_machine.h>
+ #include <linux/pvclock_gtod.h>
+#include <linux/vs_time.h>
+ #include "tick-internal.h"
+ #include "ntp_internal.h"
+@@ -693,6 +694,7 @@ void getrawmonotonic(struct timespec *ts
+ } while (read_seqcount_retry(&timekeeper_seq, seq));
- static struct timekeeper timekeeper;
-@@ -243,6 +244,7 @@ void getnstimeofday(struct timespec *ts)
-
- ts->tv_nsec = 0;
timespec_add_ns(ts, nsecs);
+ vx_adjust_timespec(ts);
}
- EXPORT_SYMBOL(getnstimeofday);
+ EXPORT_SYMBOL(getrawmonotonic);
-diff -NurpP --minimal linux-3.7/kernel/time.c linux-3.7-vs2.3.5.1/kernel/time.c
---- linux-3.7/kernel/time.c 2012-12-11 15:47:49.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/time.c 2012-12-11 21:12:29.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/time.c linux-3.10.15-vs2.3.6.6/kernel/time.c
+--- linux-3.10.15/kernel/time.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/time.c 2013-08-22 20:30:00.000000000 +0000
@@ -37,6 +37,7 @@
#include <linux/fs.h>
#include <linux/math64.h>
return 0;
}
-@@ -172,7 +173,7 @@ int do_sys_settimeofday(const struct tim
+@@ -181,7 +182,7 @@ int do_sys_settimeofday(const struct tim
}
}
if (tv)
return 0;
}
-diff -NurpP --minimal linux-3.7/kernel/timer.c linux-3.7-vs2.3.5.1/kernel/timer.c
---- linux-3.7/kernel/timer.c 2012-12-11 15:47:49.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/timer.c 2012-12-11 15:56:33.000000000 +0000
-@@ -40,6 +40,10 @@
- #include <linux/irq_work.h>
- #include <linux/sched.h>
+diff -NurpP --minimal linux-3.10.15/kernel/timer.c linux-3.10.15-vs2.3.6.6/kernel/timer.c
+--- linux-3.10.15/kernel/timer.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/timer.c 2013-08-22 21:17:56.000000000 +0000
+@@ -42,6 +42,10 @@
+ #include <linux/sched/sysctl.h>
#include <linux/slab.h>
+ #include <linux/compat.h>
+#include <linux/vs_base.h>
+#include <linux/vs_cvirt.h>
+#include <linux/vs_pid.h>
#include <asm/uaccess.h>
#include <asm/unistd.h>
-diff -NurpP --minimal linux-3.7/kernel/user_namespace.c linux-3.7-vs2.3.5.1/kernel/user_namespace.c
---- linux-3.7/kernel/user_namespace.c 2012-12-11 15:47:49.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/user_namespace.c 2012-12-11 16:58:02.000000000 +0000
-@@ -20,6 +20,7 @@
- #include <linux/uaccess.h>
+diff -NurpP --minimal linux-3.10.15/kernel/user_namespace.c linux-3.10.15-vs2.3.6.6/kernel/user_namespace.c
+--- linux-3.10.15/kernel/user_namespace.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/user_namespace.c 2013-08-22 20:30:00.000000000 +0000
+@@ -22,6 +22,7 @@
#include <linux/ctype.h>
#include <linux/projid.h>
+ #include <linux/fs_struct.h>
+#include <linux/vserver/global.h>
static struct kmem_cache *user_ns_cachep __read_mostly;
-@@ -53,6 +54,7 @@ int create_user_ns(struct cred *new)
- return -ENOMEM;
+@@ -94,6 +95,7 @@ int create_user_ns(struct cred *new)
- kref_init(&ns->kref);
+ atomic_set(&ns->count, 1);
+ /* Leave the new->user_ns reference with the new user namespace. */
+ atomic_inc(&vs_global_user_ns);
ns->parent = parent_ns;
+ ns->level = parent_ns->level + 1;
ns->owner = owner;
- ns->group = group;
-@@ -85,6 +87,9 @@ void free_user_ns(struct kref *kref)
+@@ -844,6 +846,8 @@ static void *userns_get(struct task_stru
- parent = ns->parent;
- kmem_cache_free(user_ns_cachep, ns);
-+
+ static void userns_put(void *ns)
+ {
+ /* FIXME: maybe move into destroyer? */
+ atomic_dec(&vs_global_user_ns);
- put_user_ns(parent);
+ put_user_ns(ns);
}
- EXPORT_SYMBOL(free_user_ns);
-diff -NurpP --minimal linux-3.7/kernel/utsname.c linux-3.7-vs2.3.5.1/kernel/utsname.c
---- linux-3.7/kernel/utsname.c 2012-07-22 21:39:47.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/utsname.c 2012-12-11 15:56:33.000000000 +0000
+
+diff -NurpP --minimal linux-3.10.15/kernel/utsname.c linux-3.10.15-vs2.3.6.6/kernel/utsname.c
+--- linux-3.10.15/kernel/utsname.c 2013-07-14 17:01:35.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/utsname.c 2013-08-22 21:03:08.000000000 +0000
@@ -16,14 +16,17 @@
#include <linux/slab.h>
#include <linux/user_namespace.h>
- #include <linux/proc_fs.h>
+ #include <linux/proc_ns.h>
+#include <linux/vserver/global.h>
static struct uts_namespace *create_uts_ns(void)
uts_ns = kmalloc(sizeof(struct uts_namespace), GFP_KERNEL);
- if (uts_ns)
+- kref_init(&uts_ns->kref);
+ if (uts_ns) {
- kref_init(&uts_ns->kref);
++ kref_init(&uts_ns->kref);
+ atomic_inc(&vs_global_uts_ns);
+ }
return uts_ns;
}
-@@ -32,8 +35,8 @@ static struct uts_namespace *create_uts_
- * @old_ns: namespace to clone
- * Return NULL on error (failure to kmalloc), new ns otherwise
- */
--static struct uts_namespace *clone_uts_ns(struct task_struct *tsk,
-- struct uts_namespace *old_ns)
-+static struct uts_namespace *clone_uts_ns(struct uts_namespace *old_ns,
-+ struct user_namespace *old_user)
- {
- struct uts_namespace *ns;
-
-@@ -43,7 +46,7 @@ static struct uts_namespace *clone_uts_n
-
- down_read(&uts_sem);
- memcpy(&ns->name, &old_ns->name, sizeof(ns->name));
-- ns->user_ns = get_user_ns(task_cred_xxx(tsk, user_ns));
-+ ns->user_ns = get_user_ns(old_user);
- up_read(&uts_sem);
- return ns;
- }
-@@ -55,9 +58,9 @@ static struct uts_namespace *clone_uts_n
- * versa.
- */
- struct uts_namespace *copy_utsname(unsigned long flags,
-- struct task_struct *tsk)
-+ struct uts_namespace *old_ns,
-+ struct user_namespace *user_ns)
- {
-- struct uts_namespace *old_ns = tsk->nsproxy->uts_ns;
- struct uts_namespace *new_ns;
-
- BUG_ON(!old_ns);
-@@ -66,7 +69,7 @@ struct uts_namespace *copy_utsname(unsig
- if (!(flags & CLONE_NEWUTS))
- return old_ns;
-
-- new_ns = clone_uts_ns(tsk, old_ns);
-+ new_ns = clone_uts_ns(old_ns, user_ns);
-
- put_uts_ns(old_ns);
- return new_ns;
-@@ -78,6 +81,7 @@ void free_uts_ns(struct kref *kref)
-
+@@ -85,6 +88,7 @@ void free_uts_ns(struct kref *kref)
ns = container_of(kref, struct uts_namespace, kref);
put_user_ns(ns->user_ns);
+ proc_free_inum(ns->proc_inum);
+ atomic_dec(&vs_global_uts_ns);
kfree(ns);
}
-diff -NurpP --minimal linux-3.7/kernel/vserver/Kconfig linux-3.7-vs2.3.5.1/kernel/vserver/Kconfig
---- linux-3.7/kernel/vserver/Kconfig 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/Kconfig 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/Kconfig linux-3.10.15-vs2.3.6.6/kernel/vserver/Kconfig
+--- linux-3.10.15/kernel/vserver/Kconfig 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/Kconfig 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,233 @@
+#
+# Linux VServer configuration
+ bool
+ default n
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/Makefile linux-3.7-vs2.3.5.1/kernel/vserver/Makefile
---- linux-3.7/kernel/vserver/Makefile 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/Makefile 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/Makefile linux-3.10.15-vs2.3.6.6/kernel/vserver/Makefile
+--- linux-3.10.15/kernel/vserver/Makefile 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/Makefile 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,18 @@
+#
+# Makefile for the Linux vserver routines.
+vserver-$(CONFIG_VSERVER_MONITOR) += monitor.o
+vserver-$(CONFIG_VSERVER_DEVICE) += device.o
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/cacct.c linux-3.7-vs2.3.5.1/kernel/vserver/cacct.c
---- linux-3.7/kernel/vserver/cacct.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/cacct.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/cacct.c linux-3.10.15-vs2.3.6.6/kernel/vserver/cacct.c
+--- linux-3.10.15/kernel/vserver/cacct.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/cacct.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,42 @@
+/*
+ * linux/kernel/vserver/cacct.c
+ return 0;
+}
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/cacct_init.h linux-3.7-vs2.3.5.1/kernel/vserver/cacct_init.h
---- linux-3.7/kernel/vserver/cacct_init.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/cacct_init.h 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/cacct_init.h linux-3.10.15-vs2.3.6.6/kernel/vserver/cacct_init.h
+--- linux-3.10.15/kernel/vserver/cacct_init.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/cacct_init.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,25 @@
+
+
+ return;
+}
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/cacct_proc.h linux-3.7-vs2.3.5.1/kernel/vserver/cacct_proc.h
---- linux-3.7/kernel/vserver/cacct_proc.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/cacct_proc.h 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/cacct_proc.h linux-3.10.15-vs2.3.6.6/kernel/vserver/cacct_proc.h
+--- linux-3.10.15/kernel/vserver/cacct_proc.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/cacct_proc.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,53 @@
+#ifndef _VX_CACCT_PROC_H
+#define _VX_CACCT_PROC_H
+}
+
+#endif /* _VX_CACCT_PROC_H */
-diff -NurpP --minimal linux-3.7/kernel/vserver/context.c linux-3.7-vs2.3.5.1/kernel/vserver/context.c
---- linux-3.7/kernel/vserver/context.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/context.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/context.c linux-3.10.15-vs2.3.6.6/kernel/vserver/context.c
+--- linux-3.10.15/kernel/vserver/context.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/context.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,1119 @@
+/*
+ * linux/kernel/vserver/context.c
+ * allocate an initialized vx_info struct
+ * doesn't make it visible (hash) */
+
-+static struct vx_info *__alloc_vx_info(xid_t xid)
++static struct vx_info *__alloc_vx_info(vxid_t xid)
+{
+ struct vx_info *new = NULL;
+ int cpu, index;
+static DEFINE_SPINLOCK(vx_info_hash_lock);
+
+
-+static inline unsigned int __hashval(xid_t xid)
++static inline unsigned int __hashval(vxid_t xid)
+{
+ return (xid % VX_HASH_SIZE);
+}
+ * requires the hash_lock to be held
+ * doesn't increment the vx_refcnt */
+
-+static inline struct vx_info *__lookup_vx_info(xid_t xid)
++static inline struct vx_info *__lookup_vx_info(vxid_t xid)
+{
+ struct hlist_head *head = &vx_info_hash[__hashval(xid)];
+ struct hlist_node *pos;
+
+ * verify that xid is still hashed */
+
-+int xid_is_hashed(xid_t xid)
++int xid_is_hashed(vxid_t xid)
+{
+ int hashed;
+
+
+ ret = unshare_nsproxy_namespaces(
+ CLONE_NEWUTS | CLONE_NEWIPC | CLONE_NEWUSER,
-+ &new_nsp, NULL);
++ &new_nsp, NULL, NULL);
+ if (ret)
+ goto out;
+
+
+int vc_task_xid(uint32_t id)
+{
-+ xid_t xid;
++ vxid_t xid;
+
+ if (id) {
+ struct task_struct *tsk;
+
+EXPORT_SYMBOL_GPL(free_vx_info);
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/cvirt.c linux-3.7-vs2.3.5.1/kernel/vserver/cvirt.c
---- linux-3.7/kernel/vserver/cvirt.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/cvirt.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/cvirt.c linux-3.10.15-vs2.3.6.6/kernel/vserver/cvirt.c
+--- linux-3.10.15/kernel/vserver/cvirt.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/cvirt.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,313 @@
+/*
+ * linux/kernel/vserver/cvirt.c
+
+#endif
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/cvirt_init.h linux-3.7-vs2.3.5.1/kernel/vserver/cvirt_init.h
---- linux-3.7/kernel/vserver/cvirt_init.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/cvirt_init.h 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/cvirt_init.h linux-3.10.15-vs2.3.6.6/kernel/vserver/cvirt_init.h
+--- linux-3.10.15/kernel/vserver/cvirt_init.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/cvirt_init.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,70 @@
+
+
+ return;
+}
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/cvirt_proc.h linux-3.7-vs2.3.5.1/kernel/vserver/cvirt_proc.h
---- linux-3.7/kernel/vserver/cvirt_proc.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/cvirt_proc.h 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/cvirt_proc.h linux-3.10.15-vs2.3.6.6/kernel/vserver/cvirt_proc.h
+--- linux-3.10.15/kernel/vserver/cvirt_proc.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/cvirt_proc.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,123 @@
+#ifndef _VX_CVIRT_PROC_H
+#define _VX_CVIRT_PROC_H
+ length += sprintf(buffer + length,
+ "SEMS:\t\t%d %d %d %d %d\n"
+ "MSG:\t\t%d %d %d\n"
-+ "SHM:\t\t%lu %lu %d %d\n",
++ "SHM:\t\t%lu %lu %d %ld\n",
+ ipc->sem_ctls[0], ipc->sem_ctls[1],
+ ipc->sem_ctls[2], ipc->sem_ctls[3],
+ ipc->used_sems,
+}
+
+#endif /* _VX_CVIRT_PROC_H */
-diff -NurpP --minimal linux-3.7/kernel/vserver/debug.c linux-3.7-vs2.3.5.1/kernel/vserver/debug.c
---- linux-3.7/kernel/vserver/debug.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/debug.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/debug.c linux-3.10.15-vs2.3.6.6/kernel/vserver/debug.c
+--- linux-3.10.15/kernel/vserver/debug.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/debug.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,32 @@
+/*
+ * kernel/vserver/debug.c
+
+EXPORT_SYMBOL_GPL(dump_vx_info);
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/device.c linux-3.7-vs2.3.5.1/kernel/vserver/device.c
---- linux-3.7/kernel/vserver/device.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/device.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/device.c linux-3.10.15-vs2.3.6.6/kernel/vserver/device.c
+--- linux-3.10.15/kernel/vserver/device.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/device.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,443 @@
+/*
+ * linux/kernel/vserver/device.c
+ } u;
+#define dm_hlist u.hlist
+#define dm_list u.list
-+ xid_t xid;
++ vxid_t xid;
+ dev_t device;
+ struct vx_dmap_target target;
+};
+ *
+ * caller must hold hash_lock
+ */
-+static inline int __find_mapping(xid_t xid, dev_t device, umode_t mode,
++static inline int __find_mapping(vxid_t xid, dev_t device, umode_t mode,
+ struct vs_mapping **local, struct vs_mapping **global)
+{
+ struct hlist_head *hash = dmap_main_hash;
+ struct vs_mapping *vdm, *global;
+ struct vx_dmap_target *vdmt;
+ int ret = 0;
-+ xid_t xid = vxi->vx_id;
++ vxid_t xid = vxi->vx_id;
+ int index;
+
+ spin_lock(hash_lock);
+#endif /* CONFIG_COMPAT */
+
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/dlimit.c linux-3.7-vs2.3.5.1/kernel/vserver/dlimit.c
---- linux-3.7/kernel/vserver/dlimit.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/dlimit.c 2012-12-11 15:56:33.000000000 +0000
-@@ -0,0 +1,531 @@
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/dlimit.c linux-3.10.15-vs2.3.6.6/kernel/vserver/dlimit.c
+--- linux-3.10.15/kernel/vserver/dlimit.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/dlimit.c 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,528 @@
+/*
+ * linux/kernel/vserver/dlimit.c
+ *
+ * allocate an initialized dl_info struct
+ * doesn't make it visible (hash) */
+
-+static struct dl_info *__alloc_dl_info(struct super_block *sb, tag_t tag)
++static struct dl_info *__alloc_dl_info(struct super_block *sb, vtag_t tag)
+{
+ struct dl_info *new = NULL;
+
+static DEFINE_SPINLOCK(dl_info_hash_lock);
+
+
-+static inline unsigned int __hashval(struct super_block *sb, tag_t tag)
++static inline unsigned int __hashval(struct super_block *sb, vtag_t tag)
+{
+ return ((tag ^ (unsigned long)sb) % DL_HASH_SIZE);
+}
+ * requires the rcu_read_lock()
+ * doesn't increment the dl_refcnt */
+
-+static inline struct dl_info *__lookup_dl_info(struct super_block *sb, tag_t tag)
++static inline struct dl_info *__lookup_dl_info(struct super_block *sb, vtag_t tag)
+{
+ struct hlist_head *head = &dl_info_hash[__hashval(sb, tag)];
-+ struct hlist_node *pos;
+ struct dl_info *dli;
+
-+ hlist_for_each_entry_rcu(dli, pos, head, dl_hlist) {
-+
-+ if (dli->dl_tag == tag && dli->dl_sb == sb) {
++ hlist_for_each_entry_rcu(dli, head, dl_hlist) {
++ if (dli->dl_tag == tag && dli->dl_sb == sb)
+ return dli;
-+ }
+ }
+ return NULL;
+}
+
+
-+struct dl_info *locate_dl_info(struct super_block *sb, tag_t tag)
++struct dl_info *locate_dl_info(struct super_block *sb, vtag_t tag)
+{
+ struct dl_info *dli;
+
+EXPORT_SYMBOL_GPL(locate_dl_info);
+EXPORT_SYMBOL_GPL(rcu_free_dl_info);
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/helper.c linux-3.7-vs2.3.5.1/kernel/vserver/helper.c
---- linux-3.7/kernel/vserver/helper.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/helper.c 2012-12-11 15:56:33.000000000 +0000
-@@ -0,0 +1,229 @@
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/helper.c linux-3.10.15-vs2.3.6.6/kernel/vserver/helper.c
+--- linux-3.10.15/kernel/vserver/helper.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/helper.c 2013-08-23 00:55:48.000000000 +0000
+@@ -0,0 +1,242 @@
+/*
+ * linux/kernel/vserver/helper.c
+ *
+
+static int vshelper_init(struct subprocess_info *info, struct cred *new_cred)
+{
-+ current->flags &= ~PF_THREAD_BOUND;
++ current->flags &= ~PF_NO_SETAFFINITY;
+ return 0;
+}
+
++static int vs_call_usermodehelper(char *path, char **argv, char **envp, int wait)
++{
++ struct subprocess_info *info;
++ gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL;
++
++ info = call_usermodehelper_setup(path, argv, envp, gfp_mask,
++ vshelper_init, NULL, NULL);
++ if (info == NULL)
++ return -ENOMEM;
++
++ return call_usermodehelper_exec(info, wait);
++}
++
+static int do_vshelper(char *name, char *argv[], char *envp[], int sync)
+{
+ int ret;
+
-+ if ((ret = call_usermodehelper_fns(name, argv, envp,
-+ sync ? UMH_WAIT_PROC : UMH_WAIT_EXEC,
-+ vshelper_init, NULL, NULL))) {
++ if ((ret = vs_call_usermodehelper(name, argv, envp,
++ sync ? UMH_WAIT_PROC : UMH_WAIT_EXEC))) {
+ printk(KERN_WARNING "%s: (%s %s) returned %s with %d\n",
+ name, argv[1], argv[2],
+ sync ? "sync" : "async", ret);
+ snprintf(id_buf, sizeof(id_buf), "%d", vxi->vx_id);
+
+ snprintf(cmd_buf, sizeof(cmd_buf), "VS_CMD=%08x", cmd);
-+ snprintf(uid_buf, sizeof(uid_buf), "VS_UID=%d", current_uid());
++ snprintf(uid_buf, sizeof(uid_buf), "VS_UID=%d",
++ from_kuid(&init_user_ns, current_uid()));
+ snprintf(pid_buf, sizeof(pid_buf), "VS_PID=%d", current->pid);
+
+ switch (cmd) {
+ return do_vshelper(vshelper_path, argv, envp, 1);
+}
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/history.c linux-3.7-vs2.3.5.1/kernel/vserver/history.c
---- linux-3.7/kernel/vserver/history.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/history.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/history.c linux-3.10.15-vs2.3.6.6/kernel/vserver/history.c
+--- linux-3.10.15/kernel/vserver/history.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/history.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,258 @@
+/*
+ * kernel/vserver/history.c
+
+#endif /* CONFIG_COMPAT */
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/inet.c linux-3.7-vs2.3.5.1/kernel/vserver/inet.c
---- linux-3.7/kernel/vserver/inet.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/inet.c 2012-12-11 15:56:33.000000000 +0000
-@@ -0,0 +1,226 @@
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/inet.c linux-3.10.15-vs2.3.6.6/kernel/vserver/inet.c
+--- linux-3.10.15/kernel/vserver/inet.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/inet.c 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,236 @@
+
+#include <linux/in.h>
+#include <linux/inetdevice.h>
+ ret = 1;
+ else {
+ struct nx_addr_v4 *ptr;
++ unsigned long irqflags;
+
++ spin_lock_irqsave(&nxi1->addr_lock, irqflags);
+ for (ptr = &nxi1->v4; ptr; ptr = ptr->next) {
+ if (v4_nx_addr_in_nx_info(nxi2, ptr, -1)) {
+ ret = 1;
+ break;
+ }
+ }
++ spin_unlock_irqrestore(&nxi1->addr_lock, irqflags);
+ }
+
+ vxdprintk(VXD_CBIT(net, 2),
+ ret = 1;
+ else {
+ struct nx_addr_v6 *ptr;
++ unsigned long irqflags;
+
++ spin_lock_irqsave(&nxi1->addr_lock, irqflags);
+ for (ptr = &nxi1->v6; ptr; ptr = ptr->next) {
+ if (v6_nx_addr_in_nx_info(nxi2, ptr, -1)) {
+ ret = 1;
+ break;
+ }
+ }
++ spin_unlock_irqrestore(&nxi1->addr_lock, irqflags);
+ }
+
+ vxdprintk(VXD_CBIT(net, 2),
+ goto found;
+ }
+
++ WARN_ON_ONCE(in_irq());
++ spin_lock_bh(&nxi->addr_lock);
+ for (ptr = &nxi->v4; ptr; ptr = ptr->next) {
+ __be32 primary = ptr->ip[0].s_addr;
+ __be32 mask = ptr->mask.s_addr;
+ found = fl4->saddr;
+ ip_rt_put(rt);
+ if (found == primary)
-+ goto found;
++ goto found_unlock;
+ }
+ }
+ /* still no source ip? */
+ found = ipv4_is_loopback(fl4->daddr)
+ ? IPI_LOOPBACK : nxi->v4.ip[0].s_addr;
++ found_unlock:
++ spin_unlock_bh(&nxi->addr_lock);
+ found:
+ /* assign src ip to flow */
+ fl4->saddr = found;
+
+EXPORT_SYMBOL_GPL(ip_v4_find_src);
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/init.c linux-3.7-vs2.3.5.1/kernel/vserver/init.c
---- linux-3.7/kernel/vserver/init.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/init.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/init.c linux-3.10.15-vs2.3.6.6/kernel/vserver/init.c
+--- linux-3.10.15/kernel/vserver/init.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/init.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,45 @@
+/*
+ * linux/kernel/init.c
+module_init(init_vserver);
+module_exit(exit_vserver);
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/inode.c linux-3.7-vs2.3.5.1/kernel/vserver/inode.c
---- linux-3.7/kernel/vserver/inode.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/inode.c 2012-12-11 19:38:12.000000000 +0000
-@@ -0,0 +1,437 @@
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/inode.c linux-3.10.15-vs2.3.6.6/kernel/vserver/inode.c
+--- linux-3.10.15/kernel/vserver/inode.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/inode.c 2013-08-22 23:14:01.000000000 +0000
+@@ -0,0 +1,440 @@
+/*
+ * linux/kernel/vserver/inode.c
+ *
+#include <linux/mount.h>
+#include <linux/parser.h>
+#include <linux/namei.h>
++#include <linux/magic.h>
++#include <linux/slab.h>
+#include <linux/vserver/inode.h>
+#include <linux/vserver/inode_cmd.h>
+#include <linux/vs_base.h>
+#include <linux/vs_tag.h>
+
+#include <asm/uaccess.h>
++#include <../../fs/proc/internal.h>
+
+
+static int __vc_get_iattr(struct inode *in, uint32_t *tag, uint32_t *flags, uint32_t *mask)
+
+ mutex_lock(&in->i_mutex);
+ if (*mask & IATTR_TAG) {
-+ attr.ia_tag = *tag;
++ attr.ia_tag = make_ktag(&init_user_ns, *tag);
+ attr.ia_valid |= ATTR_TAG;
+ }
+
+ }
+}
+
-+int dx_parse_tag(char *string, tag_t *tag, int remove, int *mnt_flags,
++int dx_parse_tag(char *string, vtag_t *tag, int remove, int *mnt_flags,
+ unsigned long *flags)
+{
+ int set = 0;
+
+void __dx_propagate_tag(struct nameidata *nd, struct inode *inode)
+{
-+ tag_t new_tag = 0;
++ vtag_t new_tag = 0;
+ struct vfsmount *mnt;
+ int propagate;
+
+
+#endif /* CONFIG_PROPAGATE */
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/limit.c linux-3.7-vs2.3.5.1/kernel/vserver/limit.c
---- linux-3.7/kernel/vserver/limit.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/limit.c 2012-12-12 13:08:45.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/limit.c linux-3.10.15-vs2.3.6.6/kernel/vserver/limit.c
+--- linux-3.10.15/kernel/vserver/limit.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/limit.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,345 @@
+/*
+ * linux/kernel/vserver/limit.c
+ return cache;
+}
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/limit_init.h linux-3.7-vs2.3.5.1/kernel/vserver/limit_init.h
---- linux-3.7/kernel/vserver/limit_init.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/limit_init.h 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/limit_init.h linux-3.10.15-vs2.3.6.6/kernel/vserver/limit_init.h
+--- linux-3.10.15/kernel/vserver/limit_init.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/limit_init.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,31 @@
+
+
+ }
+}
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/limit_proc.h linux-3.7-vs2.3.5.1/kernel/vserver/limit_proc.h
---- linux-3.7/kernel/vserver/limit_proc.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/limit_proc.h 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/limit_proc.h linux-3.10.15-vs2.3.6.6/kernel/vserver/limit_proc.h
+--- linux-3.10.15/kernel/vserver/limit_proc.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/limit_proc.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,57 @@
+#ifndef _VX_LIMIT_PROC_H
+#define _VX_LIMIT_PROC_H
+#endif /* _VX_LIMIT_PROC_H */
+
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/network.c linux-3.7-vs2.3.5.1/kernel/vserver/network.c
---- linux-3.7/kernel/vserver/network.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/network.c 2012-12-11 15:56:33.000000000 +0000
-@@ -0,0 +1,912 @@
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/network.c linux-3.10.15-vs2.3.6.6/kernel/vserver/network.c
+--- linux-3.10.15/kernel/vserver/network.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/network.c 2013-08-22 20:30:00.000000000 +0000
+@@ -0,0 +1,1053 @@
+/*
+ * linux/kernel/vserver/network.c
+ *
+#include <linux/err.h>
+#include <linux/slab.h>
+#include <linux/rcupdate.h>
++#include <net/ipv6.h>
+
+#include <linux/vs_network.h>
+#include <linux/vs_pid.h>
+ * allocate an initialized nx_info struct
+ * doesn't make it visible (hash) */
+
-+static struct nx_info *__alloc_nx_info(nid_t nid)
++static struct nx_info *__alloc_nx_info(vnid_t nid)
+{
+ struct nx_info *new = NULL;
+
+ INIT_HLIST_NODE(&new->nx_hlist);
+ atomic_set(&new->nx_usecnt, 0);
+ atomic_set(&new->nx_tasks, 0);
++ spin_lock_init(&new->addr_lock);
+ new->nx_state = 0;
+
+ new->nx_flags = NXF_INIT_SET;
+ BUG_ON(atomic_read(&nxi->nx_tasks));
+
+ __dealloc_nx_addr_v4_all(nxi->v4.next);
++#ifdef CONFIG_IPV6
++ __dealloc_nx_addr_v6_all(nxi->v6.next);
++#endif
+
+ nxi->nx_state |= NXS_RELEASED;
+ kfree(nxi);
+static DEFINE_SPINLOCK(nx_info_hash_lock);
+
+
-+static inline unsigned int __hashval(nid_t nid)
++static inline unsigned int __hashval(vnid_t nid)
+{
+ return (nid % NX_HASH_SIZE);
+}
+ * requires the hash_lock to be held
+ * doesn't increment the nx_refcnt */
+
-+static inline struct nx_info *__lookup_nx_info(nid_t nid)
++static inline struct nx_info *__lookup_nx_info(vnid_t nid)
+{
+ struct hlist_head *head = &nx_info_hash[__hashval(nid)];
+ struct hlist_node *pos;
+
+ * verify that nid is still hashed */
+
-+int nid_is_hashed(nid_t nid)
++int nid_is_hashed(vnid_t nid)
+{
+ int hashed;
+
+
+int vc_task_nid(uint32_t id)
+{
-+ nid_t nid;
++ vnid_t nid;
+
+ if (id) {
+ struct task_struct *tsk;
+}
+
+
++static inline
++struct nx_addr_v4 *__find_v4_addr(struct nx_info *nxi,
++ __be32 ip, __be32 ip2, __be32 mask, uint16_t type, uint16_t flags,
++ struct nx_addr_v4 **prev)
++{
++ struct nx_addr_v4 *nxa = &nxi->v4;
++
++ for (; nxa; nxa = nxa->next) {
++ if ((nxa->ip[0].s_addr == ip) &&
++ (nxa->ip[1].s_addr == ip2) &&
++ (nxa->mask.s_addr == mask) &&
++ (nxa->type == type) &&
++ (nxa->flags == flags))
++ return nxa;
++
++ /* save previous entry */
++ if (prev)
++ *prev = nxa;
++ }
++ return NULL;
++}
+
+int do_add_v4_addr(struct nx_info *nxi, __be32 ip, __be32 ip2, __be32 mask,
+ uint16_t type, uint16_t flags)
+{
-+ struct nx_addr_v4 *nxa = &nxi->v4;
++ struct nx_addr_v4 *nxa = NULL;
++ struct nx_addr_v4 *new = __alloc_nx_addr_v4();
++ unsigned long irqflags;
++ int ret = -EEXIST;
+
-+ if (NX_IPV4(nxi)) {
-+ /* locate last entry */
-+ for (; nxa->next; nxa = nxa->next);
-+ nxa->next = __alloc_nx_addr_v4();
-+ nxa = nxa->next;
++ if (IS_ERR(new))
++ return PTR_ERR(new);
+
-+ if (IS_ERR(nxa))
-+ return PTR_ERR(nxa);
-+ }
++ spin_lock_irqsave(&nxi->addr_lock, irqflags);
++ if (__find_v4_addr(nxi, ip, ip2, mask, type, flags, &nxa))
++ goto out_unlock;
++
++ if (NX_IPV4(nxi)) {
++ nxa->next = new;
++ nxa = new;
++ new = NULL;
+
-+ if (nxi->v4.next)
+ /* remove single ip for ip list */
+ nxi->nx_flags &= ~NXF_SINGLE_IP;
++ }
+
+ nxa->ip[0].s_addr = ip;
+ nxa->ip[1].s_addr = ip2;
+ nxa->mask.s_addr = mask;
+ nxa->type = type;
+ nxa->flags = flags;
-+ return 0;
++ ret = 0;
++out_unlock:
++ spin_unlock_irqrestore(&nxi->addr_lock, irqflags);
++ if (new)
++ __dealloc_nx_addr_v4(new);
++ return ret;
+}
+
+int do_remove_v4_addr(struct nx_info *nxi, __be32 ip, __be32 ip2, __be32 mask,
+ uint16_t type, uint16_t flags)
+{
-+ struct nx_addr_v4 *nxa = &nxi->v4;
++ struct nx_addr_v4 *nxa = NULL;
++ struct nx_addr_v4 *old = NULL;
++ unsigned long irqflags;
++ int ret = 0;
+
++ spin_lock_irqsave(&nxi->addr_lock, irqflags);
+ switch (type) {
-+/* case NXA_TYPE_ADDR:
-+ break; */
++ case NXA_TYPE_ADDR:
++ old = __find_v4_addr(nxi, ip, ip2, mask, type, flags, &nxa);
++ if (old) {
++ if (nxa) {
++ nxa->next = old->next;
++ old->next = NULL;
++ } else {
++ if (old->next) {
++ nxa = old;
++ old = old->next;
++ *nxa = *old;
++ old->next = NULL;
++ } else {
++ memset(old, 0, sizeof(*old));
++ old = NULL;
++ }
++ }
++ } else
++ ret = -ESRCH;
++ break;
+
+ case NXA_TYPE_ANY:
-+ __dealloc_nx_addr_v4_all(xchg(&nxa->next, NULL));
++ nxa = &nxi->v4;
++ old = nxa->next;
+ memset(nxa, 0, sizeof(*nxa));
+ break;
+
+ default:
-+ return -EINVAL;
++ ret = -EINVAL;
+ }
-+ return 0;
++ spin_unlock_irqrestore(&nxi->addr_lock, irqflags);
++ __dealloc_nx_addr_v4_all(old);
++ return ret;
+}
+
+
+
+ switch (vc_data.type) {
+ case NXA_TYPE_ANY:
-+ __dealloc_nx_addr_v4_all(xchg(&nxi->v4.next, NULL));
-+ memset(&nxi->v4, 0, sizeof(nxi->v4));
-+ break;
-+
++ return do_remove_v4_addr(nxi, 0, 0, 0, vc_data.type, 0);
+ default:
+ return -EINVAL;
+ }
+
+#ifdef CONFIG_IPV6
+
++static inline
++struct nx_addr_v6 *__find_v6_addr(struct nx_info *nxi,
++ struct in6_addr *ip, struct in6_addr *mask,
++ uint32_t prefix, uint16_t type, uint16_t flags,
++ struct nx_addr_v6 **prev)
++{
++ struct nx_addr_v6 *nxa = &nxi->v6;
++
++ for (; nxa; nxa = nxa->next) {
++ if (ipv6_addr_equal(&nxa->ip, ip) &&
++ ipv6_addr_equal(&nxa->mask, mask) &&
++ (nxa->prefix == prefix) &&
++ (nxa->type == type) &&
++ (nxa->flags == flags))
++ return nxa;
++
++ /* save previous entry */
++ if (prev)
++ *prev = nxa;
++ }
++ return NULL;
++}
++
++
+int do_add_v6_addr(struct nx_info *nxi,
+ struct in6_addr *ip, struct in6_addr *mask,
+ uint32_t prefix, uint16_t type, uint16_t flags)
+{
-+ struct nx_addr_v6 *nxa = &nxi->v6;
++ struct nx_addr_v6 *nxa = NULL;
++ struct nx_addr_v6 *new = __alloc_nx_addr_v6();
++ unsigned long irqflags;
++ int ret = -EEXIST;
++
++ if (IS_ERR(new))
++ return PTR_ERR(new);
+
-+ if (NX_IPV6(nxi)) {
-+ /* locate last entry */
-+ for (; nxa->next; nxa = nxa->next);
-+ nxa->next = __alloc_nx_addr_v6();
-+ nxa = nxa->next;
++ spin_lock_irqsave(&nxi->addr_lock, irqflags);
++ if (__find_v6_addr(nxi, ip, mask, prefix, type, flags, &nxa))
++ goto out_unlock;
+
-+ if (IS_ERR(nxa))
-+ return PTR_ERR(nxa);
++ if (NX_IPV6(nxi)) {
++ nxa->next = new;
++ nxa = new;
++ new = NULL;
+ }
+
+ nxa->ip = *ip;
+ nxa->prefix = prefix;
+ nxa->type = type;
+ nxa->flags = flags;
-+ return 0;
++ ret = 0;
++out_unlock:
++ spin_unlock_irqrestore(&nxi->addr_lock, irqflags);
++ if (new)
++ __dealloc_nx_addr_v6(new);
++ return ret;
+}
+
++int do_remove_v6_addr(struct nx_info *nxi,
++ struct in6_addr *ip, struct in6_addr *mask,
++ uint32_t prefix, uint16_t type, uint16_t flags)
++{
++ struct nx_addr_v6 *nxa = NULL;
++ struct nx_addr_v6 *old = NULL;
++ unsigned long irqflags;
++ int ret = 0;
++
++ spin_lock_irqsave(&nxi->addr_lock, irqflags);
++ switch (type) {
++ case NXA_TYPE_ADDR:
++ old = __find_v6_addr(nxi, ip, mask, prefix, type, flags, &nxa);
++ if (old) {
++ if (nxa) {
++ nxa->next = old->next;
++ old->next = NULL;
++ } else {
++ if (old->next) {
++ nxa = old;
++ old = old->next;
++ *nxa = *old;
++ old->next = NULL;
++ } else {
++ memset(old, 0, sizeof(*old));
++ old = NULL;
++ }
++ }
++ } else
++ ret = -ESRCH;
++ break;
++
++ case NXA_TYPE_ANY:
++ nxa = &nxi->v6;
++ old = nxa->next;
++ memset(nxa, 0, sizeof(*nxa));
++ break;
++
++ default:
++ ret = -EINVAL;
++ }
++ spin_unlock_irqrestore(&nxi->addr_lock, irqflags);
++ __dealloc_nx_addr_v6_all(old);
++ return ret;
++}
+
+int vc_net_add_ipv6(struct nx_info *nxi, void __user *data)
+{
+ return -EFAULT;
+
+ switch (vc_data.type) {
++ case NXA_TYPE_ADDR:
++ memset(&vc_data.mask, ~0, sizeof(vc_data.mask));
++ /* fallthrough */
++ case NXA_TYPE_MASK:
++ return do_remove_v6_addr(nxi, &vc_data.ip, &vc_data.mask,
++ vc_data.prefix, vc_data.type, vc_data.flags);
+ case NXA_TYPE_ANY:
-+ __dealloc_nx_addr_v6_all(xchg(&nxi->v6.next, NULL));
-+ memset(&nxi->v6, 0, sizeof(nxi->v6));
-+ break;
-+
++ return do_remove_v6_addr(nxi, NULL, NULL, 0, vc_data.type, 0);
+ default:
+ return -EINVAL;
+ }
+EXPORT_SYMBOL_GPL(free_nx_info);
+EXPORT_SYMBOL_GPL(unhash_nx_info);
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/proc.c linux-3.7-vs2.3.5.1/kernel/vserver/proc.c
---- linux-3.7/kernel/vserver/proc.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/proc.c 2012-12-11 15:56:33.000000000 +0000
-@@ -0,0 +1,1110 @@
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/proc.c linux-3.10.15-vs2.3.6.6/kernel/vserver/proc.c
+--- linux-3.10.15/kernel/vserver/proc.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/proc.c 2013-08-22 23:31:37.000000000 +0000
+@@ -0,0 +1,1113 @@
+/*
+ * linux/kernel/vserver/proc.c
+ *
+#include "sched_proc.h"
+#include "vci_config.h"
+
++#include <../../fs/proc/internal.h>
++
+
+static inline char *print_cap_t(char *buffer, kernel_cap_t *c)
+{
+
+ inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
+
-+ inode->i_uid = 0;
-+ inode->i_gid = 0;
-+ inode->i_tag = 0;
++ i_uid_write(inode, 0);
++ i_gid_write(inode, 0);
++ i_tag_write(inode, 0);
+out:
+ return inode;
+}
+
+/* Lookups */
+
-+typedef struct dentry *instantiate_t(struct inode *, struct dentry *, int, void *);
++typedef struct dentry *vx_instantiate_t(struct inode *, struct dentry *, int, void *);
++
+
+/*
+ * Fill a directory entry.
+ * reported by readdir in sync with the inode numbers reported
+ * by stat.
+ */
-+static int proc_fill_cache(struct file *filp, void *dirent, filldir_t filldir,
-+ char *name, int len, instantiate_t instantiate, int id, void *ptr)
++static int vx_proc_fill_cache(struct file *filp, void *dirent, filldir_t filldir,
++ char *name, int len, vx_instantiate_t instantiate, int id, void *ptr)
+{
+ struct dentry *child, *dir = filp->f_dentry;
+ struct inode *inode;
+static int proc_xid_revalidate(struct dentry *dentry, unsigned int flags)
+{
+ struct inode *inode = dentry->d_inode;
-+ xid_t xid = PROC_I(inode)->fd;
++ vxid_t xid = PROC_I(inode)->fd;
+
+ if (flags & LOOKUP_RCU) /* FIXME: can be dropped? */
+ return -ECHILD;
+static int proc_nid_revalidate(struct dentry *dentry, unsigned int flags)
+{
+ struct inode *inode = dentry->d_inode;
-+ nid_t nid = PROC_I(inode)->fd;
++ vnid_t nid = PROC_I(inode)->fd;
+
+ if (flags & LOOKUP_RCU) /* FIXME: can be dropped? */
+ return -ECHILD;
+{
+ struct inode *inode = file->f_dentry->d_inode;
+ struct vx_info *vxi = NULL;
-+ xid_t xid = PROC_I(inode)->fd;
++ vxid_t xid = PROC_I(inode)->fd;
+ unsigned long page;
+ ssize_t length = 0;
+
+{
+ struct inode *inode = file->f_dentry->d_inode;
+ struct nx_info *nxi = NULL;
-+ nid_t nid = PROC_I(inode)->fd;
++ vnid_t nid = PROC_I(inode)->fd;
+ unsigned long page;
+ ssize_t length = 0;
+
+ if (index >= size)
+ goto out;
+ for (p += index; p->name; p++) {
-+ if (proc_fill_cache(filp, dirent, filldir, p->name, p->len,
++ if (vx_proc_fill_cache(filp, dirent, filldir, p->name, p->len,
+ vs_proc_instantiate, PROC_I(inode)->fd, p))
+ goto out;
+ pos++;
+ if (index >= size)
+ goto out;
+ for (p += index; p->name; p++) {
-+ if (proc_fill_cache(filp, dirent, filldir, p->name, p->len,
++ if (vx_proc_fill_cache(filp, dirent, filldir, p->name, p->len,
+ vs_proc_instantiate, PROC_I(inode)->fd, p))
+ goto out;
+ pos++;
+ if (index >= size)
+ goto entries;
+ for (p += index; p->name; p++) {
-+ if (proc_fill_cache(filp, dirent, filldir, p->name, p->len,
++ if (vx_proc_fill_cache(filp, dirent, filldir, p->name, p->len,
+ vs_proc_instantiate, 0, p))
+ goto out;
+ pos++;
+ buf[--j] = '0' + (n % 10);
+ while (n /= 10);
+
-+ if (proc_fill_cache(filp, dirent, filldir,
++ if (vx_proc_fill_cache(filp, dirent, filldir,
+ buf + j, PROC_NUMBUF - j,
+ vs_proc_instantiate, xid, p))
+ goto out;
+ if (index >= size)
+ goto entries;
+ for (p += index; p->name; p++) {
-+ if (proc_fill_cache(filp, dirent, filldir, p->name, p->len,
++ if (vx_proc_fill_cache(filp, dirent, filldir, p->name, p->len,
+ vs_proc_instantiate, 0, p))
+ goto out;
+ pos++;
+ buf[--j] = '0' + (n % 10);
+ while (n /= 10);
+
-+ if (proc_fill_cache(filp, dirent, filldir,
++ if (vx_proc_fill_cache(filp, dirent, filldir,
+ buf + j, PROC_NUMBUF - j,
+ vs_proc_instantiate, nid, p))
+ goto out;
+ return buffer - orig;
+}
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/sched.c linux-3.7-vs2.3.5.1/kernel/vserver/sched.c
---- linux-3.7/kernel/vserver/sched.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/sched.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/sched.c linux-3.10.15-vs2.3.6.6/kernel/vserver/sched.c
+--- linux-3.10.15/kernel/vserver/sched.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/sched.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,83 @@
+/*
+ * linux/kernel/vserver/sched.c
+ return 0;
+}
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/sched_init.h linux-3.7-vs2.3.5.1/kernel/vserver/sched_init.h
---- linux-3.7/kernel/vserver/sched_init.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/sched_init.h 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/sched_init.h linux-3.10.15-vs2.3.6.6/kernel/vserver/sched_init.h
+--- linux-3.10.15/kernel/vserver/sched_init.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/sched_init.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,27 @@
+
+static inline void vx_info_init_sched(struct _vx_sched *sched)
+{
+ return;
+}
-diff -NurpP --minimal linux-3.7/kernel/vserver/sched_proc.h linux-3.7-vs2.3.5.1/kernel/vserver/sched_proc.h
---- linux-3.7/kernel/vserver/sched_proc.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/sched_proc.h 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/sched_proc.h linux-3.10.15-vs2.3.6.6/kernel/vserver/sched_proc.h
+--- linux-3.10.15/kernel/vserver/sched_proc.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/sched_proc.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,32 @@
+#ifndef _VX_SCHED_PROC_H
+#define _VX_SCHED_PROC_H
+}
+
+#endif /* _VX_SCHED_PROC_H */
-diff -NurpP --minimal linux-3.7/kernel/vserver/signal.c linux-3.7-vs2.3.5.1/kernel/vserver/signal.c
---- linux-3.7/kernel/vserver/signal.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/signal.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/signal.c linux-3.10.15-vs2.3.6.6/kernel/vserver/signal.c
+--- linux-3.10.15/kernel/vserver/signal.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/signal.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,134 @@
+/*
+ * linux/kernel/vserver/signal.c
+ return ret;
+}
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/space.c linux-3.7-vs2.3.5.1/kernel/vserver/space.c
---- linux-3.7/kernel/vserver/space.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/space.c 2012-12-11 21:15:48.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/space.c linux-3.10.15-vs2.3.6.6/kernel/vserver/space.c
+--- linux-3.10.15/kernel/vserver/space.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/space.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,436 @@
+/*
+ * linux/kernel/vserver/space.c
+ return 0;
+}
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/switch.c linux-3.7-vs2.3.5.1/kernel/vserver/switch.c
---- linux-3.7/kernel/vserver/switch.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/switch.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/switch.c linux-3.10.15-vs2.3.6.6/kernel/vserver/switch.c
+--- linux-3.10.15/kernel/vserver/switch.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/switch.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,556 @@
+/*
+ * linux/kernel/vserver/switch.c
+}
+
+#endif /* CONFIG_COMPAT */
-diff -NurpP --minimal linux-3.7/kernel/vserver/sysctl.c linux-3.7-vs2.3.5.1/kernel/vserver/sysctl.c
---- linux-3.7/kernel/vserver/sysctl.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/sysctl.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/sysctl.c linux-3.10.15-vs2.3.6.6/kernel/vserver/sysctl.c
+--- linux-3.10.15/kernel/vserver/sysctl.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/sysctl.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,247 @@
+/*
+ * kernel/vserver/sysctl.c
+EXPORT_SYMBOL_GPL(vs_debug_perm);
+EXPORT_SYMBOL_GPL(vs_debug_misc);
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/tag.c linux-3.7-vs2.3.5.1/kernel/vserver/tag.c
---- linux-3.7/kernel/vserver/tag.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/tag.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/tag.c linux-3.10.15-vs2.3.6.6/kernel/vserver/tag.c
+--- linux-3.10.15/kernel/vserver/tag.c 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/tag.c 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,63 @@
+/*
+ * linux/kernel/vserver/tag.c
+#include <linux/vserver/tag_cmd.h>
+
+
-+int dx_migrate_task(struct task_struct *p, tag_t tag)
++int dx_migrate_task(struct task_struct *p, vtag_t tag)
+{
+ if (!p)
+ BUG();
+
+int vc_task_tag(uint32_t id)
+{
-+ tag_t tag;
++ vtag_t tag;
+
+ if (id) {
+ struct task_struct *tsk;
+}
+
+
-diff -NurpP --minimal linux-3.7/kernel/vserver/vci_config.h linux-3.7-vs2.3.5.1/kernel/vserver/vci_config.h
---- linux-3.7/kernel/vserver/vci_config.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/kernel/vserver/vci_config.h 2012-12-12 13:08:45.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/kernel/vserver/vci_config.h linux-3.10.15-vs2.3.6.6/kernel/vserver/vci_config.h
+--- linux-3.10.15/kernel/vserver/vci_config.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/kernel/vserver/vci_config.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,80 @@
+
+/* interface version */
+ 0;
+}
+
-diff -NurpP --minimal linux-3.7/mm/memcontrol.c linux-3.7-vs2.3.5.1/mm/memcontrol.c
---- linux-3.7/mm/memcontrol.c 2012-12-11 15:47:52.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/mm/memcontrol.c 2012-12-11 15:56:33.000000000 +0000
-@@ -884,6 +884,31 @@ struct mem_cgroup *mem_cgroup_from_task(
+diff -NurpP --minimal linux-3.10.15/mm/memcontrol.c linux-3.10.15-vs2.3.6.6/mm/memcontrol.c
+--- linux-3.10.15/mm/memcontrol.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/mm/memcontrol.c 2013-10-09 17:37:22.000000000 +0000
+@@ -1082,6 +1082,31 @@ struct mem_cgroup *mem_cgroup_from_task(
return mem_cgroup_from_css(task_subsys_state(p, mem_cgroup_subsys_id));
}
struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm)
{
struct mem_cgroup *memcg = NULL;
-diff -NurpP --minimal linux-3.7/mm/oom_kill.c linux-3.7-vs2.3.5.1/mm/oom_kill.c
---- linux-3.7/mm/oom_kill.c 2012-12-11 15:47:52.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/mm/oom_kill.c 2012-12-12 00:10:01.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/mm/oom_kill.c linux-3.10.15-vs2.3.6.6/mm/oom_kill.c
+--- linux-3.10.15/mm/oom_kill.c 2013-05-31 13:45:31.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/mm/oom_kill.c 2013-08-22 20:30:00.000000000 +0000
@@ -35,6 +35,8 @@
#include <linux/freezer.h>
#include <linux/ftrace.h>
#define CREATE_TRACE_POINTS
#include <trace/events/oom.h>
-@@ -155,11 +157,18 @@ struct task_struct *find_lock_task_mm(st
+@@ -113,11 +115,18 @@ struct task_struct *find_lock_task_mm(st
static bool oom_unkillable_task(struct task_struct *p,
const struct mem_cgroup *memcg, const nodemask_t *nodemask)
{
/* When mem_cgroup_out_of_memory() and p is not member of the group */
if (memcg && !task_in_mem_cgroup(p, memcg))
return true;
-@@ -472,8 +481,8 @@ void oom_kill_process(struct task_struct
+@@ -426,8 +435,8 @@ void oom_kill_process(struct task_struct
dump_header(p, gfp_mask, order, memcg, nodemask);
task_lock(p);
task_unlock(p);
/*
-@@ -518,8 +527,8 @@ void oom_kill_process(struct task_struct
+@@ -472,8 +481,8 @@ void oom_kill_process(struct task_struct
/* mm cannot safely be dereferenced after task_unlock(victim) */
mm = victim->mm;
K(get_mm_counter(victim->mm, MM_ANONPAGES)),
K(get_mm_counter(victim->mm, MM_FILEPAGES)));
task_unlock(victim);
-@@ -589,6 +598,8 @@ int unregister_oom_notifier(struct notif
+@@ -543,6 +552,8 @@ int unregister_oom_notifier(struct notif
}
EXPORT_SYMBOL_GPL(unregister_oom_notifier);
/*
* Try to acquire the OOM killer lock for the zones in zonelist. Returns zero
* if a parallel OOM killing is already taking place that includes a zone in
-@@ -738,7 +749,12 @@ void out_of_memory(struct zonelist *zone
+@@ -655,7 +666,12 @@ void out_of_memory(struct zonelist *zone
/* Found nothing?!?! Either we hang forever, or we panic. */
if (!p) {
dump_header(NULL, gfp_mask, order, NULL, mpol_mask);
}
if (PTR_ERR(p) != -1UL) {
oom_kill_process(p, gfp_mask, order, points, totalpages, NULL,
-diff -NurpP --minimal linux-3.7/mm/page_alloc.c linux-3.7-vs2.3.5.1/mm/page_alloc.c
---- linux-3.7/mm/page_alloc.c 2012-12-11 15:47:52.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/mm/page_alloc.c 2012-12-11 15:56:33.000000000 +0000
-@@ -58,6 +58,8 @@
- #include <linux/prefetch.h>
- #include <linux/migrate.h>
+diff -NurpP --minimal linux-3.10.15/mm/page_alloc.c linux-3.10.15-vs2.3.6.6/mm/page_alloc.c
+--- linux-3.10.15/mm/page_alloc.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/mm/page_alloc.c 2013-08-22 20:30:00.000000000 +0000
+@@ -60,6 +60,8 @@
#include <linux/page-debug-flags.h>
+ #include <linux/hugetlb.h>
+ #include <linux/sched/rt.h>
+#include <linux/vs_base.h>
+#include <linux/vs_limit.h>
#include <asm/tlbflush.h>
#include <asm/div64.h>
-@@ -2832,6 +2834,9 @@ void si_meminfo(struct sysinfo *val)
+@@ -2899,6 +2901,9 @@ void si_meminfo(struct sysinfo *val)
val->totalhigh = totalhigh_pages;
val->freehigh = nr_free_highpages();
val->mem_unit = PAGE_SIZE;
}
EXPORT_SYMBOL(si_meminfo);
-@@ -2852,6 +2857,9 @@ void si_meminfo_node(struct sysinfo *val
+@@ -2919,6 +2924,9 @@ void si_meminfo_node(struct sysinfo *val
val->freehigh = 0;
#endif
val->mem_unit = PAGE_SIZE;
}
#endif
-diff -NurpP --minimal linux-3.7/mm/pgtable-generic.c linux-3.7-vs2.3.5.1/mm/pgtable-generic.c
---- linux-3.7/mm/pgtable-generic.c 2012-12-11 15:47:52.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/mm/pgtable-generic.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/mm/pgtable-generic.c linux-3.10.15-vs2.3.6.6/mm/pgtable-generic.c
+--- linux-3.10.15/mm/pgtable-generic.c 2013-02-19 13:58:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/mm/pgtable-generic.c 2013-08-22 20:30:00.000000000 +0000
@@ -6,6 +6,8 @@
* Copyright (C) 2010 Linus Torvalds
*/
#include <linux/pagemap.h>
#include <asm/tlb.h>
#include <asm-generic/pgtable.h>
-diff -NurpP --minimal linux-3.7/mm/shmem.c linux-3.7-vs2.3.5.1/mm/shmem.c
---- linux-3.7/mm/shmem.c 2012-12-11 15:47:52.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/mm/shmem.c 2012-12-11 15:56:33.000000000 +0000
-@@ -1820,7 +1820,7 @@ static int shmem_statfs(struct dentry *d
+diff -NurpP --minimal linux-3.10.15/mm/shmem.c linux-3.10.15-vs2.3.6.6/mm/shmem.c
+--- linux-3.10.15/mm/shmem.c 2013-07-14 17:01:36.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/mm/shmem.c 2013-08-22 20:30:00.000000000 +0000
+@@ -1911,7 +1911,7 @@ static int shmem_statfs(struct dentry *d
{
struct shmem_sb_info *sbinfo = SHMEM_SB(dentry->d_sb);
buf->f_bsize = PAGE_CACHE_SIZE;
buf->f_namelen = NAME_MAX;
if (sbinfo->max_blocks) {
-@@ -2504,7 +2504,7 @@ int shmem_fill_super(struct super_block
+@@ -2608,7 +2608,7 @@ int shmem_fill_super(struct super_block
sb->s_maxbytes = MAX_LFS_FILESIZE;
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_op = &shmem_ops;
sb->s_time_gran = 1;
#ifdef CONFIG_TMPFS_XATTR
-diff -NurpP --minimal linux-3.7/mm/slab.c linux-3.7-vs2.3.5.1/mm/slab.c
---- linux-3.7/mm/slab.c 2012-12-11 15:47:52.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/mm/slab.c 2012-12-11 15:56:33.000000000 +0000
-@@ -445,6 +445,8 @@ static void kmem_list3_init(struct kmem_
+diff -NurpP --minimal linux-3.10.15/mm/slab.c linux-3.10.15-vs2.3.6.6/mm/slab.c
+--- linux-3.10.15/mm/slab.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/mm/slab.c 2013-08-22 21:01:54.000000000 +0000
+@@ -388,6 +388,8 @@ static void kmem_cache_node_init(struct
#define STATS_INC_FREEMISS(x) do { } while (0)
#endif
#if DEBUG
/*
-@@ -3479,6 +3481,7 @@ retry:
+@@ -3314,6 +3316,7 @@ retry:
obj = slab_get_obj(cachep, slabp, nodeid);
check_slabp(cachep, slabp);
+ vx_slab_alloc(cachep, flags);
- l3->free_objects--;
+ n->free_objects--;
/* move slabp to correct slabp list: */
list_del(&slabp->list);
-@@ -3556,6 +3559,7 @@ slab_alloc_node(struct kmem_cache *cache
+@@ -3393,6 +3396,7 @@ slab_alloc_node(struct kmem_cache *cache
/* ___cache_alloc_node can fall back to other nodes */
ptr = ____cache_alloc_node(cachep, flags, nodeid);
out:
local_irq_restore(save_flags);
ptr = cache_alloc_debugcheck_after(cachep, flags, ptr, caller);
kmemleak_alloc_recursive(ptr, cachep->object_size, 1, cachep->flags,
-@@ -3746,6 +3750,7 @@ static inline void __cache_free(struct k
+@@ -3585,6 +3589,7 @@ static inline void __cache_free(struct k
check_irq_off();
kmemleak_free_recursive(objp, cachep->flags);
objp = cache_free_debugcheck(cachep, objp, caller);
kmemcheck_slab_free(cachep, objp, cachep->object_size);
-diff -NurpP --minimal linux-3.7/mm/slab_vs.h linux-3.7-vs2.3.5.1/mm/slab_vs.h
---- linux-3.7/mm/slab_vs.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/mm/slab_vs.h 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/mm/slab_vs.h linux-3.10.15-vs2.3.6.6/mm/slab_vs.h
+--- linux-3.10.15/mm/slab_vs.h 1970-01-01 00:00:00.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/mm/slab_vs.h 2013-08-22 20:30:00.000000000 +0000
@@ -0,0 +1,29 @@
+
+#include <linux/vserver/context.h>
+ atomic_sub(cachep->size, &vxi->cacct.slab[what]);
+}
+
-diff -NurpP --minimal linux-3.7/mm/swapfile.c linux-3.7-vs2.3.5.1/mm/swapfile.c
---- linux-3.7/mm/swapfile.c 2012-12-11 15:47:52.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/mm/swapfile.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/mm/swapfile.c linux-3.10.15-vs2.3.6.6/mm/swapfile.c
+--- linux-3.10.15/mm/swapfile.c 2013-07-14 17:01:36.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/mm/swapfile.c 2013-08-22 20:30:00.000000000 +0000
@@ -39,6 +39,7 @@
#include <asm/tlbflush.h>
#include <linux/swapops.h>
static bool swap_count_continued(struct swap_info_struct *, pgoff_t,
unsigned char);
-@@ -1685,6 +1686,16 @@ static int swap_show(struct seq_file *sw
+@@ -1768,6 +1769,16 @@ static int swap_show(struct seq_file *sw
if (si == SEQ_START_TOKEN) {
seq_puts(swap,"Filename\t\t\t\tType\t\tSize\tUsed\tPriority\n");
return 0;
}
-@@ -2112,6 +2123,8 @@ void si_swapinfo(struct sysinfo *val)
- val->freeswap = nr_swap_pages + nr_to_be_unused;
+@@ -2196,6 +2207,8 @@ void si_swapinfo(struct sysinfo *val)
+ val->freeswap = atomic_long_read(&nr_swap_pages) + nr_to_be_unused;
val->totalswap = total_swap_pages + nr_to_be_unused;
spin_unlock(&swap_lock);
+ if (vx_flags(VXF_VIRT_MEM, 0))
}
/*
-diff -NurpP --minimal linux-3.7/net/bridge/br_multicast.c linux-3.7-vs2.3.5.1/net/bridge/br_multicast.c
---- linux-3.7/net/bridge/br_multicast.c 2012-10-04 13:27:49.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/bridge/br_multicast.c 2012-12-11 15:56:33.000000000 +0000
-@@ -447,7 +447,7 @@ static struct sk_buff *br_ip6_multicast_
+diff -NurpP --minimal linux-3.10.15/net/bridge/br_multicast.c linux-3.10.15-vs2.3.6.6/net/bridge/br_multicast.c
+--- linux-3.10.15/net/bridge/br_multicast.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/bridge/br_multicast.c 2013-10-09 17:37:22.000000000 +0000
+@@ -443,7 +443,7 @@ static struct sk_buff *br_ip6_multicast_
ip6h->hop_limit = 1;
ipv6_addr_set(&ip6h->daddr, htonl(0xff020000), 0, 0, htonl(1));
if (ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0,
kfree_skb(skb);
return NULL;
}
-diff -NurpP --minimal linux-3.7/net/core/dev.c linux-3.7-vs2.3.5.1/net/core/dev.c
---- linux-3.7/net/core/dev.c 2012-12-11 15:47:53.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/core/dev.c 2012-12-11 15:56:33.000000000 +0000
-@@ -126,6 +126,7 @@
+diff -NurpP --minimal linux-3.10.15/net/core/dev.c linux-3.10.15-vs2.3.6.6/net/core/dev.c
+--- linux-3.10.15/net/core/dev.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/core/dev.c 2013-08-22 20:30:00.000000000 +0000
+@@ -122,6 +122,7 @@
#include <linux/in.h>
#include <linux/jhash.h>
#include <linux/random.h>
#include <trace/events/napi.h>
#include <trace/events/net.h>
#include <trace/events/skb.h>
-@@ -620,7 +621,8 @@ struct net_device *__dev_get_by_name(str
+@@ -660,7 +661,8 @@ struct net_device *__dev_get_by_name(str
struct hlist_head *head = dev_name_hash(net, name);
- hlist_for_each_entry(dev, p, head, name_hlist)
+ hlist_for_each_entry(dev, head, name_hlist)
- if (!strncmp(dev->name, name, IFNAMSIZ))
+ if (!strncmp(dev->name, name, IFNAMSIZ) &&
+ nx_dev_visible(current_nx_info(), dev))
return dev;
return NULL;
-@@ -646,7 +648,8 @@ struct net_device *dev_get_by_name_rcu(s
+@@ -685,7 +687,8 @@ struct net_device *dev_get_by_name_rcu(s
struct hlist_head *head = dev_name_hash(net, name);
- hlist_for_each_entry_rcu(dev, p, head, name_hlist)
+ hlist_for_each_entry_rcu(dev, head, name_hlist)
- if (!strncmp(dev->name, name, IFNAMSIZ))
+ if (!strncmp(dev->name, name, IFNAMSIZ) &&
+ nx_dev_visible(current_nx_info(), dev))
return dev;
return NULL;
-@@ -697,7 +700,8 @@ struct net_device *__dev_get_by_index(st
+@@ -735,7 +738,8 @@ struct net_device *__dev_get_by_index(st
struct hlist_head *head = dev_index_hash(net, ifindex);
- hlist_for_each_entry(dev, p, head, index_hlist)
+ hlist_for_each_entry(dev, head, index_hlist)
- if (dev->ifindex == ifindex)
+ if ((dev->ifindex == ifindex) &&
+ nx_dev_visible(current_nx_info(), dev))
return dev;
return NULL;
-@@ -715,7 +719,7 @@ EXPORT_SYMBOL(__dev_get_by_index);
+@@ -753,7 +757,7 @@ EXPORT_SYMBOL(__dev_get_by_index);
* about locking. The caller must hold RCU lock.
*/
-struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex)
+struct net_device *dev_get_by_index_real_rcu(struct net *net, int ifindex)
{
- struct hlist_node *p;
struct net_device *dev;
-@@ -727,6 +731,16 @@ struct net_device *dev_get_by_index_rcu(
+ struct hlist_head *head = dev_index_hash(net, ifindex);
+@@ -764,6 +768,16 @@ struct net_device *dev_get_by_index_rcu(
return NULL;
}
EXPORT_SYMBOL(dev_get_by_index_rcu);
-@@ -775,7 +789,8 @@ struct net_device *dev_getbyhwaddr_rcu(s
+@@ -846,7 +860,8 @@ struct net_device *dev_getbyhwaddr_rcu(s
for_each_netdev_rcu(net, dev)
if (dev->type == type &&
return dev;
return NULL;
-@@ -787,9 +802,11 @@ struct net_device *__dev_getfirstbyhwtyp
+@@ -858,9 +873,11 @@ struct net_device *__dev_getfirstbyhwtyp
struct net_device *dev;
ASSERT_RTNL();
return NULL;
}
-@@ -907,6 +924,8 @@ static int __dev_alloc_name(struct net *
+@@ -872,7 +889,8 @@ struct net_device *dev_getfirstbyhwtype(
+
+ rcu_read_lock();
+ for_each_netdev_rcu(net, dev)
+- if (dev->type == type) {
++ if ((dev->type == type) &&
++ nx_dev_visible(current_nx_info(), dev)) {
+ dev_hold(dev);
+ ret = dev;
+ break;
+@@ -900,7 +918,8 @@ struct net_device *dev_get_by_flags_rcu(
+
+ ret = NULL;
+ for_each_netdev_rcu(net, dev) {
+- if (((dev->flags ^ if_flags) & mask) == 0) {
++ if ((((dev->flags ^ if_flags) & mask) == 0) &&
++ nx_dev_visible(current_nx_info(), dev)) {
+ ret = dev;
+ break;
+ }
+@@ -978,6 +997,8 @@ static int __dev_alloc_name(struct net *
continue;
if (i < 0 || i >= max_netdevices)
continue;
/* avoid cases where sscanf is not exact inverse of printf */
snprintf(buf, IFNAMSIZ, name, i);
-@@ -4129,6 +4148,8 @@ static int dev_ifconf(struct net *net, c
+diff -NurpP --minimal linux-3.10.15/net/core/net-procfs.c linux-3.10.15-vs2.3.6.6/net/core/net-procfs.c
+--- linux-3.10.15/net/core/net-procfs.c 2013-07-14 17:01:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/core/net-procfs.c 2013-08-22 20:30:00.000000000 +0000
+@@ -1,6 +1,7 @@
+ #include <linux/netdevice.h>
+ #include <linux/proc_fs.h>
+ #include <linux/seq_file.h>
++#include <linux/vs_inet.h>
+ #include <net/wext.h>
- total = 0;
- for_each_netdev(net, dev) {
-+ if (!nx_dev_visible(current_nx_info(), dev))
-+ continue;
- for (i = 0; i < NPROTO; i++) {
- if (gifconf_list[i]) {
- int done;
-@@ -4231,6 +4252,10 @@ static void dev_seq_printf_stats(struct
+ #define BUCKET_SPACE (32 - NETDEV_HASHBITS - 1)
+@@ -77,8 +78,13 @@ static void dev_seq_stop(struct seq_file
+ static void dev_seq_printf_stats(struct seq_file *seq, struct net_device *dev)
+ {
struct rtnl_link_stats64 temp;
- const struct rtnl_link_stats64 *stats = dev_get_stats(dev, &temp);
-
+- const struct rtnl_link_stats64 *stats = dev_get_stats(dev, &temp);
++ const struct rtnl_link_stats64 *stats;
++
+ /* device visible inside network context? */
+ if (!nx_dev_visible(current_nx_info(), dev))
+ return;
-+
+
++ stats = dev_get_stats(dev, &temp);
seq_printf(seq, "%6s: %7llu %7llu %4llu %4llu %4llu %5llu %10llu %9llu "
"%8llu %7llu %4llu %4llu %4llu %5llu %7llu %10llu\n",
dev->name, stats->rx_bytes, stats->rx_packets,
-diff -NurpP --minimal linux-3.7/net/core/rtnetlink.c linux-3.7-vs2.3.5.1/net/core/rtnetlink.c
---- linux-3.7/net/core/rtnetlink.c 2012-12-11 15:47:53.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/core/rtnetlink.c 2012-12-11 15:56:33.000000000 +0000
-@@ -1080,6 +1080,8 @@ static int rtnl_dump_ifinfo(struct sk_bu
- hlist_for_each_entry_rcu(dev, node, head, index_hlist) {
+diff -NurpP --minimal linux-3.10.15/net/core/rtnetlink.c linux-3.10.15-vs2.3.6.6/net/core/rtnetlink.c
+--- linux-3.10.15/net/core/rtnetlink.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/core/rtnetlink.c 2013-10-09 17:37:22.000000000 +0000
+@@ -1059,6 +1059,8 @@ static int rtnl_dump_ifinfo(struct sk_bu
+ hlist_for_each_entry_rcu(dev, head, index_hlist) {
if (idx < s_idx)
goto cont;
+ if (!nx_dev_visible(skb->sk->sk_nx_info, dev))
if (rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK,
NETLINK_CB(cb->skb).portid,
cb->nlh->nlmsg_seq, 0,
-@@ -1971,6 +1973,9 @@ void rtmsg_ifinfo(int type, struct net_d
+@@ -1951,6 +1953,9 @@ void rtmsg_ifinfo(int type, struct net_d
int err = -ENOBUFS;
size_t if_info_size;
skb = nlmsg_new((if_info_size = if_nlmsg_size(dev, 0)), GFP_KERNEL);
if (skb == NULL)
goto errout;
-diff -NurpP --minimal linux-3.7/net/core/sock.c linux-3.7-vs2.3.5.1/net/core/sock.c
---- linux-3.7/net/core/sock.c 2012-12-11 15:47:53.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/core/sock.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/core/sock.c linux-3.10.15-vs2.3.6.6/net/core/sock.c
+--- linux-3.10.15/net/core/sock.c 2013-07-14 17:01:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/core/sock.c 2013-08-22 20:30:00.000000000 +0000
@@ -132,6 +132,10 @@
#include <net/netprio_cgroup.h>
#include <trace/events/sock.h>
-@@ -1183,6 +1187,8 @@ static struct sock *sk_prot_alloc(struct
+@@ -1252,6 +1256,8 @@ static struct sock *sk_prot_alloc(struct
goto out_free_sec;
sk_tx_queue_clear(sk);
}
return sk;
-@@ -1295,6 +1301,11 @@ static void __sk_free(struct sock *sk)
+@@ -1360,6 +1366,11 @@ static void __sk_free(struct sock *sk)
put_cred(sk->sk_peer_cred);
put_pid(sk->sk_peer_pid);
put_net(sock_net(sk));
sk_prot_free(sk->sk_prot_creator, sk);
}
-@@ -1355,6 +1366,8 @@ struct sock *sk_clone_lock(const struct
+@@ -1420,6 +1431,8 @@ struct sock *sk_clone_lock(const struct
/* SANITY */
get_net(sock_net(newsk));
sk_node_init(&newsk->sk_node);
sock_lock_init(newsk);
bh_lock_sock(newsk);
-@@ -1411,6 +1424,12 @@ struct sock *sk_clone_lock(const struct
+@@ -1476,6 +1489,12 @@ struct sock *sk_clone_lock(const struct
smp_wmb();
atomic_set(&newsk->sk_refcnt, 2);
/*
* Increment the counter in the same struct proto as the master
* sock (sk_refcnt_debug_inc uses newsk->sk_prot->socks, that
-@@ -2206,6 +2225,12 @@ void sock_init_data(struct socket *sock,
+@@ -2271,6 +2290,12 @@ void sock_init_data(struct socket *sock,
sk->sk_stamp = ktime_set(-1L, 0);
/*
* Before updating sk_refcnt, we must commit prior changes to memory
* (Documentation/RCU/rculist_nulls.txt for details)
-diff -NurpP --minimal linux-3.7/net/ipv4/af_inet.c linux-3.7-vs2.3.5.1/net/ipv4/af_inet.c
---- linux-3.7/net/ipv4/af_inet.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/af_inet.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv4/af_inet.c linux-3.10.15-vs2.3.6.6/net/ipv4/af_inet.c
+--- linux-3.10.15/net/ipv4/af_inet.c 2013-07-14 17:01:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/af_inet.c 2013-08-22 20:30:00.000000000 +0000
@@ -118,6 +118,7 @@
#ifdef CONFIG_IP_MROUTE
#include <linux/mroute.h>
/* The inetsw table contains everything that inet_create needs to
-@@ -346,9 +347,13 @@ lookup_protocol:
+@@ -338,10 +339,13 @@ lookup_protocol:
}
err = -EPERM;
+ if ((protocol == IPPROTO_ICMP) &&
+ nx_capable(CAP_NET_RAW, NXC_RAW_ICMP))
+ goto override;
-+
- if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
+ if (sock->type == SOCK_RAW && !kern &&
+ !ns_capable(net->user_ns, CAP_NET_RAW))
goto out_rcu_unlock;
-
+override:
- err = -EAFNOSUPPORT;
- if (!inet_netns_ok(net, protocol))
- goto out_rcu_unlock;
-@@ -473,6 +478,7 @@ int inet_bind(struct socket *sock, struc
+ sock->ops = answer->ops;
+ answer_prot = answer->prot;
+ answer_no_check = answer->no_check;
+@@ -462,6 +466,7 @@ int inet_bind(struct socket *sock, struc
struct sockaddr_in *addr = (struct sockaddr_in *)uaddr;
struct sock *sk = sock->sk;
struct inet_sock *inet = inet_sk(sk);
+ struct nx_v4_sock_addr nsa;
+ struct net *net = sock_net(sk);
unsigned short snum;
int chk_addr_ret;
- int err;
-@@ -496,7 +502,11 @@ int inet_bind(struct socket *sock, struc
+@@ -486,7 +491,11 @@ int inet_bind(struct socket *sock, struc
goto out;
}
-- chk_addr_ret = inet_addr_type(sock_net(sk), addr->sin_addr.s_addr);
+- chk_addr_ret = inet_addr_type(net, addr->sin_addr.s_addr);
+ err = v4_map_sock_addr(inet, addr, &nsa);
+ if (err)
+ goto out;
+
-+ chk_addr_ret = inet_addr_type(sock_net(sk), nsa.saddr);
++ chk_addr_ret = inet_addr_type(net, nsa.saddr);
/* Not specified by any standard per-se, however it breaks too
* many applications when removed. It is unfortunate since
-@@ -508,7 +518,7 @@ int inet_bind(struct socket *sock, struc
+@@ -498,7 +507,7 @@ int inet_bind(struct socket *sock, struc
err = -EADDRNOTAVAIL;
if (!sysctl_ip_nonlocal_bind &&
!(inet->freebind || inet->transparent) &&
chk_addr_ret != RTN_LOCAL &&
chk_addr_ret != RTN_MULTICAST &&
chk_addr_ret != RTN_BROADCAST)
-@@ -533,7 +543,7 @@ int inet_bind(struct socket *sock, struc
+@@ -524,7 +533,7 @@ int inet_bind(struct socket *sock, struc
if (sk->sk_state != TCP_CLOSE || inet->inet_num)
goto out_release_sock;
if (chk_addr_ret == RTN_MULTICAST || chk_addr_ret == RTN_BROADCAST)
inet->inet_saddr = 0; /* Use device */
-@@ -752,11 +762,13 @@ int inet_getname(struct socket *sock, st
+@@ -743,11 +752,13 @@ int inet_getname(struct socket *sock, st
peer == 1))
return -ENOTCONN;
sin->sin_port = inet->inet_dport;
sin->sin_port = inet->inet_sport;
sin->sin_addr.s_addr = addr;
}
-diff -NurpP --minimal linux-3.7/net/ipv4/arp.c linux-3.7-vs2.3.5.1/net/ipv4/arp.c
---- linux-3.7/net/ipv4/arp.c 2012-10-04 13:27:49.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/arp.c 2012-12-11 15:56:33.000000000 +0000
-@@ -1318,6 +1318,7 @@ static void arp_format_neigh_entry(struc
+diff -NurpP --minimal linux-3.10.15/net/ipv4/arp.c linux-3.10.15-vs2.3.6.6/net/ipv4/arp.c
+--- linux-3.10.15/net/ipv4/arp.c 2013-07-14 17:01:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/arp.c 2013-08-22 20:30:00.000000000 +0000
+@@ -1332,6 +1332,7 @@ static void arp_format_neigh_entry(struc
struct net_device *dev = n->dev;
int hatype = dev->type;
read_lock(&n->lock);
/* Convert hardware address to XX:XX:XX:XX ... form. */
#if IS_ENABLED(CONFIG_AX25)
-@@ -1349,6 +1350,7 @@ static void arp_format_pneigh_entry(stru
+@@ -1363,6 +1364,7 @@ static void arp_format_pneigh_entry(stru
int hatype = dev ? dev->type : 0;
char tbuf[16];
sprintf(tbuf, "%pI4", n->key);
seq_printf(seq, "%-16s 0x%-10x0x%-10x%s * %s\n",
tbuf, hatype, ATF_PUBL | ATF_PERM, "00:00:00:00:00:00",
-diff -NurpP --minimal linux-3.7/net/ipv4/devinet.c linux-3.7-vs2.3.5.1/net/ipv4/devinet.c
---- linux-3.7/net/ipv4/devinet.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/devinet.c 2012-12-11 15:56:33.000000000 +0000
-@@ -513,6 +513,7 @@ struct in_device *inetdev_by_index(struc
+diff -NurpP --minimal linux-3.10.15/net/ipv4/devinet.c linux-3.10.15-vs2.3.6.6/net/ipv4/devinet.c
+--- linux-3.10.15/net/ipv4/devinet.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/devinet.c 2013-10-09 17:37:22.000000000 +0000
+@@ -522,6 +522,7 @@ struct in_device *inetdev_by_index(struc
}
EXPORT_SYMBOL(inetdev_by_index);
/* Called only from RTNL semaphored context. No locks. */
struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, __be32 prefix,
-@@ -754,6 +755,8 @@ int devinet_ioctl(struct net *net, unsig
+@@ -942,6 +943,8 @@ int devinet_ioctl(struct net *net, unsig
in_dev = __in_dev_get_rtnl(dev);
if (in_dev) {
if (tryaddrmatch) {
/* Matthias Andree */
/* compare label and address (4.4BSD style) */
-@@ -762,6 +765,8 @@ int devinet_ioctl(struct net *net, unsig
+@@ -950,6 +953,8 @@ int devinet_ioctl(struct net *net, unsig
This is checked above. */
for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
ifap = &ifa->ifa_next) {
if (!strcmp(ifr.ifr_name, ifa->ifa_label) &&
sin_orig.sin_addr.s_addr ==
ifa->ifa_local) {
-@@ -774,9 +779,12 @@ int devinet_ioctl(struct net *net, unsig
+@@ -962,9 +967,12 @@ int devinet_ioctl(struct net *net, unsig
comparing just the label */
if (!ifa) {
for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
}
}
-@@ -929,6 +937,8 @@ static int inet_gifconf(struct net_devic
+@@ -1118,6 +1126,8 @@ static int inet_gifconf(struct net_devic
goto out;
for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
if (!buf) {
done += sizeof(ifr);
continue;
-@@ -1288,6 +1298,7 @@ static int inet_dump_ifaddr(struct sk_bu
+@@ -1521,6 +1531,7 @@ static int inet_dump_ifaddr(struct sk_bu
struct net_device *dev;
struct in_device *in_dev;
struct in_ifaddr *ifa;
+ struct sock *sk = skb->sk;
struct hlist_head *head;
- struct hlist_node *node;
-@@ -1310,6 +1321,8 @@ static int inet_dump_ifaddr(struct sk_bu
+ s_h = cb->args[0];
+@@ -1544,6 +1555,8 @@ static int inet_dump_ifaddr(struct sk_bu
for (ifa = in_dev->ifa_list, ip_idx = 0; ifa;
ifa = ifa->ifa_next, ip_idx++) {
if (ip_idx < s_ip_idx)
continue;
if (inet_fill_ifaddr(skb, ifa,
-diff -NurpP --minimal linux-3.7/net/ipv4/fib_trie.c linux-3.7-vs2.3.5.1/net/ipv4/fib_trie.c
---- linux-3.7/net/ipv4/fib_trie.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/fib_trie.c 2012-12-11 15:56:33.000000000 +0000
-@@ -2557,6 +2557,7 @@ static int fib_route_seq_show(struct seq
+diff -NurpP --minimal linux-3.10.15/net/ipv4/fib_trie.c linux-3.10.15-vs2.3.6.6/net/ipv4/fib_trie.c
+--- linux-3.10.15/net/ipv4/fib_trie.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/fib_trie.c 2013-10-09 17:37:22.000000000 +0000
+@@ -2536,6 +2536,7 @@ static int fib_route_seq_show(struct seq
|| fa->fa_type == RTN_MULTICAST)
continue;
if (fi)
seq_printf(seq,
"%s\t%08X\t%08X\t%04X\t%d\t%u\t"
-diff -NurpP --minimal linux-3.7/net/ipv4/inet_connection_sock.c linux-3.7-vs2.3.5.1/net/ipv4/inet_connection_sock.c
---- linux-3.7/net/ipv4/inet_connection_sock.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/inet_connection_sock.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv4/inet_connection_sock.c linux-3.10.15-vs2.3.6.6/net/ipv4/inet_connection_sock.c
+--- linux-3.10.15/net/ipv4/inet_connection_sock.c 2013-07-14 17:01:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/inet_connection_sock.c 2013-08-22 20:30:00.000000000 +0000
@@ -53,6 +53,37 @@ void inet_get_local_port_range(int *low,
}
EXPORT_SYMBOL(inet_get_local_port_range);
int inet_csk_bind_conflict(const struct sock *sk,
const struct inet_bind_bucket *tb, bool relax)
{
-@@ -75,9 +106,7 @@ int inet_csk_bind_conflict(const struct
- sk->sk_bound_dev_if == sk2->sk_bound_dev_if)) {
- if (!reuse || !sk2->sk_reuse ||
- sk2->sk_state == TCP_LISTEN) {
+@@ -79,17 +110,12 @@ int inet_csk_bind_conflict(const struct
+ (!reuseport || !sk2->sk_reuseport ||
+ (sk2->sk_state != TCP_TIME_WAIT &&
+ !uid_eq(uid, sock_i_uid(sk2))))) {
- const __be32 sk2_rcv_saddr = sk_rcv_saddr(sk2);
- if (!sk2_rcv_saddr || !sk_rcv_saddr(sk) ||
- sk2_rcv_saddr == sk_rcv_saddr(sk))
break;
}
if (!relax && reuse && sk2->sk_reuse &&
-diff -NurpP --minimal linux-3.7/net/ipv4/inet_diag.c linux-3.7-vs2.3.5.1/net/ipv4/inet_diag.c
---- linux-3.7/net/ipv4/inet_diag.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/inet_diag.c 2012-12-11 17:05:58.000000000 +0000
+ sk2->sk_state != TCP_LISTEN) {
+- const __be32 sk2_rcv_saddr = sk_rcv_saddr(sk2);
+-
+- if (!sk2_rcv_saddr || !sk_rcv_saddr(sk) ||
+- sk2_rcv_saddr == sk_rcv_saddr(sk))
++ if (ipv4_rcv_saddr_equal(sk, sk2))
+ break;
+ }
+ }
+diff -NurpP --minimal linux-3.10.15/net/ipv4/inet_diag.c linux-3.10.15-vs2.3.6.6/net/ipv4/inet_diag.c
+--- linux-3.10.15/net/ipv4/inet_diag.c 2013-07-14 17:01:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/inet_diag.c 2013-08-22 20:30:00.000000000 +0000
@@ -31,6 +31,8 @@
#include <linux/inet.h>
+ r->id.idiag_dst[0] = nx_map_sock_lback(sk->sk_nx_info,
+ inet->inet_daddr);
- /* IPv6 dual-stack sockets use inet->tos for IPv4 connections,
- * hence this needs to be included regardless of socket family.
-@@ -239,8 +243,8 @@ static int inet_twsk_diag_fill(struct in
+ if (nla_put_u8(skb, INET_DIAG_SHUTDOWN, sk->sk_shutdown))
+ goto errout;
+@@ -244,8 +248,8 @@ static int inet_twsk_diag_fill(struct in
sock_diag_save_cookie(tw, r->id.idiag_cookie);
r->id.idiag_sport = tw->tw_sport;
r->id.idiag_dport = tw->tw_dport;
r->idiag_state = tw->tw_substate;
r->idiag_timer = 3;
r->idiag_expires = DIV_ROUND_UP(tmo * 1000, HZ);
-@@ -284,12 +288,14 @@ int inet_diag_dump_one_icsk(struct inet_
+@@ -289,12 +293,14 @@ int inet_diag_dump_one_icsk(struct inet_
err = -EINVAL;
if (req->sdiag_family == AF_INET) {
sk = inet6_lookup(net, hashinfo,
(struct in6_addr *)req->id.idiag_dst,
req->id.idiag_dport,
-@@ -491,6 +497,7 @@ int inet_diag_bc_sk(const struct nlattr
+@@ -496,6 +502,7 @@ int inet_diag_bc_sk(const struct nlattr
} else
#endif
{
entry.saddr = &inet->inet_rcv_saddr;
entry.daddr = &inet->inet_daddr;
}
-@@ -649,6 +656,7 @@ static int inet_twsk_diag_dump(struct in
+@@ -654,6 +661,7 @@ static int inet_twsk_diag_dump(struct in
} else
#endif
{
entry.saddr = &tw->tw_rcv_saddr;
entry.daddr = &tw->tw_daddr;
}
-@@ -727,8 +735,8 @@ static int inet_diag_fill_req(struct sk_
+@@ -732,8 +740,8 @@ static int inet_diag_fill_req(struct sk_
r->id.idiag_sport = inet->inet_sport;
r->id.idiag_dport = ireq->rmt_port;
r->idiag_expires = jiffies_to_msecs(tmo);
r->idiag_rqueue = 0;
r->idiag_wqueue = 0;
-@@ -791,6 +799,7 @@ static int inet_diag_dump_reqs(struct sk
+@@ -796,6 +804,7 @@ static int inet_diag_dump_reqs(struct sk
r->id.idiag_dport)
continue;
if (bc) {
inet_diag_req_addrs(sk, req, &entry);
entry.dport = ntohs(ireq->rmt_port);
-@@ -847,6 +856,8 @@ void inet_diag_dump_icsk(struct inet_has
+@@ -852,6 +861,8 @@ void inet_diag_dump_icsk(struct inet_has
if (!net_eq(sock_net(sk), net))
continue;
if (num < s_num) {
num++;
continue;
-@@ -919,6 +930,8 @@ skip_listen_ht:
+@@ -924,6 +935,8 @@ skip_listen_ht:
if (!net_eq(sock_net(sk), net))
continue;
if (num < s_num)
goto next_normal;
if (!(r->idiag_states & (1 << sk->sk_state)))
-@@ -947,7 +960,8 @@ next_normal:
+@@ -952,7 +965,8 @@ next_normal:
&head->twchain) {
if (!net_eq(twsk_net(tw), net))
continue;
if (num < s_num)
goto next_dying;
if (r->sdiag_family != AF_UNSPEC &&
-diff -NurpP --minimal linux-3.7/net/ipv4/inet_hashtables.c linux-3.7-vs2.3.5.1/net/ipv4/inet_hashtables.c
---- linux-3.7/net/ipv4/inet_hashtables.c 2012-07-22 21:39:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/inet_hashtables.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv4/inet_hashtables.c linux-3.10.15-vs2.3.6.6/net/ipv4/inet_hashtables.c
+--- linux-3.10.15/net/ipv4/inet_hashtables.c 2013-05-31 13:45:32.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/inet_hashtables.c 2013-08-22 20:30:00.000000000 +0000
@@ -22,6 +22,7 @@
#include <net/inet_connection_sock.h>
#include <net/inet_hashtables.h>
@@ -156,6 +157,11 @@ static inline int compute_score(struct s
if (rcv_saddr != daddr)
return -1;
- score += 2;
+ score += 4;
+ } else {
+ /* block non nx_info ips */
+ if (!v4_addr_in_nx_info(sk->sk_nx_info,
-
struct sock *__inet_lookup_listener(struct net *net,
struct inet_hashinfo *hashinfo,
- const __be32 daddr, const unsigned short hnum,
-@@ -196,6 +201,7 @@ begin:
- hiscore = score;
+ const __be32 saddr, __be16 sport,
+@@ -209,6 +214,7 @@ begin:
+ phash = next_pseudo_random32(phash);
}
}
+
/*
* if the nulls value we got at the end of this lookup is
* not the expected one, we must restart lookup.
-diff -NurpP --minimal linux-3.7/net/ipv4/netfilter.c linux-3.7-vs2.3.5.1/net/ipv4/netfilter.c
---- linux-3.7/net/ipv4/netfilter.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/netfilter.c 2012-12-11 15:56:33.000000000 +0000
-@@ -6,7 +6,7 @@
+diff -NurpP --minimal linux-3.10.15/net/ipv4/netfilter.c linux-3.10.15-vs2.3.6.6/net/ipv4/netfilter.c
+--- linux-3.10.15/net/ipv4/netfilter.c 2013-07-14 17:01:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/netfilter.c 2013-08-22 20:30:00.000000000 +0000
+@@ -11,7 +11,7 @@
#include <linux/skbuff.h>
#include <linux/gfp.h>
#include <linux/export.h>
#include <net/xfrm.h>
#include <net/ip.h>
#include <net/netfilter/nf_queue.h>
-diff -NurpP --minimal linux-3.7/net/ipv4/raw.c linux-3.7-vs2.3.5.1/net/ipv4/raw.c
---- linux-3.7/net/ipv4/raw.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/raw.c 2012-12-11 15:56:33.000000000 +0000
-@@ -118,7 +118,7 @@ static struct sock *__raw_v4_lookup(stru
+diff -NurpP --minimal linux-3.10.15/net/ipv4/raw.c linux-3.10.15-vs2.3.6.6/net/ipv4/raw.c
+--- linux-3.10.15/net/ipv4/raw.c 2013-10-09 17:35:23.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/raw.c 2013-10-09 17:37:22.000000000 +0000
+@@ -116,7 +116,7 @@ static struct sock *__raw_v4_lookup(stru
if (net_eq(sock_net(sk), net) && inet->inet_num == num &&
!(inet->inet_daddr && inet->inet_daddr != raddr) &&
!(sk->sk_bound_dev_if && sk->sk_bound_dev_if != dif))
goto found; /* gotcha */
}
-@@ -397,6 +397,12 @@ static int raw_send_hdrinc(struct sock *
+@@ -395,6 +395,12 @@ static int raw_send_hdrinc(struct sock *
icmp_out_count(net, ((struct icmphdr *)
skb_transport_header(skb))->type);
err = NF_HOOK(NFPROTO_IPV4, NF_INET_LOCAL_OUT, skb, NULL,
rt->dst.dev, dst_output);
if (err > 0)
-@@ -582,6 +588,16 @@ static int raw_sendmsg(struct kiocb *ioc
+@@ -581,6 +587,16 @@ static int raw_sendmsg(struct kiocb *ioc
goto done;
}
security_sk_classify_flow(sk, flowi4_to_flowi(&fl4));
rt = ip_route_output_flow(sock_net(sk), &fl4, sk);
if (IS_ERR(rt)) {
-@@ -658,17 +674,19 @@ static int raw_bind(struct sock *sk, str
+@@ -657,17 +673,19 @@ static int raw_bind(struct sock *sk, str
{
struct inet_sock *inet = inet_sk(sk);
struct sockaddr_in *addr = (struct sockaddr_in *) uaddr;
if (chk_addr_ret == RTN_MULTICAST || chk_addr_ret == RTN_BROADCAST)
inet->inet_saddr = 0; /* Use device */
sk_dst_reset(sk);
-@@ -720,7 +738,8 @@ static int raw_recvmsg(struct kiocb *ioc
+@@ -719,7 +737,8 @@ static int raw_recvmsg(struct kiocb *ioc
/* Copy the address. */
if (sin) {
sin->sin_family = AF_INET;
sin->sin_port = 0;
memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
}
-@@ -916,7 +935,8 @@ static struct sock *raw_get_first(struct
- struct hlist_node *node;
-
- sk_for_each(sk, node, &state->h->ht[state->bucket])
+@@ -914,7 +933,8 @@ static struct sock *raw_get_first(struct
+ for (state->bucket = 0; state->bucket < RAW_HTABLE_SIZE;
+ ++state->bucket) {
+ sk_for_each(sk, &state->h->ht[state->bucket])
- if (sock_net(sk) == seq_file_net(seq))
+ if ((sock_net(sk) == seq_file_net(seq)) &&
-+ nx_check(sk->sk_nid, VS_WATCH_P | VS_IDENT))
++ nx_check(sk->sk_nid, VS_WATCH_P | VS_IDENT))
goto found;
}
sk = NULL;
-@@ -932,7 +952,8 @@ static struct sock *raw_get_next(struct
+@@ -930,7 +950,8 @@ static struct sock *raw_get_next(struct
sk = sk_next(sk);
try_again:
;
if (!sk && ++state->bucket < RAW_HTABLE_SIZE) {
sk = sk_head(&state->h->ht[state->bucket]);
-diff -NurpP --minimal linux-3.7/net/ipv4/route.c linux-3.7-vs2.3.5.1/net/ipv4/route.c
---- linux-3.7/net/ipv4/route.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/route.c 2012-12-11 15:56:33.000000000 +0000
-@@ -1952,7 +1952,7 @@ struct rtable *__ip_route_output_key(str
+diff -NurpP --minimal linux-3.10.15/net/ipv4/route.c linux-3.10.15-vs2.3.6.6/net/ipv4/route.c
+--- linux-3.10.15/net/ipv4/route.c 2013-07-14 17:01:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/route.c 2013-08-22 20:30:00.000000000 +0000
+@@ -2003,7 +2003,7 @@ struct rtable *__ip_route_output_key(str
if (fl4->flowi4_oif) {
rth = ERR_PTR(-ENODEV);
if (dev_out == NULL)
goto out;
-diff -NurpP --minimal linux-3.7/net/ipv4/tcp.c linux-3.7-vs2.3.5.1/net/ipv4/tcp.c
---- linux-3.7/net/ipv4/tcp.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/tcp.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv4/tcp.c linux-3.10.15-vs2.3.6.6/net/ipv4/tcp.c
+--- linux-3.10.15/net/ipv4/tcp.c 2013-10-09 17:35:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/tcp.c 2013-10-09 17:37:22.000000000 +0000
@@ -268,6 +268,7 @@
#include <linux/crypto.h>
#include <linux/time.h>
#include <net/icmp.h>
#include <net/inet_common.h>
-diff -NurpP --minimal linux-3.7/net/ipv4/tcp_ipv4.c linux-3.7-vs2.3.5.1/net/ipv4/tcp_ipv4.c
---- linux-3.7/net/ipv4/tcp_ipv4.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/tcp_ipv4.c 2012-12-11 17:07:07.000000000 +0000
-@@ -2264,6 +2264,12 @@ static void *listening_get_next(struct s
+diff -NurpP --minimal linux-3.10.15/net/ipv4/tcp_ipv4.c linux-3.10.15-vs2.3.6.6/net/ipv4/tcp_ipv4.c
+--- linux-3.10.15/net/ipv4/tcp_ipv4.c 2013-07-14 17:01:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/tcp_ipv4.c 2013-08-22 20:30:00.000000000 +0000
+@@ -2263,6 +2263,12 @@ static void *listening_get_next(struct s
req = req->dl_next;
while (1) {
while (req) {
if (req->rsk_ops->family == st->family) {
cur = req;
goto out;
-@@ -2288,6 +2294,10 @@ get_req:
+@@ -2287,6 +2293,10 @@ get_req:
}
get_sk:
sk_nulls_for_each_from(sk, node) {
if (!net_eq(sock_net(sk), net))
continue;
if (sk->sk_family == st->family) {
-@@ -2364,6 +2374,11 @@ static void *established_get_first(struc
+@@ -2363,6 +2373,11 @@ static void *established_get_first(struc
spin_lock_bh(lock);
sk_nulls_for_each(sk, node, &tcp_hashinfo.ehash[st->bucket].chain) {
if (sk->sk_family != st->family ||
!net_eq(sock_net(sk), net)) {
continue;
-@@ -2374,6 +2389,11 @@ static void *established_get_first(struc
+@@ -2373,6 +2388,11 @@ static void *established_get_first(struc
st->state = TCP_SEQ_STATE_TIME_WAIT;
inet_twsk_for_each(tw, node,
&tcp_hashinfo.ehash[st->bucket].twchain) {
if (tw->tw_family != st->family ||
!net_eq(twsk_net(tw), net)) {
continue;
-@@ -2403,7 +2423,9 @@ static void *established_get_next(struct
+@@ -2402,7 +2422,9 @@ static void *established_get_next(struct
tw = cur;
tw = tw_next(tw);
get_tw:
tw = tw_next(tw);
}
if (tw) {
-@@ -2427,6 +2449,11 @@ get_tw:
+@@ -2426,6 +2448,11 @@ get_tw:
sk = sk_nulls_next(sk);
sk_nulls_for_each_from(sk, node) {
if (sk->sk_family == st->family && net_eq(sock_net(sk), net))
goto found;
}
-@@ -2632,9 +2659,9 @@ static void get_openreq4(const struct so
+@@ -2631,9 +2658,9 @@ static void get_openreq4(const struct so
seq_printf(f, "%4d: %08X:%04X %08X:%04X"
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %u %d %pK%n",
i,
ntohs(ireq->rmt_port),
TCP_SYN_RECV,
0, 0, /* could print option size, but that is af dependent. */
-@@ -2657,8 +2684,8 @@ static void get_tcp4_sock(struct sock *s
+@@ -2656,8 +2683,8 @@ static void get_tcp4_sock(struct sock *s
const struct inet_connection_sock *icsk = inet_csk(sk);
const struct inet_sock *inet = inet_sk(sk);
struct fastopen_queue *fastopenq = icsk->icsk_accept_queue.fastopenq;
__u16 destp = ntohs(inet->inet_dport);
__u16 srcp = ntohs(inet->inet_sport);
int rx_queue;
-@@ -2714,8 +2741,8 @@ static void get_timewait4_sock(const str
+@@ -2715,8 +2742,8 @@ static void get_timewait4_sock(const str
__u16 destp, srcp;
long delta = tw->tw_ttd - jiffies;
destp = ntohs(tw->tw_dport);
srcp = ntohs(tw->tw_sport);
-diff -NurpP --minimal linux-3.7/net/ipv4/tcp_minisocks.c linux-3.7-vs2.3.5.1/net/ipv4/tcp_minisocks.c
---- linux-3.7/net/ipv4/tcp_minisocks.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/tcp_minisocks.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv4/tcp_minisocks.c linux-3.10.15-vs2.3.6.6/net/ipv4/tcp_minisocks.c
+--- linux-3.10.15/net/ipv4/tcp_minisocks.c 2013-07-14 17:01:37.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/tcp_minisocks.c 2013-08-22 20:30:00.000000000 +0000
@@ -23,6 +23,9 @@
#include <linux/slab.h>
#include <linux/sysctl.h>
#include <net/tcp.h>
#include <net/inet_common.h>
#include <net/xfrm.h>
-@@ -289,6 +292,11 @@ void tcp_time_wait(struct sock *sk, int
- tcptw->tw_ts_recent = tp->rx_opt.ts_recent;
+@@ -290,6 +293,11 @@ void tcp_time_wait(struct sock *sk, int
tcptw->tw_ts_recent_stamp = tp->rx_opt.ts_recent_stamp;
+ tcptw->tw_ts_offset = tp->tsoffset;
+ tw->tw_xid = sk->sk_xid;
+ tw->tw_vx_info = NULL;
#if IS_ENABLED(CONFIG_IPV6)
if (tw->tw_family == PF_INET6) {
struct ipv6_pinfo *np = inet6_sk(sk);
-diff -NurpP --minimal linux-3.7/net/ipv4/udp.c linux-3.7-vs2.3.5.1/net/ipv4/udp.c
---- linux-3.7/net/ipv4/udp.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv4/udp.c 2012-12-11 15:56:33.000000000 +0000
-@@ -300,14 +300,7 @@ fail:
+diff -NurpP --minimal linux-3.10.15/net/ipv4/udp.c linux-3.10.15-vs2.3.6.6/net/ipv4/udp.c
+--- linux-3.10.15/net/ipv4/udp.c 2013-10-09 17:35:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv4/udp.c 2013-08-22 20:30:00.000000000 +0000
+@@ -306,14 +306,7 @@ fail:
}
EXPORT_SYMBOL(udp_lib_get_port);
static unsigned int udp4_portaddr_hash(struct net *net, __be32 saddr,
unsigned int port)
-@@ -342,6 +335,11 @@ static inline int compute_score(struct s
+@@ -348,6 +341,11 @@ static inline int compute_score(struct s
if (inet->inet_rcv_saddr != daddr)
return -1;
- score += 2;
+ score += 4;
+ } else {
+ /* block non nx_info ips */
+ if (!v4_addr_in_nx_info(sk->sk_nx_info,
}
if (inet->inet_daddr) {
if (inet->inet_daddr != saddr)
-@@ -445,6 +443,7 @@ exact_match:
+@@ -458,6 +456,7 @@ begin:
return result;
}
/* UDP is nearly always wildcards out the wazoo, it makes no sense to try
* harder than this. -DaveM
*/
-@@ -490,6 +489,11 @@ begin:
+@@ -504,6 +503,11 @@ begin:
sk_nulls_for_each_rcu(sk, node, &hslot->head) {
score = compute_score(sk, net, saddr, hnum, sport,
daddr, dport, dif);
if (score > badness) {
result = sk;
badness = score;
-@@ -503,6 +507,7 @@ begin:
+@@ -528,6 +532,7 @@ begin:
if (get_nulls_value(node) != slot)
goto begin;
if (result) {
if (unlikely(!atomic_inc_not_zero_hint(&result->sk_refcnt, 2)))
result = NULL;
-@@ -512,6 +517,7 @@ begin:
+@@ -537,6 +542,7 @@ begin:
goto begin;
}
}
rcu_read_unlock();
return result;
}
-@@ -555,8 +561,7 @@ static inline struct sock *udp_v4_mcast_
+@@ -580,8 +586,7 @@ static inline struct sock *udp_v4_mcast_
udp_sk(s)->udp_port_hash != hnum ||
(inet->inet_daddr && inet->inet_daddr != rmt_addr) ||
(inet->inet_dport != rmt_port && inet->inet_dport) ||
ipv6_only_sock(s) ||
(s->sk_bound_dev_if && s->sk_bound_dev_if != dif))
continue;
-@@ -939,6 +944,16 @@ int udp_sendmsg(struct kiocb *iocb, stru
+@@ -965,6 +970,16 @@ int udp_sendmsg(struct kiocb *iocb, stru
inet_sk_flowi_flags(sk)|FLOWI_FLAG_CAN_SLEEP,
faddr, saddr, dport, inet->inet_sport);
security_sk_classify_flow(sk, flowi4_to_flowi(fl4));
rt = ip_route_output_flow(net, fl4, sk);
if (IS_ERR(rt)) {
-@@ -1244,7 +1259,8 @@ try_again:
+@@ -1272,7 +1287,8 @@ try_again:
if (sin) {
sin->sin_family = AF_INET;
sin->sin_port = udp_hdr(skb)->source;
memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
}
if (inet->cmsg_flags)
-@@ -1992,6 +2008,8 @@ static struct sock *udp_get_first(struct
+@@ -2033,6 +2049,8 @@ static struct sock *udp_get_first(struct
sk_nulls_for_each(sk, node, &hslot->head) {
if (!net_eq(sock_net(sk), net))
continue;
if (sk->sk_family == state->family)
goto found;
}
-@@ -2009,7 +2027,9 @@ static struct sock *udp_get_next(struct
+@@ -2050,7 +2068,9 @@ static struct sock *udp_get_next(struct
do {
sk = sk_nulls_next(sk);
if (!sk) {
if (state->bucket <= state->udp_table->mask)
-@@ -2105,8 +2125,8 @@ static void udp4_format_sock(struct sock
+@@ -2146,8 +2166,8 @@ static void udp4_format_sock(struct sock
int bucket, int *len)
{
struct inet_sock *inet = inet_sk(sp);
__u16 destp = ntohs(inet->inet_dport);
__u16 srcp = ntohs(inet->inet_sport);
-diff -NurpP --minimal linux-3.7/net/ipv6/Kconfig linux-3.7-vs2.3.5.1/net/ipv6/Kconfig
---- linux-3.7/net/ipv6/Kconfig 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/Kconfig 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv6/Kconfig linux-3.10.15-vs2.3.6.6/net/ipv6/Kconfig
+--- linux-3.10.15/net/ipv6/Kconfig 2013-07-14 17:01:38.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/Kconfig 2013-08-22 20:30:00.000000000 +0000
@@ -4,8 +4,8 @@
# IPv6 as module will cause a CRASH if you try to unload it
---help---
This is complemental support for the IP version 6.
You will still be able to do traditional IPv4 networking as well.
-diff -NurpP --minimal linux-3.7/net/ipv6/addrconf.c linux-3.7-vs2.3.5.1/net/ipv6/addrconf.c
---- linux-3.7/net/ipv6/addrconf.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/addrconf.c 2012-12-11 15:56:33.000000000 +0000
-@@ -92,6 +92,8 @@
+diff -NurpP --minimal linux-3.10.15/net/ipv6/addrconf.c linux-3.10.15-vs2.3.6.6/net/ipv6/addrconf.c
+--- linux-3.10.15/net/ipv6/addrconf.c 2013-10-09 17:35:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/addrconf.c 2013-10-09 17:37:22.000000000 +0000
+@@ -94,6 +94,8 @@
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/export.h>
/* Set to 3 to get tracing... */
#define ACONF_DEBUG 2
-@@ -1094,7 +1096,7 @@ out:
+@@ -1321,7 +1323,7 @@ out:
int ipv6_dev_get_saddr(struct net *net, const struct net_device *dst_dev,
const struct in6_addr *daddr, unsigned int prefs,
{
struct ipv6_saddr_score scores[2],
*score = &scores[0], *hiscore = &scores[1];
-@@ -1166,6 +1168,8 @@ int ipv6_dev_get_saddr(struct net *net,
+@@ -1393,6 +1395,8 @@ int ipv6_dev_get_saddr(struct net *net,
dev->name);
continue;
}
score->rule = -1;
bitmap_zero(score->scorebits, IPV6_SADDR_RULE_MAX);
-@@ -3135,7 +3139,10 @@ static void if6_seq_stop(struct seq_file
+@@ -3421,7 +3425,10 @@ static void if6_seq_stop(struct seq_file
static int if6_seq_show(struct seq_file *seq, void *v)
{
struct inet6_ifaddr *ifp = (struct inet6_ifaddr *)v;
&ifp->addr,
ifp->idev->dev->ifindex,
ifp->prefix_len,
-@@ -3641,6 +3648,11 @@ static int in6_dump_addrs(struct inet6_d
+@@ -3925,6 +3932,11 @@ static int in6_dump_addrs(struct inet6_d
struct ifacaddr6 *ifaca;
int err = 1;
int ip_idx = *p_ip_idx;
read_lock_bh(&idev->lock);
switch (type) {
-@@ -3651,6 +3663,8 @@ static int in6_dump_addrs(struct inet6_d
+@@ -3935,6 +3947,8 @@ static int in6_dump_addrs(struct inet6_d
list_for_each_entry(ifa, &idev->addr_list, if_list) {
if (++ip_idx < s_ip_idx)
continue;
err = inet6_fill_ifaddr(skb, ifa,
NETLINK_CB(cb->skb).portid,
cb->nlh->nlmsg_seq,
-@@ -3667,6 +3681,8 @@ static int in6_dump_addrs(struct inet6_d
+@@ -3952,6 +3966,8 @@ static int in6_dump_addrs(struct inet6_d
ifmca = ifmca->next, ip_idx++) {
if (ip_idx < s_ip_idx)
continue;
err = inet6_fill_ifmcaddr(skb, ifmca,
NETLINK_CB(cb->skb).portid,
cb->nlh->nlmsg_seq,
-@@ -3682,6 +3698,8 @@ static int in6_dump_addrs(struct inet6_d
+@@ -3967,6 +3983,8 @@ static int in6_dump_addrs(struct inet6_d
ifaca = ifaca->aca_next, ip_idx++) {
if (ip_idx < s_ip_idx)
continue;
err = inet6_fill_ifacaddr(skb, ifaca,
NETLINK_CB(cb->skb).portid,
cb->nlh->nlmsg_seq,
-@@ -4065,6 +4083,11 @@ static int inet6_dump_ifinfo(struct sk_b
+@@ -3995,6 +4013,10 @@ static int inet6_dump_addr(struct sk_buf
struct inet6_dev *idev;
struct hlist_head *head;
- struct hlist_node *node;
-+ struct nx_info *nxi = skb->sk ? skb->sk->sk_nx_info : NULL;
-+
+
+ /* FIXME: maybe disable ipv6 on non v6 guests?
+ if (skb->sk && skb->sk->sk_vx_info)
+ return skb->len; */
++
+ s_h = cb->args[0];
+ s_idx = idx = cb->args[1];
+ s_ip_idx = ip_idx = cb->args[2];
+@@ -4430,6 +4452,7 @@ static int inet6_dump_ifinfo(struct sk_b
+ struct net_device *dev;
+ struct inet6_dev *idev;
+ struct hlist_head *head;
++ struct nx_info *nxi = skb->sk ? skb->sk->sk_nx_info : NULL;
s_h = cb->args[0];
s_idx = cb->args[1];
-@@ -4076,6 +4099,8 @@ static int inet6_dump_ifinfo(struct sk_b
- hlist_for_each_entry_rcu(dev, node, head, index_hlist) {
+@@ -4441,6 +4464,8 @@ static int inet6_dump_ifinfo(struct sk_b
+ hlist_for_each_entry_rcu(dev, head, index_hlist) {
if (idx < s_idx)
goto cont;
+ if (!v6_dev_in_nx_info(dev, nxi))
idev = __in6_dev_get(dev);
if (!idev)
goto cont;
-diff -NurpP --minimal linux-3.7/net/ipv6/af_inet6.c linux-3.7-vs2.3.5.1/net/ipv6/af_inet6.c
---- linux-3.7/net/ipv6/af_inet6.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/af_inet6.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv6/af_inet6.c linux-3.10.15-vs2.3.6.6/net/ipv6/af_inet6.c
+--- linux-3.10.15/net/ipv6/af_inet6.c 2013-07-14 17:01:38.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/af_inet6.c 2013-08-22 20:30:00.000000000 +0000
@@ -43,6 +43,8 @@
#include <linux/netdevice.h>
#include <linux/icmpv6.h>
#include <net/ip.h>
#include <net/ipv6.h>
-@@ -160,9 +162,12 @@ lookup_protocol:
+@@ -159,10 +161,13 @@ lookup_protocol:
}
err = -EPERM;
+ if ((protocol == IPPROTO_ICMPV6) &&
+ nx_capable(CAP_NET_RAW, NXC_RAW_ICMP))
+ goto override;
- if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
+ if (sock->type == SOCK_RAW && !kern &&
+ !ns_capable(net->user_ns, CAP_NET_RAW))
goto out_rcu_unlock;
-
+override:
if (ipv6_addr_any(&np->rcv_saddr))
sin->sin6_addr = np->saddr;
else
-diff -NurpP --minimal linux-3.7/net/ipv6/datagram.c linux-3.7-vs2.3.5.1/net/ipv6/datagram.c
---- linux-3.7/net/ipv6/datagram.c 2012-07-22 21:39:48.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/datagram.c 2012-12-11 15:56:33.000000000 +0000
-@@ -645,7 +645,7 @@ int datagram_send_ctl(struct net *net, s
+diff -NurpP --minimal linux-3.10.15/net/ipv6/datagram.c linux-3.10.15-vs2.3.6.6/net/ipv6/datagram.c
+--- linux-3.10.15/net/ipv6/datagram.c 2013-07-14 17:01:38.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/datagram.c 2013-08-22 20:30:00.000000000 +0000
+@@ -652,7 +652,7 @@ int ip6_datagram_send_ctl(struct net *ne
rcu_read_lock();
if (fl6->flowi6_oif) {
if (!dev) {
rcu_read_unlock();
return -ENODEV;
-diff -NurpP --minimal linux-3.7/net/ipv6/fib6_rules.c linux-3.7-vs2.3.5.1/net/ipv6/fib6_rules.c
---- linux-3.7/net/ipv6/fib6_rules.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/fib6_rules.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv6/fib6_rules.c linux-3.10.15-vs2.3.6.6/net/ipv6/fib6_rules.c
+--- linux-3.10.15/net/ipv6/fib6_rules.c 2013-02-19 13:58:58.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/fib6_rules.c 2013-08-22 20:30:00.000000000 +0000
@@ -90,7 +90,7 @@ static int fib6_rule_action(struct fib_r
ip6_dst_idev(&rt->dst)->dev,
&flp6->daddr,
goto again;
if (!ipv6_prefix_equal(&saddr, &r->src.addr,
r->src.plen))
-diff -NurpP --minimal linux-3.7/net/ipv6/inet6_hashtables.c linux-3.7-vs2.3.5.1/net/ipv6/inet6_hashtables.c
---- linux-3.7/net/ipv6/inet6_hashtables.c 2011-10-24 16:45:34.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/inet6_hashtables.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv6/inet6_hashtables.c linux-3.10.15-vs2.3.6.6/net/ipv6/inet6_hashtables.c
+--- linux-3.10.15/net/ipv6/inet6_hashtables.c 2013-05-31 13:45:32.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/inet6_hashtables.c 2013-08-22 20:30:00.000000000 +0000
@@ -16,6 +16,7 @@
#include <linux/module.h>
rcu_read_lock();
begin:
sk_nulls_for_each_rcu(sk, node, &head->chain) {
-@@ -95,7 +95,7 @@ begin:
+@@ -97,7 +97,7 @@ begin:
sock_put(sk);
goto begin;
}
}
}
if (get_nulls_value(node) != slot)
-@@ -141,6 +141,9 @@ static inline int compute_score(struct s
+@@ -147,6 +147,9 @@ static inline int compute_score(struct s
if (!ipv6_addr_equal(&np->rcv_saddr, daddr))
return -1;
score++;
}
if (sk->sk_bound_dev_if) {
if (sk->sk_bound_dev_if != dif)
-diff -NurpP --minimal linux-3.7/net/ipv6/ip6_output.c linux-3.7-vs2.3.5.1/net/ipv6/ip6_output.c
---- linux-3.7/net/ipv6/ip6_output.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/ip6_output.c 2012-12-11 15:56:33.000000000 +0000
-@@ -964,7 +964,8 @@ static int ip6_dst_lookup_tail(struct so
+diff -NurpP --minimal linux-3.10.15/net/ipv6/ip6_output.c linux-3.10.15-vs2.3.6.6/net/ipv6/ip6_output.c
+--- linux-3.10.15/net/ipv6/ip6_output.c 2013-10-09 17:35:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/ip6_output.c 2013-08-22 20:30:00.000000000 +0000
+@@ -882,7 +882,8 @@ static int ip6_dst_lookup_tail(struct so
struct rt6_info *rt = (struct rt6_info *) *dst;
err = ip6_route_get_saddr(net, rt, &fl6->daddr,
sk ? inet6_sk(sk)->srcprefs : 0,
if (err)
goto out_err_release;
}
-diff -NurpP --minimal linux-3.7/net/ipv6/ndisc.c linux-3.7-vs2.3.5.1/net/ipv6/ndisc.c
---- linux-3.7/net/ipv6/ndisc.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/ndisc.c 2012-12-11 15:56:33.000000000 +0000
-@@ -517,7 +517,7 @@ static void ndisc_send_na(struct net_dev
+diff -NurpP --minimal linux-3.10.15/net/ipv6/ndisc.c linux-3.10.15-vs2.3.6.6/net/ipv6/ndisc.c
+--- linux-3.10.15/net/ipv6/ndisc.c 2013-10-09 17:35:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/ndisc.c 2013-10-09 17:37:22.000000000 +0000
+@@ -487,7 +487,7 @@ static void ndisc_send_na(struct net_dev
} else {
if (ipv6_dev_get_saddr(dev_net(dev), dev, daddr,
inet6_sk(dev_net(dev)->ipv6.ndisc_sk)->srcprefs,
return;
src_addr = &tmpaddr;
}
-diff -NurpP --minimal linux-3.7/net/ipv6/raw.c linux-3.7-vs2.3.5.1/net/ipv6/raw.c
---- linux-3.7/net/ipv6/raw.c 2012-12-11 15:47:54.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/raw.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv6/netfilter/ip6t_MASQUERADE.c linux-3.10.15-vs2.3.6.6/net/ipv6/netfilter/ip6t_MASQUERADE.c
+--- linux-3.10.15/net/ipv6/netfilter/ip6t_MASQUERADE.c 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/netfilter/ip6t_MASQUERADE.c 2013-08-22 20:30:00.000000000 +0000
+@@ -34,7 +34,7 @@ masquerade_tg6(struct sk_buff *skb, cons
+ ctinfo == IP_CT_RELATED_REPLY));
+
+ if (ipv6_dev_get_saddr(dev_net(par->out), par->out,
+- &ipv6_hdr(skb)->daddr, 0, &src) < 0)
++ &ipv6_hdr(skb)->daddr, 0, &src, NULL) < 0)
+ return NF_DROP;
+
+ nfct_nat(ct)->masq_index = par->out->ifindex;
+diff -NurpP --minimal linux-3.10.15/net/ipv6/raw.c linux-3.10.15-vs2.3.6.6/net/ipv6/raw.c
+--- linux-3.10.15/net/ipv6/raw.c 2013-07-14 17:01:38.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/raw.c 2013-08-22 20:30:00.000000000 +0000
@@ -30,6 +30,7 @@
#include <linux/icmpv6.h>
#include <linux/netfilter.h>
#include <linux/skbuff.h>
#include <linux/compat.h>
#include <asm/uaccess.h>
-@@ -284,6 +285,13 @@ static int rawv6_bind(struct sock *sk, s
+@@ -283,6 +284,13 @@ static int rawv6_bind(struct sock *sk, s
goto out_unlock;
}
/* ipv4 addr of the socket is invalid. Only the
* unspecified and mapped address have a v4 equivalent.
*/
-diff -NurpP --minimal linux-3.7/net/ipv6/route.c linux-3.7-vs2.3.5.1/net/ipv6/route.c
---- linux-3.7/net/ipv6/route.c 2012-12-11 15:47:55.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/route.c 2012-12-11 15:56:33.000000000 +0000
-@@ -57,6 +57,7 @@
- #include <net/xfrm.h>
+diff -NurpP --minimal linux-3.10.15/net/ipv6/route.c linux-3.10.15-vs2.3.6.6/net/ipv6/route.c
+--- linux-3.10.15/net/ipv6/route.c 2013-10-09 17:35:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/route.c 2013-08-22 20:30:00.000000000 +0000
+@@ -58,6 +58,7 @@
#include <net/netevent.h>
#include <net/netlink.h>
+ #include <net/nexthop.h>
+#include <linux/vs_inet6.h>
#include <asm/uaccess.h>
-@@ -2116,15 +2117,17 @@ int ip6_route_get_saddr(struct net *net,
+@@ -2101,15 +2102,17 @@ int ip6_route_get_saddr(struct net *net,
struct rt6_info *rt,
const struct in6_addr *daddr,
unsigned int prefs,
return err;
}
-@@ -2478,7 +2481,8 @@ static int rt6_fill_node(struct net *net
+@@ -2529,7 +2532,8 @@ static int rt6_fill_node(struct net *net
goto nla_put_failure;
} else if (dst) {
struct in6_addr saddr_buf;
nla_put(skb, RTA_PREFSRC, 16, &saddr_buf))
goto nla_put_failure;
}
-@@ -2692,6 +2696,7 @@ static int rt6_info_route(struct rt6_inf
+@@ -2741,6 +2745,7 @@ static int rt6_info_route(struct rt6_inf
+ {
struct seq_file *m = p_arg;
- struct neighbour *n;
+ /* FIXME: check for network context? */
seq_printf(m, "%pi6 %02x ", &rt->rt6i_dst.addr, rt->rt6i_dst.plen);
#ifdef CONFIG_IPV6_SUBTREES
-diff -NurpP --minimal linux-3.7/net/ipv6/tcp_ipv6.c linux-3.7-vs2.3.5.1/net/ipv6/tcp_ipv6.c
---- linux-3.7/net/ipv6/tcp_ipv6.c 2012-12-11 15:47:55.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/tcp_ipv6.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv6/tcp_ipv6.c linux-3.10.15-vs2.3.6.6/net/ipv6/tcp_ipv6.c
+--- linux-3.10.15/net/ipv6/tcp_ipv6.c 2013-10-09 17:35:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/tcp_ipv6.c 2013-10-09 17:37:22.000000000 +0000
@@ -71,6 +71,7 @@
#include <linux/crypto.h>
static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb);
static void tcp_v6_reqsk_send_ack(struct sock *sk, struct sk_buff *skb,
-@@ -175,8 +176,15 @@ static int tcp_v6_connect(struct sock *s
+@@ -164,8 +165,15 @@ static int tcp_v6_connect(struct sock *s
* connect() to INADDR_ANY means loopback (BSD'ism).
*/
addr_type = ipv6_addr_type(&usin->sin6_addr);
-diff -NurpP --minimal linux-3.7/net/ipv6/udp.c linux-3.7-vs2.3.5.1/net/ipv6/udp.c
---- linux-3.7/net/ipv6/udp.c 2012-12-11 15:47:55.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/udp.c 2012-12-11 15:56:33.000000000 +0000
-@@ -45,42 +45,68 @@
- #include <net/tcp_states.h>
+diff -NurpP --minimal linux-3.10.15/net/ipv6/udp.c linux-3.10.15-vs2.3.6.6/net/ipv6/udp.c
+--- linux-3.10.15/net/ipv6/udp.c 2013-10-09 17:35:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/udp.c 2013-08-22 20:30:00.000000000 +0000
+@@ -46,42 +46,68 @@
#include <net/ip6_checksum.h>
#include <net/xfrm.h>
+ #include <net/inet6_hashtables.h>
+#include <linux/vs_inet6.h>
#include <linux/proc_fs.h>
}
static unsigned int udp6_portaddr_hash(struct net *net,
-@@ -144,6 +170,10 @@ static inline int compute_score(struct s
+@@ -145,6 +171,10 @@ static inline int compute_score(struct s
if (!ipv6_addr_equal(&np->rcv_saddr, daddr))
return -1;
score++;
}
if (!ipv6_addr_any(&np->daddr)) {
if (!ipv6_addr_equal(&np->daddr, saddr))
-diff -NurpP --minimal linux-3.7/net/ipv6/xfrm6_policy.c linux-3.7-vs2.3.5.1/net/ipv6/xfrm6_policy.c
---- linux-3.7/net/ipv6/xfrm6_policy.c 2012-10-04 13:27:50.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/ipv6/xfrm6_policy.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/ipv6/xfrm6_policy.c linux-3.10.15-vs2.3.6.6/net/ipv6/xfrm6_policy.c
+--- linux-3.10.15/net/ipv6/xfrm6_policy.c 2013-07-14 17:01:38.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/ipv6/xfrm6_policy.c 2013-08-22 20:30:00.000000000 +0000
@@ -63,7 +63,7 @@ static int xfrm6_get_saddr(struct net *n
dev = ip6_dst_idev(dst)->dev;
ipv6_dev_get_saddr(dev_net(dev), dev,
dst_release(dst);
return 0;
}
-diff -NurpP --minimal linux-3.7/net/netfilter/ipvs/ip_vs_xmit.c linux-3.7-vs2.3.5.1/net/netfilter/ipvs/ip_vs_xmit.c
---- linux-3.7/net/netfilter/ipvs/ip_vs_xmit.c 2012-12-11 15:47:55.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/netfilter/ipvs/ip_vs_xmit.c 2012-12-11 15:56:33.000000000 +0000
-@@ -273,7 +273,7 @@ __ip_vs_route_output_v6(struct net *net,
+diff -NurpP --minimal linux-3.10.15/net/netfilter/ipvs/ip_vs_xmit.c linux-3.10.15-vs2.3.6.6/net/netfilter/ipvs/ip_vs_xmit.c
+--- linux-3.10.15/net/netfilter/ipvs/ip_vs_xmit.c 2013-07-14 17:01:38.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/netfilter/ipvs/ip_vs_xmit.c 2013-08-22 20:30:00.000000000 +0000
+@@ -316,7 +316,7 @@ __ip_vs_route_output_v6(struct net *net,
return dst;
if (ipv6_addr_any(&fl6.saddr) &&
ipv6_dev_get_saddr(net, ip6_dst_idev(dst)->dev,
goto out_err;
if (do_xfrm) {
dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), NULL, 0);
-diff -NurpP --minimal linux-3.7/net/netlink/af_netlink.c linux-3.7-vs2.3.5.1/net/netlink/af_netlink.c
---- linux-3.7/net/netlink/af_netlink.c 2012-12-11 15:47:56.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/netlink/af_netlink.c 2012-12-11 15:56:33.000000000 +0000
-@@ -55,6 +55,9 @@
- #include <linux/types.h>
+diff -NurpP --minimal linux-3.10.15/net/netlink/af_netlink.c linux-3.10.15-vs2.3.6.6/net/netlink/af_netlink.c
+--- linux-3.10.15/net/netlink/af_netlink.c 2013-07-14 17:01:39.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/netlink/af_netlink.c 2013-08-22 21:19:02.000000000 +0000
+@@ -57,6 +57,9 @@
#include <linux/audit.h>
#include <linux/mutex.h>
+ #include <linux/vmalloc.h>
+#include <linux/vs_context.h>
+#include <linux/vs_network.h>
+#include <linux/vs_limit.h>
+ #include <asm/cacheflush.h>
#include <net/net_namespace.h>
- #include <net/sock.h>
-@@ -1981,6 +1984,8 @@ static struct sock *netlink_seq_socket_i
- sk_for_each(s, node, &hash->table[j]) {
+@@ -2684,6 +2687,8 @@ static struct sock *netlink_seq_socket_i
+ sk_for_each(s, &hash->table[j]) {
if (sock_net(s) != seq_file_net(seq))
continue;
+ if (!nx_check(s->sk_nid, VS_WATCH_P | VS_IDENT))
if (off == pos) {
iter->link = i;
iter->hash_idx = j;
-@@ -2015,7 +2020,8 @@ static void *netlink_seq_next(struct seq
+@@ -2718,7 +2723,8 @@ static void *netlink_seq_next(struct seq
s = v;
do {
s = sk_next(s);
if (s)
return s;
-@@ -2027,7 +2033,8 @@ static void *netlink_seq_next(struct seq
+@@ -2730,7 +2736,8 @@ static void *netlink_seq_next(struct seq
for (; j <= hash->mask; j++) {
s = sk_head(&hash->table[j]);
s = sk_next(s);
if (s) {
iter->link = i;
-diff -NurpP --minimal linux-3.7/net/socket.c linux-3.7-vs2.3.5.1/net/socket.c
---- linux-3.7/net/socket.c 2012-12-11 15:47:57.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/socket.c 2012-12-11 15:56:33.000000000 +0000
-@@ -99,6 +99,10 @@
+diff -NurpP --minimal linux-3.10.15/net/socket.c linux-3.10.15-vs2.3.6.6/net/socket.c
+--- linux-3.10.15/net/socket.c 2013-07-14 17:01:39.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/socket.c 2013-08-22 20:30:00.000000000 +0000
+@@ -98,6 +98,10 @@
#include <net/sock.h>
#include <linux/netfilter.h>
#include <linux/if_tun.h>
#include <linux/ipv6_route.h>
-@@ -619,6 +623,7 @@ static inline int __sock_sendmsg_nosec(s
+@@ -616,13 +620,29 @@ static inline int __sock_sendmsg_nosec(s
struct msghdr *msg, size_t size)
{
struct sock_iocb *si = kiocb_to_siocb(iocb);
+ size_t len;
- sock_update_classid(sock->sk);
-
-@@ -627,7 +632,22 @@ static inline int __sock_sendmsg_nosec(s
+ si->sock = sock;
+ si->scm = NULL;
si->msg = msg;
si->size = size;
}
static inline int __sock_sendmsg(struct kiocb *iocb, struct socket *sock,
-@@ -783,6 +803,7 @@ static inline int __sock_recvmsg_nosec(s
+@@ -766,6 +786,7 @@ static inline int __sock_recvmsg_nosec(s
struct msghdr *msg, size_t size, int flags)
{
struct sock_iocb *si = kiocb_to_siocb(iocb);
+ int len;
- sock_update_classid(sock->sk);
-
-@@ -792,7 +813,18 @@ static inline int __sock_recvmsg_nosec(s
+ si->sock = sock;
+ si->scm = NULL;
+@@ -773,7 +794,18 @@ static inline int __sock_recvmsg_nosec(s
si->size = size;
si->flags = flags;
}
static inline int __sock_recvmsg(struct kiocb *iocb, struct socket *sock,
-@@ -1277,6 +1309,13 @@ int __sock_create(struct net *net, int f
+@@ -1247,6 +1279,13 @@ int __sock_create(struct net *net, int f
if (type < 0 || type >= SOCK_MAX)
return -EINVAL;
/* Compatibility.
This uglymoron is moved from INET layer to here to avoid
-@@ -1411,6 +1450,7 @@ SYSCALL_DEFINE3(socket, int, family, int
+@@ -1381,6 +1420,7 @@ SYSCALL_DEFINE3(socket, int, family, int
if (retval < 0)
goto out;
retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK));
if (retval < 0)
goto out_release;
-@@ -1452,10 +1492,12 @@ SYSCALL_DEFINE4(socketpair, int, family,
+@@ -1422,10 +1462,12 @@ SYSCALL_DEFINE4(socketpair, int, family,
err = sock_create(family, type, protocol, &sock1);
if (err < 0)
goto out;
err = sock1->ops->socketpair(sock1, sock2);
if (err < 0)
-diff -NurpP --minimal linux-3.7/net/sunrpc/auth.c linux-3.7-vs2.3.5.1/net/sunrpc/auth.c
---- linux-3.7/net/sunrpc/auth.c 2012-10-04 13:27:51.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/sunrpc/auth.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/sunrpc/auth.c linux-3.10.15-vs2.3.6.6/net/sunrpc/auth.c
+--- linux-3.10.15/net/sunrpc/auth.c 2013-07-14 17:01:39.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/sunrpc/auth.c 2013-08-22 20:30:00.000000000 +0000
@@ -15,6 +15,7 @@
#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/gss_api.h>
#ifdef RPC_DEBUG
# define RPCDBG_FACILITY RPCDBG_AUTH
-@@ -481,6 +482,7 @@ rpcauth_lookupcred(struct rpc_auth *auth
+@@ -553,6 +554,7 @@ rpcauth_lookupcred(struct rpc_auth *auth
memset(&acred, 0, sizeof(acred));
acred.uid = cred->fsuid;
acred.gid = cred->fsgid;
-+ acred.tag = dx_current_tag();
++ acred.tag = make_ktag(&init_user_ns, dx_current_tag());
acred.group_info = get_group_info(((struct cred *)cred)->group_info);
ret = auth->au_ops->lookup_cred(auth, &acred, flags);
-@@ -521,6 +523,7 @@ rpcauth_bind_root_cred(struct rpc_task *
+@@ -593,6 +595,7 @@ rpcauth_bind_root_cred(struct rpc_task *
struct auth_cred acred = {
- .uid = 0,
- .gid = 0,
-+ .tag = dx_current_tag(),
+ .uid = GLOBAL_ROOT_UID,
+ .gid = GLOBAL_ROOT_GID,
++ .tag = KTAGT_INIT(dx_current_tag()),
};
dprintk("RPC: %5u looking up %s cred\n",
-diff -NurpP --minimal linux-3.7/net/sunrpc/auth_unix.c linux-3.7-vs2.3.5.1/net/sunrpc/auth_unix.c
---- linux-3.7/net/sunrpc/auth_unix.c 2012-07-22 21:39:49.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/sunrpc/auth_unix.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/sunrpc/auth_unix.c linux-3.10.15-vs2.3.6.6/net/sunrpc/auth_unix.c
+--- linux-3.10.15/net/sunrpc/auth_unix.c 2013-05-31 13:45:33.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/sunrpc/auth_unix.c 2013-08-22 20:30:00.000000000 +0000
@@ -13,11 +13,13 @@
#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/auth.h>
struct unx_cred {
struct rpc_cred uc_base;
-+ tag_t uc_tag;
- gid_t uc_gid;
- gid_t uc_gids[NFS_NGROUPS];
++ ktag_t uc_tag;
+ kgid_t uc_gid;
+ kgid_t uc_gids[NFS_NGROUPS];
};
-@@ -79,6 +81,7 @@ unx_create_cred(struct rpc_auth *auth, s
+@@ -80,6 +82,7 @@ unx_create_cred(struct rpc_auth *auth, s
groups = NFS_NGROUPS;
cred->uc_gid = acred->gid;
+ cred->uc_tag = acred->tag;
- for (i = 0; i < groups; i++) {
- gid_t gid;
- gid = from_kgid(&init_user_ns, GROUP_AT(acred->group_info, i));
-@@ -123,7 +126,9 @@ unx_match(struct auth_cred *acred, struc
+ for (i = 0; i < groups; i++)
+ cred->uc_gids[i] = GROUP_AT(acred->group_info, i);
+ if (i < NFS_NGROUPS)
+@@ -121,7 +124,9 @@ unx_match(struct auth_cred *acred, struc
unsigned int i;
-- if (cred->uc_uid != acred->uid || cred->uc_gid != acred->gid)
-+ if (cred->uc_uid != acred->uid ||
-+ cred->uc_gid != acred->gid ||
-+ cred->uc_tag != acred->tag)
+- if (!uid_eq(cred->uc_uid, acred->uid) || !gid_eq(cred->uc_gid, acred->gid))
++ if (!uid_eq(cred->uc_uid, acred->uid) ||
++ !gid_eq(cred->uc_gid, acred->gid) ||
++ !tag_eq(cred->uc_tag, acred->tag))
return 0;
if (acred->group_info != NULL)
-@@ -152,7 +157,7 @@ unx_marshal(struct rpc_task *task, __be3
+@@ -146,7 +151,7 @@ unx_marshal(struct rpc_task *task, __be3
struct rpc_clnt *clnt = task->tk_client;
struct unx_cred *cred = container_of(task->tk_rqstp->rq_cred, struct unx_cred, uc_base);
__be32 *base, *hold;
*p++ = htonl(RPC_AUTH_UNIX);
base = p++;
-@@ -162,9 +167,12 @@ unx_marshal(struct rpc_task *task, __be3
- * Copy the UTS nodename captured when the client was created.
+@@ -157,8 +162,11 @@ unx_marshal(struct rpc_task *task, __be3
*/
p = xdr_encode_array(p, clnt->cl_nodename, clnt->cl_nodelen);
-+ tag = task->tk_client->cl_tag;
-- *p++ = htonl((u32) cred->uc_uid);
-- *p++ = htonl((u32) cred->uc_gid);
-+ *p++ = htonl((u32) TAGINO_UID(tag,
-+ cred->uc_uid, cred->uc_tag));
-+ *p++ = htonl((u32) TAGINO_GID(tag,
-+ cred->uc_gid, cred->uc_tag));
+- *p++ = htonl((u32) from_kuid(&init_user_ns, cred->uc_uid));
+- *p++ = htonl((u32) from_kgid(&init_user_ns, cred->uc_gid));
++ tag = task->tk_client->cl_tag;
++ *p++ = htonl((u32) from_kuid(&init_user_ns,
++ TAGINO_KUID(tag, cred->uc_uid, cred->uc_tag)));
++ *p++ = htonl((u32) from_kgid(&init_user_ns,
++ TAGINO_KGID(tag, cred->uc_gid, cred->uc_tag)));
hold = p++;
- for (i = 0; i < 16 && cred->uc_gids[i] != (gid_t) NOGROUP; i++)
- *p++ = htonl((u32) cred->uc_gids[i]);
-diff -NurpP --minimal linux-3.7/net/sunrpc/clnt.c linux-3.7-vs2.3.5.1/net/sunrpc/clnt.c
---- linux-3.7/net/sunrpc/clnt.c 2012-12-11 15:47:57.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/sunrpc/clnt.c 2012-12-11 15:56:33.000000000 +0000
+ for (i = 0; i < 16 && gid_valid(cred->uc_gids[i]); i++)
+ *p++ = htonl((u32) from_kgid(&init_user_ns, cred->uc_gids[i]));
+diff -NurpP --minimal linux-3.10.15/net/sunrpc/clnt.c linux-3.10.15-vs2.3.6.6/net/sunrpc/clnt.c
+--- linux-3.10.15/net/sunrpc/clnt.c 2013-10-09 17:35:24.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/sunrpc/clnt.c 2013-08-22 20:30:00.000000000 +0000
@@ -31,6 +31,7 @@
#include <linux/in6.h>
#include <linux/un.h>
+#include <linux/vs_cvirt.h>
#include <linux/sunrpc/clnt.h>
- #include <linux/sunrpc/rpc_pipe_fs.h>
-@@ -481,6 +482,9 @@ struct rpc_clnt *rpc_create(struct rpc_c
+ #include <linux/sunrpc/addr.h>
+@@ -486,6 +487,9 @@ struct rpc_clnt *rpc_create(struct rpc_c
if (!(args->flags & RPC_CLNT_CREATE_QUIET))
clnt->cl_chatty = 1;
return clnt;
}
EXPORT_SYMBOL_GPL(rpc_create);
-diff -NurpP --minimal linux-3.7/net/unix/af_unix.c linux-3.7-vs2.3.5.1/net/unix/af_unix.c
---- linux-3.7/net/unix/af_unix.c 2012-12-11 15:47:57.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/net/unix/af_unix.c 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/net/unix/af_unix.c linux-3.10.15-vs2.3.6.6/net/unix/af_unix.c
+--- linux-3.10.15/net/unix/af_unix.c 2013-07-14 17:01:39.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/net/unix/af_unix.c 2013-08-22 20:30:00.000000000 +0000
@@ -114,6 +114,8 @@
#include <linux/mount.h>
#include <net/checksum.h>
struct hlist_head unix_socket_table[2 * UNIX_HASH_SIZE];
EXPORT_SYMBOL_GPL(unix_socket_table);
-@@ -271,6 +273,8 @@ static struct sock *__unix_find_socket_b
+@@ -270,6 +272,8 @@ static struct sock *__unix_find_socket_b
if (!net_eq(sock_net(s), net))
continue;
if (u->addr->len == len &&
!memcmp(u->addr->name, sunname, len))
goto found;
-@@ -2259,6 +2263,8 @@ static struct sock *unix_from_bucket(str
+@@ -2257,6 +2261,8 @@ static struct sock *unix_from_bucket(str
for (sk = sk_head(&unix_socket_table[bucket]); sk; sk = sk_next(sk)) {
if (sock_net(sk) != seq_file_net(seq))
continue;
if (++count == offset)
break;
}
-@@ -2276,6 +2282,8 @@ static struct sock *unix_next_socket(str
+@@ -2274,6 +2280,8 @@ static struct sock *unix_next_socket(str
sk = sk_next(sk);
if (!sk)
goto next_bucket;
if (sock_net(sk) == seq_file_net(seq))
return sk;
}
-diff -NurpP --minimal linux-3.7/scripts/checksyscalls.sh linux-3.7-vs2.3.5.1/scripts/checksyscalls.sh
---- linux-3.7/scripts/checksyscalls.sh 2012-10-04 13:27:51.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/scripts/checksyscalls.sh 2012-12-11 15:56:33.000000000 +0000
+diff -NurpP --minimal linux-3.10.15/scripts/checksyscalls.sh linux-3.10.15-vs2.3.6.6/scripts/checksyscalls.sh
+--- linux-3.10.15/scripts/checksyscalls.sh 2012-12-11 03:30:57.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/scripts/checksyscalls.sh 2013-08-22 20:30:00.000000000 +0000
@@ -193,7 +193,6 @@ cat << EOF
#define __IGNORE_afs_syscall
#define __IGNORE_getpmsg
EOF
}
-diff -NurpP --minimal linux-3.7/security/commoncap.c linux-3.7-vs2.3.5.1/security/commoncap.c
---- linux-3.7/security/commoncap.c 2012-07-22 21:39:51.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/security/commoncap.c 2012-12-11 15:56:33.000000000 +0000
-@@ -76,14 +76,20 @@ int cap_netlink_send(struct sock *sk, st
+diff -NurpP --minimal linux-3.10.15/security/commoncap.c linux-3.10.15-vs2.3.6.6/security/commoncap.c
+--- linux-3.10.15/security/commoncap.c 2013-05-31 13:45:34.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/security/commoncap.c 2013-08-22 20:30:00.000000000 +0000
+@@ -76,6 +76,7 @@ int cap_netlink_send(struct sock *sk, st
int cap_capable(const struct cred *cred, struct user_namespace *targ_ns,
int cap, int audit)
{
+ struct vx_info *vxi = current_vx_info(); /* FIXME: get vxi from cred? */
-+
- for (;;) {
- /* The owner of the user namespace has all caps. */
- if (targ_ns != &init_user_ns && uid_eq(targ_ns->owner, cred->euid))
- return 0;
+ struct user_namespace *ns = targ_ns;
+ /* See if cred has the capability in the target user namespace
+@@ -84,8 +85,12 @@ int cap_capable(const struct cred *cred,
+ */
+ for (;;) {
/* Do we have the necessary capabilities? */
-- if (targ_ns == cred->user_ns)
+- if (ns == cred->user_ns)
- return cap_raised(cred->cap_effective, cap) ? 0 : -EPERM;
-+ if (targ_ns == cred->user_ns) {
++ if (ns == cred->user_ns) {
+ if (vx_info_flags(vxi, VXF_STATE_SETUP, 0) &&
+ cap_raised(cred->cap_effective, cap))
+ return 0;
+ }
/* Have we tried all of the parent namespaces? */
- if (targ_ns == &init_user_ns)
-@@ -619,7 +625,7 @@ int cap_inode_setxattr(struct dentry *de
+ if (ns == &init_user_ns)
+@@ -628,7 +633,7 @@ int cap_inode_setxattr(struct dentry *de
if (!strncmp(name, XATTR_SECURITY_PREFIX,
sizeof(XATTR_SECURITY_PREFIX) - 1) &&
return -EPERM;
return 0;
}
-@@ -645,7 +651,7 @@ int cap_inode_removexattr(struct dentry
+@@ -654,7 +659,7 @@ int cap_inode_removexattr(struct dentry
if (!strncmp(name, XATTR_SECURITY_PREFIX,
sizeof(XATTR_SECURITY_PREFIX) - 1) &&
return -EPERM;
return 0;
}
-diff -NurpP --minimal linux-3.7/security/selinux/hooks.c linux-3.7-vs2.3.5.1/security/selinux/hooks.c
---- linux-3.7/security/selinux/hooks.c 2012-12-11 15:48:01.000000000 +0000
-+++ linux-3.7-vs2.3.5.1/security/selinux/hooks.c 2012-12-11 15:56:33.000000000 +0000
-@@ -66,7 +66,6 @@
+diff -NurpP --minimal linux-3.10.15/security/selinux/hooks.c linux-3.10.15-vs2.3.6.6/security/selinux/hooks.c
+--- linux-3.10.15/security/selinux/hooks.c 2013-07-14 17:01:42.000000000 +0000
++++ linux-3.10.15-vs2.3.6.6/security/selinux/hooks.c 2013-08-22 20:30:00.000000000 +0000
+@@ -67,7 +67,6 @@
#include <linux/dccp.h>
#include <linux/quota.h>
#include <linux/un.h> /* for Unix socket types */
#include <linux/parser.h>
#include <linux/nfs_mount.h>
#include <net/ipv6.h>
-diff -NurpP linux-3.7-vs2.3.5.1/kernel/vserver/network.c linux-3.7-vs2.3.5.1.1/kernel/vserver/network.c
---- linux-3.7-vs2.3.5.1/kernel/vserver/network.c 2012-12-11 15:56:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1.1/kernel/vserver/network.c 2012-12-13 13:48:35.000000000 +0000
-@@ -162,6 +163,9 @@ static void __dealloc_nx_info(struct nx_
- BUG_ON(atomic_read(&nxi->nx_tasks));
-
- __dealloc_nx_addr_v4_all(nxi->v4.next);
-+#ifdef CONFIG_IPV6
-+ __dealloc_nx_addr_v6_all(nxi->v6.next);
-+#endif
-
- nxi->nx_state |= NXS_RELEASED;
- kfree(nxi);
-diff -NurpP linux-3.7-vs2.3.5.1/include/linux/vs_inet.h linux-3.7-vs2.3.5.1.1/include/linux/vs_inet.h
---- linux-3.7-vs2.3.5.1/include/linux/vs_inet.h 2012-12-11 15:56:32.000000000 +0000
-+++ linux-3.7-vs2.3.5.1.1/include/linux/vs_inet.h 2012-12-13 12:52:33.000000000 +0000
-@@ -81,12 +81,15 @@ int v4_addr_in_nx_info(struct nx_info *n
- (nxi->v4_bcast.s_addr == addr))
- goto out;
- ret = 5;
-+
- /* check for v4 addresses */
-+ spin_lock(&nxi->addr_lock);
- for (nxa = &nxi->v4; nxa; nxa = nxa->next)
- if (v4_addr_match(nxa, addr, tmask))
- goto out;
- ret = 0;
- out:
-+ spin_unlock(&nxi->addr_lock);
- vxdprintk(VXD_CBIT(net, 0),
- "v4_addr_in_nx_info(%p[#%u]," NIPQUAD_FMT ",%04x) = %d",
- nxi, nxi ? nxi->nx_id : 0, NIPQUAD(addr), tmask, ret);
-@@ -104,11 +107,16 @@ static inline
- int v4_nx_addr_in_nx_info(struct nx_info *nxi, struct nx_addr_v4 *nxa, uint16_t mask)
- {
- struct nx_addr_v4 *ptr;
-+ int ret = 1;
-
-+ spin_lock(&nxi->addr_lock);
- for (ptr = &nxi->v4; ptr; ptr = ptr->next)
- if (v4_nx_addr_match(ptr, nxa, mask))
-- return 1;
-- return 0;
-+ goto out;
-+ ret = 0;
-+out:
-+ spin_unlock(&nxi->addr_lock);
-+ return ret;
- }
-
- #include <net/inet_sock.h>
-diff -NurpP linux-3.7-vs2.3.5.1/include/linux/vs_inet6.h linux-3.7-vs2.3.5.1.1/include/linux/vs_inet6.h
---- linux-3.7-vs2.3.5.1/include/linux/vs_inet6.h 2012-12-11 15:56:32.000000000 +0000
-+++ linux-3.7-vs2.3.5.1.1/include/linux/vs_inet6.h 2012-12-13 12:52:39.000000000 +0000
-@@ -45,11 +45,14 @@ int v6_addr_in_nx_info(struct nx_info *n
-
- if (!nxi)
- goto out;
-+
-+ spin_lock(&nxi->addr_lock);
- for (nxa = &nxi->v6; nxa; nxa = nxa->next)
- if (v6_addr_match(nxa, addr, mask))
- goto out;
- ret = 0;
- out:
-+ spin_unlock(&nxi->addr_lock);
- vxdprintk(VXD_CBIT(net, 0),
- "v6_addr_in_nx_info(%p[#%u],%pI6,%04x) = %d",
- nxi, nxi ? nxi->nx_id : 0, addr, mask, ret);
-@@ -67,11 +70,16 @@ static inline
- int v6_nx_addr_in_nx_info(struct nx_info *nxi, struct nx_addr_v6 *nxa, uint16_t mask)
- {
- struct nx_addr_v6 *ptr;
-+ int ret = 1;
-
-+ spin_lock(&nxi->addr_lock);
- for (ptr = &nxi->v6; ptr; ptr = ptr->next)
- if (v6_nx_addr_match(ptr, nxa, mask))
-- return 1;
-- return 0;
-+ goto out;
-+ ret = 0;
-+out:
-+ spin_unlock(&nxi->addr_lock);
-+ return ret;
- }
-
-
-diff -NurpP linux-3.7-vs2.3.5.1/include/linux/vserver/network.h linux-3.7-vs2.3.5.1.1/include/linux/vserver/network.h
---- linux-3.7-vs2.3.5.1/include/linux/vserver/network.h 2012-12-11 15:56:32.000000000 +0000
-+++ linux-3.7-vs2.3.5.1.1/include/linux/vserver/network.h 2012-12-13 13:40:52.000000000 +0000
-@@ -109,6 +109,7 @@ struct nx_info {
- uint64_t nx_flags; /* network flag word */
- uint64_t nx_ncaps; /* network capabilities */
-
-+ spinlock_t addr_lock; /* protect address changes */
- struct in_addr v4_lback; /* Loopback address */
- struct in_addr v4_bcast; /* Broadcast address */
- struct nx_addr_v4 v4; /* First/Single ipv4 address */
-diff -NurpP linux-3.7-vs2.3.5.1/kernel/vserver/network.c linux-3.7-vs2.3.5.1.1/kernel/vserver/network.c
---- linux-3.7-vs2.3.5.1/kernel/vserver/network.c 2012-12-11 15:56:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1.1/kernel/vserver/network.c 2012-12-13 13:48:35.000000000 +0000
-@@ -131,6 +131,7 @@ static struct nx_info *__alloc_nx_info(n
- INIT_HLIST_NODE(&new->nx_hlist);
- atomic_set(&new->nx_usecnt, 0);
- atomic_set(&new->nx_tasks, 0);
-+ spin_lock_init(&new->addr_lock);
- new->nx_state = 0;
-
- new->nx_flags = NXF_INIT_SET;
-@@ -593,26 +597,31 @@ int do_add_v4_addr(struct nx_info *nxi,
- uint16_t type, uint16_t flags)
- {
- struct nx_addr_v4 *nxa = &nxi->v4;
-+ struct nx_addr_v4 *new = __alloc_nx_addr_v4();
-+
-+ if (IS_ERR(new))
-+ return PTR_ERR(new);
-
-+ spin_lock(&nxi->addr_lock);
- if (NX_IPV4(nxi)) {
- /* locate last entry */
- for (; nxa->next; nxa = nxa->next);
-- nxa->next = __alloc_nx_addr_v4();
-- nxa = nxa->next;
--
-- if (IS_ERR(nxa))
-- return PTR_ERR(nxa);
-- }
-+ nxa->next = new;
-+ nxa = new;
-+ new = NULL;
-
-- if (nxi->v4.next)
- /* remove single ip for ip list */
- nxi->nx_flags &= ~NXF_SINGLE_IP;
-+ }
-
- nxa->ip[0].s_addr = ip;
- nxa->ip[1].s_addr = ip2;
- nxa->mask.s_addr = mask;
- nxa->type = type;
- nxa->flags = flags;
-+ spin_unlock(&nxi->addr_lock);
-+ if (new)
-+ __dealloc_nx_addr_v4(new);
- return 0;
- }
-
-@@ -620,20 +629,25 @@ int do_remove_v4_addr(struct nx_info *nx
- uint16_t type, uint16_t flags)
- {
- struct nx_addr_v4 *nxa = &nxi->v4;
-+ struct nx_addr_v4 *old = NULL;
-+ int ret = 0;
-
-+ spin_lock(&nxi->addr_lock);
- switch (type) {
- /* case NXA_TYPE_ADDR:
- break; */
-
- case NXA_TYPE_ANY:
-- __dealloc_nx_addr_v4_all(xchg(&nxa->next, NULL));
-+ old = xchg(&nxa->next, NULL);
- memset(nxa, 0, sizeof(*nxa));
- break;
-
- default:
-- return -EINVAL;
-+ ret = -EINVAL;
- }
-- return 0;
-+ spin_unlock(&nxi->addr_lock);
-+ __dealloc_nx_addr_v4_all(old);
-+ return ret;
- }
-
-
-@@ -687,10 +701,7 @@ int vc_net_remove(struct nx_info *nxi, v
-
- switch (vc_data.type) {
- case NXA_TYPE_ANY:
-- __dealloc_nx_addr_v4_all(xchg(&nxi->v4.next, NULL));
-- memset(&nxi->v4, 0, sizeof(nxi->v4));
-- break;
--
-+ return do_remove_v4_addr(nxi, 0, 0, 0, vc_data.type, 0);
- default:
- return -EINVAL;
- }
-@@ -782,15 +793,18 @@ int do_add_v6_addr(struct nx_info *nxi,
- uint32_t prefix, uint16_t type, uint16_t flags)
- {
- struct nx_addr_v6 *nxa = &nxi->v6;
-+ struct nx_addr_v6 *new = __alloc_nx_addr_v6();
-
-+ if (IS_ERR(new))
-+ return PTR_ERR(new);
-+
-+ spin_lock(&nxi->addr_lock);
- if (NX_IPV6(nxi)) {
- /* locate last entry */
- for (; nxa->next; nxa = nxa->next);
-- nxa->next = __alloc_nx_addr_v6();
-- nxa = nxa->next;
--
-- if (IS_ERR(nxa))
-- return PTR_ERR(nxa);
-+ nxa->next = new;
-+ nxa = new;
-+ new = NULL;
- }
-
- nxa->ip = *ip;
-@@ -798,6 +812,9 @@ int do_add_v6_addr(struct nx_info *nxi,
- nxa->prefix = prefix;
- nxa->type = type;
- nxa->flags = flags;
-+ spin_unlock(&nxi->addr_lock);
-+ if (new)
-+ __dealloc_nx_addr_v6(new);
- return 0;
- }
-
-diff -NurpP linux-3.7-vs2.3.5.1/kernel/vserver/network.c linux-3.7-vs2.3.5.1.1/kernel/vserver/network.c
---- linux-3.7-vs2.3.5.1/kernel/vserver/network.c 2012-12-11 15:56:33.000000000 +0000
-+++ linux-3.7-vs2.3.5.1.1/kernel/vserver/network.c 2012-12-13 13:48:35.000000000 +0000
-@@ -804,6 +818,31 @@ int do_add_v6_addr(struct nx_info *nxi,
- return 0;
- }
-
-+int do_remove_v6_addr(struct nx_info *nxi,
-+ struct in6_addr *ip, struct in6_addr *mask,
-+ uint32_t prefix, uint16_t type, uint16_t flags)
-+{
-+ struct nx_addr_v6 *nxa = &nxi->v6;
-+ struct nx_addr_v6 *old = NULL;
-+ int ret = 0;
-+
-+ spin_lock(&nxi->addr_lock);
-+ switch (type) {
-+/* case NXA_TYPE_ADDR:
-+ break; */
-+
-+ case NXA_TYPE_ANY:
-+ old = xchg(&nxa->next, NULL);
-+ memset(nxa, 0, sizeof(*nxa));
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ }
-+ spin_unlock(&nxi->addr_lock);
-+ __dealloc_nx_addr_v6_all(old);
-+ return ret;
-+}
-
- int vc_net_add_ipv6(struct nx_info *nxi, void __user *data)
- {
-@@ -831,10 +873,8 @@ int vc_net_remove_ipv6(struct nx_info *n
-
- switch (vc_data.type) {
- case NXA_TYPE_ANY:
-- __dealloc_nx_addr_v6_all(xchg(&nxi->v6.next, NULL));
-- memset(&nxi->v6, 0, sizeof(nxi->v6));
-+ do_remove_v6_addr(nxi, NULL, NULL, 0, vc_data.type, 0);
- break;
--
- default:
- return -EINVAL;
- }
---- linux-3.7/net/ipv6/netfilter/ip6t_MASQUERADE.c~ 2012-12-11 04:30:57.000000000 +0100
-+++ linux-3.7/net/ipv6/netfilter/ip6t_MASQUERADE.c 2012-12-13 21:09:30.741602424 +0100
-@@ -34,7 +34,7 @@
- ctinfo == IP_CT_RELATED_REPLY));
-
- if (ipv6_dev_get_saddr(dev_net(par->out), par->out,
-- &ipv6_hdr(skb)->daddr, 0, &src) < 0)
-+ &ipv6_hdr(skb)->daddr, 0, &src, NULL) < 0)
- return NF_DROP;
-
- nfct_nat(ct)->masq_index = par->out->ifindex;