-diff -NurpP --minimal linux-2.6.37/arch/alpha/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/alpha/Kconfig
---- linux-2.6.37/arch/alpha/Kconfig 2011-01-05 21:48:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/alpha/Kconfig 2010-11-23 02:09:40.000000000 +0100
-@@ -677,6 +677,8 @@ config DUMMY_CONSOLE
+diff -NurpP --minimal linux-2.6.38-rc8/Documentation/vserver/debug.txt linux-2.6.38-rc8-vs2.3.0.37-rc6/Documentation/vserver/debug.txt
+--- linux-2.6.38-rc8/Documentation/vserver/debug.txt 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/Documentation/vserver/debug.txt 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,154 @@
++
++debug_cvirt:
++
++ 2 4 "vx_map_tgid: %p/%llx: %d -> %d"
++ "vx_rmap_tgid: %p/%llx: %d -> %d"
++
++debug_dlim:
++
++ 0 1 "ALLOC (%p,#%d)%c inode (%d)"
++ "FREE (%p,#%d)%c inode"
++ 1 2 "ALLOC (%p,#%d)%c %lld bytes (%d)"
++ "FREE (%p,#%d)%c %lld bytes"
++ 2 4 "ADJUST: %lld,%lld on %ld,%ld [mult=%d]"
++ 3 8 "ext3_has_free_blocks(%p): %lu<%lu+1, %c, %u!=%u r=%d"
++ "ext3_has_free_blocks(%p): free=%lu, root=%lu"
++ "rcu_free_dl_info(%p)"
++ 4 10 "alloc_dl_info(%p,%d) = %p"
++ "dealloc_dl_info(%p)"
++ "get_dl_info(%p[#%d.%d])"
++ "put_dl_info(%p[#%d.%d])"
++ 5 20 "alloc_dl_info(%p,%d)*"
++ 6 40 "__hash_dl_info: %p[#%d]"
++ "__unhash_dl_info: %p[#%d]"
++ 7 80 "locate_dl_info(%p,#%d) = %p"
++
++debug_misc:
++
++ 0 1 "destroy_dqhash: %p [#0x%08x] c=%d"
++ "new_dqhash: %p [#0x%08x]"
++ "vroot[%d]_clr_dev: dev=%p[%lu,%d:%d]"
++ "vroot[%d]_get_real_bdev: dev=%p[%lu,%d:%d]"
++ "vroot[%d]_set_dev: dev=%p[%lu,%d:%d]"
++ "vroot_get_real_bdev not set"
++ 1 2 "cow_break_link(»%s«)"
++ "temp copy »%s«"
++ 2 4 "dentry_open(new): %p"
++ "dentry_open(old): %p"
++ "lookup_create(new): %p"
++ "old path »%s«"
++ "path_lookup(old): %d"
++ "vfs_create(new): %d"
++ "vfs_rename: %d"
++ "vfs_sendfile: %d"
++ 3 8 "fput(new_file=%p[#%d])"
++ "fput(old_file=%p[#%d])"
++ 4 10 "vx_info_kill(%p[#%d],%d,%d) = %d"
++ "vx_info_kill(%p[#%d],%d,%d)*"
++ 5 20 "vs_reboot(%p[#%d],%d)"
++ 6 40 "dropping task %p[#%u,%u] for %p[#%u,%u]"
++
++debug_net:
++
++ 2 4 "nx_addr_conflict(%p,%p) %d.%d,%d.%d"
++ 3 8 "inet_bind(%p) %d.%d.%d.%d, %d.%d.%d.%d, %d.%d.%d.%d"
++ "inet_bind(%p)* %p,%p;%lx %d.%d.%d.%d"
++ 4 10 "ip_route_connect(%p) %p,%p;%lx"
++ 5 20 "__addr_in_socket(%p,%d.%d.%d.%d) %p:%d.%d.%d.%d %p;%lx"
++ 6 40 "sk,egf: %p [#%d] (from %d)"
++ "sk,egn: %p [#%d] (from %d)"
++ "sk,req: %p [#%d] (from %d)"
++ "sk: %p [#%d] (from %d)"
++ "tw: %p [#%d] (from %d)"
++ 7 80 "__sock_recvmsg: %p[%p,%p,%p;%d]:%d/%d"
++ "__sock_sendmsg: %p[%p,%p,%p;%d]:%d/%d"
++
++debug_nid:
++
++ 0 1 "__lookup_nx_info(#%u): %p[#%u]"
++ "alloc_nx_info(%d) = %p"
++ "create_nx_info(%d) (dynamic rejected)"
++ "create_nx_info(%d) = %p (already there)"
++ "create_nx_info(%d) = %p (new)"
++ "dealloc_nx_info(%p)"
++ 1 2 "alloc_nx_info(%d)*"
++ "create_nx_info(%d)*"
++ 2 4 "get_nx_info(%p[#%d.%d])"
++ "put_nx_info(%p[#%d.%d])"
++ 3 8 "claim_nx_info(%p[#%d.%d.%d]) %p"
++ "clr_nx_info(%p[#%d.%d])"
++ "init_nx_info(%p[#%d.%d])"
++ "release_nx_info(%p[#%d.%d.%d]) %p"
++ "set_nx_info(%p[#%d.%d])"
++ 4 10 "__hash_nx_info: %p[#%d]"
++ "__nx_dynamic_id: [#%d]"
++ "__unhash_nx_info: %p[#%d.%d.%d]"
++ 5 20 "moved task %p into nxi:%p[#%d]"
++ "nx_migrate_task(%p,%p[#%d.%d.%d])"
++ "task_get_nx_info(%p)"
++ 6 40 "nx_clear_persistent(%p[#%d])"
++
++debug_quota:
++
++ 0 1 "quota_sync_dqh(%p,%d) discard inode %p"
++ 1 2 "quota_sync_dqh(%p,%d)"
++ "sync_dquots(%p,%d)"
++ "sync_dquots_dqh(%p,%d)"
++ 3 8 "do_quotactl(%p,%d,cmd=%d,id=%d,%p)"
++
++debug_switch:
++
++ 0 1 "vc: VCMD_%02d_%d[%d], %d,%p [%d,%d,%x,%x]"
++ 1 2 "vc: VCMD_%02d_%d[%d] = %08lx(%ld) [%d,%d]"
++ 4 10 "%s: (%s %s) returned %s with %d"
++
++debug_tag:
++
++ 7 80 "dx_parse_tag(»%s«): %d:#%d"
++ "dx_propagate_tag(%p[#%lu.%d]): %d,%d"
++
++debug_xid:
++
++ 0 1 "__lookup_vx_info(#%u): %p[#%u]"
++ "alloc_vx_info(%d) = %p"
++ "alloc_vx_info(%d)*"
++ "create_vx_info(%d) (dynamic rejected)"
++ "create_vx_info(%d) = %p (already there)"
++ "create_vx_info(%d) = %p (new)"
++ "dealloc_vx_info(%p)"
++ "loc_vx_info(%d) = %p (found)"
++ "loc_vx_info(%d) = %p (new)"
++ "loc_vx_info(%d) = %p (not available)"
++ 1 2 "create_vx_info(%d)*"
++ "loc_vx_info(%d)*"
++ 2 4 "get_vx_info(%p[#%d.%d])"
++ "put_vx_info(%p[#%d.%d])"
++ 3 8 "claim_vx_info(%p[#%d.%d.%d]) %p"
++ "clr_vx_info(%p[#%d.%d])"
++ "init_vx_info(%p[#%d.%d])"
++ "release_vx_info(%p[#%d.%d.%d]) %p"
++ "set_vx_info(%p[#%d.%d])"
++ 4 10 "__hash_vx_info: %p[#%d]"
++ "__unhash_vx_info: %p[#%d.%d.%d]"
++ "__vx_dynamic_id: [#%d]"
++ 5 20 "enter_vx_info(%p[#%d],%p) %p[#%d,%p]"
++ "leave_vx_info(%p[#%d,%p]) %p[#%d,%p]"
++ "moved task %p into vxi:%p[#%d]"
++ "task_get_vx_info(%p)"
++ "vx_migrate_task(%p,%p[#%d.%d])"
++ 6 40 "vx_clear_persistent(%p[#%d])"
++ "vx_exit_init(%p[#%d],%p[#%d,%d,%d])"
++ "vx_set_init(%p[#%d],%p[#%d,%d,%d])"
++ "vx_set_persistent(%p[#%d])"
++ "vx_set_reaper(%p[#%d],%p[#%d,%d])"
++ 7 80 "vx_child_reaper(%p[#%u,%u]) = %p[#%u,%u]"
++
++
++debug_limit:
++
++ n 2^n "vx_acc_cres[%5d,%s,%2d]: %5d%s"
++ "vx_cres_avail[%5d,%s,%2d]: %5ld > %5d + %5d"
++
++ 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-2.6.38-rc8/arch/alpha/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/alpha/Kconfig
+--- linux-2.6.38-rc8/arch/alpha/Kconfig 2011-03-10 17:08:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/alpha/Kconfig 2011-03-10 17:21:19.000000000 +0100
+@@ -668,6 +668,8 @@ config DUMMY_CONSOLE
depends on VGA_HOSE
default y
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/alpha/kernel/entry.S linux-2.6.37-vs2.3.0.37-rc3/arch/alpha/kernel/entry.S
---- linux-2.6.37/arch/alpha/kernel/entry.S 2010-10-21 13:06:45.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/alpha/kernel/entry.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/alpha/kernel/entry.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/alpha/kernel/entry.S
+--- linux-2.6.38-rc8/arch/alpha/kernel/entry.S 2010-10-21 13:06:45.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/alpha/kernel/entry.S 2011-01-29 02:01:07.000000000 +0100
@@ -860,24 +860,15 @@ sys_getxgid:
.globl sys_getxpid
.ent sys_getxpid
ret
.end sys_getxpid
-diff -NurpP --minimal linux-2.6.37/arch/alpha/kernel/ptrace.c linux-2.6.37-vs2.3.0.37-rc3/arch/alpha/kernel/ptrace.c
---- linux-2.6.37/arch/alpha/kernel/ptrace.c 2011-01-05 21:48:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/alpha/kernel/ptrace.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/alpha/kernel/ptrace.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/alpha/kernel/ptrace.c
+--- linux-2.6.38-rc8/arch/alpha/kernel/ptrace.c 2011-01-05 21:48:40.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/alpha/kernel/ptrace.c 2011-01-29 02:01:07.000000000 +0100
@@ -13,6 +13,7 @@
#include <linux/user.h>
#include <linux/security.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>
-diff -NurpP --minimal linux-2.6.37/arch/alpha/kernel/systbls.S linux-2.6.37-vs2.3.0.37-rc3/arch/alpha/kernel/systbls.S
---- linux-2.6.37/arch/alpha/kernel/systbls.S 2010-10-21 13:06:46.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/alpha/kernel/systbls.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/alpha/kernel/systbls.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/alpha/kernel/systbls.S
+--- linux-2.6.38-rc8/arch/alpha/kernel/systbls.S 2010-10-21 13:06:46.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/alpha/kernel/systbls.S 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/arch/alpha/kernel/traps.c linux-2.6.37-vs2.3.0.37-rc3/arch/alpha/kernel/traps.c
---- linux-2.6.37/arch/alpha/kernel/traps.c 2010-10-21 13:06:46.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/alpha/kernel/traps.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/alpha/kernel/traps.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/alpha/kernel/traps.c
+--- linux-2.6.38-rc8/arch/alpha/kernel/traps.c 2010-10-21 13:06:46.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/alpha/kernel/traps.c 2011-01-29 02:01:07.000000000 +0100
@@ -183,7 +183,8 @@ die_if_kernel(char * str, struct pt_regs
#ifdef CONFIG_SMP
printk("CPU %d ", hard_smp_processor_id());
dik_show_regs(regs, r9_15);
add_taint(TAINT_DIE);
dik_show_trace((unsigned long *)(regs+1));
-diff -NurpP --minimal linux-2.6.37/arch/arm/include/asm/tlb.h linux-2.6.37-vs2.3.0.37-rc3/arch/arm/include/asm/tlb.h
---- linux-2.6.37/arch/arm/include/asm/tlb.h 2009-09-10 15:25:15.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/arm/include/asm/tlb.h 2010-11-23 02:09:40.000000000 +0100
-@@ -27,6 +27,7 @@
-
- #else /* !CONFIG_MMU */
-
-+#include <linux/vs_memory.h>
- #include <asm/pgalloc.h>
-
- /*
-diff -NurpP --minimal linux-2.6.37/arch/arm/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/arm/Kconfig
---- linux-2.6.37/arch/arm/Kconfig 2011-01-05 21:48:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/arm/Kconfig 2011-01-05 22:30:25.000000000 +0100
-@@ -1854,6 +1854,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/arm/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/arm/Kconfig
+--- linux-2.6.38-rc8/arch/arm/Kconfig 2011-03-10 17:08:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/arm/Kconfig 2011-03-07 16:53:25.000000000 +0100
+@@ -1934,6 +1934,8 @@ source "fs/Kconfig"
source "arch/arm/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/arm/kernel/calls.S linux-2.6.37-vs2.3.0.37-rc3/arch/arm/kernel/calls.S
---- linux-2.6.37/arch/arm/kernel/calls.S 2010-10-21 13:06:46.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/arm/kernel/calls.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/arm/kernel/calls.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/arm/kernel/calls.S
+--- linux-2.6.38-rc8/arch/arm/kernel/calls.S 2010-10-21 13:06:46.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/arm/kernel/calls.S 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/arch/arm/kernel/process.c linux-2.6.37-vs2.3.0.37-rc3/arch/arm/kernel/process.c
---- linux-2.6.37/arch/arm/kernel/process.c 2011-01-05 21:48:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/arm/kernel/process.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/arm/kernel/process.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/arm/kernel/process.c
+--- linux-2.6.38-rc8/arch/arm/kernel/process.c 2011-03-10 17:08:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/arm/kernel/process.c 2011-01-29 02:01:07.000000000 +0100
@@ -315,7 +315,8 @@ void __show_regs(struct pt_regs *regs)
void show_regs(struct pt_regs * regs)
{
__show_regs(regs);
__backtrace();
}
-diff -NurpP --minimal linux-2.6.37/arch/arm/kernel/traps.c linux-2.6.37-vs2.3.0.37-rc3/arch/arm/kernel/traps.c
---- linux-2.6.37/arch/arm/kernel/traps.c 2011-01-05 21:48:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/arm/kernel/traps.c 2010-11-23 02:09:40.000000000 +0100
-@@ -241,8 +241,8 @@ static int __die(const char *str, int er
+diff -NurpP --minimal linux-2.6.38-rc8/arch/arm/kernel/traps.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/arm/kernel/traps.c
+--- linux-2.6.38-rc8/arch/arm/kernel/traps.c 2011-03-10 17:08:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/arm/kernel/traps.c 2011-01-29 02:01:07.000000000 +0100
+@@ -243,8 +243,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-2.6.37/arch/cris/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/cris/Kconfig
---- linux-2.6.37/arch/cris/Kconfig 2011-01-05 21:48:58.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/cris/Kconfig 2010-11-23 02:09:40.000000000 +0100
-@@ -687,6 +687,8 @@ source "drivers/staging/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/cris/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/cris/Kconfig
+--- linux-2.6.38-rc8/arch/cris/Kconfig 2011-03-10 17:08:41.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/cris/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -685,6 +685,8 @@ source "drivers/staging/Kconfig"
source "arch/cris/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/frv/kernel/kernel_thread.S linux-2.6.37-vs2.3.0.37-rc3/arch/frv/kernel/kernel_thread.S
---- linux-2.6.37/arch/frv/kernel/kernel_thread.S 2008-12-25 00:26:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/frv/kernel/kernel_thread.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/frv/kernel/kernel_thread.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/frv/kernel/kernel_thread.S
+--- linux-2.6.38-rc8/arch/frv/kernel/kernel_thread.S 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/frv/kernel/kernel_thread.S 2011-01-29 02:01:07.000000000 +0100
@@ -37,7 +37,7 @@ kernel_thread:
# start by forking the current process, but with shared VM
sethi.p #0xe4e4,gr9 ; second syscall arg [newsp]
setlo #0xe4e4,gr9
setlos.p #0,gr10 ; third syscall arg [parent_tidptr]
-diff -NurpP --minimal linux-2.6.37/arch/h8300/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/h8300/Kconfig
---- linux-2.6.37/arch/h8300/Kconfig 2011-01-05 21:48:59.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/h8300/Kconfig 2010-11-23 02:09:40.000000000 +0100
-@@ -219,6 +219,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/h8300/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/h8300/Kconfig
+--- linux-2.6.38-rc8/arch/h8300/Kconfig 2011-03-10 17:08:41.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/h8300/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -217,6 +217,8 @@ source "fs/Kconfig"
source "arch/h8300/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/ia64/include/asm/tlb.h linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/include/asm/tlb.h
---- linux-2.6.37/arch/ia64/include/asm/tlb.h 2010-02-25 11:51:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/include/asm/tlb.h 2010-11-23 02:09:40.000000000 +0100
-@@ -40,6 +40,7 @@
- #include <linux/mm.h>
- #include <linux/pagemap.h>
- #include <linux/swap.h>
-+#include <linux/vs_memory.h>
-
- #include <asm/pgalloc.h>
- #include <asm/processor.h>
-diff -NurpP --minimal linux-2.6.37/arch/ia64/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/Kconfig
---- linux-2.6.37/arch/ia64/Kconfig 2011-01-05 21:48:59.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/Kconfig 2010-11-23 02:09:40.000000000 +0100
-@@ -670,6 +670,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/ia64/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/Kconfig
+--- linux-2.6.38-rc8/arch/ia64/Kconfig 2011-03-10 17:08:41.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -674,6 +674,8 @@ source "fs/Kconfig"
source "arch/ia64/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/ia64/kernel/entry.S linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/kernel/entry.S
---- linux-2.6.37/arch/ia64/kernel/entry.S 2010-10-21 13:06:52.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/kernel/entry.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/ia64/include/asm/tlb.h linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/include/asm/tlb.h
+--- linux-2.6.38-rc8/arch/ia64/include/asm/tlb.h 2010-02-25 11:51:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/include/asm/tlb.h 2011-01-29 02:01:07.000000000 +0100
+@@ -40,6 +40,7 @@
+ #include <linux/mm.h>
+ #include <linux/pagemap.h>
+ #include <linux/swap.h>
++#include <linux/vs_memory.h>
+
+ #include <asm/pgalloc.h>
+ #include <asm/processor.h>
+diff -NurpP --minimal linux-2.6.38-rc8/arch/ia64/kernel/entry.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/kernel/entry.S
+--- linux-2.6.38-rc8/arch/ia64/kernel/entry.S 2010-10-21 13:06:52.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/kernel/entry.S 2011-01-29 02:01:07.000000000 +0100
@@ -1714,7 +1714,7 @@ sys_call_table:
data8 sys_mq_notify
data8 sys_mq_getsetattr
data8 sys_waitid // 1270
data8 sys_add_key
data8 sys_request_key
-diff -NurpP --minimal linux-2.6.37/arch/ia64/kernel/perfmon.c linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/kernel/perfmon.c
---- linux-2.6.37/arch/ia64/kernel/perfmon.c 2011-01-05 21:48:59.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/kernel/perfmon.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/ia64/kernel/perfmon.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/kernel/perfmon.c
+--- linux-2.6.38-rc8/arch/ia64/kernel/perfmon.c 2011-03-10 17:08:41.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/kernel/perfmon.c 2011-01-29 02:01:07.000000000 +0100
@@ -42,6 +42,7 @@
#include <linux/completion.h>
#include <linux/tracehook.h>
#include <asm/errno.h>
#include <asm/intrinsics.h>
-diff -NurpP --minimal linux-2.6.37/arch/ia64/kernel/process.c linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/kernel/process.c
---- linux-2.6.37/arch/ia64/kernel/process.c 2010-10-21 13:06:52.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/kernel/process.c 2010-11-23 02:09:40.000000000 +0100
-@@ -113,8 +113,8 @@ show_regs (struct pt_regs *regs)
+diff -NurpP --minimal linux-2.6.38-rc8/arch/ia64/kernel/process.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/kernel/process.c
+--- linux-2.6.38-rc8/arch/ia64/kernel/process.c 2011-03-10 17:08:41.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/kernel/process.c 2011-01-29 02:01:07.000000000 +0100
+@@ -109,8 +109,8 @@ show_regs (struct pt_regs *regs)
unsigned long ip = regs->cr_iip + ia64_psr(regs)->ri;
print_modules();
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-2.6.37/arch/ia64/kernel/ptrace.c linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/kernel/ptrace.c
---- linux-2.6.37/arch/ia64/kernel/ptrace.c 2011-01-05 21:48:59.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/kernel/ptrace.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/ia64/kernel/ptrace.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/kernel/ptrace.c
+--- linux-2.6.38-rc8/arch/ia64/kernel/ptrace.c 2011-01-05 21:48:59.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/kernel/ptrace.c 2011-01-29 02:01:07.000000000 +0100
@@ -21,6 +21,7 @@
#include <linux/regset.h>
#include <linux/elf.h>
#include <asm/pgtable.h>
#include <asm/processor.h>
-diff -NurpP --minimal linux-2.6.37/arch/ia64/kernel/traps.c linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/kernel/traps.c
---- linux-2.6.37/arch/ia64/kernel/traps.c 2010-07-07 18:31:01.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/kernel/traps.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/ia64/kernel/traps.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/kernel/traps.c
+--- linux-2.6.38-rc8/arch/ia64/kernel/traps.c 2010-07-07 18:31:01.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/kernel/traps.c 2011-01-29 02:01:07.000000000 +0100
@@ -59,8 +59,9 @@ die (const char *str, struct pt_regs *re
put_cpu();
}
}
}
-diff -NurpP --minimal linux-2.6.37/arch/ia64/mm/fault.c linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/mm/fault.c
---- linux-2.6.37/arch/ia64/mm/fault.c 2010-08-02 16:52:04.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/ia64/mm/fault.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/ia64/mm/fault.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/mm/fault.c
+--- linux-2.6.38-rc8/arch/ia64/mm/fault.c 2010-08-02 16:52:04.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/ia64/mm/fault.c 2011-01-29 02:01:07.000000000 +0100
@@ -10,6 +10,7 @@
#include <linux/interrupt.h>
#include <linux/kprobes.h>
#include <asm/pgtable.h>
#include <asm/processor.h>
-diff -NurpP --minimal linux-2.6.37/arch/m32r/kernel/traps.c linux-2.6.37-vs2.3.0.37-rc3/arch/m32r/kernel/traps.c
---- linux-2.6.37/arch/m32r/kernel/traps.c 2009-12-03 20:01:57.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/m32r/kernel/traps.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/m32r/kernel/traps.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m32r/kernel/traps.c
+--- linux-2.6.38-rc8/arch/m32r/kernel/traps.c 2009-12-03 20:01:57.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m32r/kernel/traps.c 2011-01-29 02:01:07.000000000 +0100
@@ -196,8 +196,9 @@ static void show_registers(struct pt_reg
} else {
printk("SPI: %08lx\n", sp);
/*
* When in-kernel, we also print out the stack and code at the
-diff -NurpP --minimal linux-2.6.37/arch/m68k/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/m68k/Kconfig
---- linux-2.6.37/arch/m68k/Kconfig 2011-01-05 21:49:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/m68k/Kconfig 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/m68k/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m68k/Kconfig
+--- linux-2.6.38-rc8/arch/m68k/Kconfig 2011-01-05 21:49:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m68k/Kconfig 2011-01-29 02:01:07.000000000 +0100
@@ -610,6 +610,8 @@ source "fs/Kconfig"
source "arch/m68k/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/m68k/kernel/ptrace.c linux-2.6.37-vs2.3.0.37-rc3/arch/m68k/kernel/ptrace.c
---- linux-2.6.37/arch/m68k/kernel/ptrace.c 2011-01-05 21:49:01.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/m68k/kernel/ptrace.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/m68k/kernel/ptrace.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m68k/kernel/ptrace.c
+--- linux-2.6.38-rc8/arch/m68k/kernel/ptrace.c 2011-01-05 21:49:01.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m68k/kernel/ptrace.c 2011-01-29 02:01:07.000000000 +0100
@@ -18,6 +18,7 @@
#include <linux/ptrace.h>
#include <linux/user.h>
return ret;
out_eio:
-diff -NurpP --minimal linux-2.6.37/arch/m68k/kernel/traps.c linux-2.6.37-vs2.3.0.37-rc3/arch/m68k/kernel/traps.c
---- linux-2.6.37/arch/m68k/kernel/traps.c 2010-08-02 16:52:04.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/m68k/kernel/traps.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/m68k/kernel/traps.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m68k/kernel/traps.c
+--- linux-2.6.38-rc8/arch/m68k/kernel/traps.c 2010-08-02 16:52:04.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m68k/kernel/traps.c 2011-01-29 02:01:07.000000000 +0100
@@ -906,8 +906,8 @@ void show_registers(struct pt_regs *regs
printk("d4: %08lx d5: %08lx a0: %08lx a1: %08lx\n",
regs->d4, regs->d5, regs->a0, regs->a1);
addr = (unsigned long)&fp->un;
printk("Frame format=%X ", regs->format);
switch (regs->format) {
-diff -NurpP --minimal linux-2.6.37/arch/m68knommu/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/m68knommu/Kconfig
---- linux-2.6.37/arch/m68knommu/Kconfig 2011-01-05 21:49:01.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/m68knommu/Kconfig 2010-11-23 02:09:40.000000000 +0100
-@@ -732,6 +732,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/m68knommu/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m68knommu/Kconfig
+--- linux-2.6.38-rc8/arch/m68knommu/Kconfig 2011-03-10 17:08:42.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m68knommu/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -801,6 +801,8 @@ source "fs/Kconfig"
source "arch/m68knommu/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/m68knommu/kernel/traps.c linux-2.6.37-vs2.3.0.37-rc3/arch/m68knommu/kernel/traps.c
---- linux-2.6.37/arch/m68knommu/kernel/traps.c 2011-01-05 21:49:01.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/m68knommu/kernel/traps.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/m68knommu/kernel/traps.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m68knommu/kernel/traps.c
+--- linux-2.6.38-rc8/arch/m68knommu/kernel/traps.c 2011-01-05 21:49:01.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/m68knommu/kernel/traps.c 2011-01-29 02:01:07.000000000 +0100
@@ -78,8 +78,9 @@ void die_if_kernel(char *str, struct pt_
printk(KERN_EMERG "d4: %08lx d5: %08lx a0: %08lx a1: %08lx\n",
fp->d4, fp->d5, fp->a0, fp->a1);
show_stack(NULL, (unsigned long *)(fp + 1));
add_taint(TAINT_DIE);
do_exit(SIGSEGV);
-diff -NurpP --minimal linux-2.6.37/arch/mips/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/mips/Kconfig
---- linux-2.6.37/arch/mips/Kconfig 2011-01-05 21:49:03.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/mips/Kconfig 2011-01-05 22:30:26.000000000 +0100
-@@ -2396,6 +2396,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/mips/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/Kconfig
+--- linux-2.6.38-rc8/arch/mips/Kconfig 2011-03-10 17:08:43.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -2414,6 +2414,8 @@ source "fs/Kconfig"
source "arch/mips/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/mips/kernel/ptrace.c linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/ptrace.c
---- linux-2.6.37/arch/mips/kernel/ptrace.c 2011-01-05 21:49:06.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/ptrace.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/mips/kernel/ptrace.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/ptrace.c
+--- linux-2.6.38-rc8/arch/mips/kernel/ptrace.c 2011-01-05 21:49:06.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/ptrace.c 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/arch/mips/kernel/scall32-o32.S linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/scall32-o32.S
---- linux-2.6.37/arch/mips/kernel/scall32-o32.S 2010-10-21 13:06:54.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/scall32-o32.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/mips/kernel/scall32-o32.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/scall32-o32.S
+--- linux-2.6.38-rc8/arch/mips/kernel/scall32-o32.S 2010-10-21 13:06:54.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/scall32-o32.S 2011-01-29 02:01:07.000000000 +0100
@@ -524,7 +524,7 @@ einval: li v0, -ENOSYS
sys sys_mq_timedreceive 5
sys sys_mq_notify 2 /* 4275 */
sys sys_waitid 5
sys sys_ni_syscall 0 /* available, was setaltroot */
sys sys_add_key 5 /* 4280 */
-diff -NurpP --minimal linux-2.6.37/arch/mips/kernel/scall64-64.S linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/scall64-64.S
---- linux-2.6.37/arch/mips/kernel/scall64-64.S 2010-10-21 13:06:54.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/scall64-64.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/mips/kernel/scall64-64.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/scall64-64.S
+--- linux-2.6.38-rc8/arch/mips/kernel/scall64-64.S 2010-10-21 13:06:54.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/scall64-64.S 2011-01-29 02:01:07.000000000 +0100
@@ -363,7 +363,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-2.6.37/arch/mips/kernel/scall64-n32.S linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/scall64-n32.S
---- linux-2.6.37/arch/mips/kernel/scall64-n32.S 2010-10-21 13:06:54.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/scall64-n32.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/mips/kernel/scall64-n32.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/scall64-n32.S
+--- linux-2.6.38-rc8/arch/mips/kernel/scall64-n32.S 2010-10-21 13:06:54.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/scall64-n32.S 2011-01-29 02:01:07.000000000 +0100
@@ -362,7 +362,7 @@ EXPORT(sysn32_call_table)
PTR compat_sys_mq_timedreceive
PTR compat_sys_mq_notify
PTR compat_sys_waitid
PTR sys_ni_syscall /* available, was setaltroot */
PTR sys_add_key
-diff -NurpP --minimal linux-2.6.37/arch/mips/kernel/scall64-o32.S linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/scall64-o32.S
---- linux-2.6.37/arch/mips/kernel/scall64-o32.S 2010-10-21 13:06:54.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/scall64-o32.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/mips/kernel/scall64-o32.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/scall64-o32.S
+--- linux-2.6.38-rc8/arch/mips/kernel/scall64-o32.S 2010-10-21 13:06:54.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/scall64-o32.S 2011-01-29 02:01:07.000000000 +0100
@@ -481,7 +481,7 @@ sys_call_table:
PTR compat_sys_mq_timedreceive
PTR compat_sys_mq_notify /* 4275 */
PTR sys_32_waitid
PTR sys_ni_syscall /* available, was setaltroot */
PTR sys_add_key /* 4280 */
-diff -NurpP --minimal linux-2.6.37/arch/mips/kernel/traps.c linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/traps.c
---- linux-2.6.37/arch/mips/kernel/traps.c 2011-01-05 21:49:06.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/mips/kernel/traps.c 2011-01-05 22:30:26.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/mips/kernel/traps.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/traps.c
+--- linux-2.6.38-rc8/arch/mips/kernel/traps.c 2011-03-10 17:08:44.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/mips/kernel/traps.c 2011-01-29 02:01:07.000000000 +0100
@@ -343,9 +343,10 @@ void show_registers(struct pt_regs *regs
__show_regs(regs);
if (cpu_has_userlocal) {
unsigned long tls;
-diff -NurpP --minimal linux-2.6.37/arch/parisc/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/parisc/Kconfig
---- linux-2.6.37/arch/parisc/Kconfig 2011-01-05 21:49:08.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/parisc/Kconfig 2010-11-23 02:09:40.000000000 +0100
-@@ -293,6 +293,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/parisc/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/parisc/Kconfig
+--- linux-2.6.38-rc8/arch/parisc/Kconfig 2011-03-10 17:08:44.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/parisc/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -283,6 +283,8 @@ source "fs/Kconfig"
source "arch/parisc/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/parisc/kernel/syscall_table.S linux-2.6.37-vs2.3.0.37-rc3/arch/parisc/kernel/syscall_table.S
---- linux-2.6.37/arch/parisc/kernel/syscall_table.S 2011-01-05 21:49:09.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/parisc/kernel/syscall_table.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/parisc/kernel/syscall_table.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/parisc/kernel/syscall_table.S
+--- linux-2.6.38-rc8/arch/parisc/kernel/syscall_table.S 2011-01-05 21:49:09.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/parisc/kernel/syscall_table.S 2011-01-29 02:01:07.000000000 +0100
@@ -361,7 +361,7 @@
ENTRY_COMP(mbind) /* 260 */
ENTRY_COMP(get_mempolicy)
ENTRY_SAME(add_key)
ENTRY_SAME(request_key) /* 265 */
ENTRY_SAME(keyctl)
-diff -NurpP --minimal linux-2.6.37/arch/parisc/kernel/traps.c linux-2.6.37-vs2.3.0.37-rc3/arch/parisc/kernel/traps.c
---- linux-2.6.37/arch/parisc/kernel/traps.c 2009-09-10 15:25:40.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/parisc/kernel/traps.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/parisc/kernel/traps.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/parisc/kernel/traps.c
+--- linux-2.6.38-rc8/arch/parisc/kernel/traps.c 2009-09-10 15:25:40.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/parisc/kernel/traps.c 2011-01-29 02:01:07.000000000 +0100
@@ -236,8 +236,9 @@ void die_if_kernel(char *str, struct pt_
if (err == 0)
return; /* STFU */
/* Wot's wrong wif bein' racy? */
if (current->thread.flags & PARISC_KERNEL_DEATH) {
-diff -NurpP --minimal linux-2.6.37/arch/parisc/mm/fault.c linux-2.6.37-vs2.3.0.37-rc3/arch/parisc/mm/fault.c
---- linux-2.6.37/arch/parisc/mm/fault.c 2010-08-02 16:52:06.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/parisc/mm/fault.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/parisc/mm/fault.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/parisc/mm/fault.c
+--- linux-2.6.38-rc8/arch/parisc/mm/fault.c 2010-08-02 16:52:06.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/parisc/mm/fault.c 2011-01-29 02:01:07.000000000 +0100
@@ -237,8 +237,9 @@ bad_area:
#ifdef PRINT_USER_FAULTS
if (vma) {
printk(KERN_DEBUG "vm_start = 0x%08lx, vm_end = 0x%08lx\n",
vma->vm_start, vma->vm_end);
-diff -NurpP --minimal linux-2.6.37/arch/powerpc/include/asm/unistd.h linux-2.6.37-vs2.3.0.37-rc3/arch/powerpc/include/asm/unistd.h
---- linux-2.6.37/arch/powerpc/include/asm/unistd.h 2011-01-05 21:49:10.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/powerpc/include/asm/unistd.h 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/powerpc/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/powerpc/Kconfig
+--- linux-2.6.38-rc8/arch/powerpc/Kconfig 2011-03-10 17:08:44.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/powerpc/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -964,6 +964,8 @@ source "lib/Kconfig"
+
+ source "arch/powerpc/Kconfig.debug"
+
++source "kernel/vserver/Kconfig"
++
+ source "security/Kconfig"
+
+ config KEYS_COMPAT
+diff -NurpP --minimal linux-2.6.38-rc8/arch/powerpc/include/asm/unistd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/powerpc/include/asm/unistd.h
+--- linux-2.6.38-rc8/arch/powerpc/include/asm/unistd.h 2011-01-05 21:49:10.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/powerpc/include/asm/unistd.h 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/arch/powerpc/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/powerpc/Kconfig
---- linux-2.6.37/arch/powerpc/Kconfig 2011-01-05 21:49:09.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/powerpc/Kconfig 2010-11-23 02:09:40.000000000 +0100
-@@ -976,6 +976,8 @@ source "lib/Kconfig"
-
- source "arch/powerpc/Kconfig.debug"
-
-+source "kernel/vserver/Kconfig"
-+
- source "security/Kconfig"
-
- config KEYS_COMPAT
-diff -NurpP --minimal linux-2.6.37/arch/powerpc/kernel/process.c linux-2.6.37-vs2.3.0.37-rc3/arch/powerpc/kernel/process.c
---- linux-2.6.37/arch/powerpc/kernel/process.c 2011-01-05 21:49:11.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/powerpc/kernel/process.c 2010-11-23 02:09:40.000000000 +0100
-@@ -633,8 +633,9 @@ void show_regs(struct pt_regs * regs)
+diff -NurpP --minimal linux-2.6.38-rc8/arch/powerpc/kernel/process.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/powerpc/kernel/process.c
+--- linux-2.6.38-rc8/arch/powerpc/kernel/process.c 2011-03-10 17:08:44.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/powerpc/kernel/process.c 2011-03-10 17:21:19.000000000 +0100
+@@ -635,8 +635,9 @@ void show_regs(struct pt_regs * regs)
#else
- printk("DAR: "REG", DSISR: "REG"\n", regs->dar, regs->dsisr);
+ 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));
#ifdef CONFIG_SMP
printk(" CPU: %d", raw_smp_processor_id());
-diff -NurpP --minimal linux-2.6.37/arch/powerpc/kernel/traps.c linux-2.6.37-vs2.3.0.37-rc3/arch/powerpc/kernel/traps.c
---- linux-2.6.37/arch/powerpc/kernel/traps.c 2011-01-05 21:49:11.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/powerpc/kernel/traps.c 2010-11-23 02:09:40.000000000 +0100
-@@ -1053,8 +1053,9 @@ void nonrecoverable_exception(struct pt_
+diff -NurpP --minimal linux-2.6.38-rc8/arch/powerpc/kernel/traps.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/powerpc/kernel/traps.c
+--- linux-2.6.38-rc8/arch/powerpc/kernel/traps.c 2011-03-10 17:08:44.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/powerpc/kernel/traps.c 2011-01-29 02:01:07.000000000 +0100
+@@ -1043,8 +1043,9 @@ void nonrecoverable_exception(struct pt_
void trace_syscall(struct pt_regs *regs)
{
regs->ccr&0x10000000?"Error=":"", regs->gpr[3], print_tainted());
}
-diff -NurpP --minimal linux-2.6.37/arch/powerpc/kernel/vdso.c linux-2.6.37-vs2.3.0.37-rc3/arch/powerpc/kernel/vdso.c
---- linux-2.6.37/arch/powerpc/kernel/vdso.c 2011-01-05 21:49:11.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/powerpc/kernel/vdso.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/powerpc/kernel/vdso.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/powerpc/kernel/vdso.c
+--- linux-2.6.38-rc8/arch/powerpc/kernel/vdso.c 2011-01-05 21:49:11.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/powerpc/kernel/vdso.c 2011-01-29 02:01:07.000000000 +0100
@@ -23,6 +23,7 @@
#include <linux/security.h>
#include <linux/bootmem.h>
#include <asm/pgtable.h>
#include <asm/system.h>
-diff -NurpP --minimal linux-2.6.37/arch/s390/include/asm/tlb.h linux-2.6.37-vs2.3.0.37-rc3/arch/s390/include/asm/tlb.h
---- linux-2.6.37/arch/s390/include/asm/tlb.h 2011-01-05 21:49:13.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/s390/include/asm/tlb.h 2010-11-23 02:09:40.000000000 +0100
-@@ -23,6 +23,8 @@
+diff -NurpP --minimal linux-2.6.38-rc8/arch/s390/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/s390/Kconfig
+--- linux-2.6.38-rc8/arch/s390/Kconfig 2011-03-10 17:08:45.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/s390/Kconfig 2011-02-17 02:17:45.000000000 +0100
+@@ -645,6 +645,8 @@ source "fs/Kconfig"
+
+ source "arch/s390/Kconfig.debug"
+
++source "kernel/vserver/Kconfig"
++
+ source "security/Kconfig"
+ source "crypto/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/s390/include/asm/tlb.h linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/s390/include/asm/tlb.h
+--- linux-2.6.38-rc8/arch/s390/include/asm/tlb.h 2011-03-10 17:08:45.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/s390/include/asm/tlb.h 2011-02-17 02:17:45.000000000 +0100
+@@ -24,6 +24,8 @@
#include <linux/mm.h>
+ #include <linux/pagemap.h>
#include <linux/swap.h>
+#include <linux/vs_memory.h>
+
#include <asm/processor.h>
#include <asm/pgalloc.h>
#include <asm/smp.h>
-diff -NurpP --minimal linux-2.6.37/arch/s390/include/asm/unistd.h linux-2.6.37-vs2.3.0.37-rc3/arch/s390/include/asm/unistd.h
---- linux-2.6.37/arch/s390/include/asm/unistd.h 2010-10-21 13:06:58.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/s390/include/asm/unistd.h 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/s390/include/asm/unistd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/s390/include/asm/unistd.h
+--- linux-2.6.38-rc8/arch/s390/include/asm/unistd.h 2010-10-21 13:06:58.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/s390/include/asm/unistd.h 2011-01-29 02:01:07.000000000 +0100
@@ -202,7 +202,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-2.6.37/arch/s390/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/s390/Kconfig
---- linux-2.6.37/arch/s390/Kconfig 2011-01-05 21:49:12.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/s390/Kconfig 2010-11-23 02:09:40.000000000 +0100
-@@ -640,6 +640,8 @@ source "fs/Kconfig"
-
- source "arch/s390/Kconfig.debug"
-
-+source "kernel/vserver/Kconfig"
-+
- source "security/Kconfig"
-
- source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/s390/kernel/ptrace.c linux-2.6.37-vs2.3.0.37-rc3/arch/s390/kernel/ptrace.c
---- linux-2.6.37/arch/s390/kernel/ptrace.c 2011-01-05 21:49:13.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/s390/kernel/ptrace.c 2010-11-23 02:09:40.000000000 +0100
-@@ -36,6 +36,7 @@
+diff -NurpP --minimal linux-2.6.38-rc8/arch/s390/kernel/ptrace.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/s390/kernel/ptrace.c
+--- linux-2.6.38-rc8/arch/s390/kernel/ptrace.c 2011-03-10 17:08:45.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/s390/kernel/ptrace.c 2011-01-29 02:01:07.000000000 +0100
+@@ -20,6 +20,7 @@
#include <linux/regset.h>
#include <linux/tracehook.h>
#include <linux/seccomp.h>
#include <trace/syscall.h>
#include <asm/compat.h>
#include <asm/segment.h>
-diff -NurpP --minimal linux-2.6.37/arch/s390/kernel/syscalls.S linux-2.6.37-vs2.3.0.37-rc3/arch/s390/kernel/syscalls.S
---- linux-2.6.37/arch/s390/kernel/syscalls.S 2010-10-21 13:06:58.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/s390/kernel/syscalls.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/s390/kernel/syscalls.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/s390/kernel/syscalls.S
+--- linux-2.6.38-rc8/arch/s390/kernel/syscalls.S 2010-10-21 13:06:58.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/s390/kernel/syscalls.S 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/arch/sh/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/sh/Kconfig
---- linux-2.6.37/arch/sh/Kconfig 2011-01-05 21:49:13.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/sh/Kconfig 2011-01-05 22:30:27.000000000 +0100
-@@ -883,6 +883,8 @@ source "fs/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/sh/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sh/Kconfig
+--- linux-2.6.38-rc8/arch/sh/Kconfig 2011-03-10 17:08:45.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sh/Kconfig 2011-02-02 22:20:22.000000000 +0100
+@@ -889,6 +889,8 @@ source "fs/Kconfig"
source "arch/sh/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/sh/kernel/irq.c linux-2.6.37-vs2.3.0.37-rc3/arch/sh/kernel/irq.c
---- linux-2.6.37/arch/sh/kernel/irq.c 2011-01-05 21:49:16.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/sh/kernel/irq.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/sh/kernel/irq.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sh/kernel/irq.c
+--- linux-2.6.38-rc8/arch/sh/kernel/irq.c 2011-01-05 21:49:16.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sh/kernel/irq.c 2011-01-29 02:01:07.000000000 +0100
@@ -13,6 +13,7 @@
#include <linux/seq_file.h>
#include <linux/ftrace.h>
#include <asm/processor.h>
#include <asm/machvec.h>
#include <asm/uaccess.h>
-diff -NurpP --minimal linux-2.6.37/arch/sh/kernel/vsyscall/vsyscall.c linux-2.6.37-vs2.3.0.37-rc3/arch/sh/kernel/vsyscall/vsyscall.c
---- linux-2.6.37/arch/sh/kernel/vsyscall/vsyscall.c 2010-07-07 18:31:10.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/sh/kernel/vsyscall/vsyscall.c 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/sh/kernel/vsyscall/vsyscall.c linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sh/kernel/vsyscall/vsyscall.c
+--- linux-2.6.38-rc8/arch/sh/kernel/vsyscall/vsyscall.c 2010-07-07 18:31:10.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sh/kernel/vsyscall/vsyscall.c 2011-01-29 02:01:07.000000000 +0100
@@ -18,6 +18,7 @@
#include <linux/elf.h>
#include <linux/sched.h>
/*
* Should the kernel map a VDSO page into processes and pass its
-diff -NurpP --minimal linux-2.6.37/arch/sparc/include/asm/tlb_64.h linux-2.6.37-vs2.3.0.37-rc3/arch/sparc/include/asm/tlb_64.h
---- linux-2.6.37/arch/sparc/include/asm/tlb_64.h 2009-09-10 15:25:45.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/sparc/include/asm/tlb_64.h 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/sparc/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sparc/Kconfig
+--- linux-2.6.38-rc8/arch/sparc/Kconfig 2011-03-10 17:08:47.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sparc/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -553,6 +553,8 @@ source "fs/Kconfig"
+
+ source "arch/sparc/Kconfig.debug"
+
++source "kernel/vserver/Kconfig"
++
+ source "security/Kconfig"
+
+ source "crypto/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/sparc/include/asm/tlb_64.h linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sparc/include/asm/tlb_64.h
+--- linux-2.6.38-rc8/arch/sparc/include/asm/tlb_64.h 2009-09-10 15:25:45.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sparc/include/asm/tlb_64.h 2011-01-29 02:01:07.000000000 +0100
@@ -3,6 +3,7 @@
#include <linux/swap.h>
#include <asm/pgalloc.h>
#include <asm/tlbflush.h>
#include <asm/mmu_context.h>
-diff -NurpP --minimal linux-2.6.37/arch/sparc/include/asm/unistd.h linux-2.6.37-vs2.3.0.37-rc3/arch/sparc/include/asm/unistd.h
---- linux-2.6.37/arch/sparc/include/asm/unistd.h 2010-10-21 13:06:58.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/sparc/include/asm/unistd.h 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/sparc/include/asm/unistd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sparc/include/asm/unistd.h
+--- linux-2.6.38-rc8/arch/sparc/include/asm/unistd.h 2010-10-21 13:06:58.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sparc/include/asm/unistd.h 2011-01-29 02:01:07.000000000 +0100
@@ -335,7 +335,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-2.6.37/arch/sparc/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/sparc/Kconfig
---- linux-2.6.37/arch/sparc/Kconfig 2011-01-05 21:49:17.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/sparc/Kconfig 2010-11-23 02:09:40.000000000 +0100
-@@ -560,6 +560,8 @@ source "fs/Kconfig"
-
- source "arch/sparc/Kconfig.debug"
-
-+source "kernel/vserver/Kconfig"
-+
- source "security/Kconfig"
-
- source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/sparc/kernel/systbls_32.S linux-2.6.37-vs2.3.0.37-rc3/arch/sparc/kernel/systbls_32.S
---- linux-2.6.37/arch/sparc/kernel/systbls_32.S 2010-10-21 13:06:59.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/sparc/kernel/systbls_32.S 2010-11-23 02:09:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/sparc/kernel/systbls_32.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sparc/kernel/systbls_32.S
+--- linux-2.6.38-rc8/arch/sparc/kernel/systbls_32.S 2010-10-21 13:06:59.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sparc/kernel/systbls_32.S 2011-01-29 02:01:07.000000000 +0100
@@ -70,7 +70,7 @@ sys_call_table:
/*250*/ .long sys_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nfsservctl
/*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-2.6.37/arch/sparc/kernel/systbls_64.S linux-2.6.37-vs2.3.0.37-rc3/arch/sparc/kernel/systbls_64.S
---- linux-2.6.37/arch/sparc/kernel/systbls_64.S 2010-10-21 13:06:59.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/sparc/kernel/systbls_64.S 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/sparc/kernel/systbls_64.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sparc/kernel/systbls_64.S
+--- linux-2.6.38-rc8/arch/sparc/kernel/systbls_64.S 2010-10-21 13:06:59.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/sparc/kernel/systbls_64.S 2011-01-29 02:01:07.000000000 +0100
@@ -71,7 +71,7 @@ sys_call_table32:
/*250*/ .word sys_mremap, compat_sys_sysctl, sys32_getsid, sys_fdatasync, sys32_nfsservctl
.word sys32_sync_file_range, compat_sys_clock_settime, compat_sys_clock_gettime, compat_sys_clock_getres, sys32_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-2.6.37/arch/um/include/asm/tlb.h linux-2.6.37-vs2.3.0.37-rc3/arch/um/include/asm/tlb.h
---- linux-2.6.37/arch/um/include/asm/tlb.h 2009-09-10 15:25:46.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/um/include/asm/tlb.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/um/Kconfig.rest linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/um/Kconfig.rest
+--- linux-2.6.38-rc8/arch/um/Kconfig.rest 2009-06-11 17:12:19.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/um/Kconfig.rest 2011-01-29 02:01:07.000000000 +0100
+@@ -18,6 +18,8 @@ source "drivers/connector/Kconfig"
+
+ source "fs/Kconfig"
+
++source "kernel/vserver/Kconfig"
++
+ source "security/Kconfig"
+
+ source "crypto/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/um/include/asm/tlb.h linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/um/include/asm/tlb.h
+--- linux-2.6.38-rc8/arch/um/include/asm/tlb.h 2009-09-10 15:25:46.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/um/include/asm/tlb.h 2011-01-29 02:01:07.000000000 +0100
@@ -3,6 +3,7 @@
#include <linux/pagemap.h>
#include <asm/percpu.h>
#include <asm/pgalloc.h>
#include <asm/tlbflush.h>
-diff -NurpP --minimal linux-2.6.37/arch/um/include/shared/kern_constants.h linux-2.6.37-vs2.3.0.37-rc3/arch/um/include/shared/kern_constants.h
---- linux-2.6.37/arch/um/include/shared/kern_constants.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/um/include/shared/kern_constants.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/um/include/shared/kern_constants.h linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/um/include/shared/kern_constants.h
+--- linux-2.6.38-rc8/arch/um/include/shared/kern_constants.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/um/include/shared/kern_constants.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1 @@
+#include "../../../../include/generated/asm-offsets.h"
-diff -NurpP --minimal linux-2.6.37/arch/um/include/shared/user_constants.h linux-2.6.37-vs2.3.0.37-rc3/arch/um/include/shared/user_constants.h
---- linux-2.6.37/arch/um/include/shared/user_constants.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/um/include/shared/user_constants.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/um/include/shared/user_constants.h linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/um/include/shared/user_constants.h
+--- linux-2.6.38-rc8/arch/um/include/shared/user_constants.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/um/include/shared/user_constants.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,40 @@
+/*
+ * DO NOT MODIFY.
+#define UM_PROT_WRITE 2 /* PROT_WRITE # */
+#define UM_PROT_EXEC 4 /* PROT_EXEC # */
+
-diff -NurpP --minimal linux-2.6.37/arch/um/Kconfig.rest linux-2.6.37-vs2.3.0.37-rc3/arch/um/Kconfig.rest
---- linux-2.6.37/arch/um/Kconfig.rest 2009-06-11 17:12:19.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/um/Kconfig.rest 2010-11-23 02:09:41.000000000 +0100
-@@ -18,6 +18,8 @@ source "drivers/connector/Kconfig"
+diff -NurpP --minimal linux-2.6.38-rc8/arch/x86/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/x86/Kconfig
+--- linux-2.6.38-rc8/arch/x86/Kconfig 2011-03-10 17:08:47.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/x86/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -2159,6 +2159,8 @@ source "fs/Kconfig"
- source "fs/Kconfig"
+ source "arch/x86/Kconfig.debug"
+source "kernel/vserver/Kconfig"
+
source "security/Kconfig"
source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/x86/ia32/ia32entry.S linux-2.6.37-vs2.3.0.37-rc3/arch/x86/ia32/ia32entry.S
---- linux-2.6.37/arch/x86/ia32/ia32entry.S 2010-10-21 13:06:59.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/x86/ia32/ia32entry.S 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/x86/ia32/ia32entry.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/x86/ia32/ia32entry.S
+--- linux-2.6.38-rc8/arch/x86/ia32/ia32entry.S 2010-10-21 13:06:59.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/x86/ia32/ia32entry.S 2011-01-29 02:01:07.000000000 +0100
@@ -783,7 +783,7 @@ ia32_sys_call_table:
.quad sys_tgkill /* 270 */
.quad compat_sys_utimes
.quad sys_mbind
.quad compat_sys_get_mempolicy /* 275 */
.quad sys_set_mempolicy
-diff -NurpP --minimal linux-2.6.37/arch/x86/include/asm/unistd_64.h linux-2.6.37-vs2.3.0.37-rc3/arch/x86/include/asm/unistd_64.h
---- linux-2.6.37/arch/x86/include/asm/unistd_64.h 2010-10-21 13:06:59.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/x86/include/asm/unistd_64.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/x86/include/asm/unistd_64.h linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/x86/include/asm/unistd_64.h
+--- linux-2.6.38-rc8/arch/x86/include/asm/unistd_64.h 2010-10-21 13:06:59.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/x86/include/asm/unistd_64.h 2011-01-29 02:01:07.000000000 +0100
@@ -535,7 +535,7 @@ __SYSCALL(__NR_tgkill, sys_tgkill)
#define __NR_utimes 235
__SYSCALL(__NR_utimes, sys_utimes)
#define __NR_mbind 237
__SYSCALL(__NR_mbind, sys_mbind)
#define __NR_set_mempolicy 238
-diff -NurpP --minimal linux-2.6.37/arch/x86/Kconfig linux-2.6.37-vs2.3.0.37-rc3/arch/x86/Kconfig
---- linux-2.6.37/arch/x86/Kconfig 2011-01-05 21:49:19.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/x86/Kconfig 2011-01-05 22:30:27.000000000 +0100
-@@ -2119,6 +2119,8 @@ source "fs/Kconfig"
-
- source "arch/x86/Kconfig.debug"
-
-+source "kernel/vserver/Kconfig"
-+
- source "security/Kconfig"
-
- source "crypto/Kconfig"
-diff -NurpP --minimal linux-2.6.37/arch/x86/kernel/syscall_table_32.S linux-2.6.37-vs2.3.0.37-rc3/arch/x86/kernel/syscall_table_32.S
---- linux-2.6.37/arch/x86/kernel/syscall_table_32.S 2010-10-21 13:07:00.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/arch/x86/kernel/syscall_table_32.S 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/arch/x86/kernel/syscall_table_32.S linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/x86/kernel/syscall_table_32.S
+--- linux-2.6.38-rc8/arch/x86/kernel/syscall_table_32.S 2010-10-21 13:07:00.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/arch/x86/kernel/syscall_table_32.S 2011-01-29 02:01:07.000000000 +0100
@@ -272,7 +272,7 @@ ENTRY(sys_call_table)
.long sys_tgkill /* 270 */
.long sys_utimes
.long sys_mbind
.long sys_get_mempolicy
.long sys_set_mempolicy
-diff -NurpP --minimal linux-2.6.37/Documentation/vserver/debug.txt linux-2.6.37-vs2.3.0.37-rc3/Documentation/vserver/debug.txt
---- linux-2.6.37/Documentation/vserver/debug.txt 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/Documentation/vserver/debug.txt 2010-11-23 02:09:40.000000000 +0100
-@@ -0,0 +1,154 @@
-+
-+debug_cvirt:
-+
-+ 2 4 "vx_map_tgid: %p/%llx: %d -> %d"
-+ "vx_rmap_tgid: %p/%llx: %d -> %d"
-+
-+debug_dlim:
-+
-+ 0 1 "ALLOC (%p,#%d)%c inode (%d)"
-+ "FREE (%p,#%d)%c inode"
-+ 1 2 "ALLOC (%p,#%d)%c %lld bytes (%d)"
-+ "FREE (%p,#%d)%c %lld bytes"
-+ 2 4 "ADJUST: %lld,%lld on %ld,%ld [mult=%d]"
-+ 3 8 "ext3_has_free_blocks(%p): %lu<%lu+1, %c, %u!=%u r=%d"
-+ "ext3_has_free_blocks(%p): free=%lu, root=%lu"
-+ "rcu_free_dl_info(%p)"
-+ 4 10 "alloc_dl_info(%p,%d) = %p"
-+ "dealloc_dl_info(%p)"
-+ "get_dl_info(%p[#%d.%d])"
-+ "put_dl_info(%p[#%d.%d])"
-+ 5 20 "alloc_dl_info(%p,%d)*"
-+ 6 40 "__hash_dl_info: %p[#%d]"
-+ "__unhash_dl_info: %p[#%d]"
-+ 7 80 "locate_dl_info(%p,#%d) = %p"
-+
-+debug_misc:
-+
-+ 0 1 "destroy_dqhash: %p [#0x%08x] c=%d"
-+ "new_dqhash: %p [#0x%08x]"
-+ "vroot[%d]_clr_dev: dev=%p[%lu,%d:%d]"
-+ "vroot[%d]_get_real_bdev: dev=%p[%lu,%d:%d]"
-+ "vroot[%d]_set_dev: dev=%p[%lu,%d:%d]"
-+ "vroot_get_real_bdev not set"
-+ 1 2 "cow_break_link(»%s«)"
-+ "temp copy »%s«"
-+ 2 4 "dentry_open(new): %p"
-+ "dentry_open(old): %p"
-+ "lookup_create(new): %p"
-+ "old path »%s«"
-+ "path_lookup(old): %d"
-+ "vfs_create(new): %d"
-+ "vfs_rename: %d"
-+ "vfs_sendfile: %d"
-+ 3 8 "fput(new_file=%p[#%d])"
-+ "fput(old_file=%p[#%d])"
-+ 4 10 "vx_info_kill(%p[#%d],%d,%d) = %d"
-+ "vx_info_kill(%p[#%d],%d,%d)*"
-+ 5 20 "vs_reboot(%p[#%d],%d)"
-+ 6 40 "dropping task %p[#%u,%u] for %p[#%u,%u]"
-+
-+debug_net:
-+
-+ 2 4 "nx_addr_conflict(%p,%p) %d.%d,%d.%d"
-+ 3 8 "inet_bind(%p) %d.%d.%d.%d, %d.%d.%d.%d, %d.%d.%d.%d"
-+ "inet_bind(%p)* %p,%p;%lx %d.%d.%d.%d"
-+ 4 10 "ip_route_connect(%p) %p,%p;%lx"
-+ 5 20 "__addr_in_socket(%p,%d.%d.%d.%d) %p:%d.%d.%d.%d %p;%lx"
-+ 6 40 "sk,egf: %p [#%d] (from %d)"
-+ "sk,egn: %p [#%d] (from %d)"
-+ "sk,req: %p [#%d] (from %d)"
-+ "sk: %p [#%d] (from %d)"
-+ "tw: %p [#%d] (from %d)"
-+ 7 80 "__sock_recvmsg: %p[%p,%p,%p;%d]:%d/%d"
-+ "__sock_sendmsg: %p[%p,%p,%p;%d]:%d/%d"
-+
-+debug_nid:
-+
-+ 0 1 "__lookup_nx_info(#%u): %p[#%u]"
-+ "alloc_nx_info(%d) = %p"
-+ "create_nx_info(%d) (dynamic rejected)"
-+ "create_nx_info(%d) = %p (already there)"
-+ "create_nx_info(%d) = %p (new)"
-+ "dealloc_nx_info(%p)"
-+ 1 2 "alloc_nx_info(%d)*"
-+ "create_nx_info(%d)*"
-+ 2 4 "get_nx_info(%p[#%d.%d])"
-+ "put_nx_info(%p[#%d.%d])"
-+ 3 8 "claim_nx_info(%p[#%d.%d.%d]) %p"
-+ "clr_nx_info(%p[#%d.%d])"
-+ "init_nx_info(%p[#%d.%d])"
-+ "release_nx_info(%p[#%d.%d.%d]) %p"
-+ "set_nx_info(%p[#%d.%d])"
-+ 4 10 "__hash_nx_info: %p[#%d]"
-+ "__nx_dynamic_id: [#%d]"
-+ "__unhash_nx_info: %p[#%d.%d.%d]"
-+ 5 20 "moved task %p into nxi:%p[#%d]"
-+ "nx_migrate_task(%p,%p[#%d.%d.%d])"
-+ "task_get_nx_info(%p)"
-+ 6 40 "nx_clear_persistent(%p[#%d])"
-+
-+debug_quota:
-+
-+ 0 1 "quota_sync_dqh(%p,%d) discard inode %p"
-+ 1 2 "quota_sync_dqh(%p,%d)"
-+ "sync_dquots(%p,%d)"
-+ "sync_dquots_dqh(%p,%d)"
-+ 3 8 "do_quotactl(%p,%d,cmd=%d,id=%d,%p)"
-+
-+debug_switch:
-+
-+ 0 1 "vc: VCMD_%02d_%d[%d], %d,%p [%d,%d,%x,%x]"
-+ 1 2 "vc: VCMD_%02d_%d[%d] = %08lx(%ld) [%d,%d]"
-+ 4 10 "%s: (%s %s) returned %s with %d"
-+
-+debug_tag:
-+
-+ 7 80 "dx_parse_tag(»%s«): %d:#%d"
-+ "dx_propagate_tag(%p[#%lu.%d]): %d,%d"
-+
-+debug_xid:
-+
-+ 0 1 "__lookup_vx_info(#%u): %p[#%u]"
-+ "alloc_vx_info(%d) = %p"
-+ "alloc_vx_info(%d)*"
-+ "create_vx_info(%d) (dynamic rejected)"
-+ "create_vx_info(%d) = %p (already there)"
-+ "create_vx_info(%d) = %p (new)"
-+ "dealloc_vx_info(%p)"
-+ "loc_vx_info(%d) = %p (found)"
-+ "loc_vx_info(%d) = %p (new)"
-+ "loc_vx_info(%d) = %p (not available)"
-+ 1 2 "create_vx_info(%d)*"
-+ "loc_vx_info(%d)*"
-+ 2 4 "get_vx_info(%p[#%d.%d])"
-+ "put_vx_info(%p[#%d.%d])"
-+ 3 8 "claim_vx_info(%p[#%d.%d.%d]) %p"
-+ "clr_vx_info(%p[#%d.%d])"
-+ "init_vx_info(%p[#%d.%d])"
-+ "release_vx_info(%p[#%d.%d.%d]) %p"
-+ "set_vx_info(%p[#%d.%d])"
-+ 4 10 "__hash_vx_info: %p[#%d]"
-+ "__unhash_vx_info: %p[#%d.%d.%d]"
-+ "__vx_dynamic_id: [#%d]"
-+ 5 20 "enter_vx_info(%p[#%d],%p) %p[#%d,%p]"
-+ "leave_vx_info(%p[#%d,%p]) %p[#%d,%p]"
-+ "moved task %p into vxi:%p[#%d]"
-+ "task_get_vx_info(%p)"
-+ "vx_migrate_task(%p,%p[#%d.%d])"
-+ 6 40 "vx_clear_persistent(%p[#%d])"
-+ "vx_exit_init(%p[#%d],%p[#%d,%d,%d])"
-+ "vx_set_init(%p[#%d],%p[#%d,%d,%d])"
-+ "vx_set_persistent(%p[#%d])"
-+ "vx_set_reaper(%p[#%d],%p[#%d,%d])"
-+ 7 80 "vx_child_reaper(%p[#%u,%u]) = %p[#%u,%u]"
-+
-+
-+debug_limit:
-+
-+ n 2^n "vx_acc_cres[%5d,%s,%2d]: %5d%s"
-+ "vx_cres_avail[%5d,%s,%2d]: %5ld > %5d + %5d"
-+
-+ 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-2.6.37/drivers/block/Kconfig linux-2.6.37-vs2.3.0.37-rc3/drivers/block/Kconfig
---- linux-2.6.37/drivers/block/Kconfig 2011-01-05 21:49:25.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/block/Kconfig 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/block/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/block/Kconfig
+--- linux-2.6.38-rc8/drivers/block/Kconfig 2011-03-10 17:08:52.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/block/Kconfig 2011-01-29 02:01:07.000000000 +0100
@@ -273,6 +273,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-2.6.37/drivers/block/loop.c linux-2.6.37-vs2.3.0.37-rc3/drivers/block/loop.c
---- linux-2.6.37/drivers/block/loop.c 2011-01-05 21:49:25.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/block/loop.c 2010-11-23 02:15:37.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/block/Makefile linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/block/Makefile
+--- linux-2.6.38-rc8/drivers/block/Makefile 2011-03-10 17:08:52.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/block/Makefile 2011-02-17 02:17:45.000000000 +0100
+@@ -34,6 +34,7 @@ obj-$(CONFIG_VIODASD) += viodasd.o
+ obj-$(CONFIG_BLK_DEV_SX8) += sx8.o
+ obj-$(CONFIG_BLK_DEV_UB) += ub.o
+ obj-$(CONFIG_BLK_DEV_HD) += hd.o
++obj-$(CONFIG_BLK_DEV_VROOT) += vroot.o
+
+ obj-$(CONFIG_XEN_BLKDEV_FRONTEND) += xen-blkfront.o
+ obj-$(CONFIG_BLK_DEV_DRBD) += drbd/
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/block/loop.c linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/block/loop.c
+--- linux-2.6.38-rc8/drivers/block/loop.c 2011-03-10 17:08:52.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/block/loop.c 2011-03-10 17:21:19.000000000 +0100
@@ -75,6 +75,7 @@
#include <linux/kthread.h>
#include <linux/splice.h>
#include <asm/uaccess.h>
-@@ -907,6 +908,7 @@ static int loop_set_fd(struct loop_devic
+@@ -902,6 +903,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;
-@@ -1037,6 +1039,7 @@ static int loop_clr_fd(struct loop_devic
+@@ -1032,6 +1034,7 @@ static int loop_clr_fd(struct loop_devic
lo->lo_encrypt_key_size = 0;
lo->lo_flags = 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);
-@@ -1075,7 +1078,7 @@ loop_set_status(struct loop_device *lo,
+@@ -1070,7 +1073,7 @@ loop_set_status(struct loop_device *lo,
if (lo->lo_encrypt_key_size &&
lo->lo_key_owner != uid &&
return -EPERM;
if (lo->lo_state != Lo_bound)
return -ENXIO;
-@@ -1159,7 +1162,8 @@ loop_get_status(struct loop_device *lo,
+@@ -1154,7 +1157,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,9 @@ static int lo_open(struct block_device *
+@@ -1500,6 +1504,9 @@ static int lo_open(struct block_device *
{
struct loop_device *lo = bdev->bd_disk->private_data;
mutex_lock(&lo->lo_ctl_mutex);
lo->lo_refcnt++;
mutex_unlock(&lo->lo_ctl_mutex);
-diff -NurpP --minimal linux-2.6.37/drivers/block/Makefile linux-2.6.37-vs2.3.0.37-rc3/drivers/block/Makefile
---- linux-2.6.37/drivers/block/Makefile 2011-01-05 21:49:25.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/block/Makefile 2010-11-23 02:09:41.000000000 +0100
-@@ -34,6 +34,7 @@ obj-$(CONFIG_VIODASD) += viodasd.o
- obj-$(CONFIG_BLK_DEV_SX8) += sx8.o
- obj-$(CONFIG_BLK_DEV_UB) += ub.o
- obj-$(CONFIG_BLK_DEV_HD) += hd.o
-+obj-$(CONFIG_BLK_DEV_VROOT) += vroot.o
-
- obj-$(CONFIG_XEN_BLKDEV_FRONTEND) += xen-blkfront.o
- obj-$(CONFIG_BLK_DEV_DRBD) += drbd/
-diff -NurpP --minimal linux-2.6.37/drivers/block/vroot.c linux-2.6.37-vs2.3.0.37-rc3/drivers/block/vroot.c
---- linux-2.6.37/drivers/block/vroot.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/block/vroot.c 2011-01-08 04:12:17.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/block/vroot.c linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/block/vroot.c
+--- linux-2.6.38-rc8/drivers/block/vroot.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/block/vroot.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,282 @@
+/*
+ * linux/drivers/block/vroot.c
+
+#endif
+
-diff -NurpP --minimal linux-2.6.37/drivers/gpu/drm/radeon/r100_reg_safe.h linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/r100_reg_safe.h
---- linux-2.6.37/drivers/gpu/drm/radeon/r100_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/r100_reg_safe.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/gpu/drm/radeon/r100_reg_safe.h linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/r100_reg_safe.h
+--- linux-2.6.38-rc8/drivers/gpu/drm/radeon/r100_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/r100_reg_safe.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,28 @@
+static const unsigned r100_reg_safe_bm[102] = {
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFFFF, 0xFFFFFFEF,
+};
-diff -NurpP --minimal linux-2.6.37/drivers/gpu/drm/radeon/r200_reg_safe.h linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/r200_reg_safe.h
---- linux-2.6.37/drivers/gpu/drm/radeon/r200_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/r200_reg_safe.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/gpu/drm/radeon/r200_reg_safe.h linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/r200_reg_safe.h
+--- linux-2.6.38-rc8/drivers/gpu/drm/radeon/r200_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/r200_reg_safe.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,28 @@
+static const unsigned r200_reg_safe_bm[102] = {
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFE3F, 0xFFFFFFEF,
+};
-diff -NurpP --minimal linux-2.6.37/drivers/gpu/drm/radeon/r300_reg_safe.h linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/r300_reg_safe.h
---- linux-2.6.37/drivers/gpu/drm/radeon/r300_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/r300_reg_safe.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/gpu/drm/radeon/r300_reg_safe.h linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/r300_reg_safe.h
+--- linux-2.6.38-rc8/drivers/gpu/drm/radeon/r300_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/r300_reg_safe.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,42 @@
+static const unsigned r300_reg_safe_bm[159] = {
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x0003FC01, 0xFFFFFCF8, 0xFF800B19,
+};
-diff -NurpP --minimal linux-2.6.37/drivers/gpu/drm/radeon/r420_reg_safe.h linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/r420_reg_safe.h
---- linux-2.6.37/drivers/gpu/drm/radeon/r420_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/r420_reg_safe.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/gpu/drm/radeon/r420_reg_safe.h linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/r420_reg_safe.h
+--- linux-2.6.38-rc8/drivers/gpu/drm/radeon/r420_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/r420_reg_safe.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,42 @@
+static const unsigned r420_reg_safe_bm[159] = {
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x0003FC01, 0xFFFFFCF8, 0xFF800B19,
+};
-diff -NurpP --minimal linux-2.6.37/drivers/gpu/drm/radeon/rn50_reg_safe.h linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/rn50_reg_safe.h
---- linux-2.6.37/drivers/gpu/drm/radeon/rn50_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/rn50_reg_safe.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/gpu/drm/radeon/rn50_reg_safe.h linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/rn50_reg_safe.h
+--- linux-2.6.38-rc8/drivers/gpu/drm/radeon/rn50_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/rn50_reg_safe.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,28 @@
+static const unsigned rn50_reg_safe_bm[102] = {
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFFFF, 0xFFFFFFFF,
+};
-diff -NurpP --minimal linux-2.6.37/drivers/gpu/drm/radeon/rs600_reg_safe.h linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/rs600_reg_safe.h
---- linux-2.6.37/drivers/gpu/drm/radeon/rs600_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/rs600_reg_safe.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/gpu/drm/radeon/rs600_reg_safe.h linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/rs600_reg_safe.h
+--- linux-2.6.38-rc8/drivers/gpu/drm/radeon/rs600_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/rs600_reg_safe.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,57 @@
+static const unsigned rs600_reg_safe_bm[219] = {
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+};
-diff -NurpP --minimal linux-2.6.37/drivers/gpu/drm/radeon/rv515_reg_safe.h linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/rv515_reg_safe.h
---- linux-2.6.37/drivers/gpu/drm/radeon/rv515_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/gpu/drm/radeon/rv515_reg_safe.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/gpu/drm/radeon/rv515_reg_safe.h linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/rv515_reg_safe.h
+--- linux-2.6.38-rc8/drivers/gpu/drm/radeon/rv515_reg_safe.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/gpu/drm/radeon/rv515_reg_safe.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,57 @@
+static const unsigned rv515_reg_safe_bm[219] = {
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+};
-diff -NurpP --minimal linux-2.6.37/drivers/infiniband/core/addr.c linux-2.6.37-vs2.3.0.37-rc3/drivers/infiniband/core/addr.c
---- linux-2.6.37/drivers/infiniband/core/addr.c 2010-10-21 13:07:05.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/infiniband/core/addr.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/infiniband/core/addr.c linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/infiniband/core/addr.c
+--- linux-2.6.38-rc8/drivers/infiniband/core/addr.c 2011-03-10 17:08:55.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/infiniband/core/addr.c 2011-01-29 02:01:07.000000000 +0100
@@ -252,7 +252,7 @@ static int addr6_resolve(struct sockaddr
if (ipv6_addr_any(&fl.fl6_src)) {
if (ret)
goto put;
-diff -NurpP --minimal linux-2.6.37/drivers/infiniband/hw/ipath/ipath_user_pages.c linux-2.6.37-vs2.3.0.37-rc3/drivers/infiniband/hw/ipath/ipath_user_pages.c
---- linux-2.6.37/drivers/infiniband/hw/ipath/ipath_user_pages.c 2010-07-07 18:31:19.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/infiniband/hw/ipath/ipath_user_pages.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/infiniband/hw/ipath/ipath_user_pages.c linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/infiniband/hw/ipath/ipath_user_pages.c
+--- linux-2.6.38-rc8/drivers/infiniband/hw/ipath/ipath_user_pages.c 2011-03-10 17:08:55.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/infiniband/hw/ipath/ipath_user_pages.c 2011-01-29 02:01:07.000000000 +0100
@@ -35,6 +35,7 @@
#include <linux/device.h>
#include <linux/slab.h>
#include "ipath_kernel.h"
-diff -NurpP --minimal linux-2.6.37/drivers/md/dm.c linux-2.6.37-vs2.3.0.37-rc3/drivers/md/dm.c
---- linux-2.6.37/drivers/md/dm.c 2011-01-05 21:49:35.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/md/dm.c 2010-11-23 02:18:36.000000000 +0100
-@@ -20,6 +20,7 @@
- #include <linux/idr.h>
- #include <linux/hdreg.h>
- #include <linux/delay.h>
-+#include <linux/vs_base.h>
-
- #include <trace/events/block.h>
-
-@@ -120,6 +121,7 @@ struct mapped_device {
- rwlock_t map_lock;
- atomic_t holders;
- atomic_t open_count;
-+ xid_t xid;
-
- unsigned long flags;
-
-@@ -327,6 +329,7 @@ int dm_deleting_md(struct mapped_device
- static int dm_blk_open(struct block_device *bdev, fmode_t mode)
- {
- struct mapped_device *md;
-+ int ret = -ENXIO;
-
- mutex_lock(&dm_mutex);
- spin_lock(&_minor_lock);
-@@ -336,19 +339,20 @@ static int dm_blk_open(struct block_devi
- goto out;
-
- if (test_bit(DMF_FREEING, &md->flags) ||
-- dm_deleting_md(md)) {
-- md = NULL;
-+ dm_deleting_md(md))
-+ goto out;
-+
-+ ret = -EACCES;
-+ if (!vx_check(md->xid, VS_IDENT|VS_HOSTID))
- goto out;
-- }
-
- dm_get(md);
- atomic_inc(&md->open_count);
--
-+ ret = 0;
- out:
- spin_unlock(&_minor_lock);
- mutex_unlock(&dm_mutex);
--
-- return md ? 0 : -ENXIO;
-+ return ret;
- }
-
- static int dm_blk_close(struct gendisk *disk, fmode_t mode)
-@@ -566,6 +570,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)
-+{
-+ return md->xid;
-+}
-+
- /*-----------------------------------------------------------------
- * CRUD START:
- * A more elegant soln is in the works that uses the queue
-@@ -1859,6 +1871,7 @@ static struct mapped_device *alloc_dev(i
- INIT_LIST_HEAD(&md->uevent_list);
- spin_lock_init(&md->uevent_lock);
-
-+ md->xid = vx_current_xid();
- md->queue = blk_alloc_queue(GFP_KERNEL);
- if (!md->queue)
- goto bad_queue;
-diff -NurpP --minimal linux-2.6.37/drivers/md/dm.h linux-2.6.37-vs2.3.0.37-rc3/drivers/md/dm.h
---- linux-2.6.37/drivers/md/dm.h 2010-10-21 13:07:07.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/md/dm.h 2010-11-23 02:09:41.000000000 +0100
-@@ -41,6 +41,8 @@ struct dm_dev_internal {
- struct dm_table;
- struct dm_md_mempools;
-
-+xid_t dm_get_xid(struct mapped_device *md);
-+
- /*-----------------------------------------------------------------
- * Internal table functions.
- *---------------------------------------------------------------*/
-diff -NurpP --minimal linux-2.6.37/drivers/md/dm-ioctl.c linux-2.6.37-vs2.3.0.37-rc3/drivers/md/dm-ioctl.c
---- linux-2.6.37/drivers/md/dm-ioctl.c 2011-01-05 21:49:35.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/md/dm-ioctl.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/md/dm-ioctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/md/dm-ioctl.c
+--- linux-2.6.38-rc8/drivers/md/dm-ioctl.c 2011-03-10 17:08:57.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/md/dm-ioctl.c 2011-01-29 02:01:07.000000000 +0100
@@ -16,6 +16,7 @@
#include <linux/dm-ioctl.h>
#include <linux/hdreg.h>
dm_get(hc->md);
return hc;
}
-@@ -377,6 +380,9 @@ typedef int (*ioctl_fn)(struct dm_ioctl
+@@ -427,6 +430,9 @@ typedef int (*ioctl_fn)(struct dm_ioctl
static int remove_all(struct dm_ioctl *param, size_t param_size)
{
dm_hash_remove_all(1);
param->data_size = 0;
return 0;
-@@ -424,6 +430,8 @@ static int list_devices(struct dm_ioctl
+@@ -474,6 +480,8 @@ static int list_devices(struct dm_ioctl
*/
for (i = 0; i < NUM_BUCKETS; i++) {
list_for_each_entry (hc, _name_buckets + i, name_list) {
needed += sizeof(struct dm_name_list);
needed += strlen(hc->name) + 1;
needed += ALIGN_MASK;
-@@ -447,6 +455,8 @@ static int list_devices(struct dm_ioctl
+@@ -497,6 +505,8 @@ static int list_devices(struct dm_ioctl
*/
for (i = 0; i < NUM_BUCKETS; i++) {
list_for_each_entry (hc, _name_buckets + i, name_list) {
if (old_nl)
old_nl->next = (uint32_t) ((void *) nl -
(void *) old_nl);
-@@ -681,10 +691,11 @@ static struct hash_cell *__find_device_h
+@@ -731,10 +741,11 @@ static struct hash_cell *__find_device_h
if (!md)
goto out;
out:
return mdptr;
}
-@@ -1513,8 +1524,8 @@ static int ctl_ioctl(uint command, struc
+@@ -1566,8 +1577,8 @@ static int ctl_ioctl(uint command, struc
ioctl_fn fn = NULL;
size_t param_size;
return -EACCES;
if (_IOC_TYPE(command) != DM_IOCTL)
-diff -NurpP --minimal linux-2.6.37/drivers/net/tun.c linux-2.6.37-vs2.3.0.37-rc3/drivers/net/tun.c
---- linux-2.6.37/drivers/net/tun.c 2010-10-21 13:07:15.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/net/tun.c 2010-11-23 02:09:41.000000000 +0100
-@@ -62,6 +62,7 @@
- #include <linux/nsproxy.h>
- #include <linux/virtio_net.h>
- #include <linux/rcupdate.h>
-+#include <linux/vs_network.h>
- #include <net/net_namespace.h>
- #include <net/netns/generic.h>
- #include <net/rtnetlink.h>
-@@ -103,6 +104,7 @@ struct tun_struct {
- unsigned int flags;
- uid_t owner;
- gid_t group;
-+ nid_t nid;
-
- struct net_device *dev;
- struct fasync_struct *fasync;
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/md/dm.c linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/md/dm.c
+--- linux-2.6.38-rc8/drivers/md/dm.c 2011-03-10 17:08:57.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/md/dm.c 2011-01-29 03:26:19.000000000 +0100
+@@ -20,6 +20,7 @@
+ #include <linux/idr.h>
+ #include <linux/hdreg.h>
+ #include <linux/delay.h>
++#include <linux/vs_base.h>
+
+ #include <trace/events/block.h>
+
+@@ -119,6 +120,7 @@ struct mapped_device {
+ rwlock_t map_lock;
+ atomic_t holders;
+ atomic_t open_count;
++ xid_t xid;
+
+ unsigned long flags;
+
+@@ -326,6 +328,7 @@ int dm_deleting_md(struct mapped_device
+ static int dm_blk_open(struct block_device *bdev, fmode_t mode)
+ {
+ struct mapped_device *md;
++ int ret = -ENXIO;
+
+ spin_lock(&_minor_lock);
+
+@@ -334,18 +337,19 @@ static int dm_blk_open(struct block_devi
+ goto out;
+
+ if (test_bit(DMF_FREEING, &md->flags) ||
+- dm_deleting_md(md)) {
+- md = NULL;
++ dm_deleting_md(md))
++ goto out;
++
++ ret = -EACCES;
++ if (!vx_check(md->xid, VS_IDENT|VS_HOSTID))
+ goto out;
+- }
+
+ dm_get(md);
+ atomic_inc(&md->open_count);
+-
++ ret = 0;
+ out:
+ spin_unlock(&_minor_lock);
+-
+- return md ? 0 : -ENXIO;
++ return ret;
+ }
+
+ static int dm_blk_close(struct gendisk *disk, fmode_t mode)
+@@ -565,6 +569,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)
++{
++ return md->xid;
++}
++
+ /*-----------------------------------------------------------------
+ * CRUD START:
+ * A more elegant soln is in the works that uses the queue
+@@ -1860,6 +1872,7 @@ static struct mapped_device *alloc_dev(i
+ INIT_LIST_HEAD(&md->uevent_list);
+ spin_lock_init(&md->uevent_lock);
+
++ md->xid = vx_current_xid();
+ md->queue = blk_alloc_queue(GFP_KERNEL);
+ if (!md->queue)
+ goto bad_queue;
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/md/dm.h linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/md/dm.h
+--- linux-2.6.38-rc8/drivers/md/dm.h 2010-10-21 13:07:07.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/md/dm.h 2011-01-29 02:01:07.000000000 +0100
+@@ -41,6 +41,8 @@ struct dm_dev_internal {
+ struct dm_table;
+ struct dm_md_mempools;
+
++xid_t dm_get_xid(struct mapped_device *md);
++
+ /*-----------------------------------------------------------------
+ * Internal table functions.
+ *---------------------------------------------------------------*/
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/net/tun.c linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/net/tun.c
+--- linux-2.6.38-rc8/drivers/net/tun.c 2011-03-10 17:09:05.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/net/tun.c 2011-01-29 02:01:07.000000000 +0100
+@@ -62,6 +62,7 @@
+ #include <linux/nsproxy.h>
+ #include <linux/virtio_net.h>
+ #include <linux/rcupdate.h>
++#include <linux/vs_network.h>
+ #include <net/net_namespace.h>
+ #include <net/netns/generic.h>
+ #include <net/rtnetlink.h>
+@@ -103,6 +104,7 @@ struct tun_struct {
+ unsigned int flags;
+ uid_t owner;
+ gid_t group;
++ nid_t nid;
+
+ struct net_device *dev;
+ struct fasync_struct *fasync;
@@ -853,6 +855,7 @@ static void tun_setup(struct net_device
tun->owner = -1;
case TUNSETLINK:
/* Only allow setting the type when the interface is down */
if (tun->dev->flags & IFF_UP) {
-diff -NurpP --minimal linux-2.6.37/drivers/tty/sysrq.c linux-2.6.37-vs2.3.0.37-rc3/drivers/tty/sysrq.c
---- linux-2.6.37/drivers/tty/sysrq.c 2011-01-05 21:50:13.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/tty/sysrq.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/tty/sysrq.c linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/tty/sysrq.c
+--- linux-2.6.38-rc8/drivers/tty/sysrq.c 2011-03-10 17:09:16.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/tty/sysrq.c 2011-02-17 02:17:49.000000000 +0100
@@ -41,6 +41,7 @@
#include <linux/oom.h>
#include <linux/slab.h>
else
retval = -1;
return retval;
-diff -NurpP --minimal linux-2.6.37/drivers/tty/tty_io.c linux-2.6.37-vs2.3.0.37-rc3/drivers/tty/tty_io.c
---- linux-2.6.37/drivers/tty/tty_io.c 2011-01-05 21:50:13.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/drivers/tty/tty_io.c 2011-01-05 22:30:36.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/drivers/tty/tty_io.c linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/tty/tty_io.c
+--- linux-2.6.38-rc8/drivers/tty/tty_io.c 2011-03-10 17:09:16.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/drivers/tty/tty_io.c 2011-02-02 22:20:24.000000000 +0100
@@ -107,6 +107,7 @@
#include <linux/kmod.h>
if (pgrp_nr < 0)
return -EINVAL;
rcu_read_lock();
-diff -NurpP --minimal linux-2.6.37/fs/attr.c linux-2.6.37-vs2.3.0.37-rc3/fs/attr.c
---- linux-2.6.37/fs/attr.c 2010-10-21 13:07:47.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/attr.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/attr.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/attr.c
+--- linux-2.6.38-rc8/fs/attr.c 2010-10-21 13:07:47.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/attr.c 2011-01-29 02:01:07.000000000 +0100
@@ -13,6 +13,9 @@
#include <linux/fsnotify.h>
#include <linux/fcntl.h>
if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
return -EPERM;
}
-diff -NurpP --minimal linux-2.6.37/fs/binfmt_aout.c linux-2.6.37-vs2.3.0.37-rc3/fs/binfmt_aout.c
---- linux-2.6.37/fs/binfmt_aout.c 2010-10-21 13:07:47.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/binfmt_aout.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/binfmt_aout.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/binfmt_aout.c
+--- linux-2.6.38-rc8/fs/binfmt_aout.c 2010-10-21 13:07:47.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/binfmt_aout.c 2011-01-29 02:01:07.000000000 +0100
@@ -25,6 +25,7 @@
#include <linux/init.h>
#include <linux/coredump.h>
#include <asm/system.h>
#include <asm/uaccess.h>
-diff -NurpP --minimal linux-2.6.37/fs/binfmt_elf.c linux-2.6.37-vs2.3.0.37-rc3/fs/binfmt_elf.c
---- linux-2.6.37/fs/binfmt_elf.c 2011-01-05 21:50:20.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/binfmt_elf.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/binfmt_elf.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/binfmt_elf.c
+--- linux-2.6.38-rc8/fs/binfmt_elf.c 2011-03-10 17:09:21.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/binfmt_elf.c 2011-01-29 02:01:07.000000000 +0100
@@ -32,6 +32,7 @@
#include <linux/elf.h>
#include <linux/utsname.h>
#include <asm/uaccess.h>
#include <asm/param.h>
#include <asm/page.h>
-diff -NurpP --minimal linux-2.6.37/fs/binfmt_flat.c linux-2.6.37-vs2.3.0.37-rc3/fs/binfmt_flat.c
---- linux-2.6.37/fs/binfmt_flat.c 2010-08-02 16:52:47.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/binfmt_flat.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/binfmt_flat.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/binfmt_flat.c
+--- linux-2.6.38-rc8/fs/binfmt_flat.c 2010-08-02 16:52:47.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/binfmt_flat.c 2011-01-29 02:01:07.000000000 +0100
@@ -35,6 +35,7 @@
#include <linux/init.h>
#include <linux/flat.h>
#include <asm/byteorder.h>
#include <asm/system.h>
-diff -NurpP --minimal linux-2.6.37/fs/binfmt_som.c linux-2.6.37-vs2.3.0.37-rc3/fs/binfmt_som.c
---- linux-2.6.37/fs/binfmt_som.c 2010-02-25 11:52:04.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/binfmt_som.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/binfmt_som.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/binfmt_som.c
+--- linux-2.6.38-rc8/fs/binfmt_som.c 2010-02-25 11:52:04.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/binfmt_som.c 2011-01-29 02:01:07.000000000 +0100
@@ -28,6 +28,7 @@
#include <linux/shm.h>
#include <linux/personality.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>
-diff -NurpP --minimal linux-2.6.37/fs/block_dev.c linux-2.6.37-vs2.3.0.37-rc3/fs/block_dev.c
---- linux-2.6.37/fs/block_dev.c 2011-01-05 21:50:20.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/block_dev.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/block_dev.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/block_dev.c
+--- linux-2.6.38-rc8/fs/block_dev.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/block_dev.c 2011-03-07 16:53:27.000000000 +0100
@@ -25,6 +25,7 @@
#include <linux/namei.h>
#include <linux/log2.h>
#include <asm/uaccess.h>
#include "internal.h"
-@@ -544,6 +545,7 @@ struct block_device *bdget(dev_t dev)
+@@ -551,6 +552,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);
-@@ -590,6 +592,11 @@ EXPORT_SYMBOL(bdput);
+@@ -597,6 +599,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;
-@@ -600,7 +607,7 @@ static struct block_device *bd_acquire(s
+@@ -607,7 +614,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-2.6.37/fs/btrfs/ctree.h linux-2.6.37-vs2.3.0.37-rc3/fs/btrfs/ctree.h
---- linux-2.6.37/fs/btrfs/ctree.h 2011-01-05 21:50:20.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/btrfs/ctree.h 2011-01-05 22:30:38.000000000 +0100
-@@ -574,11 +574,14 @@ struct btrfs_inode_item {
+diff -NurpP --minimal linux-2.6.38-rc8/fs/btrfs/ctree.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/btrfs/ctree.h
+--- linux-2.6.38-rc8/fs/btrfs/ctree.h 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/btrfs/ctree.h 2011-03-07 16:53:27.000000000 +0100
+@@ -587,11 +587,14 @@ struct btrfs_inode_item {
/* modification sequence number for NFS */
__le64 sequence;
struct btrfs_timespec atime;
struct btrfs_timespec ctime;
struct btrfs_timespec mtime;
-@@ -1236,6 +1239,8 @@ struct btrfs_root {
- #define BTRFS_MOUNT_CLEAR_CACHE (1 << 13)
+@@ -1256,6 +1259,8 @@ struct btrfs_root {
#define BTRFS_MOUNT_USER_SUBVOL_RM_ALLOWED (1 << 14)
+ #define BTRFS_MOUNT_ENOSPC_DEBUG (1 << 15)
+#define BTRFS_MOUNT_TAGGED (1 << 24)
+
#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 & \
-@@ -1456,6 +1461,7 @@ BTRFS_SETGET_FUNCS(inode_block_group, st
+@@ -1476,6 +1481,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);
-@@ -1517,6 +1523,10 @@ BTRFS_SETGET_FUNCS(extent_flags, struct
+@@ -1537,6 +1543,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);
-@@ -2510,6 +2520,7 @@ extern const struct dentry_operations bt
+@@ -2544,6 +2554,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);
/* file.c */
int btrfs_sync_file(struct file *file, int datasync);
-diff -NurpP --minimal linux-2.6.37/fs/btrfs/disk-io.c linux-2.6.37-vs2.3.0.37-rc3/fs/btrfs/disk-io.c
---- linux-2.6.37/fs/btrfs/disk-io.c 2011-01-05 21:50:20.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/btrfs/disk-io.c 2011-01-05 22:30:38.000000000 +0100
-@@ -1733,6 +1733,9 @@ struct btrfs_root *open_ctree(struct sup
+diff -NurpP --minimal linux-2.6.38-rc8/fs/btrfs/disk-io.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/btrfs/disk-io.c
+--- linux-2.6.38-rc8/fs/btrfs/disk-io.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/btrfs/disk-io.c 2011-02-17 02:17:50.000000000 +0100
+@@ -1768,6 +1768,9 @@ struct btrfs_root *open_ctree(struct sup
goto fail_iput;
}
features = btrfs_super_incompat_flags(disk_super) &
~BTRFS_FEATURE_INCOMPAT_SUPP;
if (features) {
-diff -NurpP --minimal linux-2.6.37/fs/btrfs/inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/btrfs/inode.c
---- linux-2.6.37/fs/btrfs/inode.c 2011-01-05 21:50:21.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/btrfs/inode.c 2011-01-05 22:30:38.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/btrfs/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/btrfs/inode.c
+--- linux-2.6.38-rc8/fs/btrfs/inode.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/btrfs/inode.c 2011-03-07 16:53:27.000000000 +0100
@@ -37,6 +37,8 @@
#include <linux/posix_acl.h>
#include <linux/falloc.h>
#include "compat.h"
#include "ctree.h"
#include "disk-io.h"
-@@ -2440,6 +2442,8 @@ static void btrfs_read_locked_inode(stru
+@@ -2463,6 +2465,8 @@ static void btrfs_read_locked_inode(stru
int maybe_acls;
u64 alloc_group_block;
u32 rdev;
int ret;
path = btrfs_alloc_path();
-@@ -2456,8 +2460,13 @@ static void btrfs_read_locked_inode(stru
+@@ -2479,8 +2483,13 @@ static void btrfs_read_locked_inode(stru
inode->i_mode = btrfs_inode_mode(leaf, inode_item);
inode->i_nlink = btrfs_inode_nlink(leaf, inode_item);
btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item));
tspec = btrfs_inode_atime(inode_item);
-@@ -2539,8 +2548,15 @@ static void fill_inode_item(struct btrfs
+@@ -2562,8 +2571,15 @@ static void fill_inode_item(struct btrfs
struct btrfs_inode_item *item,
struct inode *inode)
{
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);
-@@ -7228,6 +7244,7 @@ static const struct inode_operations btr
+@@ -7291,6 +7307,7 @@ static const struct inode_operations btr
.listxattr = btrfs_listxattr,
.removexattr = btrfs_removexattr,
.permission = btrfs_permission,
};
static const struct inode_operations btrfs_dir_ro_inode_operations = {
.lookup = btrfs_lookup,
-@@ -7303,6 +7320,7 @@ static const struct inode_operations btr
+@@ -7365,6 +7382,7 @@ static const struct inode_operations btr
+ .removexattr = btrfs_removexattr,
.permission = btrfs_permission,
- .fallocate = btrfs_fallocate,
.fiemap = btrfs_fiemap,
+ .sync_flags = btrfs_sync_flags,
};
static const struct inode_operations btrfs_special_inode_operations = {
.getattr = btrfs_getattr,
-diff -NurpP --minimal linux-2.6.37/fs/btrfs/ioctl.c linux-2.6.37-vs2.3.0.37-rc3/fs/btrfs/ioctl.c
---- linux-2.6.37/fs/btrfs/ioctl.c 2011-01-05 21:50:21.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/btrfs/ioctl.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/btrfs/ioctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/btrfs/ioctl.c
+--- linux-2.6.38-rc8/fs/btrfs/ioctl.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/btrfs/ioctl.c 2011-03-07 16:53:27.000000000 +0100
@@ -68,10 +68,13 @@ static unsigned int btrfs_flags_to_ioctl
{
unsigned int iflags = 0;
static int btrfs_ioctl_getflags(struct file *file, void __user *arg)
{
struct btrfs_inode *ip = BTRFS_I(file->f_path.dentry->d_inode);
-@@ -150,6 +227,7 @@ static int btrfs_ioctl_setflags(struct f
+@@ -153,6 +230,7 @@ static int btrfs_ioctl_setflags(struct f
if (copy_from_user(&flags, arg, sizeof(flags)))
return -EFAULT;
if (flags & ~(FS_IMMUTABLE_FL | FS_APPEND_FL | \
FS_NOATIME_FL | FS_NODUMP_FL | \
FS_SYNC_FL | FS_DIRSYNC_FL))
-@@ -162,7 +240,8 @@ static int btrfs_ioctl_setflags(struct f
+@@ -165,7 +243,8 @@ static int btrfs_ioctl_setflags(struct f
flags = btrfs_mask_flags(inode->i_mode, flags);
oldflags = btrfs_flags_to_ioctl(ip->flags);
if (!capable(CAP_LINUX_IMMUTABLE)) {
ret = -EPERM;
goto out_unlock;
-@@ -173,14 +252,19 @@ static int btrfs_ioctl_setflags(struct f
+@@ -176,14 +255,19 @@ static int btrfs_ioctl_setflags(struct f
if (ret)
goto out_unlock;
if (flags & FS_APPEND_FL)
ip->flags |= BTRFS_INODE_APPEND;
else
-diff -NurpP --minimal linux-2.6.37/fs/btrfs/super.c linux-2.6.37-vs2.3.0.37-rc3/fs/btrfs/super.c
---- linux-2.6.37/fs/btrfs/super.c 2011-01-05 21:50:21.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/btrfs/super.c 2011-01-05 23:28:17.000000000 +0100
-@@ -70,8 +70,9 @@ enum {
- Opt_nodatacow, Opt_max_inline, Opt_alloc_start, Opt_nobarrier, Opt_ssd,
+diff -NurpP --minimal linux-2.6.38-rc8/fs/btrfs/super.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/btrfs/super.c
+--- linux-2.6.38-rc8/fs/btrfs/super.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/btrfs/super.c 2011-03-07 17:04:18.000000000 +0100
+@@ -155,8 +155,8 @@ enum {
Opt_nossd, Opt_ssd_spread, Opt_thread_pool, Opt_noacl, Opt_compress,
- Opt_compress_force, Opt_notreelog, Opt_ratio, Opt_flushoncommit,
-- Opt_discard, Opt_space_cache, Opt_clear_cache, Opt_err,
-+ Opt_discard, Opt_space_cache, Opt_clear_cache,
- Opt_user_subvol_rm_allowed,
-+ Opt_tag, Opt_notag, Opt_tagid, Opt_err,
+ Opt_compress_type, Opt_compress_force, Opt_compress_force_type,
+ Opt_notreelog, Opt_ratio, Opt_flushoncommit, Opt_discard,
+- Opt_space_cache, Opt_clear_cache, Opt_user_subvol_rm_allowed,
+- Opt_enospc_debug, Opt_err,
++ Opt_space_cache, Opt_clear_cache, Opt_user_subvol_rm_allowed,
++ Opt_enospc_debug, Opt_tag, Opt_notag, Opt_tagid, Opt_err,
};
static match_table_t tokens = {
-@@ -98,6 +99,9 @@ static match_table_t tokens = {
- {Opt_space_cache, "space_cache"},
+@@ -186,6 +186,9 @@ static match_table_t tokens = {
{Opt_clear_cache, "clear_cache"},
{Opt_user_subvol_rm_allowed, "user_subvol_rm_allowed"},
+ {Opt_enospc_debug, "enospc_debug"},
+ {Opt_tag, "tag"},
+ {Opt_notag, "notag"},
+ {Opt_tagid, "tagid=%u"},
{Opt_err, NULL},
};
-@@ -252,6 +256,22 @@ int btrfs_parse_options(struct btrfs_roo
- case Opt_user_subvol_rm_allowed:
- btrfs_set_opt(info->mount_opt, USER_SUBVOL_RM_ALLOWED);
+@@ -363,6 +366,22 @@ int btrfs_parse_options(struct btrfs_roo
+ case Opt_enospc_debug:
+ btrfs_set_opt(info->mount_opt, ENOSPC_DEBUG);
break;
+#ifndef CONFIG_TAGGING_NONE
+ case Opt_tag:
case Opt_err:
printk(KERN_INFO "btrfs: unrecognized mount option "
"'%s'\n", p);
-@@ -724,6 +744,12 @@ static int btrfs_remount(struct super_bl
+@@ -841,6 +860,12 @@ static int btrfs_remount(struct super_bl
if (ret)
return -EINVAL;
if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
return 0;
-diff -NurpP --minimal linux-2.6.37/fs/char_dev.c linux-2.6.37-vs2.3.0.37-rc3/fs/char_dev.c
---- linux-2.6.37/fs/char_dev.c 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/char_dev.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/char_dev.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/char_dev.c
+--- linux-2.6.38-rc8/fs/char_dev.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/char_dev.c 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/fs/dcache.c linux-2.6.37-vs2.3.0.37-rc3/fs/dcache.c
---- linux-2.6.37/fs/dcache.c 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/dcache.c 2010-11-23 03:34:02.000000000 +0100
-@@ -33,6 +33,7 @@
- #include <linux/bootmem.h>
- #include <linux/fs_struct.h>
+diff -NurpP --minimal linux-2.6.38-rc8/fs/dcache.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/dcache.c
+--- linux-2.6.38-rc8/fs/dcache.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/dcache.c 2011-02-02 22:20:25.000000000 +0100
+@@ -35,6 +35,7 @@
#include <linux/hardirq.h>
+ #include <linux/bit_spinlock.h>
+ #include <linux/rculist_bl.h>
+#include <linux/vs_limit.h>
#include "internal.h"
- int sysctl_vfs_cache_pressure __read_mostly = 100;
-@@ -236,6 +237,8 @@ repeat:
- return;
+ /*
+@@ -496,6 +497,8 @@ int d_invalidate(struct dentry * dentry)
+ spin_lock(&dentry->d_lock);
}
+ vx_dentry_dec(dentry);
+
/*
- * AV: ->d_delete() is _NOT_ allowed to block now.
- */
-@@ -330,6 +333,7 @@ static inline struct dentry * __dget_loc
+ * Somebody else still using it?
+ *
+@@ -523,6 +526,7 @@ EXPORT_SYMBOL(d_invalidate);
+ static inline void __dget_dlock(struct dentry *dentry)
{
- atomic_inc(&dentry->d_count);
- dentry_lru_del(dentry);
+ dentry->d_count++;
+ vx_dentry_inc(dentry);
- return dentry;
}
-@@ -940,6 +944,9 @@ struct dentry *d_alloc(struct dentry * p
+ static inline void __dget(struct dentry *dentry)
+@@ -1278,6 +1282,9 @@ struct dentry *d_alloc(struct dentry * p
struct dentry *dentry;
char *dname;
dentry = kmem_cache_alloc(dentry_cache, GFP_KERNEL);
if (!dentry)
return NULL;
-@@ -961,6 +968,7 @@ struct dentry *d_alloc(struct dentry * p
+@@ -1299,6 +1306,7 @@ struct dentry *d_alloc(struct dentry * p
dname[name->len] = 0;
- atomic_set(&dentry->d_count, 1);
+ dentry->d_count = 1;
+ vx_dentry_inc(dentry);
dentry->d_flags = DCACHE_UNHASHED;
spin_lock_init(&dentry->d_lock);
- dentry->d_inode = NULL;
-@@ -1445,6 +1453,7 @@ struct dentry * __d_lookup(struct dentry
+ seqcount_init(&dentry->d_seq);
+@@ -1935,6 +1943,7 @@ struct dentry *__d_lookup(struct dentry
}
- atomic_inc(&dentry->d_count);
+ dentry->d_count++;
+ vx_dentry_inc(dentry);
found = dentry;
spin_unlock(&dentry->d_lock);
break;
-diff -NurpP --minimal linux-2.6.37/fs/devpts/inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/devpts/inode.c
---- linux-2.6.37/fs/devpts/inode.c 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/devpts/inode.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/devpts/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/devpts/inode.c
+--- linux-2.6.38-rc8/fs/devpts/inode.c 2011-01-05 21:50:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/devpts/inode.c 2011-01-29 05:09:48.000000000 +0100
@@ -25,6 +25,7 @@
#include <linux/parser.h>
#include <linux/fsnotify.h>
#define DEVPTS_DEFAULT_PTMX_MODE 0000
#define PTMX_MINOR 2
-+static int devpts_permission(struct inode *inode, int mask)
++static int devpts_permission(struct inode *inode, int mask, unsigned int flags)
+{
+ int ret = -EACCES;
+
+ /* devpts is xid tagged */
+ if (vx_check((xid_t)inode->i_tag, VS_WATCH_P | VS_IDENT))
-+ ret = generic_permission(inode, mask, NULL);
++ ret = generic_permission(inode, mask, flags, NULL);
+ return ret;
+}
+
inode->i_private = tty;
tty->driver_data = inode;
-diff -NurpP --minimal linux-2.6.37/fs/ext2/balloc.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/balloc.c
---- linux-2.6.37/fs/ext2/balloc.c 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/balloc.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext2/balloc.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/balloc.c
+--- linux-2.6.38-rc8/fs/ext2/balloc.c 2011-01-05 21:50:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/balloc.c 2011-01-29 02:01:07.000000000 +0100
@@ -701,7 +701,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-2.6.37/fs/ext2/ext2.h linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/ext2.h
---- linux-2.6.37/fs/ext2/ext2.h 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/ext2.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext2/ext2.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/ext2.h
+--- linux-2.6.38-rc8/fs/ext2/ext2.h 2011-01-05 21:50:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/ext2.h 2011-01-29 02:01:07.000000000 +0100
@@ -126,6 +126,7 @@ extern void ext2_set_inode_flags(struct
extern void ext2_get_inode_flags(struct ext2_inode_info *);
extern int ext2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
/* ioctl.c */
extern long ext2_ioctl(struct file *, unsigned int, unsigned long);
-diff -NurpP --minimal linux-2.6.37/fs/ext2/file.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/file.c
---- linux-2.6.37/fs/ext2/file.c 2010-08-02 16:52:48.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/file.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext2/file.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/file.c
+--- linux-2.6.38-rc8/fs/ext2/file.c 2010-08-02 16:52:48.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/file.c 2011-01-29 02:01:07.000000000 +0100
@@ -104,4 +104,5 @@ const struct inode_operations ext2_file_
.setattr = ext2_setattr,
.check_acl = ext2_check_acl,
.fiemap = ext2_fiemap,
+ .sync_flags = ext2_sync_flags,
};
-diff -NurpP --minimal linux-2.6.37/fs/ext2/ialloc.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/ialloc.c
---- linux-2.6.37/fs/ext2/ialloc.c 2010-10-21 13:07:48.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/ialloc.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext2/ialloc.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/ialloc.c
+--- linux-2.6.38-rc8/fs/ext2/ialloc.c 2010-10-21 13:07:48.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/ialloc.c 2011-01-29 02:01:07.000000000 +0100
@@ -17,6 +17,7 @@
#include <linux/backing-dev.h>
#include <linux/buffer_head.h>
} else
inode_init_owner(inode, dir, mode);
-diff -NurpP --minimal linux-2.6.37/fs/ext2/inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/inode.c
---- linux-2.6.37/fs/ext2/inode.c 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/inode.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext2/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/inode.c
+--- linux-2.6.38-rc8/fs/ext2/inode.c 2011-01-05 21:50:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/inode.c 2011-01-29 02:01:07.000000000 +0100
@@ -32,6 +32,7 @@
#include <linux/mpage.h>
#include <linux/fiemap.h>
error = dquot_transfer(inode, iattr);
if (error)
return error;
-diff -NurpP --minimal linux-2.6.37/fs/ext2/ioctl.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/ioctl.c
---- linux-2.6.37/fs/ext2/ioctl.c 2009-09-10 15:26:21.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/ioctl.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext2/ioctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/ioctl.c
+--- linux-2.6.38-rc8/fs/ext2/ioctl.c 2009-09-10 15:26:21.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/ioctl.c 2011-01-29 02:01:07.000000000 +0100
@@ -17,6 +17,16 @@
#include <asm/uaccess.h>
flags |= oldflags & ~EXT2_FL_USER_MODIFIABLE;
ei->i_flags = flags;
mutex_unlock(&inode->i_mutex);
-diff -NurpP --minimal linux-2.6.37/fs/ext2/namei.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/namei.c
---- linux-2.6.37/fs/ext2/namei.c 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/namei.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext2/namei.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/namei.c
+--- linux-2.6.38-rc8/fs/ext2/namei.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/namei.c 2011-03-10 17:21:19.000000000 +0100
@@ -32,6 +32,7 @@
#include <linux/pagemap.h>
}
}
}
-@@ -418,6 +420,7 @@ const struct inode_operations ext2_dir_i
+@@ -413,6 +415,7 @@ const struct inode_operations ext2_dir_i
#endif
.setattr = ext2_setattr,
.check_acl = ext2_check_acl,
};
const struct inode_operations ext2_special_inode_operations = {
-diff -NurpP --minimal linux-2.6.37/fs/ext2/super.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/super.c
---- linux-2.6.37/fs/ext2/super.c 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext2/super.c 2010-11-23 02:09:41.000000000 +0100
-@@ -378,7 +378,8 @@ enum {
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext2/super.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/super.c
+--- linux-2.6.38-rc8/fs/ext2/super.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext2/super.c 2011-01-29 02:01:07.000000000 +0100
+@@ -394,7 +394,8 @@ enum {
Opt_err_ro, Opt_nouid32, Opt_nocheck, Opt_debug,
Opt_oldalloc, Opt_orlov, Opt_nobh, Opt_user_xattr, Opt_nouser_xattr,
Opt_acl, Opt_noacl, Opt_xip, Opt_ignore, Opt_err, Opt_quota,
};
static const match_table_t tokens = {
-@@ -406,6 +407,9 @@ static const match_table_t tokens = {
+@@ -422,6 +423,9 @@ static const match_table_t tokens = {
{Opt_acl, "acl"},
{Opt_noacl, "noacl"},
{Opt_xip, "xip"},
{Opt_grpquota, "grpquota"},
{Opt_ignore, "noquota"},
{Opt_quota, "quota"},
-@@ -476,6 +480,20 @@ static int parse_options(char *options,
+@@ -492,6 +496,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;
-@@ -834,6 +852,8 @@ static int ext2_fill_super(struct super_
+@@ -850,6 +868,8 @@ static int ext2_fill_super(struct super_
if (!parse_options((char *) data, sb))
goto failed_mount;
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
((EXT2_SB(sb)->s_mount_opt & EXT2_MOUNT_POSIX_ACL) ?
MS_POSIXACL : 0);
-@@ -1207,6 +1227,14 @@ static int ext2_remount (struct super_bl
+@@ -1223,6 +1243,14 @@ static int ext2_remount (struct super_bl
goto restore_opts;
}
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
((sbi->s_mount_opt & EXT2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
-diff -NurpP --minimal linux-2.6.37/fs/ext3/file.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/file.c
---- linux-2.6.37/fs/ext3/file.c 2010-07-07 18:31:51.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/file.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext3/file.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/file.c
+--- linux-2.6.38-rc8/fs/ext3/file.c 2010-07-07 18:31:51.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/file.c 2011-01-29 02:01:07.000000000 +0100
@@ -81,5 +81,6 @@ const struct inode_operations ext3_file_
#endif
.check_acl = ext3_check_acl,
+ .sync_flags = ext3_sync_flags,
};
-diff -NurpP --minimal linux-2.6.37/fs/ext3/ialloc.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/ialloc.c
---- linux-2.6.37/fs/ext3/ialloc.c 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/ialloc.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext3/ialloc.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/ialloc.c
+--- linux-2.6.38-rc8/fs/ext3/ialloc.c 2011-01-05 21:50:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/ialloc.c 2011-01-29 02:01:07.000000000 +0100
@@ -23,6 +23,7 @@
#include <linux/buffer_head.h>
#include <linux/random.h>
} else
inode_init_owner(inode, dir, mode);
-diff -NurpP --minimal linux-2.6.37/fs/ext3/inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/inode.c
---- linux-2.6.37/fs/ext3/inode.c 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/inode.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext3/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/inode.c
+--- linux-2.6.38-rc8/fs/ext3/inode.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/inode.c 2011-01-29 02:01:07.000000000 +0100
@@ -38,6 +38,7 @@
#include <linux/bio.h>
#include <linux/fiemap.h>
#include "xattr.h"
#include "acl.h"
-@@ -2392,7 +2393,7 @@ static void ext3_free_branches(handle_t
+@@ -2394,7 +2395,7 @@ static void ext3_free_branches(handle_t
int ext3_can_truncate(struct inode *inode)
{
return 0;
if (S_ISREG(inode->i_mode))
return 1;
-@@ -2776,36 +2777,60 @@ void ext3_set_inode_flags(struct inode *
+@@ -2778,36 +2779,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)
-@@ -2819,6 +2844,8 @@ struct inode *ext3_iget(struct super_blo
+@@ -2821,6 +2846,8 @@ struct inode *ext3_iget(struct super_blo
transaction_t *transaction;
long ret;
int block;
inode = iget_locked(sb, ino);
if (!inode)
-@@ -2835,12 +2862,17 @@ struct inode *ext3_iget(struct super_blo
+@@ -2837,12 +2864,17 @@ struct inode *ext3_iget(struct super_blo
bh = iloc.bh;
raw_inode = ext3_raw_inode(&iloc);
inode->i_mode = le16_to_cpu(raw_inode->i_mode);
inode->i_nlink = 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);
-@@ -2995,6 +3027,8 @@ static int ext3_do_update_inode(handle_t
+@@ -2997,6 +3029,8 @@ static int ext3_do_update_inode(handle_t
struct ext3_inode *raw_inode = ext3_raw_inode(iloc);
struct ext3_inode_info *ei = EXT3_I(inode);
struct buffer_head *bh = iloc->bh;
int err = 0, rc, block;
again:
-@@ -3009,29 +3043,32 @@ again:
+@@ -3011,29 +3045,32 @@ again:
ext3_get_inode_flags(ei);
raw_inode->i_mode = cpu_to_le16(inode->i_mode);
if(!(test_opt(inode->i_sb, NO_UID32))) {
raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
raw_inode->i_size = cpu_to_le32(ei->i_disksize);
raw_inode->i_atime = cpu_to_le32(inode->i_atime.tv_sec);
-@@ -3191,7 +3228,8 @@ int ext3_setattr(struct dentry *dentry,
+@@ -3193,7 +3230,8 @@ int ext3_setattr(struct dentry *dentry,
if (is_quota_modification(inode, attr))
dquot_initialize(inode);
if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||
handle_t *handle;
/* (user+group)*(old+new) structure, inode write (sb,
-@@ -3213,6 +3251,8 @@ int ext3_setattr(struct dentry *dentry,
+@@ -3215,6 +3253,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-2.6.37/fs/ext3/ioctl.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/ioctl.c
---- linux-2.6.37/fs/ext3/ioctl.c 2009-06-11 17:13:03.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/ioctl.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext3/ioctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/ioctl.c
+--- linux-2.6.38-rc8/fs/ext3/ioctl.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/ioctl.c 2011-01-29 02:01:07.000000000 +0100
@@ -8,6 +8,7 @@
*/
flags |= oldflags & ~EXT3_FL_USER_MODIFIABLE;
ei->i_flags = flags;
-diff -NurpP --minimal linux-2.6.37/fs/ext3/namei.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/namei.c
---- linux-2.6.37/fs/ext3/namei.c 2011-01-05 21:50:22.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/namei.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext3/namei.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/namei.c
+--- linux-2.6.38-rc8/fs/ext3/namei.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/namei.c 2011-01-29 02:01:07.000000000 +0100
@@ -36,6 +36,7 @@
#include <linux/quotaops.h>
#include <linux/buffer_head.h>
#include "namei.h"
#include "xattr.h"
-@@ -912,6 +913,7 @@ restart:
+@@ -923,6 +924,7 @@ restart:
if (bh)
ll_rw_block(READ_META, 1, &bh);
}
}
if ((bh = bh_use[ra_ptr++]) == NULL)
goto next;
-@@ -2465,6 +2467,7 @@ const struct inode_operations ext3_dir_i
+@@ -2487,6 +2489,7 @@ const struct inode_operations ext3_dir_i
.removexattr = generic_removexattr,
#endif
.check_acl = ext3_check_acl,
};
const struct inode_operations ext3_special_inode_operations = {
-diff -NurpP --minimal linux-2.6.37/fs/ext3/super.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/super.c
---- linux-2.6.37/fs/ext3/super.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext3/super.c 2010-11-23 02:09:41.000000000 +0100
-@@ -796,7 +796,8 @@ enum {
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext3/super.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/super.c
+--- linux-2.6.38-rc8/fs/ext3/super.c 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext3/super.c 2011-01-29 02:01:07.000000000 +0100
+@@ -820,7 +820,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 = {
-@@ -853,6 +854,9 @@ static const match_table_t tokens = {
+@@ -877,6 +878,9 @@ static const match_table_t tokens = {
{Opt_barrier, "barrier"},
{Opt_nobarrier, "nobarrier"},
{Opt_resize, "resize"},
{Opt_err, NULL},
};
-@@ -1005,6 +1009,20 @@ static int parse_options (char *options,
+@@ -1029,6 +1033,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;
-@@ -1691,6 +1709,9 @@ static int ext3_fill_super (struct super
+@@ -1715,6 +1733,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);
-@@ -2575,6 +2596,14 @@ static int ext3_remount (struct super_bl
+@@ -2594,6 +2615,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-2.6.37/fs/ext4/ext4.h linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/ext4.h
---- linux-2.6.37/fs/ext4/ext4.h 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/ext4.h 2011-01-05 22:32:19.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext4/ext4.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/ext4.h
+--- linux-2.6.38-rc8/fs/ext4/ext4.h 2011-03-10 17:09:22.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/ext4.h 2011-02-17 02:17:50.000000000 +0100
@@ -347,8 +347,12 @@ struct flex_groups {
#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */
#define EXT4_EA_INODE_FL 0x00200000 /* Inode used for large EA */
#define EXT4_FL_USER_VISIBLE 0x004BDFFF /* User visible flags */
#define EXT4_FL_USER_MODIFIABLE 0x004B80FF /* User modifiable flags */
-@@ -617,7 +621,8 @@ struct ext4_inode {
+@@ -601,7 +605,8 @@ struct ext4_inode {
__le16 l_i_file_acl_high;
__le16 l_i_uid_high; /* these 2 fields */
__le16 l_i_gid_high; /* were reserved2[0] */
} linux2;
struct {
__le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */
-@@ -731,6 +736,7 @@ do { \
+@@ -719,6 +724,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_reserved2 osd2.linux2.l_i_reserved2
#elif defined(__GNU__)
-@@ -903,6 +909,7 @@ struct ext4_inode_info {
+@@ -895,6 +901,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 */
-@@ -2054,6 +2061,7 @@ extern int ext4_map_blocks(handle_t *han
+@@ -2074,6 +2081,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);
/* 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-2.6.37/fs/ext4/file.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/file.c
---- linux-2.6.37/fs/ext4/file.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/file.c 2010-11-23 02:09:41.000000000 +0100
-@@ -203,5 +203,6 @@ const struct inode_operations ext4_file_
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext4/file.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/file.c
+--- linux-2.6.38-rc8/fs/ext4/file.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/file.c 2011-02-17 02:17:50.000000000 +0100
+@@ -283,5 +283,6 @@ const struct inode_operations ext4_file_
+ #endif
.check_acl = ext4_check_acl,
- .fallocate = ext4_fallocate,
.fiemap = ext4_fiemap,
+ .sync_flags = ext4_sync_flags,
};
-diff -NurpP --minimal linux-2.6.37/fs/ext4/ialloc.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/ialloc.c
---- linux-2.6.37/fs/ext4/ialloc.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/ialloc.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext4/ialloc.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/ialloc.c
+--- linux-2.6.38-rc8/fs/ext4/ialloc.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/ialloc.c 2011-01-29 02:01:07.000000000 +0100
@@ -22,6 +22,7 @@
#include <linux/random.h>
#include <linux/bitops.h>
} else
inode_init_owner(inode, dir, mode);
-diff -NurpP --minimal linux-2.6.37/fs/ext4/inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/inode.c
---- linux-2.6.37/fs/ext4/inode.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/inode.c 2011-01-05 22:30:39.000000000 +0100
-@@ -40,6 +40,7 @@
- #include <linux/workqueue.h>
- #include <linux/kernel.h>
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext4/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/inode.c
+--- linux-2.6.38-rc8/fs/ext4/inode.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/inode.c 2011-01-29 02:27:03.000000000 +0100
+@@ -42,6 +42,7 @@
+ #include <linux/printk.h>
#include <linux/slab.h>
+ #include <linux/ratelimit.h>
+#include <linux/vs_tag.h>
#include "ext4_jbd2.h"
#include "xattr.h"
-@@ -4415,7 +4416,7 @@ static void ext4_free_branches(handle_t
+@@ -4446,7 +4447,7 @@ static void ext4_free_branches(handle_t
int ext4_can_truncate(struct inode *inode)
{
return 0;
if (S_ISREG(inode->i_mode))
return 1;
-@@ -4766,41 +4767,64 @@ void ext4_set_inode_flags(struct inode *
+@@ -4797,41 +4798,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);
}
-@@ -4836,6 +4860,8 @@ struct inode *ext4_iget(struct super_blo
+@@ -4867,6 +4891,8 @@ struct inode *ext4_iget(struct super_blo
journal_t *journal = EXT4_SB(sb)->s_journal;
long ret;
int block;
inode = iget_locked(sb, ino);
if (!inode)
-@@ -4851,12 +4877,16 @@ struct inode *ext4_iget(struct super_blo
+@@ -4882,12 +4908,16 @@ struct inode *ext4_iget(struct super_blo
goto bad_inode;
raw_inode = ext4_raw_inode(&iloc);
inode->i_mode = le16_to_cpu(raw_inode->i_mode);
+ le16_to_cpu(raw_inode->i_raw_tag));
inode->i_nlink = le16_to_cpu(raw_inode->i_links_count);
- ei->i_state_flags = 0;
-@@ -5075,6 +5105,8 @@ static int ext4_do_update_inode(handle_t
+ ext4_clear_state_flags(ei); /* Only relevant on 32-bit archs */
+@@ -5106,6 +5136,8 @@ static int ext4_do_update_inode(handle_t
struct ext4_inode *raw_inode = ext4_raw_inode(iloc);
struct ext4_inode_info *ei = EXT4_I(inode);
struct buffer_head *bh = iloc->bh;
int err = 0, rc, block;
/* For fields not not tracking in the in-memory inode,
-@@ -5085,29 +5117,32 @@ static int ext4_do_update_inode(handle_t
+@@ -5116,29 +5148,32 @@ static int ext4_do_update_inode(handle_t
ext4_get_inode_flags(ei);
raw_inode->i_mode = cpu_to_le16(inode->i_mode);
if (!(test_opt(inode->i_sb, NO_UID32))) {
raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
EXT4_INODE_SET_XTIME(i_ctime, inode, raw_inode);
-@@ -5293,7 +5328,8 @@ int ext4_setattr(struct dentry *dentry,
+@@ -5324,7 +5359,8 @@ int ext4_setattr(struct dentry *dentry,
if (is_quota_modification(inode, attr))
dquot_initialize(inode);
if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||
handle_t *handle;
/* (user+group)*(old+new) structure, inode write (sb,
-@@ -5315,6 +5351,8 @@ int ext4_setattr(struct dentry *dentry,
+@@ -5346,6 +5382,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-2.6.37/fs/ext4/ioctl.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/ioctl.c
---- linux-2.6.37/fs/ext4/ioctl.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/ioctl.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext4/ioctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/ioctl.c
+--- linux-2.6.38-rc8/fs/ext4/ioctl.c 2011-01-05 21:50:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/ioctl.c 2011-01-29 02:01:07.000000000 +0100
@@ -14,10 +14,39 @@
#include <linux/compat.h>
#include <linux/mount.h>
if (!capable(CAP_LINUX_IMMUTABLE))
goto flags_out;
}
-diff -NurpP --minimal linux-2.6.37/fs/ext4/namei.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/namei.c
---- linux-2.6.37/fs/ext4/namei.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/namei.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext4/namei.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/namei.c
+--- linux-2.6.38-rc8/fs/ext4/namei.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/namei.c 2011-01-29 02:01:07.000000000 +0100
@@ -34,6 +34,7 @@
#include <linux/quotaops.h>
#include <linux/buffer_head.h>
}
if ((bh = bh_use[ra_ptr++]) == NULL)
goto next;
-@@ -2513,6 +2515,7 @@ const struct inode_operations ext4_dir_i
+@@ -2540,6 +2542,7 @@ const struct inode_operations ext4_dir_i
#endif
.check_acl = ext4_check_acl,
.fiemap = ext4_fiemap,
};
const struct inode_operations ext4_special_inode_operations = {
-diff -NurpP --minimal linux-2.6.37/fs/ext4/super.c linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/super.c
---- linux-2.6.37/fs/ext4/super.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ext4/super.c 2011-01-05 22:30:39.000000000 +0100
-@@ -1247,6 +1247,7 @@ enum {
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ext4/super.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/super.c
+--- linux-2.6.38-rc8/fs/ext4/super.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ext4/super.c 2011-02-17 02:17:50.000000000 +0100
+@@ -1262,6 +1262,7 @@ enum {
Opt_dioread_nolock, Opt_dioread_lock,
Opt_discard, Opt_nodiscard,
Opt_init_inode_table, Opt_noinit_inode_table,
};
static const match_table_t tokens = {
-@@ -1322,6 +1323,9 @@ static const match_table_t tokens = {
+@@ -1337,6 +1338,9 @@ static const match_table_t tokens = {
{Opt_init_inode_table, "init_itable=%u"},
{Opt_init_inode_table, "init_itable"},
{Opt_noinit_inode_table, "noinit_itable"},
{Opt_err, NULL},
};
-@@ -1490,6 +1494,20 @@ static int parse_options(char *options,
+@@ -1505,6 +1509,20 @@ static int parse_options(char *options,
case Opt_nouid32:
- set_opt(sbi->s_mount_opt, NO_UID32);
+ set_opt(sb, NO_UID32);
break;
+#ifndef CONFIG_TAGGING_NONE
+ case Opt_tag:
-+ set_opt (sbi->s_mount_opt, TAGGED);
++ set_opt(sb, TAGGED);
+ break;
+ case Opt_notag:
-+ clear_opt (sbi->s_mount_opt, TAGGED);
++ clear_opt(sb, TAGGED);
+ break;
+#endif
+#ifdef CONFIG_PROPAGATE
+ case Opt_tagid:
+ /* use args[0] */
-+ set_opt (sbi->s_mount_opt, TAGGED);
++ set_opt(sb, TAGGED);
+ break;
+#endif
case Opt_debug:
- set_opt(sbi->s_mount_opt, DEBUG);
+ set_opt(sb, DEBUG);
break;
-@@ -3134,6 +3152,9 @@ static int ext4_fill_super(struct super_
+@@ -3148,6 +3166,9 @@ static int ext4_fill_super(struct super_
&journal_ioprio, NULL, 0))
goto failed_mount;
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
(test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0);
-@@ -4211,6 +4232,14 @@ static int ext4_remount(struct super_blo
+@@ -4235,6 +4256,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-2.6.37/fs/fcntl.c linux-2.6.37-vs2.3.0.37-rc3/fs/fcntl.c
---- linux-2.6.37/fs/fcntl.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/fcntl.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/fcntl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/fcntl.c
+--- linux-2.6.38-rc8/fs/fcntl.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/fcntl.c 2011-02-17 02:17:50.000000000 +0100
@@ -20,6 +20,7 @@
#include <linux/signal.h>
#include <linux/rcupdate.h>
err = security_file_fcntl(filp, cmd, arg);
if (err) {
-diff -NurpP --minimal linux-2.6.37/fs/file.c linux-2.6.37-vs2.3.0.37-rc3/fs/file.c
---- linux-2.6.37/fs/file.c 2010-10-21 13:07:48.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/file.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/file.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/file.c
+--- linux-2.6.38-rc8/fs/file.c 2010-10-21 13:07:48.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/file.c 2011-01-29 02:01:07.000000000 +0100
@@ -20,6 +20,7 @@
#include <linux/spinlock.h>
#include <linux/rcupdate.h>
#if 1
/* Sanity check */
if (rcu_dereference_raw(fdt->fd[fd]) != NULL) {
-diff -NurpP --minimal linux-2.6.37/fs/file_table.c linux-2.6.37-vs2.3.0.37-rc3/fs/file_table.c
---- linux-2.6.37/fs/file_table.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/file_table.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/file_table.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/file_table.c
+--- linux-2.6.38-rc8/fs/file_table.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/file_table.c 2011-02-17 02:17:50.000000000 +0100
@@ -24,6 +24,8 @@
#include <linux/percpu_counter.h>
#include <linux/percpu.h>
file_sb_list_del(file);
file_free(file);
}
-diff -NurpP --minimal linux-2.6.37/fs/fs_struct.c linux-2.6.37-vs2.3.0.37-rc3/fs/fs_struct.c
---- linux-2.6.37/fs/fs_struct.c 2010-10-21 13:07:48.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/fs_struct.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/fs_struct.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/fs_struct.c
+--- linux-2.6.38-rc8/fs/fs_struct.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/fs_struct.c 2011-01-29 02:35:02.000000000 +0100
@@ -4,6 +4,7 @@
#include <linux/path.h>
#include <linux/slab.h>
#include <linux/fs_struct.h>
+#include <linux/vserver/global.h>
+ #include "internal.h"
- /*
- * Replace the fs->{rootmnt,root} with {mnt,dentry}. Put the old values.
-@@ -77,6 +78,7 @@ void free_fs_struct(struct fs_struct *fs
+ static inline void path_get_longterm(struct path *path)
+@@ -96,6 +97,7 @@ void free_fs_struct(struct fs_struct *fs
{
- path_put(&fs->root);
- path_put(&fs->pwd);
+ path_put_longterm(&fs->root);
+ path_put_longterm(&fs->pwd);
+ atomic_dec(&vs_global_fs);
kmem_cache_free(fs_cachep, fs);
}
-@@ -107,6 +109,7 @@ struct fs_struct *copy_fs_struct(struct
- spin_lock_init(&fs->lock);
- fs->umask = old->umask;
- get_fs_root_and_pwd(old, &fs->root, &fs->pwd);
+@@ -135,6 +137,7 @@ struct fs_struct *copy_fs_struct(struct
+ fs->pwd = old->pwd;
+ path_get_longterm(&fs->pwd);
+ spin_unlock(&old->lock);
+ atomic_inc(&vs_global_fs);
}
return fs;
}
-diff -NurpP --minimal linux-2.6.37/fs/gfs2/file.c linux-2.6.37-vs2.3.0.37-rc3/fs/gfs2/file.c
---- linux-2.6.37/fs/gfs2/file.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/gfs2/file.c 2010-11-23 02:09:41.000000000 +0100
-@@ -132,6 +132,9 @@ static const u32 fsflags_to_gfs2[32] = {
+diff -NurpP --minimal linux-2.6.38-rc8/fs/gfs2/file.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/gfs2/file.c
+--- linux-2.6.38-rc8/fs/gfs2/file.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/gfs2/file.c 2011-01-29 02:01:07.000000000 +0100
+@@ -134,6 +134,9 @@ static const u32 fsflags_to_gfs2[32] = {
[7] = GFS2_DIF_NOATIME,
[12] = GFS2_DIF_EXHASH,
[14] = GFS2_DIF_INHERIT_JDATA,
};
static const u32 gfs2_to_fsflags[32] = {
-@@ -141,6 +144,9 @@ static const u32 gfs2_to_fsflags[32] = {
+@@ -143,6 +146,9 @@ static const u32 gfs2_to_fsflags[32] = {
[gfs2fl_NoAtime] = FS_NOATIME_FL,
[gfs2fl_ExHash] = FS_INDEX_FL,
[gfs2fl_InheritJdata] = FS_JOURNAL_DATA_FL,
};
static int gfs2_get_flags(struct file *filp, u32 __user *ptr)
-@@ -171,10 +177,16 @@ void gfs2_set_inode_flags(struct inode *
+@@ -173,10 +179,16 @@ 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)
-@@ -182,6 +194,43 @@ void gfs2_set_inode_flags(struct inode *
+@@ -184,6 +196,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 */
-@@ -293,6 +342,37 @@ static int gfs2_set_flags(struct file *f
+@@ -295,6 +344,37 @@ static int gfs2_set_flags(struct file *f
return do_gfs2_set_flags(filp, gfsflags, ~GFS2_DIF_JDATA);
}
static long gfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
switch(cmd) {
-diff -NurpP --minimal linux-2.6.37/fs/gfs2/inode.h linux-2.6.37-vs2.3.0.37-rc3/fs/gfs2/inode.h
---- linux-2.6.37/fs/gfs2/inode.h 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/gfs2/inode.h 2010-11-23 02:09:41.000000000 +0100
-@@ -126,6 +126,7 @@ extern const struct file_operations gfs2
+diff -NurpP --minimal linux-2.6.38-rc8/fs/gfs2/inode.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/gfs2/inode.h
+--- linux-2.6.38-rc8/fs/gfs2/inode.h 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/gfs2/inode.h 2011-01-29 02:01:07.000000000 +0100
+@@ -125,6 +125,7 @@ extern const struct file_operations gfs2
extern const struct file_operations gfs2_dir_fops_nolock;
extern void gfs2_set_inode_flags(struct inode *inode);
#ifdef CONFIG_GFS2_FS_LOCKING_DLM
extern const struct file_operations gfs2_file_fops;
-diff -NurpP --minimal linux-2.6.37/fs/gfs2/ops_inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/gfs2/ops_inode.c
---- linux-2.6.37/fs/gfs2/ops_inode.c 2011-01-05 21:50:23.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/gfs2/ops_inode.c 2010-11-23 02:09:41.000000000 +0100
-@@ -1594,6 +1594,8 @@ const struct inode_operations gfs2_dir_i
+diff -NurpP --minimal linux-2.6.38-rc8/fs/gfs2/ops_inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/gfs2/ops_inode.c
+--- linux-2.6.38-rc8/fs/gfs2/ops_inode.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/gfs2/ops_inode.c 2011-01-29 02:01:07.000000000 +0100
+@@ -1326,6 +1326,8 @@ const struct inode_operations gfs2_dir_i
.listxattr = gfs2_listxattr,
.removexattr = gfs2_removexattr,
.fiemap = gfs2_fiemap,
};
const struct inode_operations gfs2_symlink_iops = {
-diff -NurpP --minimal linux-2.6.37/fs/inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/inode.c
---- linux-2.6.37/fs/inode.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/inode.c 2010-11-23 03:34:25.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/inode.c
+--- linux-2.6.38-rc8/fs/inode.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/inode.c 2011-03-07 16:53:27.000000000 +0100
@@ -25,6 +25,7 @@
#include <linux/async.h>
#include <linux/posix_acl.h>
/*
* This is needed for the following functions:
-@@ -162,6 +163,9 @@ int inode_init_always(struct super_block
+@@ -164,6 +165,9 @@ int inode_init_always(struct super_block
struct address_space *const mapping = &inode->i_data;
inode->i_sb = sb;
inode->i_blkbits = sb->s_blocksize_bits;
inode->i_flags = 0;
atomic_set(&inode->i_count, 1);
-@@ -182,6 +186,7 @@ int inode_init_always(struct super_block
+@@ -184,6 +188,7 @@ int inode_init_always(struct super_block
inode->i_bdev = NULL;
inode->i_cdev = NULL;
inode->i_rdev = 0;
inode->dirtied_when = 0;
if (security_inode_alloc(inode))
-@@ -408,6 +413,8 @@ static void __remove_inode_hash(struct i
+@@ -431,6 +436,8 @@ static void __remove_inode_hash(struct i
hlist_del_init(&inode->i_hash);
}
/**
* remove_inode_hash - remove an inode from the hash
* @inode: inode to unhash
-@@ -1675,9 +1682,11 @@ void init_special_inode(struct inode *in
+@@ -1704,9 +1711,11 @@ void init_special_inode(struct inode *in
if (S_ISCHR(mode)) {
inode->i_fop = &def_chr_fops;
inode->i_rdev = rdev;
} else if (S_ISFIFO(mode))
inode->i_fop = &def_fifo_fops;
else if (S_ISSOCK(mode))
-@@ -1706,5 +1715,6 @@ void inode_init_owner(struct inode *inod
+@@ -1735,5 +1744,6 @@ 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);
}
EXPORT_SYMBOL(inode_init_owner);
-diff -NurpP --minimal linux-2.6.37/fs/ioctl.c linux-2.6.37-vs2.3.0.37-rc3/fs/ioctl.c
---- linux-2.6.37/fs/ioctl.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ioctl.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ioctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ioctl.c
+--- linux-2.6.38-rc8/fs/ioctl.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ioctl.c 2011-02-17 02:17:50.000000000 +0100
@@ -15,6 +15,9 @@
#include <linux/writeback.h>
#include <linux/buffer_head.h>
#include <asm/ioctls.h>
-diff -NurpP --minimal linux-2.6.37/fs/ioprio.c linux-2.6.37-vs2.3.0.37-rc3/fs/ioprio.c
---- linux-2.6.37/fs/ioprio.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ioprio.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ioprio.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ioprio.c
+--- linux-2.6.38-rc8/fs/ioprio.c 2011-01-05 21:50:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ioprio.c 2011-01-29 02:01:07.000000000 +0100
@@ -27,6 +27,7 @@
#include <linux/syscalls.h>
#include <linux/security.h>
tmpio = get_task_ioprio(p);
if (tmpio < 0)
continue;
-diff -NurpP --minimal linux-2.6.37/fs/jfs/file.c linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/file.c
---- linux-2.6.37/fs/jfs/file.c 2010-10-21 13:07:50.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/file.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/jfs/file.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/file.c
+--- linux-2.6.38-rc8/fs/jfs/file.c 2010-10-21 13:07:50.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/file.c 2011-01-29 02:01:07.000000000 +0100
@@ -102,7 +102,8 @@ int jfs_setattr(struct dentry *dentry, s
if (is_quota_modification(inode, iattr))
dquot_initialize(inode);
};
const struct file_operations jfs_file_operations = {
-diff -NurpP --minimal linux-2.6.37/fs/jfs/ioctl.c linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/ioctl.c
---- linux-2.6.37/fs/jfs/ioctl.c 2008-12-25 00:26:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/ioctl.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/jfs/ioctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/ioctl.c
+--- linux-2.6.38-rc8/fs/jfs/ioctl.c 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/ioctl.c 2011-01-29 02:01:07.000000000 +0100
@@ -11,6 +11,7 @@
#include <linux/mount.h>
#include <linux/time.h>
flags |= oldflags & ~JFS_FL_USER_MODIFIABLE;
jfs_inode->mode2 = flags;
-diff -NurpP --minimal linux-2.6.37/fs/jfs/jfs_dinode.h linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/jfs_dinode.h
---- linux-2.6.37/fs/jfs/jfs_dinode.h 2008-12-25 00:26:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/jfs_dinode.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/jfs/jfs_dinode.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/jfs_dinode.h
+--- linux-2.6.38-rc8/fs/jfs/jfs_dinode.h 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/jfs_dinode.h 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/fs/jfs/jfs_filsys.h linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/jfs_filsys.h
---- linux-2.6.37/fs/jfs/jfs_filsys.h 2008-12-25 00:26:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/jfs_filsys.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/jfs/jfs_filsys.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/jfs_filsys.h
+--- linux-2.6.38-rc8/fs/jfs/jfs_filsys.h 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/jfs_filsys.h 2011-01-29 02:01:07.000000000 +0100
@@ -263,6 +263,7 @@
#define JFS_NAME_MAX 255
#define JFS_PATH_MAX BPSIZE
/*
* file system state (superblock state)
-diff -NurpP --minimal linux-2.6.37/fs/jfs/jfs_imap.c linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/jfs_imap.c
---- linux-2.6.37/fs/jfs/jfs_imap.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/jfs_imap.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/jfs/jfs_imap.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/jfs_imap.c
+--- linux-2.6.38-rc8/fs/jfs/jfs_imap.c 2011-01-05 21:50:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/jfs_imap.c 2011-01-29 02:01:07.000000000 +0100
@@ -46,6 +46,7 @@
#include <linux/pagemap.h>
#include <linux/quotaops.h>
jfs_get_inode_flags(jfs_ip);
/*
* mode2 is only needed for storing the higher order bits.
-diff -NurpP --minimal linux-2.6.37/fs/jfs/jfs_inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/jfs_inode.c
---- linux-2.6.37/fs/jfs/jfs_inode.c 2010-08-02 16:52:49.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/jfs_inode.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/jfs/jfs_inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/jfs_inode.c
+--- linux-2.6.38-rc8/fs/jfs/jfs_inode.c 2010-08-02 16:52:49.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/jfs_inode.c 2011-01-29 02:01:07.000000000 +0100
@@ -18,6 +18,7 @@
#include <linux/fs.h>
}
/*
-diff -NurpP --minimal linux-2.6.37/fs/jfs/jfs_inode.h linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/jfs_inode.h
---- linux-2.6.37/fs/jfs/jfs_inode.h 2010-10-21 13:07:50.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/jfs_inode.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/jfs/jfs_inode.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/jfs_inode.h
+--- linux-2.6.38-rc8/fs/jfs/jfs_inode.h 2010-10-21 13:07:50.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/jfs_inode.h 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/fs/jfs/namei.c linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/namei.c
---- linux-2.6.37/fs/jfs/namei.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/namei.c 2010-11-23 02:09:41.000000000 +0100
-@@ -21,6 +21,7 @@
+diff -NurpP --minimal linux-2.6.38-rc8/fs/jfs/namei.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/namei.c
+--- linux-2.6.38-rc8/fs/jfs/namei.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/namei.c 2011-01-29 02:49:04.000000000 +0100
+@@ -22,6 +22,7 @@
#include <linux/ctype.h>
#include <linux/quotaops.h>
#include <linux/exportfs.h>
#include "jfs_incore.h"
#include "jfs_superblock.h"
#include "jfs_inode.h"
-@@ -1491,6 +1492,7 @@ static struct dentry *jfs_lookup(struct
+@@ -1489,6 +1490,7 @@ static struct dentry *jfs_lookup(struct
return ERR_CAST(ip);
}
+ dx_propagate_tag(nd, ip);
- dentry = d_splice_alias(ip, dentry);
+ return d_splice_alias(ip, dentry);
+ }
- if (dentry && (JFS_SBI(dip->i_sb)->mntflag & JFS_OS2))
-@@ -1560,6 +1562,7 @@ const struct inode_operations jfs_dir_in
+@@ -1553,6 +1555,7 @@ const struct inode_operations jfs_dir_in
#ifdef CONFIG_JFS_POSIX_ACL
.check_acl = jfs_check_acl,
#endif
};
const struct file_operations jfs_dir_operations = {
-diff -NurpP --minimal linux-2.6.37/fs/jfs/super.c linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/super.c
---- linux-2.6.37/fs/jfs/super.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/jfs/super.c 2010-11-23 03:40:34.000000000 +0100
-@@ -190,7 +190,8 @@ static void jfs_put_super(struct super_b
+diff -NurpP --minimal linux-2.6.38-rc8/fs/jfs/super.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/super.c
+--- linux-2.6.38-rc8/fs/jfs/super.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/jfs/super.c 2011-01-29 02:01:07.000000000 +0100
+@@ -198,7 +198,8 @@ static void jfs_put_super(struct super_b
enum {
Opt_integrity, Opt_nointegrity, Opt_iocharset, Opt_resize,
Opt_resize_nosize, Opt_errors, Opt_ignore, Opt_err, Opt_quota,
};
static const match_table_t tokens = {
-@@ -200,6 +201,10 @@ static const match_table_t tokens = {
+@@ -208,6 +209,10 @@ static const match_table_t tokens = {
{Opt_resize, "resize=%u"},
{Opt_resize_nosize, "resize"},
{Opt_errors, "errors=%s"},
{Opt_ignore, "noquota"},
{Opt_ignore, "quota"},
{Opt_usrquota, "usrquota"},
-@@ -334,6 +339,20 @@ static int parse_options(char *options,
+@@ -342,6 +347,20 @@ static int parse_options(char *options,
}
break;
}
default:
printk("jfs: Unrecognized mount option \"%s\" "
" or missing value\n", p);
-@@ -365,6 +384,12 @@ static int jfs_remount(struct super_bloc
+@@ -373,6 +392,12 @@ static int jfs_remount(struct super_bloc
return -EINVAL;
}
if (newLVSize) {
if (sb->s_flags & MS_RDONLY) {
printk(KERN_ERR
-@@ -447,6 +472,9 @@ static int jfs_fill_super(struct super_b
+@@ -455,6 +480,9 @@ static int jfs_fill_super(struct super_b
#ifdef CONFIG_JFS_POSIX_ACL
sb->s_flags |= MS_POSIXACL;
#endif
if (newLVSize) {
printk(KERN_ERR "resize option for remount only\n");
-diff -NurpP --minimal linux-2.6.37/fs/libfs.c linux-2.6.37-vs2.3.0.37-rc3/fs/libfs.c
---- linux-2.6.37/fs/libfs.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/libfs.c 2010-11-23 02:09:41.000000000 +0100
-@@ -124,7 +124,8 @@ static inline unsigned char dt_type(stru
+diff -NurpP --minimal linux-2.6.38-rc8/fs/libfs.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/libfs.c
+--- linux-2.6.38-rc8/fs/libfs.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/libfs.c 2011-01-29 05:03:51.000000000 +0100
+@@ -133,7 +133,8 @@ static inline unsigned char dt_type(stru
* both impossible due to the lock on directory.
*/
{
struct dentry *dentry = filp->f_path.dentry;
struct dentry *cursor = filp->private_data;
-@@ -157,6 +158,8 @@ int dcache_readdir(struct file * filp, v
+@@ -164,6 +165,8 @@ int dcache_readdir(struct file * filp, v
+ for (p=q->next; p != &dentry->d_subdirs; p=p->next) {
+ struct dentry *next;
next = list_entry(p, struct dentry, d_u.d_child);
- if (d_unhashed(next) || !next->d_inode)
- continue;
+ if (filter && !filter(next))
+ continue;
-
- spin_unlock(&dcache_lock);
- if (filldir(dirent, next->d_name.name,
-@@ -175,6 +178,18 @@ int dcache_readdir(struct file * filp, v
+ spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
+ if (!simple_positive(next)) {
+ spin_unlock(&next->d_lock);
+@@ -190,6 +193,17 @@ int dcache_readdir(struct file * filp, v
return 0;
}
+{
+ return do_dcache_readdir_filter(filp, dirent, filldir, filter);
+}
-+
+
ssize_t generic_read_dir(struct file *filp, char __user *buf, size_t siz, loff_t *ppos)
{
return -EISDIR;
-@@ -948,6 +963,7 @@ EXPORT_SYMBOL(dcache_dir_close);
+@@ -965,6 +979,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-2.6.37/fs/locks.c linux-2.6.37-vs2.3.0.37-rc3/fs/locks.c
---- linux-2.6.37/fs/locks.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/locks.c 2010-11-23 03:38:48.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/locks.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/locks.c
+--- linux-2.6.38-rc8/fs/locks.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/locks.c 2011-01-29 02:01:07.000000000 +0100
@@ -126,6 +126,8 @@
#include <linux/time.h>
#include <linux/rcupdate.h>
*lock = fl;
return 0;
-@@ -466,6 +478,7 @@ static int lease_init(struct file *filp,
+@@ -460,6 +472,7 @@ static int lease_init(struct file *filp,
fl->fl_owner = current->files;
fl->fl_pid = current->tgid;
fl->fl_file = filp;
fl->fl_flags = FL_LEASE;
-@@ -485,6 +498,11 @@ static struct file_lock *lease_alloc(str
+@@ -479,6 +492,11 @@ static struct file_lock *lease_alloc(str
if (fl == NULL)
return ERR_PTR(error);
error = lease_init(filp, type, fl);
if (error) {
locks_free_lock(fl);
-@@ -786,6 +804,7 @@ static int flock_lock_file(struct file *
+@@ -780,6 +798,7 @@ static int flock_lock_file(struct file *
lock_flocks();
}
find_conflict:
for_each_lock(inode, before) {
struct file_lock *fl = *before;
-@@ -806,6 +825,7 @@ find_conflict:
+@@ -800,6 +819,7 @@ find_conflict:
goto out;
locks_copy_lock(new_fl, request);
locks_insert_lock(before, new_fl);
new_fl = NULL;
error = 0;
-@@ -816,7 +836,8 @@ out:
+@@ -810,7 +830,8 @@ out:
return error;
}
{
struct file_lock *fl;
struct file_lock *new_fl = NULL;
-@@ -826,6 +847,8 @@ static int __posix_lock_file(struct inod
+@@ -820,6 +841,8 @@ static int __posix_lock_file(struct inod
struct file_lock **before;
int error, added = 0;
/*
* We may need two file_lock structures for this operation,
* so we get them in advance to avoid races.
-@@ -836,7 +859,11 @@ static int __posix_lock_file(struct inod
+@@ -830,7 +853,11 @@ static int __posix_lock_file(struct inod
(request->fl_type != F_UNLCK ||
request->fl_start != 0 || request->fl_end != OFFSET_MAX)) {
new_fl = locks_alloc_lock();
}
lock_flocks();
-@@ -1035,7 +1062,8 @@ static int __posix_lock_file(struct inod
+@@ -1029,7 +1056,8 @@ static int __posix_lock_file(struct inod
int posix_lock_file(struct file *filp, struct file_lock *fl,
struct file_lock *conflock)
{
}
EXPORT_SYMBOL(posix_lock_file);
-@@ -1125,7 +1153,7 @@ int locks_mandatory_area(int read_write,
+@@ -1119,7 +1147,7 @@ int locks_mandatory_area(int read_write,
fl.fl_end = offset + count - 1;
for (;;) {
if (error != FILE_LOCK_DEFERRED)
break;
error = wait_event_interruptible(fl.fl_wait, !fl.fl_next);
-@@ -1438,6 +1466,7 @@ int generic_setlease(struct file *filp,
+@@ -1432,6 +1460,7 @@ int generic_setlease(struct file *filp,
goto out;
locks_insert_lock(before, lease);
return 0;
out:
-@@ -1822,6 +1851,11 @@ int fcntl_setlk(unsigned int fd, struct
+@@ -1816,6 +1845,11 @@ int fcntl_setlk(unsigned int fd, struct
if (file_lock == NULL)
return -ENOLCK;
/*
* This might block, so we do it before checking the inode.
*/
-@@ -1940,6 +1974,11 @@ int fcntl_setlk64(unsigned int fd, struc
+@@ -1934,6 +1968,11 @@ int fcntl_setlk64(unsigned int fd, struc
if (file_lock == NULL)
return -ENOLCK;
/*
* This might block, so we do it before checking the inode.
*/
-@@ -2205,8 +2244,11 @@ static int locks_show(struct seq_file *f
+@@ -2199,8 +2238,11 @@ static int locks_show(struct seq_file *f
lock_get_status(f, fl, *((loff_t *)f->private), "");
return 0;
}
-diff -NurpP --minimal linux-2.6.37/fs/namei.c linux-2.6.37-vs2.3.0.37-rc3/fs/namei.c
---- linux-2.6.37/fs/namei.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/namei.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/namei.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/namei.c
+--- linux-2.6.38-rc8/fs/namei.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/namei.c 2011-03-07 16:53:27.000000000 +0100
@@ -32,6 +32,14 @@
#include <linux/fcntl.h>
#include <linux/device_cgroup.h>
/*
* This does basic POSIX ACL permission checking
*/
-@@ -266,10 +352,14 @@ int inode_permission(struct inode *inode
+@@ -271,10 +357,14 @@ int inode_permission(struct inode *inode
/*
* Nobody gets write access to an immutable file.
*/
+ return retval;
+
if (inode->i_op->permission)
- retval = inode->i_op->permission(inode, mask);
+ retval = inode->i_op->permission(inode, mask, 0);
else
-@@ -463,6 +553,9 @@ static int exec_permission(struct inode
+@@ -676,6 +766,9 @@ static inline int exec_permission(struct
{
int ret;
+ return -EACCES;
+
if (inode->i_op->permission) {
- ret = inode->i_op->permission(inode, MAY_EXEC);
- if (!ret)
-@@ -672,7 +765,8 @@ static __always_inline void follow_dotdo
+ ret = inode->i_op->permission(inode, MAY_EXEC, flags);
+ } else {
+@@ -1162,7 +1255,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()... */
-@@ -725,7 +819,7 @@ static int do_lookup(struct nameidata *n
+@@ -1216,7 +1310,7 @@ static int do_lookup(struct nameidata *n
{
struct vfsmount *mnt = nd->path.mnt;
- struct dentry *dentry, *parent;
+ struct dentry *dentry, *parent = nd->path.dentry;
- struct inode *dir;
-+ struct inode *dir, *inode;
++ struct inode *dir, *d_inode;
+ int err;
+
/*
- * See if the low-level filesystem might want
- * to use its own hash..
-@@ -747,12 +841,31 @@ static int do_lookup(struct nameidata *n
- found:
- if (dentry->d_op && dentry->d_op->d_revalidate)
- goto need_revalidate;
-+
-+ inode = dentry->d_inode;
-+ if (!inode)
+@@ -1277,6 +1371,13 @@ found:
+ if (IS_ERR(dentry))
+ goto fail;
+ }
++
++ d_inode = dentry->d_inode;
++ if (!d_inode)
+ goto done;
+
-+ if (__dx_permission(inode, MAY_ACCESS))
++ if (__dx_permission(d_inode, MAY_ACCESS))
+ goto hidden;
done:
path->mnt = mnt;
path->dentry = dentry;
- __follow_mount(path);
+@@ -1288,6 +1389,18 @@ done:
+ *inode = path->dentry->d_inode;
return 0;
+hidden:
+#ifndef CONFIG_VSERVER_WARN_DEVPTS
-+ if (inode->i_sb->s_magic != DEVPTS_SUPER_MAGIC)
++ if (d_inode->i_sb->s_magic != DEVPTS_SUPER_MAGIC)
+#endif
+ vxwprintk_task(1,
+ "did lookup hidden %s:%p[#%d,%lu] " VS_Q("%s/%.*s") ".",
-+ inode->i_sb->s_id, inode, inode->i_tag, inode->i_ino,
++ d_inode->i_sb->s_id, d_inode, d_inode->i_tag, d_inode->i_ino,
+ vxd_path(&nd->path), name->len, name->name);
+
+ dput(dentry);
+ return -ENOENT;
+
need_lookup:
- parent = nd->path.dentry;
dir = parent->d_inode;
-@@ -1301,7 +1414,7 @@ static int may_delete(struct inode *dir,
+ BUG_ON(nd->inode != dir);
+@@ -1981,7 +2094,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))
-@@ -1424,6 +1537,14 @@ int may_open(struct path *path, int acc_
+@@ -2104,6 +2217,14 @@ int may_open(struct path *path, int acc_
break;
}
error = inode_permission(inode, acc_mode);
if (error)
return error;
-@@ -1532,7 +1653,8 @@ static int open_will_truncate(int flag,
+@@ -2214,7 +2335,8 @@ static int open_will_truncate(int flag,
}
static struct file *finish_open(struct nameidata *nd,
{
struct file *filp;
int will_truncate;
-@@ -1545,6 +1667,23 @@ static struct file *finish_open(struct n
+@@ -2227,6 +2349,23 @@ static struct file *finish_open(struct n
goto exit;
}
error = may_open(&nd->path, acc_mode, open_flag);
if (error) {
if (will_truncate)
mnt_drop_write(nd->path.mnt);
-@@ -1715,7 +1854,7 @@ static struct file *do_last(struct namei
- if (S_ISDIR(path->dentry->d_inode->i_mode))
+@@ -2374,7 +2513,7 @@ static struct file *do_last(struct namei
+ if (S_ISDIR(nd->inode->i_mode))
goto exit;
ok:
- filp = finish_open(nd, open_flag, acc_mode);
return filp;
exit_mutex_unlock:
-@@ -1744,7 +1883,11 @@ struct file *do_filp_open(int dfd, const
+@@ -2401,7 +2540,12 @@ struct file *do_filp_open(int dfd, const
int count = 0;
int flag = open_to_namei_flags(open_flag);
- int force_reval = 0;
--
+ int flags;
+#ifdef CONFIG_VSERVER_COWBL
+ int rflag = flag;
+ int rmode = mode;
+
+restart:
+#endif
if (!(open_flag & O_CREAT))
mode = 0;
-
-@@ -1813,6 +1956,13 @@ reval:
- if (!(open_flag & O_NOFOLLOW))
- nd.flags |= LOOKUP_FOLLOW;
+
+@@ -2612,7 +2612,7 @@
+ goto out_path2;
+ }
+ audit_inode(pathname, nd.path.dentry);
+- filp = finish_open(&nd, open_flag, acc_mode);
++ filp = finish_open(&nd, open_flag, acc_mode, pathname);
+ out2:
+ release_open_intent(&nd);
+ return filp;
+@@ -2502,6 +2646,13 @@ reval:
+ */
+ nd.flags = flags;
filp = do_last(&nd, &path, open_flag, acc_mode, mode, pathname);
+#ifdef CONFIG_VSERVER_COWBL
+ if (unlikely(IS_ERR(filp) && PTR_ERR(filp) == -EMLINK)) {
+ }
+#endif
while (unlikely(!filp)) { /* trailing symlink */
- struct path holder;
- struct inode *inode = path.dentry->d_inode;
-@@ -1851,6 +2001,13 @@ reval:
- holder = path;
+ struct path link = path;
+ struct inode *linki = link.dentry->d_inode;
+@@ -2536,6 +2687,13 @@ reval:
+ }
nd.flags &= ~LOOKUP_PARENT;
filp = do_last(&nd, &path, open_flag, acc_mode, mode, pathname);
+#ifdef CONFIG_VSERVER_COWBL
+ goto restart;
+ }
+#endif
- if (inode->i_op->put_link)
- inode->i_op->put_link(holder.dentry, &nd, cookie);
- path_put(&holder);
-@@ -1951,9 +2108,17 @@ int vfs_mknod(struct inode *dir, struct
+ if (linki->i_op->put_link)
+ linki->i_op->put_link(link.dentry, &nd, cookie);
+ path_put(&link);
+@@ -2634,9 +2792,17 @@ int vfs_mknod(struct inode *dir, struct
if (error)
return error;
if (!dir->i_op->mknod)
return -EPERM;
-@@ -2418,7 +2583,7 @@ int vfs_link(struct dentry *old_dentry,
+@@ -3099,7 +3265,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;
-@@ -2790,6 +2955,222 @@ int vfs_follow_link(struct nameidata *nd
+@@ -3471,6 +3637,222 @@ int vfs_follow_link(struct nameidata *nd
return __vfs_follow_link(nd, link);
}
/* get the link contents into pagecache */
static char *page_getlink(struct dentry * dentry, struct page **ppage)
{
-diff -NurpP --minimal linux-2.6.37/fs/namespace.c linux-2.6.37-vs2.3.0.37-rc3/fs/namespace.c
---- linux-2.6.37/fs/namespace.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/namespace.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/namespace.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/namespace.c
+--- linux-2.6.38-rc8/fs/namespace.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/namespace.c 2011-03-07 16:53:27.000000000 +0100
@@ -31,6 +31,11 @@
#include <linux/idr.h>
#include <linux/fs_struct.h>
#include <asm/uaccess.h>
#include <asm/unistd.h>
#include "pnode.h"
-@@ -600,6 +605,7 @@ static struct vfsmount *clone_mnt(struct
+@@ -702,6 +707,7 @@ static struct vfsmount *clone_mnt(struct
mnt->mnt_root = dget(root);
mnt->mnt_mountpoint = mnt->mnt_root;
mnt->mnt_parent = mnt;
if (flag & CL_SLAVE) {
list_add(&mnt->mnt_slave, &old->mnt_slave_list);
-@@ -698,6 +704,31 @@ static inline void mangle(struct seq_fil
+@@ -830,6 +836,31 @@ static inline void mangle(struct seq_fil
seq_escape(m, s, " \t\n\\");
}
/*
* Simple .show_options callback for filesystems which don't want to
* implement more complex mount option showing.
-@@ -800,6 +831,8 @@ static int show_sb_opts(struct seq_file
+@@ -932,6 +963,8 @@ static int show_sb_opts(struct seq_file
{ MS_SYNCHRONOUS, ",sync" },
{ MS_DIRSYNC, ",dirsync" },
{ MS_MANDLOCK, ",mand" },
{ 0, NULL }
};
const struct proc_fs_info *fs_infop;
-@@ -846,10 +879,20 @@ static int show_vfsmnt(struct seq_file *
+@@ -978,10 +1011,20 @@ static int show_vfsmnt(struct seq_file *
int err = 0;
struct path mnt_path = { .dentry = mnt->mnt_root, .mnt = mnt };
show_type(m, mnt->mnt_sb);
seq_puts(m, __mnt_is_readonly(mnt) ? " ro" : " rw");
err = show_sb_opts(m, mnt->mnt_sb);
-@@ -879,6 +922,11 @@ static int show_mountinfo(struct seq_fil
+@@ -1011,6 +1054,11 @@ static int show_mountinfo(struct seq_fil
struct path root = p->root;
int err = 0;
seq_printf(m, "%i %i %u:%u ", mnt->mnt_id, mnt->mnt_parent->mnt_id,
MAJOR(sb->s_dev), MINOR(sb->s_dev));
seq_dentry(m, mnt->mnt_root, " \t\n\\");
-@@ -937,17 +985,27 @@ static int show_vfsstat(struct seq_file
+@@ -1069,17 +1117,27 @@ static int show_vfsstat(struct seq_file
struct path mnt_path = { .dentry = mnt->mnt_root, .mnt = mnt };
int err = 0;
/* file system type */
seq_puts(m, "with fstype ");
-@@ -1193,7 +1251,7 @@ SYSCALL_DEFINE2(umount, char __user *, n
+@@ -1337,7 +1395,7 @@ SYSCALL_DEFINE2(umount, char __user *, n
goto dput_and_out;
retval = -EPERM;
goto dput_and_out;
retval = do_umount(path.mnt, flags);
-@@ -1219,7 +1277,7 @@ SYSCALL_DEFINE1(oldumount, char __user *
+@@ -1363,7 +1421,7 @@ SYSCALL_DEFINE1(oldumount, char __user *
static int mount_is_safe(struct path *path)
{
return 0;
return -EPERM;
#ifdef notyet
-@@ -1509,7 +1567,7 @@ static int do_change_type(struct path *p
+@@ -1653,7 +1711,7 @@ static int do_change_type(struct path *p
int type;
int err = 0;
return -EPERM;
if (path->dentry != path->mnt->mnt_root)
-@@ -1540,11 +1598,13 @@ static int do_change_type(struct path *p
+@@ -1684,11 +1742,13 @@ static int do_change_type(struct path *p
* do loopback mount.
*/
static int do_loopback(struct path *path, char *old_name,
if (err)
return err;
if (!old_name || !*old_name)
-@@ -1579,6 +1639,7 @@ static int do_loopback(struct path *path
+@@ -1723,6 +1783,7 @@ static int do_loopback(struct path *path
br_write_unlock(vfsmount_lock);
release_mounts(&umount_list);
}
out:
up_write(&namespace_sem);
-@@ -1609,12 +1670,12 @@ static int change_mount_flags(struct vfs
+@@ -1753,12 +1814,12 @@ static int change_mount_flags(struct vfs
* on it - tough luck.
*/
static int do_remount(struct path *path, int flags, int mnt_flags,
return -EPERM;
if (!check_mnt(path->mnt))
-@@ -1658,7 +1719,7 @@ static int do_move_mount(struct path *pa
+@@ -1802,7 +1863,7 @@ static int do_move_mount(struct path *pa
struct path old_path, parent_path;
struct vfsmount *p;
int err = 0;
return -EPERM;
if (!old_name || !*old_name)
return -EINVAL;
-@@ -1740,7 +1801,7 @@ static int do_new_mount(struct path *pat
+@@ -1888,7 +1949,7 @@ static int do_new_mount(struct path *pat
return -EINVAL;
/* we need capabilities... */
return -EPERM;
mnt = do_kern_mount(type, flags, name, data);
-@@ -2006,6 +2067,7 @@ long do_mount(char *dev_name, char *dir_
+@@ -2194,6 +2255,7 @@ long do_mount(char *dev_name, char *dir_
struct path path;
int retval = 0;
int mnt_flags = 0;
/* Discard magic */
if ((flags & MS_MGC_MSK) == MS_MGC_VAL)
-@@ -2033,6 +2095,12 @@ long do_mount(char *dev_name, char *dir_
+@@ -2221,6 +2283,12 @@ long do_mount(char *dev_name, char *dir_
if (!(flags & MS_NOATIME))
mnt_flags |= MNT_RELATIME;
/* Separate the per-mountpoint flags */
if (flags & MS_NOSUID)
mnt_flags |= MNT_NOSUID;
-@@ -2049,15 +2117,17 @@ long do_mount(char *dev_name, char *dir_
+@@ -2237,15 +2305,17 @@ long do_mount(char *dev_name, char *dir_
if (flags & MS_RDONLY)
mnt_flags |= MNT_READONLY;
else if (flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE))
retval = do_change_type(&path, flags);
else if (flags & MS_MOVE)
-@@ -2136,6 +2206,7 @@ static struct mnt_namespace *dup_mnt_ns(
+@@ -2345,6 +2415,7 @@ static struct mnt_namespace *dup_mnt_ns(
q = next_mnt(q, new_ns->root);
}
up_write(&namespace_sem);
if (rootmnt)
mntput(rootmnt);
-@@ -2277,9 +2348,10 @@ SYSCALL_DEFINE2(pivot_root, const char _
+@@ -2487,9 +2558,10 @@ SYSCALL_DEFINE2(pivot_root, const char _
down_write(&namespace_sem);
mutex_lock(&old.dentry->d_inode->i_mutex);
error = -EINVAL;
goto out2;
if (!check_mnt(root.mnt))
goto out2;
-@@ -2412,6 +2484,7 @@ void put_mnt_ns(struct mnt_namespace *ns
+@@ -2624,6 +2696,7 @@ void put_mnt_ns(struct mnt_namespace *ns
br_write_unlock(vfsmount_lock);
up_write(&namespace_sem);
release_mounts(&umount_list);
kfree(ns);
}
EXPORT_SYMBOL(put_mnt_ns);
-diff -NurpP --minimal linux-2.6.37/fs/nfs/client.c linux-2.6.37-vs2.3.0.37-rc3/fs/nfs/client.c
---- linux-2.6.37/fs/nfs/client.c 2011-01-05 21:50:24.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/nfs/client.c 2010-11-23 02:09:41.000000000 +0100
-@@ -747,6 +747,9 @@ static int nfs_init_server_rpcclient(str
+diff -NurpP --minimal linux-2.6.38-rc8/fs/nfs/client.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfs/client.c
+--- linux-2.6.38-rc8/fs/nfs/client.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfs/client.c 2011-02-02 22:20:25.000000000 +0100
+@@ -761,6 +761,9 @@ static int nfs_init_server_rpcclient(str
if (server->flags & NFS_MOUNT_SOFT)
server->client->cl_softrtry = 1;
return 0;
}
-@@ -920,6 +923,10 @@ static void nfs_server_set_fsinfo(struct
+@@ -934,6 +937,10 @@ static void nfs_server_set_fsinfo(struct
server->acdirmin = server->acdirmax = 0;
}
server->maxfilesize = fsinfo->maxfilesize;
server->time_delta = fsinfo->time_delta;
-diff -NurpP --minimal linux-2.6.37/fs/nfs/dir.c linux-2.6.37-vs2.3.0.37-rc3/fs/nfs/dir.c
---- linux-2.6.37/fs/nfs/dir.c 2011-01-05 21:50:25.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/nfs/dir.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/nfs/dir.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfs/dir.c
+--- linux-2.6.38-rc8/fs/nfs/dir.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfs/dir.c 2011-01-29 02:49:21.000000000 +0100
@@ -35,6 +35,7 @@
#include <linux/sched.h>
- #include <linux/vmalloc.h>
#include <linux/kmemleak.h>
+ #include <linux/xattr.h>
+#include <linux/vs_tag.h>
#include "delegation.h"
#include "iostat.h"
-@@ -1221,6 +1222,7 @@ static struct dentry *nfs_lookup(struct
+@@ -1224,6 +1225,7 @@ static struct dentry *nfs_lookup(struct
if (IS_ERR(res))
goto out_unblock_sillyrename;
no_entry:
res = d_materialise_unique(dentry, inode);
if (res != NULL) {
-diff -NurpP --minimal linux-2.6.37/fs/nfs/inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/nfs/inode.c
---- linux-2.6.37/fs/nfs/inode.c 2011-01-05 21:50:25.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/nfs/inode.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/nfs/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfs/inode.c
+--- linux-2.6.38-rc8/fs/nfs/inode.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfs/inode.c 2011-02-02 22:20:25.000000000 +0100
@@ -37,6 +37,7 @@
- #include <linux/inet.h>
#include <linux/nfs_xdr.h>
#include <linux/slab.h>
+ #include <linux/compat.h>
+#include <linux/vs_tag.h>
#include <asm/system.h>
NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
spin_unlock(&inode->i_lock);
}
-@@ -926,6 +936,9 @@ static int nfs_check_inode_attributes(st
+@@ -934,6 +944,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;
/* Has the inode gone and changed behind our back? */
-@@ -949,13 +962,18 @@ static int nfs_check_inode_attributes(st
+@@ -957,13 +970,18 @@ static int nfs_check_inode_attributes(st
invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
}
/* Has the link count changed? */
if ((fattr->valid & NFS_ATTR_FATTR_NLINK) && inode->i_nlink != fattr->nlink)
-@@ -1190,6 +1208,9 @@ static int nfs_update_inode(struct inode
+@@ -1198,6 +1216,9 @@ static int nfs_update_inode(struct inode
unsigned long invalid = 0;
unsigned long now = jiffies;
unsigned long save_cache_validity;
dfprintk(VFS, "NFS: %s(%s/%ld ct=%d info=0x%x)\n",
__func__, inode->i_sb->s_id, inode->i_ino,
-@@ -1292,6 +1313,9 @@ static int nfs_update_inode(struct inode
+@@ -1300,6 +1321,9 @@ static int nfs_update_inode(struct inode
| NFS_INO_REVAL_PAGECACHE
| NFS_INO_REVAL_FORCED);
if (fattr->valid & NFS_ATTR_FATTR_ATIME)
memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime));
-@@ -1313,9 +1337,9 @@ static int nfs_update_inode(struct inode
+@@ -1321,9 +1345,9 @@ static int nfs_update_inode(struct inode
| NFS_INO_REVAL_FORCED);
if (fattr->valid & NFS_ATTR_FATTR_OWNER) {
}
} else if (server->caps & NFS_CAP_OWNER)
invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
-@@ -1324,9 +1348,9 @@ static int nfs_update_inode(struct inode
+@@ -1332,9 +1356,9 @@ static int nfs_update_inode(struct inode
| NFS_INO_REVAL_FORCED);
if (fattr->valid & NFS_ATTR_FATTR_GROUP) {
}
} else if (server->caps & NFS_CAP_OWNER_GROUP)
invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
-@@ -1334,6 +1358,10 @@ static int nfs_update_inode(struct inode
+@@ -1342,6 +1366,10 @@ static int nfs_update_inode(struct inode
| NFS_INO_INVALID_ACL
| NFS_INO_REVAL_FORCED);
if (fattr->valid & NFS_ATTR_FATTR_NLINK) {
if (inode->i_nlink != fattr->nlink) {
invalid |= NFS_INO_INVALID_ATTR;
-diff -NurpP --minimal linux-2.6.37/fs/nfs/nfs3xdr.c linux-2.6.37-vs2.3.0.37-rc3/fs/nfs/nfs3xdr.c
---- linux-2.6.37/fs/nfs/nfs3xdr.c 2011-01-05 21:50:25.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/nfs/nfs3xdr.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/nfs/nfs3xdr.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfs/nfs3xdr.c
+--- linux-2.6.38-rc8/fs/nfs/nfs3xdr.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfs/nfs3xdr.c 2011-02-02 22:20:25.000000000 +0100
@@ -20,6 +20,7 @@
#include <linux/nfs3.h>
#include <linux/nfs_fs.h>
#include "internal.h"
#define NFSDBG_FACILITY NFSDBG_XDR
-@@ -205,7 +206,7 @@ xdr_decode_fattr(__be32 *p, struct nfs_f
- }
-
- static inline __be32 *
--xdr_encode_sattr(__be32 *p, struct iattr *attr)
-+xdr_encode_sattr(__be32 *p, struct iattr *attr, int tag)
+@@ -562,7 +563,8 @@ static __be32 *xdr_decode_nfstime3(__be3
+ * set_mtime mtime;
+ * };
+ */
+-static void encode_sattr3(struct xdr_stream *xdr, const struct iattr *attr)
++static void encode_sattr3(struct xdr_stream *xdr,
++ const struct iattr *attr, int tag)
{
- if (attr->ia_valid & ATTR_MODE) {
- *p++ = xdr_one;
-@@ -213,15 +214,17 @@ xdr_encode_sattr(__be32 *p, struct iattr
- } else {
+ u32 nbytes;
+ __be32 *p;
+@@ -594,15 +596,19 @@ static void encode_sattr3(struct xdr_str
+ } else
*p++ = xdr_zero;
- }
+
- if (attr->ia_valid & ATTR_UID) {
+ if (attr->ia_valid & ATTR_UID ||
+ (tag && (attr->ia_valid & ATTR_TAG))) {
*p++ = xdr_one;
-- *p++ = htonl(attr->ia_uid);
-+ *p++ = htonl(TAGINO_UID(tag, attr->ia_uid, attr->ia_tag));
- } else {
+- *p++ = cpu_to_be32(attr->ia_uid);
++ *p++ = cpu_to_be32(TAGINO_UID(tag,
++ attr->ia_uid, attr->ia_tag));
+ } else
*p++ = xdr_zero;
- }
+
- if (attr->ia_valid & ATTR_GID) {
+ if (attr->ia_valid & ATTR_GID ||
+ (tag && (attr->ia_valid & ATTR_TAG))) {
*p++ = xdr_one;
-- *p++ = htonl(attr->ia_gid);
-+ *p++ = htonl(TAGINO_GID(tag, attr->ia_gid, attr->ia_tag));
- } else {
+- *p++ = cpu_to_be32(attr->ia_gid);
++ *p++ = cpu_to_be32(TAGINO_GID(tag,
++ attr->ia_gid, attr->ia_tag));
+ } else
*p++ = xdr_zero;
- }
-@@ -328,7 +331,8 @@ static int
- nfs3_xdr_sattrargs(struct rpc_rqst *req, __be32 *p, struct nfs3_sattrargs *args)
+
+@@ -878,7 +884,7 @@ static void nfs3_xdr_enc_setattr3args(st
+ const struct nfs3_sattrargs *args)
{
- p = xdr_encode_fhandle(p, args->fh);
-- p = xdr_encode_sattr(p, args->sattr);
-+ p = xdr_encode_sattr(p, args->sattr,
-+ req->rq_task->tk_client->cl_tag);
- *p++ = htonl(args->guard);
- if (args->guard)
- p = xdr_encode_time3(p, &args->guardtime);
-@@ -433,7 +437,8 @@ nfs3_xdr_createargs(struct rpc_rqst *req
- *p++ = args->verifier[0];
- *p++ = args->verifier[1];
- } else
-- p = xdr_encode_sattr(p, args->sattr);
-+ p = xdr_encode_sattr(p, args->sattr,
-+ req->rq_task->tk_client->cl_tag);
+ encode_nfs_fh3(xdr, args->fh);
+- encode_sattr3(xdr, args->sattr);
++ encode_sattr3(xdr, args->sattr, req->rq_task->tk_client->cl_tag);
+ encode_sattrguard3(xdr, args);
+ }
- req->rq_slen = xdr_adjust_iovec(req->rq_svec, p);
- return 0;
-@@ -447,7 +452,8 @@ nfs3_xdr_mkdirargs(struct rpc_rqst *req,
+@@ -1028,13 +1034,13 @@ static void nfs3_xdr_enc_write3args(stru
+ * };
+ */
+ static void encode_createhow3(struct xdr_stream *xdr,
+- const struct nfs3_createargs *args)
++ const struct nfs3_createargs *args, int tag)
{
- p = xdr_encode_fhandle(p, args->fh);
- p = xdr_encode_array(p, args->name, args->len);
-- p = xdr_encode_sattr(p, args->sattr);
-+ p = xdr_encode_sattr(p, args->sattr,
-+ req->rq_task->tk_client->cl_tag);
- req->rq_slen = xdr_adjust_iovec(req->rq_svec, p);
- return 0;
+ encode_uint32(xdr, args->createmode);
+ switch (args->createmode) {
+ case NFS3_CREATE_UNCHECKED:
+ case NFS3_CREATE_GUARDED:
+- encode_sattr3(xdr, args->sattr);
++ encode_sattr3(xdr, args->sattr, tag);
+ break;
+ case NFS3_CREATE_EXCLUSIVE:
+ encode_createverf3(xdr, args->verifier);
+@@ -1049,7 +1055,7 @@ static void nfs3_xdr_enc_create3args(str
+ const struct nfs3_createargs *args)
+ {
+ encode_diropargs3(xdr, args->fh, args->name, args->len);
+- encode_createhow3(xdr, args);
++ encode_createhow3(xdr, args, req->rq_task->tk_client->cl_tag);
+ }
+
+ /*
+@@ -1065,7 +1071,7 @@ static void nfs3_xdr_enc_mkdir3args(stru
+ const struct nfs3_mkdirargs *args)
+ {
+ encode_diropargs3(xdr, args->fh, args->name, args->len);
+- encode_sattr3(xdr, args->sattr);
++ encode_sattr3(xdr, args->sattr, req->rq_task->tk_client->cl_tag);
}
-@@ -460,7 +466,8 @@ nfs3_xdr_symlinkargs(struct rpc_rqst *re
+
+ /*
+@@ -1082,9 +1088,9 @@ static void nfs3_xdr_enc_mkdir3args(stru
+ * };
+ */
+ static void encode_symlinkdata3(struct xdr_stream *xdr,
+- const struct nfs3_symlinkargs *args)
++ const struct nfs3_symlinkargs *args, int tag)
+ {
+- encode_sattr3(xdr, args->sattr);
++ encode_sattr3(xdr, args->sattr, tag);
+ encode_nfspath3(xdr, args->pages, args->pathlen);
+ }
+
+@@ -1093,7 +1099,7 @@ static void nfs3_xdr_enc_symlink3args(st
+ const struct nfs3_symlinkargs *args)
+ {
+ encode_diropargs3(xdr, args->fromfh, args->fromname, args->fromlen);
+- encode_symlinkdata3(xdr, args);
++ encode_symlinkdata3(xdr, args, req->rq_task->tk_client->cl_tag);
+ }
+
+ /*
+@@ -1121,24 +1127,24 @@ static void nfs3_xdr_enc_symlink3args(st
+ * };
+ */
+ static void encode_devicedata3(struct xdr_stream *xdr,
+- const struct nfs3_mknodargs *args)
++ const struct nfs3_mknodargs *args, int tag)
+ {
+- encode_sattr3(xdr, args->sattr);
++ encode_sattr3(xdr, args->sattr, tag);
+ encode_specdata3(xdr, args->rdev);
+ }
+
+ static void encode_mknoddata3(struct xdr_stream *xdr,
+- const struct nfs3_mknodargs *args)
++ const struct nfs3_mknodargs *args, int tag)
+ {
+ encode_ftype3(xdr, args->type);
+ switch (args->type) {
+ case NF3CHR:
+ case NF3BLK:
+- encode_devicedata3(xdr, args);
++ encode_devicedata3(xdr, args, tag);
+ break;
+ case NF3SOCK:
+ case NF3FIFO:
+- encode_sattr3(xdr, args->sattr);
++ encode_sattr3(xdr, args->sattr, tag);
+ break;
+ case NF3REG:
+ case NF3DIR:
+@@ -1153,7 +1159,7 @@ static void nfs3_xdr_enc_mknod3args(stru
+ const struct nfs3_mknodargs *args)
{
- p = xdr_encode_fhandle(p, args->fromfh);
- p = xdr_encode_array(p, args->fromname, args->fromlen);
-- p = xdr_encode_sattr(p, args->sattr);
-+ p = xdr_encode_sattr(p, args->sattr,
-+ req->rq_task->tk_client->cl_tag);
- *p++ = htonl(args->pathlen);
- req->rq_slen = xdr_adjust_iovec(req->rq_svec, p);
-
-@@ -478,7 +485,8 @@ nfs3_xdr_mknodargs(struct rpc_rqst *req,
- p = xdr_encode_fhandle(p, args->fh);
- p = xdr_encode_array(p, args->name, args->len);
- *p++ = htonl(args->type);
-- p = xdr_encode_sattr(p, args->sattr);
-+ p = xdr_encode_sattr(p, args->sattr,
-+ req->rq_task->tk_client->cl_tag);
- if (args->type == NF3CHR || args->type == NF3BLK) {
- *p++ = htonl(MAJOR(args->rdev));
- *p++ = htonl(MINOR(args->rdev));
-diff -NurpP --minimal linux-2.6.37/fs/nfs/super.c linux-2.6.37-vs2.3.0.37-rc3/fs/nfs/super.c
---- linux-2.6.37/fs/nfs/super.c 2011-01-05 21:50:25.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/nfs/super.c 2011-01-05 23:44:00.000000000 +0100
+ encode_diropargs3(xdr, args->fh, args->name, args->len);
+- encode_mknoddata3(xdr, args);
++ encode_mknoddata3(xdr, args, req->rq_task->tk_client->cl_tag);
+ }
+
+ /*
+diff -NurpP --minimal linux-2.6.38-rc8/fs/nfs/super.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfs/super.c
+--- linux-2.6.38-rc8/fs/nfs/super.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfs/super.c 2011-01-29 02:01:07.000000000 +0100
@@ -53,6 +53,7 @@
#include <linux/nfs_xdr.h>
#include <linux/magic.h>
{ Opt_err, NULL }
};
-@@ -640,6 +647,7 @@ static void nfs_show_mount_options(struc
+@@ -642,6 +649,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;
-@@ -1120,6 +1128,14 @@ static int nfs_parse_mount_options(char
+@@ -1122,6 +1130,14 @@ static int nfs_parse_mount_options(char
kfree(mnt->fscache_uniq);
mnt->fscache_uniq = NULL;
break;
/*
* options that take numeric values
-@@ -1304,6 +1320,12 @@ static int nfs_parse_mount_options(char
+@@ -1306,6 +1322,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-2.6.37/fs/nfsd/auth.c linux-2.6.37-vs2.3.0.37-rc3/fs/nfsd/auth.c
---- linux-2.6.37/fs/nfsd/auth.c 2010-02-25 11:52:05.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/nfsd/auth.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/nfsd/auth.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfsd/auth.c
+--- linux-2.6.38-rc8/fs/nfsd/auth.c 2010-02-25 11:52:05.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfsd/auth.c 2011-01-29 02:01:07.000000000 +0100
@@ -1,6 +1,7 @@
/* Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de> */
rqgi = rqstp->rq_cred.cr_group_info;
-diff -NurpP --minimal linux-2.6.37/fs/nfsd/nfs3xdr.c linux-2.6.37-vs2.3.0.37-rc3/fs/nfsd/nfs3xdr.c
---- linux-2.6.37/fs/nfsd/nfs3xdr.c 2011-01-05 21:50:25.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/nfsd/nfs3xdr.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/nfsd/nfs3xdr.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfsd/nfs3xdr.c
+--- linux-2.6.38-rc8/fs/nfsd/nfs3xdr.c 2011-01-05 21:50:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfsd/nfs3xdr.c 2011-01-29 02:01:07.000000000 +0100
@@ -7,6 +7,7 @@
*/
if (S_ISLNK(stat->mode) && stat->size > NFS3_MAXPATHLEN) {
p = xdr_encode_hyper(p, (u64) NFS3_MAXPATHLEN);
} else {
-diff -NurpP --minimal linux-2.6.37/fs/nfsd/nfs4xdr.c linux-2.6.37-vs2.3.0.37-rc3/fs/nfsd/nfs4xdr.c
---- linux-2.6.37/fs/nfsd/nfs4xdr.c 2011-01-05 21:50:25.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/nfsd/nfs4xdr.c 2010-11-23 02:09:41.000000000 +0100
-@@ -47,6 +47,7 @@
- #include <linux/nfsd_idmap.h>
- #include <linux/nfs4_acl.h>
+diff -NurpP --minimal linux-2.6.38-rc8/fs/nfsd/nfs4xdr.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfsd/nfs4xdr.c
+--- linux-2.6.38-rc8/fs/nfsd/nfs4xdr.c 2011-03-10 17:09:23.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfsd/nfs4xdr.c 2011-03-07 16:53:27.000000000 +0100
+@@ -45,6 +45,7 @@
+ #include <linux/statfs.h>
+ #include <linux/utsname.h>
#include <linux/sunrpc/svcauth_gss.h>
+#include <linux/vs_tag.h>
- #include "xdr4.h"
- #include "vfs.h"
-@@ -2063,14 +2064,18 @@ out_acl:
+ #include "idmap.h"
+ #include "acl.h"
+@@ -2098,14 +2099,18 @@ out_acl:
WRITE32(stat.nlink);
}
if (bmval1 & FATTR4_WORD1_OWNER) {
if (status == nfserr_resource)
goto out_resource;
if (status)
-diff -NurpP --minimal linux-2.6.37/fs/nfsd/nfsxdr.c linux-2.6.37-vs2.3.0.37-rc3/fs/nfsd/nfsxdr.c
---- linux-2.6.37/fs/nfsd/nfsxdr.c 2010-02-25 11:52:05.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/nfsd/nfsxdr.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/nfsd/nfsxdr.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfsd/nfsxdr.c
+--- linux-2.6.38-rc8/fs/nfsd/nfsxdr.c 2010-02-25 11:52:05.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/nfsd/nfsxdr.c 2011-01-29 02:01:07.000000000 +0100
@@ -6,6 +6,7 @@
#include "xdr.h"
if (S_ISLNK(type) && stat->size > NFS_MAXPATHLEN) {
*p++ = htonl(NFS_MAXPATHLEN);
-diff -NurpP --minimal linux-2.6.37/fs/ocfs2/dlmglue.c linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/dlmglue.c
---- linux-2.6.37/fs/ocfs2/dlmglue.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/dlmglue.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ocfs2/dlmglue.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/dlmglue.c
+--- linux-2.6.38-rc8/fs/ocfs2/dlmglue.c 2011-01-05 21:50:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/dlmglue.c 2011-01-29 02:01:07.000000000 +0100
@@ -2114,6 +2114,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);
inode->i_mode = be16_to_cpu(lvb->lvb_imode);
inode->i_nlink = be16_to_cpu(lvb->lvb_inlink);
ocfs2_unpack_timespec(&inode->i_atime,
-diff -NurpP --minimal linux-2.6.37/fs/ocfs2/dlmglue.h linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/dlmglue.h
---- linux-2.6.37/fs/ocfs2/dlmglue.h 2010-10-21 13:07:50.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/dlmglue.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ocfs2/dlmglue.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/dlmglue.h
+--- linux-2.6.38-rc8/fs/ocfs2/dlmglue.h 2010-10-21 13:07:50.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/dlmglue.h 2011-01-29 02:01:07.000000000 +0100
@@ -46,7 +46,8 @@ struct ocfs2_meta_lvb {
__be16 lvb_inlink;
__be32 lvb_iattr;
};
#define OCFS2_QINFO_LVB_VERSION 1
-diff -NurpP --minimal linux-2.6.37/fs/ocfs2/file.c linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/file.c
---- linux-2.6.37/fs/ocfs2/file.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/file.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ocfs2/file.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/file.c
+--- linux-2.6.38-rc8/fs/ocfs2/file.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/file.c 2011-01-29 02:01:07.000000000 +0100
@@ -1126,13 +1126,15 @@ int ocfs2_setattr(struct dentry *dentry,
mlog(0, "uid change: %d\n", attr->ia_uid);
if (attr->ia_valid & ATTR_GID)
if (!(attr->ia_valid & OCFS2_VALID_ATTRS)) {
mlog(0, "can't handle attrs: 0x%x\n", attr->ia_valid);
return 0;
-diff -NurpP --minimal linux-2.6.37/fs/ocfs2/inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/inode.c
---- linux-2.6.37/fs/ocfs2/inode.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/inode.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ocfs2/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/inode.c
+--- linux-2.6.38-rc8/fs/ocfs2/inode.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/inode.c 2011-01-29 02:01:07.000000000 +0100
@@ -28,6 +28,7 @@
#include <linux/highmem.h>
#include <linux/pagemap.h>
/* Fast symlinks will have i_size but no allocated clusters. */
if (S_ISLNK(inode->i_mode) && !fe->i_clusters)
-diff -NurpP --minimal linux-2.6.37/fs/ocfs2/inode.h linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/inode.h
---- linux-2.6.37/fs/ocfs2/inode.h 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/inode.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ocfs2/inode.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/inode.h
+--- linux-2.6.38-rc8/fs/ocfs2/inode.h 2011-01-05 21:50:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/inode.h 2011-01-29 02:01:07.000000000 +0100
@@ -151,6 +151,7 @@ struct buffer_head *ocfs2_bread(struct i
void ocfs2_set_inode_flags(struct inode *inode);
static inline blkcnt_t ocfs2_inode_sector_count(struct inode *inode)
{
-diff -NurpP --minimal linux-2.6.37/fs/ocfs2/ioctl.c linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/ioctl.c
---- linux-2.6.37/fs/ocfs2/ioctl.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/ioctl.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ocfs2/ioctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/ioctl.c
+--- linux-2.6.38-rc8/fs/ocfs2/ioctl.c 2011-01-05 21:50:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/ioctl.c 2011-01-29 02:01:07.000000000 +0100
@@ -63,7 +63,41 @@ static int ocfs2_get_inode_attr(struct i
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-2.6.37/fs/ocfs2/namei.c linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/namei.c
---- linux-2.6.37/fs/ocfs2/namei.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/namei.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ocfs2/namei.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/namei.c
+--- linux-2.6.38-rc8/fs/ocfs2/namei.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/namei.c 2011-01-29 02:01:07.000000000 +0100
@@ -41,6 +41,7 @@
#include <linux/slab.h>
#include <linux/highmem.h>
#define MLOG_MASK_PREFIX ML_NAMEI
#include <cluster/masklog.h>
-@@ -487,6 +488,7 @@ static int __ocfs2_mknod_locked(struct i
+@@ -485,6 +486,7 @@ static int __ocfs2_mknod_locked(struct i
struct ocfs2_dinode *fe = NULL;
struct ocfs2_extent_list *fel;
u16 feat;
*new_fe_bh = NULL;
-@@ -524,8 +526,11 @@ static int __ocfs2_mknod_locked(struct i
+@@ -522,8 +524,11 @@ 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_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-2.6.37/fs/ocfs2/ocfs2_fs.h linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/ocfs2_fs.h
---- linux-2.6.37/fs/ocfs2/ocfs2_fs.h 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/ocfs2_fs.h 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ocfs2/ocfs2.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/ocfs2.h
+--- linux-2.6.38-rc8/fs/ocfs2/ocfs2.h 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/ocfs2.h 2011-01-29 02:01:07.000000000 +0100
+@@ -267,6 +267,7 @@ enum ocfs2_mount_options
+ writes */
+ OCFS2_MOUNT_HB_NONE = 1 << 13, /* No heartbeat */
+ OCFS2_MOUNT_HB_GLOBAL = 1 << 14, /* Global heartbeat */
++ OCFS2_MOUNT_TAGGED = 1 << 15, /* use tagging */
+ };
+
+ #define OCFS2_OSB_SOFT_RO 0x0001
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ocfs2/ocfs2_fs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/ocfs2_fs.h
+--- linux-2.6.38-rc8/fs/ocfs2/ocfs2_fs.h 2011-01-05 21:50:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/ocfs2_fs.h 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/fs/ocfs2/ocfs2.h linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/ocfs2.h
---- linux-2.6.37/fs/ocfs2/ocfs2.h 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/ocfs2.h 2011-01-05 22:30:39.000000000 +0100
-@@ -267,6 +267,7 @@ enum ocfs2_mount_options
- writes */
- OCFS2_MOUNT_HB_NONE = 1 << 13, /* No heartbeat */
- OCFS2_MOUNT_HB_GLOBAL = 1 << 14, /* Global heartbeat */
-+ OCFS2_MOUNT_TAGGED = 1 << 15, /* use tagging */
- };
-
- #define OCFS2_OSB_SOFT_RO 0x0001
-diff -NurpP --minimal linux-2.6.37/fs/ocfs2/super.c linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/super.c
---- linux-2.6.37/fs/ocfs2/super.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/ocfs2/super.c 2010-11-23 03:14:32.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/ocfs2/super.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/super.c
+--- linux-2.6.38-rc8/fs/ocfs2/super.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/ocfs2/super.c 2011-03-07 16:53:27.000000000 +0100
@@ -181,6 +181,7 @@ enum {
Opt_coherency_full,
Opt_resv_level,
{Opt_err, NULL}
};
-@@ -659,6 +663,13 @@ static int ocfs2_remount(struct super_bl
+@@ -666,6 +670,13 @@ static int ocfs2_remount(struct super_bl
goto out;
}
/* We're going to/from readonly mode. */
if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY)) {
/* Disable quota accounting before remounting RO */
-@@ -1177,6 +1188,9 @@ static int ocfs2_fill_super(struct super
+@@ -1183,6 +1194,9 @@ static int ocfs2_fill_super(struct super
ocfs2_complete_mount_recovery(osb);
if (ocfs2_mount_local(osb))
snprintf(nodestr, sizeof(nodestr), "local");
else
-@@ -1499,6 +1513,20 @@ static int ocfs2_parse_options(struct su
+@@ -1514,6 +1528,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-2.6.37/fs/open.c linux-2.6.37-vs2.3.0.37-rc3/fs/open.c
---- linux-2.6.37/fs/open.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/open.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/open.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/open.c
+--- linux-2.6.38-rc8/fs/open.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/open.c 2011-02-17 02:17:50.000000000 +0100
@@ -30,6 +30,11 @@
#include <linux/fs_struct.h>
#include <linux/ima.h>
#include "internal.h"
-@@ -481,6 +486,12 @@ SYSCALL_DEFINE3(fchmodat, int, dfd, cons
+@@ -486,6 +491,12 @@ SYSCALL_DEFINE3(fchmodat, int, dfd, cons
error = user_path_at(dfd, filename, LOOKUP_FOLLOW, &path);
if (error)
goto out;
inode = path.dentry->d_inode;
error = mnt_want_write(path.mnt);
-@@ -518,11 +529,11 @@ static int chown_common(struct path *pat
+@@ -523,11 +534,11 @@ static int chown_common(struct path *pat
newattrs.ia_valid = ATTR_CTIME;
if (user != (uid_t) -1) {
newattrs.ia_valid |= ATTR_UID;
}
if (!S_ISDIR(inode->i_mode))
newattrs.ia_valid |=
-@@ -547,6 +558,10 @@ SYSCALL_DEFINE3(chown, const char __user
+@@ -552,6 +563,10 @@ SYSCALL_DEFINE3(chown, const char __user
error = mnt_want_write(path.mnt);
if (error)
goto out_release;
error = chown_common(&path, user, group);
mnt_drop_write(path.mnt);
out_release:
-@@ -572,6 +587,10 @@ SYSCALL_DEFINE5(fchownat, int, dfd, cons
+@@ -577,6 +592,10 @@ SYSCALL_DEFINE5(fchownat, int, dfd, cons
error = mnt_want_write(path.mnt);
if (error)
goto out_release;
error = chown_common(&path, user, group);
mnt_drop_write(path.mnt);
out_release:
-@@ -591,6 +610,10 @@ SYSCALL_DEFINE3(lchown, const char __use
+@@ -596,6 +615,10 @@ SYSCALL_DEFINE3(lchown, const char __use
error = mnt_want_write(path.mnt);
if (error)
goto out_release;
error = chown_common(&path, user, group);
mnt_drop_write(path.mnt);
out_release:
-@@ -837,6 +860,7 @@ static void __put_unused_fd(struct files
+@@ -844,6 +867,7 @@ static void __put_unused_fd(struct files
__FD_CLR(fd, fdt->open_fds);
if (fd < files->next_fd)
files->next_fd = fd;
}
void put_unused_fd(unsigned int fd)
-diff -NurpP --minimal linux-2.6.37/fs/proc/array.c linux-2.6.37-vs2.3.0.37-rc3/fs/proc/array.c
---- linux-2.6.37/fs/proc/array.c 2010-08-02 16:52:51.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/proc/array.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/proc/array.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/array.c
+--- linux-2.6.38-rc8/fs/proc/array.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/array.c 2011-02-17 02:23:41.000000000 +0100
@@ -81,6 +81,8 @@
#include <linux/pid_namespace.h>
#include <linux/ptrace.h>
static inline void task_context_switch_counts(struct seq_file *m,
@@ -337,6 +343,42 @@ static void task_cpus_allowed(struct seq
- seq_printf(m, "\n");
+ seq_putc(m, '\n');
}
+int proc_pid_nsproxy(struct seq_file *m, struct pid_namespace *ns,
task_context_switch_counts(m, task);
return 0;
}
-@@ -465,6 +508,17 @@ static int do_task_stat(struct seq_file
+@@ -462,6 +505,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 %d %d %d %d %d %u %lu \
%lu %lu %lu %lu %lu %ld %ld %ld %ld %d 0 %llu %lu %ld %lu %lu %lu %lu %lu \
%lu %lu %lu %lu %lu %lu %lu %lu %d %d %u %u %llu %lu %ld\n",
-diff -NurpP --minimal linux-2.6.37/fs/proc/base.c linux-2.6.37-vs2.3.0.37-rc3/fs/proc/base.c
---- linux-2.6.37/fs/proc/base.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/proc/base.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/proc/base.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/base.c
+--- linux-2.6.38-rc8/fs/proc/base.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/base.c 2011-03-07 19:16:17.000000000 +0100
@@ -83,6 +83,8 @@
#include <linux/pid_namespace.h>
#include <linux/fs_struct.h>
#include "internal.h"
/* NOTE:
-@@ -1056,11 +1058,16 @@ static ssize_t oom_adjust_write(struct f
+@@ -1043,11 +1045,16 @@ static ssize_t oom_adjust_write(struct f
goto err_task_lock;
}
if (oom_adjust != task->signal->oom_adj) {
if (oom_adjust == OOM_DISABLE)
atomic_inc(&task->mm->oom_disable_count);
-@@ -1227,7 +1234,7 @@ static ssize_t proc_loginuid_write(struc
+@@ -1216,7 +1223,7 @@ static ssize_t proc_loginuid_write(struc
ssize_t length;
uid_t loginuid;
return -EPERM;
rcu_read_lock();
-@@ -1666,6 +1673,8 @@ static struct inode *proc_pid_make_inode
+@@ -1715,6 +1722,8 @@ static struct inode *proc_pid_make_inode
inode->i_gid = cred->egid;
rcu_read_unlock();
}
security_task_to_inode(task, inode);
out:
-@@ -2219,6 +2228,13 @@ static struct dentry *proc_pident_lookup
+@@ -1751,6 +1760,8 @@ static int pid_getattr(struct vfsmount *
+
+ /* dentry stuff */
+
++static unsigned name_to_int(struct dentry *dentry);
++
+ /*
+ * Exceptional case: normally we are not allowed to unhash a busy
+ * directory. In this case, however, we can do it - no aliasing problems
+@@ -1779,6 +1790,12 @@ static int pid_revalidate(struct dentry
+ task = get_proc_task(inode);
+
+ if (task) {
++ unsigned pid = name_to_int(dentry);
++
++ if (pid != ~0U && pid != vx_map_pid(task->pid)) {
++ put_task_struct(task);
++ goto drop;
++ }
+ if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
+ task_dumpable(task)) {
+ rcu_read_lock();
+@@ -1795,6 +1812,7 @@ static int pid_revalidate(struct dentry
+ put_task_struct(task);
+ return 1;
+ }
++drop:
+ d_drop(dentry);
+ return 0;
+ }
+@@ -2283,6 +2301,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.
-@@ -2628,7 +2644,7 @@ out_iput:
+@@ -2698,7 +2723,7 @@ out_iput:
static struct dentry *proc_base_lookup(struct inode *dir, struct dentry *dentry)
{
struct dentry *error;
const struct pid_entry *p, *last;
error = ERR_PTR(-ENOENT);
-@@ -2718,6 +2734,9 @@ static int proc_pid_personality(struct s
+@@ -2788,6 +2813,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),
-@@ -2777,6 +2796,8 @@ static const struct pid_entry tgid_base_
+@@ -2850,6 +2878,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_adjust_operations),
REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),
-@@ -2793,6 +2814,7 @@ static const struct pid_entry tgid_base_
+@@ -2866,6 +2896,7 @@ static const struct pid_entry tgid_base_
#ifdef CONFIG_TASK_IO_ACCOUNTING
INF("io", S_IRUGO, proc_tgid_io_accounting),
#endif
};
static int proc_tgid_base_readdir(struct file * filp,
-@@ -2985,7 +3007,7 @@ retry:
+@@ -3058,7 +3089,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
-@@ -3015,7 +3037,7 @@ static int proc_pid_fill_cache(struct fi
+@@ -3088,7 +3119,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);
}
-@@ -3024,7 +3046,7 @@ static int proc_pid_fill_cache(struct fi
+@@ -3097,7 +3128,7 @@ static int proc_pid_fill_cache(struct fi
int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir)
{
unsigned int nr = filp->f_pos - FIRST_PROCESS_ENTRY;
struct tgid_iter iter;
struct pid_namespace *ns;
-@@ -3044,6 +3066,8 @@ int proc_pid_readdir(struct file * filp,
+@@ -3117,6 +3148,8 @@ int proc_pid_readdir(struct file * filp,
iter.task;
iter.tgid += 1, iter = next_tgid(ns, iter)) {
filp->f_pos = iter.tgid + TGID_OFFSET;
if (proc_pid_fill_cache(filp, dirent, filldir, iter) < 0) {
put_task_struct(iter.task);
goto out;
-@@ -3193,6 +3217,8 @@ static struct dentry *proc_task_lookup(s
+@@ -3266,6 +3299,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-2.6.37/fs/proc/generic.c linux-2.6.37-vs2.3.0.37-rc3/fs/proc/generic.c
---- linux-2.6.37/fs/proc/generic.c 2010-10-21 13:07:51.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/proc/generic.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/proc/generic.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/generic.c
+--- linux-2.6.38-rc8/fs/proc/generic.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/generic.c 2011-01-29 02:29:09.000000000 +0100
@@ -22,6 +22,7 @@
#include <linux/bitops.h>
#include <linux/spinlock.h>
#include <asm/uaccess.h>
#include "internal.h"
-@@ -424,6 +425,8 @@ struct dentry *proc_lookup_de(struct pro
+@@ -424,11 +425,15 @@ struct dentry *proc_lookup_de(struct pro
for (de = de->subdir; de ; de = de->next) {
if (de->namelen != dentry->d_name.len)
continue;
+ if (!vx_hide_check(0, de->vx_flags))
+ continue;
if (!memcmp(dentry->d_name.name, de->name, de->namelen)) {
- unsigned int ino;
-
-@@ -432,6 +435,8 @@ struct dentry *proc_lookup_de(struct pro
+ pde_get(de);
spin_unlock(&proc_subdir_lock);
error = -EINVAL;
- inode = proc_get_inode(dir->i_sb, ino, de);
+ inode = proc_get_inode(dir->i_sb, de);
+ /* generic proc entries belong to the host */
+ inode->i_tag = 0;
goto out_unlock;
}
}
-@@ -509,6 +514,8 @@ int proc_readdir_de(struct proc_dir_entr
+@@ -506,6 +511,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) {
-@@ -516,6 +523,7 @@ int proc_readdir_de(struct proc_dir_entr
+@@ -513,6 +520,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);
-@@ -630,6 +638,7 @@ static struct proc_dir_entry *__proc_cre
+@@ -627,6 +635,7 @@ static struct proc_dir_entry *__proc_cre
ent->nlink = nlink;
atomic_set(&ent->count, 1);
ent->pde_users = 0;
spin_lock_init(&ent->pde_unload_lock);
ent->pde_unload_completion = NULL;
INIT_LIST_HEAD(&ent->pde_openers);
-@@ -653,7 +662,8 @@ struct proc_dir_entry *proc_symlink(cons
+@@ -650,7 +659,8 @@ struct proc_dir_entry *proc_symlink(cons
kfree(ent->data);
kfree(ent);
ent = NULL;
} else {
kfree(ent);
ent = NULL;
-diff -NurpP --minimal linux-2.6.37/fs/proc/inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/proc/inode.c
---- linux-2.6.37/fs/proc/inode.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/proc/inode.c 2010-11-23 02:09:41.000000000 +0100
-@@ -427,6 +427,8 @@ struct inode *proc_get_inode(struct supe
+diff -NurpP --minimal linux-2.6.38-rc8/fs/proc/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/inode.c
+--- linux-2.6.38-rc8/fs/proc/inode.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/inode.c 2011-01-29 02:01:07.000000000 +0100
+@@ -433,6 +433,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-2.6.37/fs/proc/internal.h linux-2.6.37-vs2.3.0.37-rc3/fs/proc/internal.h
---- linux-2.6.37/fs/proc/internal.h 2010-02-25 11:52:06.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/proc/internal.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/proc/internal.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/internal.h
+--- linux-2.6.38-rc8/fs/proc/internal.h 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/internal.h 2011-01-29 02:01:07.000000000 +0100
@@ -10,6 +10,7 @@
*/
static inline int proc_fd(struct inode *inode)
{
return PROC_I(inode)->fd;
-diff -NurpP --minimal linux-2.6.37/fs/proc/loadavg.c linux-2.6.37-vs2.3.0.37-rc3/fs/proc/loadavg.c
---- linux-2.6.37/fs/proc/loadavg.c 2009-09-10 15:26:23.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/proc/loadavg.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/proc/loadavg.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/loadavg.c
+--- linux-2.6.38-rc8/fs/proc/loadavg.c 2009-09-10 15:26:23.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/loadavg.c 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/fs/proc/meminfo.c linux-2.6.37-vs2.3.0.37-rc3/fs/proc/meminfo.c
---- linux-2.6.37/fs/proc/meminfo.c 2009-12-03 20:02:53.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/proc/meminfo.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/proc/meminfo.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/meminfo.c
+--- linux-2.6.38-rc8/fs/proc/meminfo.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/meminfo.c 2011-01-29 02:01:07.000000000 +0100
@@ -39,7 +39,8 @@ static int meminfo_proc_show(struct seq_
allowed = ((totalram_pages - hugetlb_total_pages())
* sysctl_overcommit_ratio / 100) + total_swap_pages;
total_swapcache_pages - i.bufferram;
if (cached < 0)
cached = 0;
-diff -NurpP --minimal linux-2.6.37/fs/proc/root.c linux-2.6.37-vs2.3.0.37-rc3/fs/proc/root.c
---- linux-2.6.37/fs/proc/root.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/proc/root.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/proc/root.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/root.c
+--- linux-2.6.38-rc8/fs/proc/root.c 2011-01-05 21:50:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/root.c 2011-01-29 02:01:07.000000000 +0100
@@ -18,9 +18,14 @@
#include <linux/bitops.h>
#include <linux/mount.h>
};
int pid_ns_prepare_proc(struct pid_namespace *ns)
-diff -NurpP --minimal linux-2.6.37/fs/proc/uptime.c linux-2.6.37-vs2.3.0.37-rc3/fs/proc/uptime.c
---- linux-2.6.37/fs/proc/uptime.c 2009-12-03 20:02:53.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/proc/uptime.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/proc/uptime.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/uptime.c
+--- linux-2.6.38-rc8/fs/proc/uptime.c 2009-12-03 20:02:53.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/proc/uptime.c 2011-01-29 02:01:07.000000000 +0100
@@ -4,22 +4,22 @@
#include <linux/sched.h>
#include <linux/seq_file.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-2.6.37/fs/quota/dquot.c linux-2.6.37-vs2.3.0.37-rc3/fs/quota/dquot.c
---- linux-2.6.37/fs/quota/dquot.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/quota/dquot.c 2010-11-23 02:09:41.000000000 +0100
-@@ -1541,6 +1541,9 @@ int __dquot_alloc_space(struct inode *in
+diff -NurpP --minimal linux-2.6.38-rc8/fs/quota/dquot.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/quota/dquot.c
+--- linux-2.6.38-rc8/fs/quota/dquot.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/quota/dquot.c 2011-01-29 02:01:07.000000000 +0100
+@@ -1545,6 +1545,9 @@ int __dquot_alloc_space(struct inode *in
int reserve = flags & DQUOT_SPACE_RESERVE;
int nofail = flags & DQUOT_SPACE_NOFAIL;
/*
* First test before acquiring mutex - solves deadlocks when we
* re-enter the quota code and are already holding the mutex
-@@ -1595,6 +1598,9 @@ int dquot_alloc_inode(const struct inode
+@@ -1599,6 +1602,9 @@ int dquot_alloc_inode(const struct inode
int cnt, ret = 0;
char warntype[MAXQUOTAS];
/* First test before acquiring mutex - solves deadlocks when we
* re-enter the quota code and are already holding the mutex */
if (!dquot_active(inode))
-@@ -1665,6 +1671,8 @@ void __dquot_free_space(struct inode *in
+@@ -1669,6 +1675,8 @@ void __dquot_free_space(struct inode *in
char warntype[MAXQUOTAS];
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)) {
-@@ -1703,6 +1711,8 @@ void dquot_free_inode(const struct inode
+@@ -1707,6 +1715,8 @@ void dquot_free_inode(const struct inode
unsigned int cnt;
char warntype[MAXQUOTAS];
/* 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-2.6.37/fs/quota/quota.c linux-2.6.37-vs2.3.0.37-rc3/fs/quota/quota.c
---- linux-2.6.37/fs/quota/quota.c 2010-08-02 16:52:51.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/quota/quota.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/quota/quota.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/quota/quota.c
+--- linux-2.6.38-rc8/fs/quota/quota.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/quota/quota.c 2011-01-29 02:01:07.000000000 +0100
@@ -8,6 +8,7 @@
#include <linux/fs.h>
#include <linux/namei.h>
return -EPERM;
}
-@@ -296,6 +297,46 @@ static int do_quotactl(struct super_bloc
+@@ -293,6 +294,46 @@ static int do_quotactl(struct super_bloc
}
}
/*
* look up a superblock on which quota ops will be performed
* - use the name of a block device to find the superblock thereon
-@@ -313,6 +354,22 @@ static struct super_block *quotactl_bloc
+@@ -310,6 +351,22 @@ static struct super_block *quotactl_bloc
putname(tmp);
if (IS_ERR(bdev))
return ERR_CAST(bdev);
sb = get_super(bdev);
bdput(bdev);
if (!sb)
-diff -NurpP --minimal linux-2.6.37/fs/reiserfs/file.c linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/file.c
---- linux-2.6.37/fs/reiserfs/file.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/file.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/reiserfs/file.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/file.c
+--- linux-2.6.38-rc8/fs/reiserfs/file.c 2011-01-05 21:50:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/file.c 2011-01-29 02:01:07.000000000 +0100
@@ -312,4 +312,5 @@ const struct inode_operations reiserfs_f
.listxattr = reiserfs_listxattr,
.removexattr = reiserfs_removexattr,
.permission = reiserfs_permission,
+ .sync_flags = reiserfs_sync_flags,
};
-diff -NurpP --minimal linux-2.6.37/fs/reiserfs/inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/inode.c
---- linux-2.6.37/fs/reiserfs/inode.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/inode.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/reiserfs/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/inode.c
+--- linux-2.6.38-rc8/fs/reiserfs/inode.c 2011-01-05 21:50:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/inode.c 2011-01-29 02:01:07.000000000 +0100
@@ -18,6 +18,7 @@
#include <linux/writeback.h>
#include <linux/quotaops.h>
mark_inode_dirty(inode);
error = journal_end(&th, inode->i_sb, jbegin_count);
if (error)
-diff -NurpP --minimal linux-2.6.37/fs/reiserfs/ioctl.c linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/ioctl.c
---- linux-2.6.37/fs/reiserfs/ioctl.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/ioctl.c 2011-01-05 22:30:39.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/reiserfs/ioctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/ioctl.c
+--- linux-2.6.38-rc8/fs/reiserfs/ioctl.c 2011-01-05 21:50:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/ioctl.c 2011-01-29 02:01:07.000000000 +0100
@@ -11,6 +11,21 @@
#include <linux/pagemap.h>
#include <linux/compat.h>
sd_attrs_to_i_attrs(flags, inode);
REISERFS_I(inode)->i_attrs = flags;
inode->i_ctime = CURRENT_TIME_SEC;
-diff -NurpP --minimal linux-2.6.37/fs/reiserfs/namei.c linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/namei.c
---- linux-2.6.37/fs/reiserfs/namei.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/namei.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/reiserfs/namei.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/namei.c
+--- linux-2.6.38-rc8/fs/reiserfs/namei.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/namei.c 2011-03-10 17:21:19.000000000 +0100
@@ -18,6 +18,7 @@
#include <linux/reiserfs_acl.h>
#include <linux/reiserfs_xattr.h>
};
/*
-diff -NurpP --minimal linux-2.6.37/fs/reiserfs/super.c linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/super.c
---- linux-2.6.37/fs/reiserfs/super.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/super.c 2010-11-23 02:09:41.000000000 +0100
-@@ -892,6 +892,14 @@ static int reiserfs_parse_options(struct
+diff -NurpP --minimal linux-2.6.38-rc8/fs/reiserfs/super.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/super.c
+--- linux-2.6.38-rc8/fs/reiserfs/super.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/super.c 2011-01-29 02:01:07.000000000 +0100
+@@ -899,6 +899,14 @@ static int reiserfs_parse_options(struct
{"user_xattr",.setmask = 1 << REISERFS_UNSUPPORTED_OPT},
{"nouser_xattr",.clrmask = 1 << REISERFS_UNSUPPORTED_OPT},
#endif
#ifdef CONFIG_REISERFS_FS_POSIX_ACL
{"acl",.setmask = 1 << REISERFS_POSIXACL},
{"noacl",.clrmask = 1 << REISERFS_POSIXACL},
-@@ -1201,6 +1209,14 @@ static int reiserfs_remount(struct super
+@@ -1208,6 +1216,14 @@ static int reiserfs_remount(struct super
handle_quota_files(s, qf_names, &qfmt);
#endif
handle_attrs(s);
/* Add options that are safe here */
-@@ -1683,6 +1699,10 @@ static int reiserfs_fill_super(struct su
+@@ -1690,6 +1706,10 @@ static int reiserfs_fill_super(struct su
goto error;
}
rs = SB_DISK_SUPER_BLOCK(s);
/* Let's do basic sanity check to verify that underlying device is not
smaller than the filesystem. If the check fails then abort and scream,
-diff -NurpP --minimal linux-2.6.37/fs/reiserfs/xattr.c linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/xattr.c
---- linux-2.6.37/fs/reiserfs/xattr.c 2011-01-05 21:50:26.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/reiserfs/xattr.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/reiserfs/xattr.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/xattr.c
+--- linux-2.6.38-rc8/fs/reiserfs/xattr.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/reiserfs/xattr.c 2011-01-29 02:01:07.000000000 +0100
@@ -40,6 +40,7 @@
#include <linux/errno.h>
#include <linux/gfp.h>
#include <linux/file.h>
#include <linux/pagemap.h>
#include <linux/xattr.h>
-diff -NurpP --minimal linux-2.6.37/fs/stat.c linux-2.6.37-vs2.3.0.37-rc3/fs/stat.c
---- linux-2.6.37/fs/stat.c 2010-10-21 13:07:51.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/stat.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/stat.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/stat.c
+--- linux-2.6.38-rc8/fs/stat.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/stat.c 2011-01-29 02:01:07.000000000 +0100
@@ -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->atime = inode->i_atime;
stat->mtime = inode->i_mtime;
-diff -NurpP --minimal linux-2.6.37/fs/statfs.c linux-2.6.37-vs2.3.0.37-rc3/fs/statfs.c
---- linux-2.6.37/fs/statfs.c 2010-10-21 13:07:51.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/statfs.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/statfs.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/statfs.c
+--- linux-2.6.38-rc8/fs/statfs.c 2010-10-21 13:07:51.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/statfs.c 2011-01-29 02:01:07.000000000 +0100
@@ -7,6 +7,8 @@
#include <linux/statfs.h>
#include <linux/security.h>
return retval;
}
-diff -NurpP --minimal linux-2.6.37/fs/super.c linux-2.6.37-vs2.3.0.37-rc3/fs/super.c
---- linux-2.6.37/fs/super.c 2011-01-05 21:50:27.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/super.c 2010-11-23 03:09:36.000000000 +0100
-@@ -30,6 +30,9 @@
- #include <linux/idr.h>
+diff -NurpP --minimal linux-2.6.38-rc8/fs/super.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/super.c
+--- linux-2.6.38-rc8/fs/super.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/super.c 2011-02-17 02:17:50.000000000 +0100
+@@ -31,6 +31,9 @@
#include <linux/mutex.h>
#include <linux/backing-dev.h>
+ #include <linux/rculist_bl.h>
+#include <linux/devpts_fs.h>
+#include <linux/proc_fs.h>
+#include <linux/vs_context.h>
#include "internal.h"
-@@ -956,6 +959,7 @@ struct vfsmount *
+@@ -963,6 +966,7 @@ struct vfsmount *
vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void *data)
{
struct vfsmount *mnt;
struct dentry *root;
char *secdata = NULL;
int error;
-@@ -963,6 +967,11 @@ vfs_kern_mount(struct file_system_type *
+@@ -970,6 +974,11 @@ vfs_kern_mount(struct file_system_type *
if (!type)
return ERR_PTR(-ENODEV);
error = -ENOMEM;
mnt = alloc_vfsmnt(name);
if (!mnt)
-@@ -994,11 +1003,19 @@ vfs_kern_mount(struct file_system_type *
+@@ -1001,11 +1010,19 @@ vfs_kern_mount(struct file_system_type *
if (error < 0)
goto out_free_secdata;
}
if (error)
goto out_sb;
-diff -NurpP --minimal linux-2.6.37/fs/sysfs/mount.c linux-2.6.37-vs2.3.0.37-rc3/fs/sysfs/mount.c
---- linux-2.6.37/fs/sysfs/mount.c 2011-01-05 21:50:27.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/sysfs/mount.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/sysfs/mount.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/sysfs/mount.c
+--- linux-2.6.38-rc8/fs/sysfs/mount.c 2011-01-05 21:50:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/sysfs/mount.c 2011-01-29 02:01:07.000000000 +0100
@@ -47,7 +47,7 @@ static int sysfs_fill_super(struct super
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_op = &sysfs_ops;
sb->s_time_gran = 1;
-diff -NurpP --minimal linux-2.6.37/fs/utimes.c linux-2.6.37-vs2.3.0.37-rc3/fs/utimes.c
---- linux-2.6.37/fs/utimes.c 2010-10-21 13:07:51.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/utimes.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/utimes.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/utimes.c
+--- linux-2.6.38-rc8/fs/utimes.c 2010-10-21 13:07:51.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/utimes.c 2011-01-29 02:01:07.000000000 +0100
@@ -8,6 +8,8 @@
#include <linux/stat.h>
#include <linux/utime.h>
if (times && times[0].tv_nsec == UTIME_NOW &&
times[1].tv_nsec == UTIME_NOW)
times = NULL;
-diff -NurpP --minimal linux-2.6.37/fs/xattr.c linux-2.6.37-vs2.3.0.37-rc3/fs/xattr.c
---- linux-2.6.37/fs/xattr.c 2010-08-02 16:52:52.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xattr.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xattr.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xattr.c
+--- linux-2.6.38-rc8/fs/xattr.c 2010-08-02 16:52:52.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xattr.c 2011-01-29 02:01:07.000000000 +0100
@@ -18,6 +18,7 @@
#include <linux/module.h>
#include <linux/fsnotify.h>
/* In user.* namespace, only regular files and directories can have
* extended attributes. For sticky directories, only the owner and
-diff -NurpP --minimal linux-2.6.37/fs/xfs/linux-2.6/xfs_ioctl.c linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/linux-2.6/xfs_ioctl.c
---- linux-2.6.37/fs/xfs/linux-2.6/xfs_ioctl.c 2011-01-05 21:50:27.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/linux-2.6/xfs_ioctl.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/linux-2.6/xfs_ioctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/linux-2.6/xfs_ioctl.c
+--- linux-2.6.38-rc8/fs/xfs/linux-2.6/xfs_ioctl.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/linux-2.6/xfs_ioctl.c 2011-03-10 17:21:19.000000000 +0100
@@ -28,7 +28,7 @@
#include "xfs_bmap_btree.h"
#include "xfs_dinode.h"
#include "xfs_rtalloc.h"
#include "xfs_itable.h"
#include "xfs_error.h"
-@@ -738,6 +738,10 @@ xfs_merge_ioc_xflags(
+@@ -744,6 +744,10 @@ xfs_merge_ioc_xflags(
xflags |= XFS_XFLAG_IMMUTABLE;
else
xflags &= ~XFS_XFLAG_IMMUTABLE;
if (flags & FS_APPEND_FL)
xflags |= XFS_XFLAG_APPEND;
else
-@@ -766,6 +770,8 @@ xfs_di2lxflags(
+@@ -772,6 +776,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)
-@@ -826,6 +832,8 @@ xfs_set_diflags(
+@@ -832,6 +838,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)
-@@ -868,6 +876,10 @@ xfs_diflags_to_linux(
+@@ -874,6 +882,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
-@@ -1342,10 +1354,18 @@ xfs_file_ioctl(
+@@ -1366,10 +1378,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-2.6.37/fs/xfs/linux-2.6/xfs_ioctl.h linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/linux-2.6/xfs_ioctl.h
---- linux-2.6.37/fs/xfs/linux-2.6/xfs_ioctl.h 2010-07-07 18:31:54.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/linux-2.6/xfs_ioctl.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/linux-2.6/xfs_ioctl.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/linux-2.6/xfs_ioctl.h
+--- linux-2.6.38-rc8/fs/xfs/linux-2.6/xfs_ioctl.h 2010-07-07 18:31:54.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/linux-2.6/xfs_ioctl.h 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/fs/xfs/linux-2.6/xfs_iops.c linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/linux-2.6/xfs_iops.c
---- linux-2.6.37/fs/xfs/linux-2.6/xfs_iops.c 2011-01-05 21:50:27.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/linux-2.6/xfs_iops.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/linux-2.6/xfs_iops.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/linux-2.6/xfs_iops.c
+--- linux-2.6.38-rc8/fs/xfs/linux-2.6/xfs_iops.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/linux-2.6/xfs_iops.c 2011-01-29 02:01:07.000000000 +0100
@@ -30,6 +30,7 @@
#include "xfs_bmap_btree.h"
#include "xfs_dinode.h"
#include "xfs_bmap.h"
#include "xfs_rtalloc.h"
#include "xfs_error.h"
-@@ -49,6 +50,7 @@
- #include <linux/falloc.h>
+@@ -48,6 +49,7 @@
+ #include <linux/security.h>
#include <linux/fiemap.h>
#include <linux/slab.h>
+#include <linux/vs_tag.h>
/*
* Bring the timestamps in the XFS inode uptodate.
-@@ -464,6 +466,7 @@ xfs_vn_getattr(
+@@ -463,6 +465,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;
-@@ -652,6 +655,7 @@ static const struct inode_operations xfs
+@@ -598,6 +601,7 @@ static const struct inode_operations xfs
+ .removexattr = generic_removexattr,
.listxattr = xfs_vn_listxattr,
- .fallocate = xfs_vn_fallocate,
.fiemap = xfs_vn_fiemap,
+ .sync_flags = xfs_sync_flags,
};
static const struct inode_operations xfs_dir_inode_operations = {
-@@ -677,6 +681,7 @@ static const struct inode_operations xfs
+@@ -623,6 +627,7 @@ static const struct inode_operations xfs
.getxattr = generic_getxattr,
.removexattr = generic_removexattr,
.listxattr = xfs_vn_listxattr,
};
static const struct inode_operations xfs_dir_ci_inode_operations = {
-@@ -726,6 +731,10 @@ xfs_diflags_to_iflags(
+@@ -672,6 +677,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
-@@ -738,6 +747,15 @@ xfs_diflags_to_iflags(
+@@ -684,6 +693,15 @@ xfs_diflags_to_iflags(
inode->i_flags |= S_NOATIME;
else
inode->i_flags &= ~S_NOATIME;
}
/*
-@@ -769,6 +787,7 @@ xfs_setup_inode(
+@@ -715,6 +733,7 @@ xfs_setup_inode(
inode->i_nlink = 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-2.6.37/fs/xfs/linux-2.6/xfs_linux.h linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/linux-2.6/xfs_linux.h
---- linux-2.6.37/fs/xfs/linux-2.6/xfs_linux.h 2011-01-05 21:50:27.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/linux-2.6/xfs_linux.h 2010-11-23 03:28:16.000000000 +0100
-@@ -115,6 +115,7 @@
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/linux-2.6/xfs_linux.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/linux-2.6/xfs_linux.h
+--- linux-2.6.38-rc8/fs/xfs/linux-2.6/xfs_linux.h 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/linux-2.6/xfs_linux.h 2011-01-29 02:01:07.000000000 +0100
+@@ -114,6 +114,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-2.6.37/fs/xfs/linux-2.6/xfs_super.c linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/linux-2.6/xfs_super.c
---- linux-2.6.37/fs/xfs/linux-2.6/xfs_super.c 2011-01-05 21:50:27.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/linux-2.6/xfs_super.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/linux-2.6/xfs_super.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/linux-2.6/xfs_super.c
+--- linux-2.6.38-rc8/fs/xfs/linux-2.6/xfs_super.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/linux-2.6/xfs_super.c 2011-01-29 02:01:07.000000000 +0100
@@ -112,6 +112,9 @@ mempool_t *xfs_ioend_pool;
#define MNTOPT_QUOTANOENF "qnoenforce" /* same as uqnoenforce */
#define MNTOPT_DELAYLOG "delaylog" /* Delayed loging enabled */
} else {
cmn_err(CE_WARN,
"XFS: unknown mount option [%s].", this_char);
-@@ -1312,6 +1332,16 @@ xfs_fs_remount(
+@@ -1327,6 +1347,16 @@ xfs_fs_remount(
case Opt_nobarrier:
mp->m_flags &= ~XFS_MOUNT_BARRIER;
break;
default:
/*
* Logically we would return an error here to prevent
-@@ -1540,6 +1570,9 @@ xfs_fs_fill_super(
+@@ -1555,6 +1585,9 @@ xfs_fs_fill_super(
if (error)
goto out_filestream_unmount;
sb->s_magic = XFS_SB_MAGIC;
sb->s_blocksize = mp->m_sb.sb_blocksize;
sb->s_blocksize_bits = ffs(sb->s_blocksize) - 1;
-diff -NurpP --minimal linux-2.6.37/fs/xfs/xfs_dinode.h linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_dinode.h
---- linux-2.6.37/fs/xfs/xfs_dinode.h 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_dinode.h 2010-11-23 03:21:21.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/xfs_dinode.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_dinode.h
+--- linux-2.6.38-rc8/fs/xfs/xfs_dinode.h 2011-01-05 21:50:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_dinode.h 2011-01-29 02:01:07.000000000 +0100
@@ -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 */
+#define XFS_DIVFLAG_COW 0x02
#endif /* __XFS_DINODE_H__ */
-diff -NurpP --minimal linux-2.6.37/fs/xfs/xfs_fs.h linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_fs.h
---- linux-2.6.37/fs/xfs/xfs_fs.h 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_fs.h 2010-11-23 03:16:13.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/xfs_fs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_fs.h
+--- linux-2.6.38-rc8/fs/xfs/xfs_fs.h 2011-01-05 21:50:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_fs.h 2011-01-29 02:01:07.000000000 +0100
@@ -67,6 +67,9 @@ struct fsxattr {
#define XFS_XFLAG_EXTSZINHERIT 0x00001000 /* inherit inode extent size */
#define XFS_XFLAG_NODEFRAG 0x00002000 /* do not defragment */
__u32 bs_dmevmask; /* DMIG event mask */
__u16 bs_dmstate; /* DMIG state info */
__u16 bs_aextents; /* attribute number of extents */
-diff -NurpP --minimal linux-2.6.37/fs/xfs/xfs_ialloc.c linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_ialloc.c
---- linux-2.6.37/fs/xfs/xfs_ialloc.c 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_ialloc.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/xfs_ialloc.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_ialloc.c
+--- linux-2.6.38-rc8/fs/xfs/xfs_ialloc.c 2011-01-05 21:50:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_ialloc.c 2011-01-29 02:01:07.000000000 +0100
@@ -37,7 +37,6 @@
#include "xfs_error.h"
#include "xfs_bmap.h"
/*
* Allocation group level functions.
*/
-diff -NurpP --minimal linux-2.6.37/fs/xfs/xfs_inode.c linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_inode.c
---- linux-2.6.37/fs/xfs/xfs_inode.c 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_inode.c 2010-11-23 03:28:30.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/xfs_inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_inode.c
+--- linux-2.6.38-rc8/fs/xfs/xfs_inode.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_inode.c 2011-01-29 02:01:07.000000000 +0100
@@ -245,6 +245,7 @@ xfs_inotobp(
return 0;
}
flags = XFS_ILOG_CORE;
switch (mode & S_IFMT) {
case S_IFIFO:
-@@ -2106,6 +2133,7 @@ xfs_ifree(
+@@ -2122,6 +2149,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_df.if_ext_max =
-@@ -2976,7 +3004,8 @@ xfs_iflush_int(
+@@ -3004,7 +3032,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-2.6.37/fs/xfs/xfs_inode.h linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_inode.h
---- linux-2.6.37/fs/xfs/xfs_inode.h 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_inode.h 2010-11-23 03:29:08.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/xfs_inode.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_inode.h
+--- linux-2.6.38-rc8/fs/xfs/xfs_inode.h 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_inode.h 2011-01-29 02:01:07.000000000 +0100
@@ -136,7 +136,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 */
-@@ -527,7 +529,7 @@ int xfs_itobp(struct xfs_mount *, struc
+@@ -530,7 +532,7 @@ int xfs_itobp(struct xfs_mount *, struc
int xfs_iread(struct xfs_mount *, struct xfs_trans *,
struct xfs_inode *, uint);
void xfs_dinode_to_disk(struct xfs_dinode *,
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-2.6.37/fs/xfs/xfs_itable.c linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_itable.c
---- linux-2.6.37/fs/xfs/xfs_itable.c 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_itable.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/xfs_itable.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_itable.c
+--- linux-2.6.38-rc8/fs/xfs/xfs_itable.c 2011-01-05 21:50:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_itable.c 2011-01-29 02:01:07.000000000 +0100
@@ -98,6 +98,7 @@ xfs_bulkstat_one_int(
buf->bs_mode = dic->di_mode;
buf->bs_uid = dic->di_uid;
buf->bs_size = dic->di_size;
/*
-diff -NurpP --minimal linux-2.6.37/fs/xfs/xfs_log_recover.c linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_log_recover.c
---- linux-2.6.37/fs/xfs/xfs_log_recover.c 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_log_recover.c 2010-11-23 02:09:41.000000000 +0100
-@@ -2451,7 +2451,8 @@ xlog_recover_do_inode_trans(
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/xfs_log_recover.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_log_recover.c
+--- linux-2.6.38-rc8/fs/xfs/xfs_log_recover.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_log_recover.c 2011-01-29 02:01:07.000000000 +0100
+@@ -2317,7 +2317,8 @@ xlog_recover_inode_pass2(
}
/* The core is in in-core format */
/* the rest is in on-disk format */
if (item->ri_buf[1].i_len > sizeof(struct xfs_icdinode)) {
-diff -NurpP --minimal linux-2.6.37/fs/xfs/xfs_mount.h linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_mount.h
---- linux-2.6.37/fs/xfs/xfs_mount.h 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_mount.h 2010-11-23 02:09:41.000000000 +0100
-@@ -239,6 +239,7 @@ typedef struct xfs_mount {
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/xfs_mount.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_mount.h
+--- linux-2.6.38-rc8/fs/xfs/xfs_mount.h 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_mount.h 2011-01-29 02:01:07.000000000 +0100
+@@ -251,6 +251,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-2.6.37/fs/xfs/xfs_vnodeops.c linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_vnodeops.c
---- linux-2.6.37/fs/xfs/xfs_vnodeops.c 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_vnodeops.c 2011-01-06 00:07:49.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/xfs_vnodeops.c linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_vnodeops.c
+--- linux-2.6.38-rc8/fs/xfs/xfs_vnodeops.c 2011-03-10 17:09:24.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_vnodeops.c 2011-01-29 02:01:07.000000000 +0100
@@ -50,6 +50,78 @@
#include "xfs_vnodeops.h"
#include "xfs_trace.h"
if (iuid != uid) {
if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_UQUOTA_ON(mp)) {
ASSERT(mask & ATTR_UID);
-diff -NurpP --minimal linux-2.6.37/fs/xfs/xfs_vnodeops.h linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_vnodeops.h
---- linux-2.6.37/fs/xfs/xfs_vnodeops.h 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/fs/xfs/xfs_vnodeops.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/fs/xfs/xfs_vnodeops.h linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_vnodeops.h
+--- linux-2.6.38-rc8/fs/xfs/xfs_vnodeops.h 2011-01-05 21:50:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/fs/xfs/xfs_vnodeops.h 2011-01-29 02:01:07.000000000 +0100
@@ -13,6 +13,7 @@ struct xfs_inode;
struct xfs_iomap;
int xfs_setattr(struct xfs_inode *ip, struct iattr *vap, int flags);
#define XFS_ATTR_DMI 0x01 /* invocation from a DMI function */
#define XFS_ATTR_NONBLOCK 0x02 /* return EAGAIN if operation would block */
-diff -NurpP --minimal linux-2.6.37/include/asm-generic/tlb.h linux-2.6.37-vs2.3.0.37-rc3/include/asm-generic/tlb.h
---- linux-2.6.37/include/asm-generic/tlb.h 2009-09-10 15:26:24.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/asm-generic/tlb.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/asm-generic/tlb.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/asm-generic/tlb.h
+--- linux-2.6.38-rc8/include/asm-generic/tlb.h 2009-09-10 15:26:24.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/asm-generic/tlb.h 2011-01-29 02:01:07.000000000 +0100
@@ -14,6 +14,7 @@
#define _ASM_GENERIC__TLB_H
#include <asm/pgalloc.h>
#include <asm/tlbflush.h>
-diff -NurpP --minimal linux-2.6.37/include/linux/capability.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/capability.h
---- linux-2.6.37/include/linux/capability.h 2010-10-21 13:07:52.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/capability.h 2011-01-06 01:44:43.000000000 +0100
-@@ -280,6 +280,7 @@ struct cpu_vfs_cap_data {
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/Kbuild linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/Kbuild
+--- linux-2.6.38-rc8/include/linux/Kbuild 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/Kbuild 2011-02-17 02:17:51.000000000 +0100
+@@ -16,6 +16,7 @@ header-y += netfilter_bridge/
+ header-y += netfilter_ipv4/
+ header-y += netfilter_ipv6/
+ header-y += usb/
++header-y += vserver/
+ header-y += wimax/
+
+ objhdr-y += version.h
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/capability.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/capability.h
+--- linux-2.6.38-rc8/include/linux/capability.h 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/capability.h 2011-01-29 02:01:07.000000000 +0100
+@@ -279,6 +279,7 @@ struct cpu_vfs_cap_data {
arbitrary SCSI commands */
/* Allow setting encryption key on loopback filesystem */
/* Allow setting zone reclaim policy */
#define CAP_SYS_ADMIN 21
-@@ -354,7 +355,12 @@ struct cpu_vfs_cap_data {
+@@ -357,7 +358,12 @@ struct cpu_vfs_cap_data {
- #define CAP_LAST_CAP CAP_MAC_ADMIN
+ #define CAP_LAST_CAP CAP_SYSLOG
-#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP)
+/* Allow context manipulations */
/*
* Bit location of each capability (used by user-space library and kernel)
-diff -NurpP --minimal linux-2.6.37/include/linux/cred.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/cred.h
---- linux-2.6.37/include/linux/cred.h 2011-01-05 21:50:29.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/cred.h 2011-01-31 21:05:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/cred.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/cred.h
+--- linux-2.6.38-rc8/include/linux/cred.h 2011-01-05 21:50:29.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/cred.h 2011-01-31 12:03:07.000000000 +0100
@@ -155,6 +155,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 *);
/**
* get_new_cred - Get a reference on a new set of credentials
* @cred: The new credentials to reference
-diff -NurpP --minimal linux-2.6.37/include/linux/devpts_fs.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/devpts_fs.h
---- linux-2.6.37/include/linux/devpts_fs.h 2008-12-25 00:26:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/devpts_fs.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/devpts_fs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/devpts_fs.h
+--- linux-2.6.38-rc8/include/linux/devpts_fs.h 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/devpts_fs.h 2011-01-29 02:01:07.000000000 +0100
@@ -45,5 +45,4 @@ static inline void devpts_pty_kill(struc
#endif
-
#endif /* _LINUX_DEVPTS_FS_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/ext2_fs.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/ext2_fs.h
---- linux-2.6.37/include/linux/ext2_fs.h 2010-02-25 11:52:07.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/ext2_fs.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/ext2_fs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/ext2_fs.h
+--- linux-2.6.38-rc8/include/linux/ext2_fs.h 2010-02-25 11:52:07.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/ext2_fs.h 2011-01-29 02:01:07.000000000 +0100
@@ -189,8 +189,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) */
#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt
-diff -NurpP --minimal linux-2.6.37/include/linux/ext3_fs.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/ext3_fs.h
---- linux-2.6.37/include/linux/ext3_fs.h 2010-10-21 13:07:53.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/ext3_fs.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/ext3_fs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/ext3_fs.h
+--- linux-2.6.38-rc8/include/linux/ext3_fs.h 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/ext3_fs.h 2011-01-29 02:01:07.000000000 +0100
@@ -173,10 +173,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) */
/* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
#ifndef _LINUX_EXT2_FS_H
-@@ -908,6 +915,7 @@ extern void ext3_get_inode_flags(struct
+@@ -918,6 +925,7 @@ extern void ext3_get_inode_flags(struct
extern void ext3_set_aops(struct inode *inode);
extern int ext3_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
u64 start, u64 len);
/* ioctl.c */
extern long ext3_ioctl(struct file *, unsigned int, unsigned long);
-diff -NurpP --minimal linux-2.6.37/include/linux/fs.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/fs.h
---- linux-2.6.37/include/linux/fs.h 2011-01-05 21:50:30.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/fs.h 2011-01-05 22:30:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/fs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/fs.h
+--- linux-2.6.38-rc8/include/linux/fs.h 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/fs.h 2011-03-07 16:53:28.000000000 +0100
@@ -214,6 +214,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_BORN (1<<29)
#define MS_ACTIVE (1<<30)
#define MS_NOUSER (1<<31)
-@@ -242,6 +245,14 @@ struct inodes_stat_t {
- #define S_SWAPFILE 256 /* Do not truncate: swapon got its bmaps */
+@@ -243,6 +246,14 @@ struct inodes_stat_t {
#define S_PRIVATE 512 /* Inode is fs-internal */
#define S_IMA 1024 /* Inode has an associated IMA struct */
-+#define S_IXUNLINK 2048 /* Immutable Invert on unlink */
+ #define S_AUTOMOUNT 2048 /* Automount/referral quasi-directory */
++#define S_IXUNLINK 4096 /* Immutable Invert on unlink */
+
+/* Linux-VServer related Inode flags */
+
/*
* Note that nosuid etc flags are inode-specific: setting some file-system
-@@ -264,12 +275,15 @@ struct inodes_stat_t {
+@@ -265,12 +276,15 @@ struct inodes_stat_t {
#define IS_DIRSYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \
((inode)->i_flags & (S_SYNC|S_DIRSYNC)))
#define IS_MANDLOCK(inode) __IS_FLG(inode, MS_MANDLOCK)
#define IS_POSIXACL(inode) __IS_FLG(inode, MS_POSIXACL)
#define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD)
-@@ -278,6 +292,16 @@ struct inodes_stat_t {
- #define IS_PRIVATE(inode) ((inode)->i_flags & S_PRIVATE)
+@@ -280,6 +294,16 @@ struct inodes_stat_t {
#define IS_IMA(inode) ((inode)->i_flags & S_IMA)
+ #define IS_AUTOMOUNT(inode) ((inode)->i_flags & S_AUTOMOUNT)
+#define IS_BARRIER(inode) (S_ISDIR((inode)->i_mode) && ((inode)->i_vflags & V_BARRIER))
+
/* the read-only stuff doesn't really belong here, but any other place is
probably as bad and I don't want to create yet another include file. */
-@@ -362,11 +386,14 @@ struct inodes_stat_t {
+@@ -364,11 +388,14 @@ struct inodes_stat_t {
#define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
#define FS_EXTENT_FL 0x00080000 /* Extents */
#define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */
#define SYNC_FILE_RANGE_WAIT_BEFORE 1
#define SYNC_FILE_RANGE_WRITE 2
-@@ -446,6 +473,7 @@ typedef void (dio_iodone_t)(struct kiocb
+@@ -449,6 +476,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
-@@ -461,6 +489,7 @@ struct iattr {
+@@ -464,6 +492,7 @@ struct iattr {
umode_t ia_mode;
uid_t ia_uid;
gid_t ia_gid;
loff_t ia_size;
struct timespec ia_atime;
struct timespec ia_mtime;
-@@ -474,6 +503,9 @@ struct iattr {
+@@ -477,6 +506,9 @@ struct iattr {
struct file *ia_file;
};
/*
* Includes for diskquotas.
*/
-@@ -743,7 +775,9 @@ struct inode {
- unsigned int i_nlink;
+@@ -742,11 +774,13 @@ struct inode {
+ umode_t i_mode;
uid_t i_uid;
gid_t i_gid;
+ tag_t i_tag;
- dev_t i_rdev;
-+ dev_t i_mdev;
- unsigned int i_blkbits;
- u64 i_version;
- loff_t i_size;
-@@ -785,7 +819,8 @@ struct inode {
- unsigned long i_state;
- unsigned long dirtied_when; /* jiffies of first dirtying */
+ const struct inode_operations *i_op;
+ struct super_block *i_sb;
+ spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */
- unsigned int i_flags;
+ unsigned short i_flags;
+ unsigned short i_vflags;
+ struct mutex i_mutex;
- #ifdef CONFIG_IMA
- /* protected by i_lock */
-@@ -882,12 +917,12 @@ static inline void i_size_write(struct i
+ unsigned long i_state;
+@@ -764,6 +798,7 @@ struct inode {
+ atomic_t i_count;
+ unsigned int i_nlink;
+ dev_t i_rdev;
++ dev_t i_mdev;
+ unsigned int i_blkbits;
+ u64 i_version;
+ loff_t i_size;
+@@ -892,12 +927,12 @@ static inline void i_size_write(struct i
static inline unsigned iminor(const struct inode *inode)
{
}
extern struct block_device *I_BDEV(struct inode *inode);
-@@ -949,6 +984,7 @@ struct file {
+@@ -959,6 +994,7 @@ struct file {
loff_t f_pos;
struct fown_struct f_owner;
const struct cred *f_cred;
struct file_ra_state f_ra;
u64 f_version;
-@@ -1087,6 +1123,7 @@ struct file_lock {
+@@ -1096,6 +1132,7 @@ struct file_lock {
struct file *fl_file;
loff_t fl_start;
loff_t fl_end;
struct fasync_struct * fl_fasync; /* for lease break notifications */
unsigned long fl_break_time; /* for nonblocking lease breaks */
-@@ -1568,6 +1605,7 @@ struct inode_operations {
+@@ -1584,6 +1621,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 (*sync_flags) (struct inode *, int, int);
void (*truncate_range)(struct inode *, loff_t, loff_t);
- long (*fallocate)(struct inode *inode, int mode, loff_t offset,
- loff_t len);
-@@ -1588,6 +1626,7 @@ extern ssize_t vfs_readv(struct file *,
+ int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
+ u64 len);
+@@ -1602,6 +1640,7 @@ extern ssize_t vfs_readv(struct file *,
unsigned long, loff_t *);
extern ssize_t vfs_writev(struct file *, const struct iovec __user *,
unsigned long, loff_t *);
struct super_operations {
struct inode *(*alloc_inode)(struct super_block *sb);
-@@ -2389,6 +2428,7 @@ extern int dcache_dir_open(struct inode
+@@ -2414,6 +2453,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-2.6.37/include/linux/gfs2_ondisk.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/gfs2_ondisk.h
---- linux-2.6.37/include/linux/gfs2_ondisk.h 2010-07-07 18:31:55.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/gfs2_ondisk.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/gfs2_ondisk.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/gfs2_ondisk.h
+--- linux-2.6.38-rc8/include/linux/gfs2_ondisk.h 2010-07-07 18:31:55.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/gfs2_ondisk.h 2011-01-29 02:01:07.000000000 +0100
@@ -211,6 +211,9 @@ enum {
gfs2fl_NoAtime = 7,
gfs2fl_Sync = 8,
#define GFS2_DIF_TRUNC_IN_PROG 0x20000000 /* New in gfs2 */
#define GFS2_DIF_INHERIT_DIRECTIO 0x40000000
#define GFS2_DIF_INHERIT_JDATA 0x80000000
-diff -NurpP --minimal linux-2.6.37/include/linux/if_tun.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/if_tun.h
---- linux-2.6.37/include/linux/if_tun.h 2010-08-02 16:52:54.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/if_tun.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/if_tun.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/if_tun.h
+--- linux-2.6.38-rc8/include/linux/if_tun.h 2010-08-02 16:52:54.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/if_tun.h 2011-01-29 02:01:07.000000000 +0100
@@ -53,6 +53,7 @@
#define TUNDETACHFILTER _IOW('T', 214, struct sock_fprog)
#define TUNGETVNETHDRSZ _IOR('T', 215, int)
/* TUNSETIFF ifr flags */
#define IFF_TUN 0x0001
-diff -NurpP --minimal linux-2.6.37/include/linux/init_task.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/init_task.h
---- linux-2.6.37/include/linux/init_task.h 2011-01-05 21:50:30.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/init_task.h 2010-11-23 02:09:41.000000000 +0100
-@@ -178,6 +178,10 @@ extern struct cred init_cred;
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/init_task.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/init_task.h
+--- linux-2.6.38-rc8/include/linux/init_task.h 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/init_task.h 2011-01-29 02:01:07.000000000 +0100
+@@ -192,6 +192,10 @@ extern struct cred init_cred;
INIT_FTRACE_GRAPH \
INIT_TRACE_RECURSION \
INIT_TASK_RCU_PREEMPT(tsk) \
}
-diff -NurpP --minimal linux-2.6.37/include/linux/ipc.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/ipc.h
---- linux-2.6.37/include/linux/ipc.h 2009-12-03 20:02:55.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/ipc.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/ipc.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/ipc.h
+--- linux-2.6.38-rc8/include/linux/ipc.h 2009-12-03 20:02:55.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/ipc.h 2011-01-29 02:01:07.000000000 +0100
@@ -91,6 +91,7 @@ struct kern_ipc_perm
key_t key;
uid_t uid;
uid_t cuid;
gid_t cgid;
mode_t mode;
-diff -NurpP --minimal linux-2.6.37/include/linux/Kbuild linux-2.6.37-vs2.3.0.37-rc3/include/linux/Kbuild
---- linux-2.6.37/include/linux/Kbuild 2011-01-05 21:50:28.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/Kbuild 2010-11-23 02:09:41.000000000 +0100
-@@ -15,6 +15,7 @@ header-y += netfilter_bridge/
- header-y += netfilter_ipv4/
- header-y += netfilter_ipv6/
- header-y += usb/
-+header-y += vserver/
- header-y += wimax/
-
- objhdr-y += version.h
-diff -NurpP --minimal linux-2.6.37/include/linux/loop.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/loop.h
---- linux-2.6.37/include/linux/loop.h 2009-09-10 15:26:25.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/loop.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/loop.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/loop.h
+--- linux-2.6.38-rc8/include/linux/loop.h 2009-09-10 15:26:25.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/loop.h 2011-01-29 02:01:07.000000000 +0100
@@ -45,6 +45,7 @@ struct loop_device {
struct loop_func_table *lo_encryption;
__u32 lo_init[2];
int (*ioctl)(struct loop_device *, int cmd,
unsigned long arg);
-diff -NurpP --minimal linux-2.6.37/include/linux/magic.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/magic.h
---- linux-2.6.37/include/linux/magic.h 2011-01-05 21:50:30.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/magic.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/magic.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/magic.h
+--- linux-2.6.38-rc8/include/linux/magic.h 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/magic.h 2011-01-29 02:01:07.000000000 +0100
@@ -3,7 +3,7 @@
#define ADFS_SUPER_MAGIC 0xadf5
#define AUTOFS_SUPER_MAGIC 0x0187
#define CODA_SUPER_MAGIC 0x73757245
#define CRAMFS_MAGIC 0x28cd3d45 /* some random number */
-@@ -38,6 +38,7 @@
+@@ -39,6 +39,7 @@
#define NFS_SUPER_MAGIC 0x6969
#define OPENPROM_SUPER_MAGIC 0x9fa1
#define PROC_SUPER_MAGIC 0x9fa0
#define QNX4_SUPER_MAGIC 0x002f /* qnx4 fs detection */
#define REISERFS_SUPER_MAGIC 0x52654973 /* used by gcc */
-diff -NurpP --minimal linux-2.6.37/include/linux/major.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/major.h
---- linux-2.6.37/include/linux/major.h 2009-09-10 15:26:25.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/major.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/major.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/major.h
+--- linux-2.6.38-rc8/include/linux/major.h 2009-09-10 15:26:25.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/major.h 2011-01-29 02:01:07.000000000 +0100
@@ -15,6 +15,7 @@
#define HD_MAJOR IDE0_MAJOR
#define PTY_SLAVE_MAJOR 3
#define TTYAUX_MAJOR 5
#define LP_MAJOR 6
#define VCS_MAJOR 7
-diff -NurpP --minimal linux-2.6.37/include/linux/memcontrol.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/memcontrol.h
---- linux-2.6.37/include/linux/memcontrol.h 2010-10-21 13:07:53.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/memcontrol.h 2010-11-23 02:09:41.000000000 +0100
-@@ -77,6 +77,13 @@ int task_in_mem_cgroup(struct task_struc
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/memcontrol.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/memcontrol.h
+--- linux-2.6.38-rc8/include/linux/memcontrol.h 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/memcontrol.h 2011-01-29 02:01:07.000000000 +0100
+@@ -82,6 +82,13 @@ int task_in_mem_cgroup(struct task_struc
extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
static inline
int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
{
-diff -NurpP --minimal linux-2.6.37/include/linux/mm_types.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/mm_types.h
---- linux-2.6.37/include/linux/mm_types.h 2011-01-05 21:50:31.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/mm_types.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/mm_types.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/mm_types.h
+--- linux-2.6.38-rc8/include/linux/mm_types.h 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/mm_types.h 2011-01-29 02:01:07.000000000 +0100
@@ -269,6 +269,7 @@ struct mm_struct {
/* Architecture-specific MM context */
/* Swap token stuff */
/*
-diff -NurpP --minimal linux-2.6.37/include/linux/mount.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/mount.h
---- linux-2.6.37/include/linux/mount.h 2010-10-21 13:07:53.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/mount.h 2010-11-23 02:09:41.000000000 +0100
-@@ -46,6 +46,9 @@ struct mnt_namespace;
-
- #define MNT_INTERNAL 0x4000
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/mount.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/mount.h
+--- linux-2.6.38-rc8/include/linux/mount.h 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/mount.h 2011-01-29 03:11:27.000000000 +0100
+@@ -52,6 +52,9 @@ struct mnt_pcp {
+ int mnt_writers;
+ };
+#define MNT_TAGID 0x10000
+#define MNT_NOTAG 0x20000
struct vfsmount {
struct list_head mnt_hash;
struct vfsmount *mnt_parent; /* fs we are mounted on */
-@@ -84,6 +87,7 @@ struct vfsmount {
- #else
- int mnt_writers;
- #endif
+@@ -86,6 +89,7 @@ struct vfsmount {
+ int mnt_expiry_mark; /* true if marked for expiry */
+ int mnt_pinned;
+ int mnt_ghosts;
+ tag_t mnt_tag; /* tagging used for vfsmount */
};
- static inline int *get_mnt_writers_ptr(struct vfsmount *mnt)
-diff -NurpP --minimal linux-2.6.37/include/linux/net.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/net.h
---- linux-2.6.37/include/linux/net.h 2011-01-05 21:50:31.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/net.h 2010-11-23 02:09:41.000000000 +0100
+ struct file; /* forward dec */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/net.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/net.h
+--- linux-2.6.38-rc8/include/linux/net.h 2011-01-05 21:50:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/net.h 2011-01-29 02:01:07.000000000 +0100
@@ -71,6 +71,7 @@ struct net;
#define SOCK_NOSPACE 2
#define SOCK_PASSCRED 3
#ifndef ARCH_HAS_SOCKET_TYPES
/**
-diff -NurpP --minimal linux-2.6.37/include/linux/nfs_mount.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/nfs_mount.h
---- linux-2.6.37/include/linux/nfs_mount.h 2011-01-05 21:50:31.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/nfs_mount.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/nfs_mount.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/nfs_mount.h
+--- linux-2.6.38-rc8/include/linux/nfs_mount.h 2011-01-05 21:50:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/nfs_mount.h 2011-01-29 02:01:07.000000000 +0100
@@ -63,7 +63,8 @@ struct nfs_mount_data {
#define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */
#define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */
/* The following are for internal use only */
#define NFS_MOUNT_LOOKUP_CACHE_NONEG 0x10000
-diff -NurpP --minimal linux-2.6.37/include/linux/nsproxy.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/nsproxy.h
---- linux-2.6.37/include/linux/nsproxy.h 2009-06-11 17:13:17.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/nsproxy.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/nsproxy.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/nsproxy.h
+--- linux-2.6.38-rc8/include/linux/nsproxy.h 2009-06-11 17:13:17.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/nsproxy.h 2011-01-29 02:01:07.000000000 +0100
@@ -3,6 +3,7 @@
#include <linux/spinlock.h>
}
#ifdef CONFIG_CGROUP_NS
-diff -NurpP --minimal linux-2.6.37/include/linux/pid.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/pid.h
---- linux-2.6.37/include/linux/pid.h 2009-03-24 14:22:43.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/pid.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/pid.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/pid.h
+--- linux-2.6.38-rc8/include/linux/pid.h 2009-03-24 14:22:43.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/pid.h 2011-01-29 02:01:07.000000000 +0100
@@ -8,7 +8,8 @@ enum pid_type
PIDTYPE_PID,
PIDTYPE_PGID,
pid_t pid_vnr(struct pid *pid);
#define do_each_pid_task(pid, type, task) \
-diff -NurpP --minimal linux-2.6.37/include/linux/proc_fs.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/proc_fs.h
---- linux-2.6.37/include/linux/proc_fs.h 2009-12-03 20:02:56.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/proc_fs.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/proc_fs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/proc_fs.h
+--- linux-2.6.38-rc8/include/linux/proc_fs.h 2009-12-03 20:02:56.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/proc_fs.h 2011-01-29 02:01:07.000000000 +0100
@@ -56,6 +56,7 @@ struct proc_dir_entry {
nlink_t nlink;
uid_t uid;
int fd;
union proc_op op;
struct proc_dir_entry *pde;
-diff -NurpP --minimal linux-2.6.37/include/linux/quotaops.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/quotaops.h
---- linux-2.6.37/include/linux/quotaops.h 2010-10-21 13:07:54.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/quotaops.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/quotaops.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/quotaops.h
+--- linux-2.6.38-rc8/include/linux/quotaops.h 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/quotaops.h 2011-01-29 02:01:07.000000000 +0100
@@ -8,6 +8,7 @@
#define _LINUX_QUOTAOPS_
#define DQUOT_SPACE_WARN 0x1
#define DQUOT_SPACE_RESERVE 0x2
-@@ -205,11 +206,12 @@ static inline void dquot_drop(struct ino
+@@ -204,11 +205,12 @@ static inline void dquot_drop(struct ino
static inline int dquot_alloc_inode(const struct inode *inode)
{
}
static inline int dquot_transfer(struct inode *inode, struct iattr *iattr)
-@@ -220,6 +222,10 @@ static inline int dquot_transfer(struct
+@@ -219,6 +221,10 @@ static inline int dquot_transfer(struct
static inline int __dquot_alloc_space(struct inode *inode, qsize_t number,
int flags)
{
if (!(flags & DQUOT_SPACE_RESERVE))
inode_add_bytes(inode, number);
return 0;
-@@ -230,6 +236,7 @@ static inline void __dquot_free_space(st
+@@ -229,6 +235,7 @@ static inline void __dquot_free_space(st
{
if (!(flags & DQUOT_SPACE_RESERVE))
inode_sub_bytes(inode, number);
}
static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number)
-diff -NurpP --minimal linux-2.6.37/include/linux/reboot.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/reboot.h
---- linux-2.6.37/include/linux/reboot.h 2010-07-07 18:31:56.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/reboot.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/reboot.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/reboot.h
+--- linux-2.6.38-rc8/include/linux/reboot.h 2010-07-07 18:31:56.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/reboot.h 2011-01-29 02:01:07.000000000 +0100
@@ -33,6 +33,7 @@
#define LINUX_REBOOT_CMD_RESTART2 0xA1B2C3D4
#define LINUX_REBOOT_CMD_SW_SUSPEND 0xD000FCE2
#ifdef __KERNEL__
-diff -NurpP --minimal linux-2.6.37/include/linux/reiserfs_fs.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/reiserfs_fs.h
---- linux-2.6.37/include/linux/reiserfs_fs.h 2011-01-05 21:50:32.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/reiserfs_fs.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/reiserfs_fs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/reiserfs_fs.h
+--- linux-2.6.38-rc8/include/linux/reiserfs_fs.h 2011-01-05 21:50:32.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/reiserfs_fs.h 2011-01-29 02:01:07.000000000 +0100
@@ -976,6 +976,11 @@ struct stat_data_v1 {
#define REISERFS_COMPR_FL FS_COMPR_FL
#define REISERFS_NOTAIL_FL FS_NOTAIL_FL
int __reiserfs_write_begin(struct page *page, unsigned from, unsigned len);
-diff -NurpP --minimal linux-2.6.37/include/linux/reiserfs_fs_sb.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/reiserfs_fs_sb.h
---- linux-2.6.37/include/linux/reiserfs_fs_sb.h 2010-02-25 11:52:07.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/reiserfs_fs_sb.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/reiserfs_fs_sb.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/reiserfs_fs_sb.h
+--- linux-2.6.38-rc8/include/linux/reiserfs_fs_sb.h 2010-02-25 11:52:07.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/reiserfs_fs_sb.h 2011-01-29 02:01:07.000000000 +0100
@@ -476,6 +476,7 @@ enum reiserfs_mount_options {
REISERFS_EXPOSE_PRIVROOT,
REISERFS_BARRIER_NONE,
/* Actions on error */
REISERFS_ERROR_PANIC,
-diff -NurpP --minimal linux-2.6.37/include/linux/sched.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/sched.h
---- linux-2.6.37/include/linux/sched.h 2011-01-05 21:50:32.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/sched.h 2011-01-05 22:30:40.000000000 +0100
-@@ -1357,6 +1357,14 @@ struct task_struct {
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/sched.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/sched.h
+--- linux-2.6.38-rc8/include/linux/sched.h 2011-03-10 17:09:25.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/sched.h 2011-03-07 16:53:28.000000000 +0100
+@@ -1373,6 +1373,14 @@ struct task_struct {
#endif
seccomp_t seccomp;
/* Thread group tracking */
u32 parent_exec_id;
u32 self_exec_id;
-@@ -1591,6 +1599,11 @@ struct pid_namespace;
+@@ -1607,6 +1615,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;
-@@ -1604,7 +1617,8 @@ static inline pid_t task_pid_nr_ns(struc
+@@ -1620,7 +1633,8 @@ static inline pid_t task_pid_nr_ns(struc
static inline pid_t task_pid_vnr(struct task_struct *tsk)
{
}
-@@ -1617,7 +1631,7 @@ pid_t task_tgid_nr_ns(struct task_struct
+@@ -1633,7 +1647,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-2.6.37/include/linux/shmem_fs.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/shmem_fs.h
---- linux-2.6.37/include/linux/shmem_fs.h 2010-10-21 13:07:55.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/shmem_fs.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/shmem_fs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/shmem_fs.h
+--- linux-2.6.38-rc8/include/linux/shmem_fs.h 2010-10-21 13:07:55.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/shmem_fs.h 2011-01-29 02:01:07.000000000 +0100
@@ -9,6 +9,9 @@
#define SHMEM_NR_DIRECT 16
struct shmem_inode_info {
spinlock_t lock;
unsigned long flags;
-diff -NurpP --minimal linux-2.6.37/include/linux/stat.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/stat.h
---- linux-2.6.37/include/linux/stat.h 2008-12-25 00:26:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/stat.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/stat.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/stat.h
+--- linux-2.6.38-rc8/include/linux/stat.h 2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/stat.h 2011-01-29 02:01:07.000000000 +0100
@@ -66,6 +66,7 @@ struct kstat {
unsigned int nlink;
uid_t uid;
dev_t rdev;
loff_t size;
struct timespec atime;
-diff -NurpP --minimal linux-2.6.37/include/linux/sunrpc/auth.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/sunrpc/auth.h
---- linux-2.6.37/include/linux/sunrpc/auth.h 2011-01-05 21:50:33.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/sunrpc/auth.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/sunrpc/auth.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/sunrpc/auth.h
+--- linux-2.6.38-rc8/include/linux/sunrpc/auth.h 2011-03-10 17:09:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/sunrpc/auth.h 2011-01-29 02:01:07.000000000 +0100
@@ -25,6 +25,7 @@
struct auth_cred {
uid_t uid;
struct group_info *group_info;
unsigned char machine_cred : 1;
};
-diff -NurpP --minimal linux-2.6.37/include/linux/sunrpc/clnt.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/sunrpc/clnt.h
---- linux-2.6.37/include/linux/sunrpc/clnt.h 2011-01-05 21:50:33.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/sunrpc/clnt.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/sunrpc/clnt.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/sunrpc/clnt.h
+--- linux-2.6.38-rc8/include/linux/sunrpc/clnt.h 2011-03-10 17:09:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/sunrpc/clnt.h 2011-01-29 02:01:07.000000000 +0100
@@ -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-2.6.37/include/linux/syscalls.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/syscalls.h
---- linux-2.6.37/include/linux/syscalls.h 2011-01-05 21:50:34.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/syscalls.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/syscalls.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/syscalls.h
+--- linux-2.6.38-rc8/include/linux/syscalls.h 2011-03-10 17:09:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/syscalls.h 2011-02-17 02:17:51.000000000 +0100
@@ -478,6 +478,8 @@ asmlinkage long sys_symlink(const char _
asmlinkage long sys_unlink(const char __user *pathname);
asmlinkage long sys_rename(const char __user *oldname,
asmlinkage long sys_chmod(const char __user *filename, mode_t mode);
asmlinkage long sys_fchmod(unsigned int fd, mode_t mode);
-diff -NurpP --minimal linux-2.6.37/include/linux/sysctl.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/sysctl.h
---- linux-2.6.37/include/linux/sysctl.h 2010-08-02 16:52:56.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/sysctl.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/sysctl.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/sysctl.h
+--- linux-2.6.38-rc8/include/linux/sysctl.h 2010-08-02 16:52:56.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/sysctl.h 2011-01-29 02:01:07.000000000 +0100
@@ -60,6 +60,7 @@ enum
CTL_ABI=9, /* Binary emulation */
CTL_CPU=10, /* CPU stuff (speed scaling, etc) */
KERN_SPARC_REBOOT=21, /* reboot command on Sparc */
KERN_CTLALTDEL=22, /* int: allow ctl-alt-del to reboot */
-diff -NurpP --minimal linux-2.6.37/include/linux/sysfs.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/sysfs.h
---- linux-2.6.37/include/linux/sysfs.h 2011-01-05 21:50:34.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/sysfs.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/sysfs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/sysfs.h
+--- linux-2.6.38-rc8/include/linux/sysfs.h 2011-01-05 21:50:34.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/sysfs.h 2011-01-29 02:01:07.000000000 +0100
@@ -19,6 +19,8 @@
#include <linux/kobject_ns.h>
#include <asm/atomic.h>
struct kobject;
struct module;
enum kobj_ns_type;
-diff -NurpP --minimal linux-2.6.37/include/linux/time.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/time.h
---- linux-2.6.37/include/linux/time.h 2010-10-21 13:07:55.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/time.h 2010-11-23 02:09:41.000000000 +0100
-@@ -252,6 +252,9 @@ static __always_inline void timespec_add
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/time.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/time.h
+--- linux-2.6.38-rc8/include/linux/time.h 2011-03-10 17:09:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/time.h 2011-01-29 02:01:07.000000000 +0100
+@@ -254,6 +254,9 @@ static __always_inline void timespec_add
a->tv_sec += __iter_div_u64_rem(a->tv_nsec + ns, NSEC_PER_SEC, &ns);
a->tv_nsec = ns;
}
#endif /* __KERNEL__ */
#define NFDBITS __NFDBITS
-diff -NurpP --minimal linux-2.6.37/include/linux/types.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/types.h
---- linux-2.6.37/include/linux/types.h 2011-01-05 21:50:34.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/types.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/types.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/types.h
+--- linux-2.6.38-rc8/include/linux/types.h 2011-01-05 21:50:34.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/types.h 2011-01-29 02:01:07.000000000 +0100
@@ -40,6 +40,9 @@ typedef __kernel_uid32_t uid_t;
typedef __kernel_gid32_t gid_t;
typedef __kernel_uid16_t uid16_t;
typedef unsigned long uintptr_t;
-diff -NurpP --minimal linux-2.6.37/include/linux/vroot.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vroot.h
---- linux-2.6.37/include/linux/vroot.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vroot.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vroot.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vroot.h
+--- linux-2.6.38-rc8/include/linux/vroot.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vroot.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,51 @@
+
+/*
+#define VROOT_CLR_DEV 0x5601
+
+#endif /* _LINUX_VROOT_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_base.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_base.h
---- linux-2.6.37/include/linux/vs_base.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_base.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_base.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_base.h
+--- linux-2.6.38-rc8/include/linux/vs_base.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_base.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,10 @@
+#ifndef _VS_BASE_H
+#define _VS_BASE_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_context.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_context.h
---- linux-2.6.37/include/linux/vs_context.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_context.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_context.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_context.h
+--- linux-2.6.38-rc8/include/linux/vs_context.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_context.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,242 @@
+#ifndef _VS_CONTEXT_H
+#define _VS_CONTEXT_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_cowbl.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_cowbl.h
---- linux-2.6.37/include/linux/vs_cowbl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_cowbl.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_cowbl.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_cowbl.h
+--- linux-2.6.38-rc8/include/linux/vs_cowbl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_cowbl.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,48 @@
+#ifndef _VS_COWBL_H
+#define _VS_COWBL_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_cvirt.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_cvirt.h
---- linux-2.6.37/include/linux/vs_cvirt.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_cvirt.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_cvirt.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_cvirt.h
+--- linux-2.6.38-rc8/include/linux/vs_cvirt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_cvirt.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,50 @@
+#ifndef _VS_CVIRT_H
+#define _VS_CVIRT_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_device.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_device.h
---- linux-2.6.37/include/linux/vs_device.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_device.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_device.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_device.h
+--- linux-2.6.38-rc8/include/linux/vs_device.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_device.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,45 @@
+#ifndef _VS_DEVICE_H
+#define _VS_DEVICE_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_dlimit.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_dlimit.h
---- linux-2.6.37/include/linux/vs_dlimit.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_dlimit.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_dlimit.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_dlimit.h
+--- linux-2.6.38-rc8/include/linux/vs_dlimit.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_dlimit.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,215 @@
+#ifndef _VS_DLIMIT_H
+#define _VS_DLIMIT_H
+#else
+#warning duplicate inclusion
+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/base.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/base.h
---- linux-2.6.37/include/linux/vserver/base.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/base.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,170 @@
-+#ifndef _VX_BASE_H
-+#define _VX_BASE_H
-+
-+
-+/* context state changes */
-+
-+enum {
-+ VSC_STARTUP = 1,
-+ VSC_SHUTDOWN,
-+
-+ VSC_NETUP,
-+ VSC_NETDOWN,
-+};
-+
-+
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_inet.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_inet.h
+--- linux-2.6.38-rc8/include/linux/vs_inet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_inet.h 2011-01-29 04:45:50.000000000 +0100
+@@ -0,0 +1,351 @@
++#ifndef _VS_INET_H
++#define _VS_INET_H
+
-+#define vx_task_xid(t) ((t)->xid)
++#include "vserver/base.h"
++#include "vserver/network.h"
++#include "vserver/debug.h"
+
-+#define vx_current_xid() vx_task_xid(current)
++#define IPI_LOOPBACK htonl(INADDR_LOOPBACK)
+
-+#define current_vx_info() (current->vx_info)
++#define NXAV4(a) NIPQUAD((a)->ip[0]), NIPQUAD((a)->ip[1]), \
++ NIPQUAD((a)->mask), (a)->type
++#define NXAV4_FMT "[" NIPQUAD_FMT "-" NIPQUAD_FMT "/" NIPQUAD_FMT ":%04x]"
+
++#define NIPQUAD(addr) \
++ ((unsigned char *)&addr)[0], \
++ ((unsigned char *)&addr)[1], \
++ ((unsigned char *)&addr)[2], \
++ ((unsigned char *)&addr)[3]
+
-+#define nx_task_nid(t) ((t)->nid)
++#define NIPQUAD_FMT "%u.%u.%u.%u"
+
-+#define nx_current_nid() nx_task_nid(current)
+
-+#define current_nx_info() (current->nx_info)
++static inline
++int v4_addr_match(struct nx_addr_v4 *nxa, __be32 addr, uint16_t tmask)
++{
++ __be32 ip = nxa->ip[0].s_addr;
++ __be32 mask = nxa->mask.s_addr;
++ __be32 bcast = ip | ~mask;
++ int ret = 0;
+
++ switch (nxa->type & tmask) {
++ case NXA_TYPE_MASK:
++ ret = (ip == (addr & mask));
++ break;
++ case NXA_TYPE_ADDR:
++ ret = 3;
++ if (addr == ip)
++ break;
++ /* fall through to broadcast */
++ case NXA_MOD_BCAST:
++ ret = ((tmask & NXA_MOD_BCAST) && (addr == bcast));
++ break;
++ case NXA_TYPE_RANGE:
++ ret = ((nxa->ip[0].s_addr <= addr) &&
++ (nxa->ip[1].s_addr > addr));
++ break;
++ case NXA_TYPE_ANY:
++ ret = 2;
++ break;
++ }
+
-+/* generic flag merging */
++ vxdprintk(VXD_CBIT(net, 0),
++ "v4_addr_match(%p" NXAV4_FMT "," NIPQUAD_FMT ",%04x) = %d",
++ nxa, NXAV4(nxa), NIPQUAD(addr), tmask, ret);
++ return ret;
++}
+
-+#define vs_check_flags(v, m, f) (((v) & (m)) ^ (f))
++static inline
++int v4_addr_in_nx_info(struct nx_info *nxi, __be32 addr, uint16_t tmask)
++{
++ struct nx_addr_v4 *nxa;
++ int ret = 1;
+
-+#define vs_mask_flags(v, f, m) (((v) & ~(m)) | ((f) & (m)))
++ if (!nxi)
++ goto out;
+
-+#define vs_mask_mask(v, f, m) (((v) & ~(m)) | ((v) & (f) & (m)))
++ ret = 2;
++ /* allow 127.0.0.1 when remapping lback */
++ if ((tmask & NXA_LOOPBACK) &&
++ (addr == IPI_LOOPBACK) &&
++ nx_info_flags(nxi, NXF_LBACK_REMAP, 0))
++ goto out;
++ ret = 3;
++ /* check for lback address */
++ if ((tmask & NXA_MOD_LBACK) &&
++ (nxi->v4_lback.s_addr == addr))
++ goto out;
++ ret = 4;
++ /* check for broadcast address */
++ if ((tmask & NXA_MOD_BCAST) &&
++ (nxi->v4_bcast.s_addr == addr))
++ goto out;
++ ret = 5;
++ /* check for v4 addresses */
++ for (nxa = &nxi->v4; nxa; nxa = nxa->next)
++ if (v4_addr_match(nxa, addr, tmask))
++ goto out;
++ ret = 0;
++out:
++ 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);
++ return ret;
++}
+
-+#define vs_check_bit(v, n) ((v) & (1LL << (n)))
++static inline
++int v4_nx_addr_match(struct nx_addr_v4 *nxa, struct nx_addr_v4 *addr, uint16_t mask)
++{
++ /* FIXME: needs full range checks */
++ return v4_addr_match(nxa, addr->ip[0].s_addr, mask);
++}
+
++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;
+
-+/* context flags */
++ for (ptr = &nxi->v4; ptr; ptr = ptr->next)
++ if (v4_nx_addr_match(ptr, nxa, mask))
++ return 1;
++ return 0;
++}
+
-+#define __vx_flags(v) ((v) ? (v)->vx_flags : 0)
++#include <net/inet_sock.h>
+
-+#define vx_current_flags() __vx_flags(current_vx_info())
++/*
++ * Check if a given address matches for a socket
++ *
++ * nxi: the socket's nx_info if any
++ * addr: to be verified address
++ */
++static inline
++int v4_sock_addr_match (
++ struct nx_info *nxi,
++ struct inet_sock *inet,
++ __be32 addr)
++{
++ __be32 saddr = inet->inet_rcv_saddr;
++ __be32 bcast = nxi ? nxi->v4_bcast.s_addr : INADDR_BROADCAST;
+
-+#define vx_info_flags(v, m, f) \
-+ vs_check_flags(__vx_flags(v), m, f)
++ if (addr && (saddr == addr || bcast == addr))
++ return 1;
++ if (!saddr)
++ return v4_addr_in_nx_info(nxi, addr, NXA_MASK_BIND);
++ return 0;
++}
+
-+#define task_vx_flags(t, m, f) \
-+ ((t) && vx_info_flags((t)->vx_info, m, f))
+
-+#define vx_flags(m, f) vx_info_flags(current_vx_info(), m, f)
++/* inet related checks and helpers */
+
+
-+/* context caps */
++struct in_ifaddr;
++struct net_device;
++struct sock;
+
-+#define __vx_ccaps(v) ((v) ? (v)->vx_ccaps : 0)
++#ifdef CONFIG_INET
+
-+#define vx_current_ccaps() __vx_ccaps(current_vx_info())
++#include <linux/netdevice.h>
++#include <linux/inetdevice.h>
++#include <net/inet_sock.h>
++#include <net/inet_timewait_sock.h>
+
-+#define vx_info_ccaps(v, c) (__vx_ccaps(v) & (c))
+
-+#define vx_ccaps(c) vx_info_ccaps(current_vx_info(), (c))
++int dev_in_nx_info(struct net_device *, struct nx_info *);
++int v4_dev_in_nx_info(struct net_device *, struct nx_info *);
++int nx_v4_addr_conflict(struct nx_info *, struct nx_info *);
+
+
++/*
++ * check if address is covered by socket
++ *
++ * sk: the socket to check against
++ * addr: the address in question (must be != 0)
++ */
+
-+/* network flags */
++static inline
++int __v4_addr_match_socket(const struct sock *sk, struct nx_addr_v4 *nxa)
++{
++ struct nx_info *nxi = sk->sk_nx_info;
++ __be32 saddr = sk_rcv_saddr(sk);
+
-+#define __nx_flags(n) ((n) ? (n)->nx_flags : 0)
++ vxdprintk(VXD_CBIT(net, 5),
++ "__v4_addr_in_socket(%p," NXAV4_FMT ") %p:" NIPQUAD_FMT " %p;%lx",
++ sk, NXAV4(nxa), nxi, NIPQUAD(saddr), sk->sk_socket,
++ (sk->sk_socket?sk->sk_socket->flags:0));
+
-+#define nx_current_flags() __nx_flags(current_nx_info())
++ if (saddr) { /* direct address match */
++ return v4_addr_match(nxa, saddr, -1);
++ } else if (nxi) { /* match against nx_info */
++ return v4_nx_addr_in_nx_info(nxi, nxa, -1);
++ } else { /* unrestricted any socket */
++ return 1;
++ }
++}
+
-+#define nx_info_flags(n, m, f) \
-+ vs_check_flags(__nx_flags(n), m, f)
+
-+#define task_nx_flags(t, m, f) \
-+ ((t) && nx_info_flags((t)->nx_info, m, f))
+
-+#define nx_flags(m, f) nx_info_flags(current_nx_info(), m, f)
++static inline
++int nx_dev_visible(struct nx_info *nxi, struct net_device *dev)
++{
++ vxdprintk(VXD_CBIT(net, 1),
++ "nx_dev_visible(%p[#%u],%p " VS_Q("%s") ") %d",
++ nxi, nxi ? nxi->nx_id : 0, dev, dev->name,
++ nxi ? dev_in_nx_info(dev, nxi) : 0);
+
++ if (!nx_info_flags(nxi, NXF_HIDE_NETIF, 0))
++ return 1;
++ if (dev_in_nx_info(dev, nxi))
++ return 1;
++ return 0;
++}
+
-+/* network caps */
+
-+#define __nx_ncaps(n) ((n) ? (n)->nx_ncaps : 0)
++static inline
++int v4_ifa_in_nx_info(struct in_ifaddr *ifa, struct nx_info *nxi)
++{
++ if (!nxi)
++ return 1;
++ if (!ifa)
++ return 0;
++ return v4_addr_in_nx_info(nxi, ifa->ifa_local, NXA_MASK_SHOW);
++}
+
-+#define nx_current_ncaps() __nx_ncaps(current_nx_info())
++static inline
++int nx_v4_ifa_visible(struct nx_info *nxi, struct in_ifaddr *ifa)
++{
++ vxdprintk(VXD_CBIT(net, 1), "nx_v4_ifa_visible(%p[#%u],%p) %d",
++ nxi, nxi ? nxi->nx_id : 0, ifa,
++ nxi ? v4_ifa_in_nx_info(ifa, nxi) : 0);
+
-+#define nx_info_ncaps(n, c) (__nx_ncaps(n) & (c))
++ if (!nx_info_flags(nxi, NXF_HIDE_NETIF, 0))
++ return 1;
++ if (v4_ifa_in_nx_info(ifa, nxi))
++ return 1;
++ return 0;
++}
+
-+#define nx_ncaps(c) nx_info_ncaps(current_nx_info(), c)
+
++struct nx_v4_sock_addr {
++ __be32 saddr; /* Address used for validation */
++ __be32 baddr; /* Address used for socket bind */
++};
+
-+/* context mask capabilities */
++static inline
++int v4_map_sock_addr(struct inet_sock *inet, struct sockaddr_in *addr,
++ struct nx_v4_sock_addr *nsa)
++{
++ struct sock *sk = &inet->sk;
++ struct nx_info *nxi = sk->sk_nx_info;
++ __be32 saddr = addr->sin_addr.s_addr;
++ __be32 baddr = saddr;
+
-+#define __vx_mcaps(v) ((v) ? (v)->vx_ccaps >> 32UL : ~0 )
++ vxdprintk(VXD_CBIT(net, 3),
++ "inet_bind(%p)* %p,%p;%lx " NIPQUAD_FMT,
++ sk, sk->sk_nx_info, sk->sk_socket,
++ (sk->sk_socket ? sk->sk_socket->flags : 0),
++ NIPQUAD(saddr));
+
-+#define vx_info_mcaps(v, c) (__vx_mcaps(v) & (c))
-+
-+#define vx_mcaps(c) vx_info_mcaps(current_vx_info(), c)
++ if (nxi) {
++ if (saddr == INADDR_ANY) {
++ if (nx_info_flags(nxi, NXF_SINGLE_IP, 0))
++ baddr = nxi->v4.ip[0].s_addr;
++ } else if (saddr == IPI_LOOPBACK) {
++ if (nx_info_flags(nxi, NXF_LBACK_REMAP, 0))
++ baddr = nxi->v4_lback.s_addr;
++ } else { /* normal address bind */
++ if (!v4_addr_in_nx_info(nxi, saddr, NXA_MASK_BIND))
++ return -EADDRNOTAVAIL;
++ }
++ }
+
++ vxdprintk(VXD_CBIT(net, 3),
++ "inet_bind(%p) " NIPQUAD_FMT ", " NIPQUAD_FMT,
++ sk, NIPQUAD(saddr), NIPQUAD(baddr));
+
-+/* context bcap mask */
++ nsa->saddr = saddr;
++ nsa->baddr = baddr;
++ return 0;
++}
+
-+#define __vx_bcaps(v) ((v)->vx_bcaps)
++static inline
++void v4_set_sock_addr(struct inet_sock *inet, struct nx_v4_sock_addr *nsa)
++{
++ inet->inet_saddr = nsa->baddr;
++ inet->inet_rcv_saddr = nsa->baddr;
++}
+
-+#define vx_current_bcaps() __vx_bcaps(current_vx_info())
+
++/*
++ * helper to simplify inet_lookup_listener
++ *
++ * nxi: the socket's nx_info if any
++ * addr: to be verified address
++ * saddr: socket address
++ */
++static inline int v4_inet_addr_match (
++ struct nx_info *nxi,
++ __be32 addr,
++ __be32 saddr)
++{
++ if (addr && (saddr == addr))
++ return 1;
++ if (!saddr)
++ return nxi ? v4_addr_in_nx_info(nxi, addr, NXA_MASK_BIND) : 1;
++ return 0;
++}
+
-+/* mask given bcaps */
++static inline __be32 nx_map_sock_lback(struct nx_info *nxi, __be32 addr)
++{
++ if (nx_info_flags(nxi, NXF_HIDE_LBACK, 0) &&
++ (addr == nxi->v4_lback.s_addr))
++ return IPI_LOOPBACK;
++ return addr;
++}
+
-+#define vx_info_mbcaps(v, c) ((v) ? cap_intersect(__vx_bcaps(v), c) : c)
++static inline
++int nx_info_has_v4(struct nx_info *nxi)
++{
++ if (!nxi)
++ return 1;
++ if (NX_IPV4(nxi))
++ return 1;
++ if (nx_info_flags(nxi, NXF_LBACK_REMAP, 0))
++ return 1;
++ return 0;
++}
+
-+#define vx_mbcaps(c) vx_info_mbcaps(current_vx_info(), c)
++#else /* CONFIG_INET */
+
++static inline
++int nx_dev_visible(struct nx_info *n, struct net_device *d)
++{
++ return 1;
++}
+
-+/* masked cap_bset */
++static inline
++int nx_v4_addr_conflict(struct nx_info *n, uint32_t a, const struct sock *s)
++{
++ return 1;
++}
+
-+#define vx_info_cap_bset(v) vx_info_mbcaps(v, current->cap_bset)
++static inline
++int v4_ifa_in_nx_info(struct in_ifaddr *a, struct nx_info *n)
++{
++ return 1;
++}
+
-+#define vx_current_cap_bset() vx_info_cap_bset(current_vx_info())
++static inline
++int nx_info_has_v4(struct nx_info *nxi)
++{
++ return 0;
++}
+
-+#if 0
-+#define vx_info_mbcap(v, b) \
-+ (!vx_info_flags(v, VXF_STATE_SETUP, 0) ? \
-+ vx_info_bcaps(v, b) : (b))
++#endif /* CONFIG_INET */
+
-+#define task_vx_mbcap(t, b) \
-+ vx_info_mbcap((t)->vx_info, (t)->b)
++#define current_nx_info_has_v4() \
++ nx_info_has_v4(current_nx_info())
+
-+#define vx_mbcap(b) task_vx_mbcap(current, b)
++#else
++// #warning duplicate inclusion
+#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_inet6.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_inet6.h
+--- linux-2.6.38-rc8/include/linux/vs_inet6.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_inet6.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,246 @@
++#ifndef _VS_INET6_H
++#define _VS_INET6_H
+
-+#define vx_cap_raised(v, c, f) cap_raised(vx_info_mbcaps(v, c), f)
++#include "vserver/base.h"
++#include "vserver/network.h"
++#include "vserver/debug.h"
+
-+#define vx_capable(b, c) (capable(b) || \
-+ (cap_raised(current_cap(), b) && vx_ccaps(c)))
++#include <net/ipv6.h>
+
-+#define nx_capable(b, c) (capable(b) || \
-+ (cap_raised(current_cap(), b) && nx_ncaps(c)))
++#define NXAV6(a) &(a)->ip, &(a)->mask, (a)->prefix, (a)->type
++#define NXAV6_FMT "[%pI6/%pI6/%d:%04x]"
+
-+#define vx_task_initpid(t, n) \
-+ ((t)->vx_info && \
-+ ((t)->vx_info->vx_initpid == (n)))
+
-+#define vx_current_initpid(n) vx_task_initpid(current, n)
++#ifdef CONFIG_IPV6
+
++static inline
++int v6_addr_match(struct nx_addr_v6 *nxa,
++ const struct in6_addr *addr, uint16_t mask)
++{
++ int ret = 0;
+
-+/* context unshare mask */
++ switch (nxa->type & mask) {
++ case NXA_TYPE_MASK:
++ ret = ipv6_masked_addr_cmp(&nxa->ip, &nxa->mask, addr);
++ break;
++ case NXA_TYPE_ADDR:
++ ret = ipv6_addr_equal(&nxa->ip, addr);
++ break;
++ case NXA_TYPE_ANY:
++ ret = 1;
++ break;
++ }
++ vxdprintk(VXD_CBIT(net, 0),
++ "v6_addr_match(%p" NXAV6_FMT ",%pI6,%04x) = %d",
++ nxa, NXAV6(nxa), addr, mask, ret);
++ return ret;
++}
+
-+#define __vx_umask(v) ((v)->vx_umask)
++static inline
++int v6_addr_in_nx_info(struct nx_info *nxi,
++ const struct in6_addr *addr, uint16_t mask)
++{
++ struct nx_addr_v6 *nxa;
++ int ret = 1;
+
-+#define vx_current_umask() __vx_umask(current_vx_info())
++ if (!nxi)
++ goto out;
++ for (nxa = &nxi->v6; nxa; nxa = nxa->next)
++ if (v6_addr_match(nxa, addr, mask))
++ goto out;
++ ret = 0;
++out:
++ vxdprintk(VXD_CBIT(net, 0),
++ "v6_addr_in_nx_info(%p[#%u],%pI6,%04x) = %d",
++ nxi, nxi ? nxi->nx_id : 0, addr, mask, ret);
++ return ret;
++}
+
-+#define vx_can_unshare(b, f) (capable(b) || \
-+ (cap_raised(current_cap(), b) && \
-+ !((f) & ~vx_current_umask())))
++static inline
++int v6_nx_addr_match(struct nx_addr_v6 *nxa, struct nx_addr_v6 *addr, uint16_t mask)
++{
++ /* FIXME: needs full range checks */
++ return v6_addr_match(nxa, &addr->ip, mask);
++}
+
++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;
+
-+#define __vx_state(v) ((v) ? ((v)->vx_state) : 0)
++ for (ptr = &nxi->v6; ptr; ptr = ptr->next)
++ if (v6_nx_addr_match(ptr, nxa, mask))
++ return 1;
++ return 0;
++}
+
-+#define vx_info_state(v, m) (__vx_state(v) & (m))
+
++/*
++ * Check if a given address matches for a socket
++ *
++ * nxi: the socket's nx_info if any
++ * addr: to be verified address
++ */
++static inline
++int v6_sock_addr_match (
++ struct nx_info *nxi,
++ struct inet_sock *inet,
++ struct in6_addr *addr)
++{
++ struct sock *sk = &inet->sk;
++ struct in6_addr *saddr = inet6_rcv_saddr(sk);
+
-+#define __nx_state(n) ((n) ? ((n)->nx_state) : 0)
++ if (!ipv6_addr_any(addr) &&
++ ipv6_addr_equal(saddr, addr))
++ return 1;
++ if (ipv6_addr_any(saddr))
++ return v6_addr_in_nx_info(nxi, addr, -1);
++ return 0;
++}
+
-+#define nx_info_state(n, m) (__nx_state(n) & (m))
++/*
++ * check if address is covered by socket
++ *
++ * sk: the socket to check against
++ * addr: the address in question (must be != 0)
++ */
+
-+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/cacct_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cacct_cmd.h
---- linux-2.6.37/include/linux/vserver/cacct_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cacct_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,23 @@
-+#ifndef _VX_CACCT_CMD_H
-+#define _VX_CACCT_CMD_H
++static inline
++int __v6_addr_match_socket(const struct sock *sk, struct nx_addr_v6 *nxa)
++{
++ struct nx_info *nxi = sk->sk_nx_info;
++ struct in6_addr *saddr = inet6_rcv_saddr(sk);
+
++ vxdprintk(VXD_CBIT(net, 5),
++ "__v6_addr_in_socket(%p," NXAV6_FMT ") %p:%pI6 %p;%lx",
++ sk, NXAV6(nxa), nxi, saddr, sk->sk_socket,
++ (sk->sk_socket?sk->sk_socket->flags:0));
+
-+/* virtual host info name commands */
++ if (!ipv6_addr_any(saddr)) { /* direct address match */
++ return v6_addr_match(nxa, saddr, -1);
++ } else if (nxi) { /* match against nx_info */
++ return v6_nx_addr_in_nx_info(nxi, nxa, -1);
++ } else { /* unrestricted any socket */
++ return 1;
++ }
++}
+
-+#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];
-+};
++/* inet related checks and helpers */
+
+
-+#ifdef __KERNEL__
++struct in_ifaddr;
++struct net_device;
++struct sock;
+
-+#include <linux/compiler.h>
+
-+extern int vc_sock_stat(struct vx_info *, void __user *);
++#include <linux/netdevice.h>
++#include <linux/inetdevice.h>
++#include <net/inet_timewait_sock.h>
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CACCT_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/cacct_def.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cacct_def.h
---- linux-2.6.37/include/linux/vserver/cacct_def.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cacct_def.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,43 @@
-+#ifndef _VX_CACCT_DEF_H
-+#define _VX_CACCT_DEF_H
-+
-+#include <asm/atomic.h>
-+#include <linux/vserver/cacct.h>
-+
-+
-+struct _vx_sock_acc {
-+ atomic_long_t count;
-+ atomic_long_t total;
-+};
+
-+/* context sub struct */
++int dev_in_nx_info(struct net_device *, struct nx_info *);
++int v6_dev_in_nx_info(struct net_device *, struct nx_info *);
++int nx_v6_addr_conflict(struct nx_info *, struct nx_info *);
+
-+struct _vx_cacct {
-+ struct _vx_sock_acc sock[VXA_SOCK_SIZE][3];
-+ atomic_t slab[8];
-+ atomic_t page[6][8];
-+};
+
-+#ifdef CONFIG_VSERVER_DEBUG
+
-+static inline void __dump_vx_cacct(struct _vx_cacct *cacct)
++static inline
++int v6_ifa_in_nx_info(struct inet6_ifaddr *ifa, struct nx_info *nxi)
+{
-+ int i, j;
++ if (!nxi)
++ return 1;
++ if (!ifa)
++ return 0;
++ return v6_addr_in_nx_info(nxi, &ifa->addr, -1);
++}
+
-+ printk("\t_vx_cacct:");
-+ for (i = 0; i < 6; i++) {
-+ struct _vx_sock_acc *ptr = cacct->sock[i];
++static inline
++int nx_v6_ifa_visible(struct nx_info *nxi, struct inet6_ifaddr *ifa)
++{
++ vxdprintk(VXD_CBIT(net, 1), "nx_v6_ifa_visible(%p[#%u],%p) %d",
++ nxi, nxi ? nxi->nx_id : 0, ifa,
++ nxi ? v6_ifa_in_nx_info(ifa, nxi) : 0);
+
-+ printk("\t [%d] =", i);
-+ for (j = 0; j < 3; j++) {
-+ printk(" [%d] = %8lu, %8lu", j,
-+ atomic_long_read(&ptr[j].count),
-+ atomic_long_read(&ptr[j].total));
-+ }
-+ printk("\n");
-+ }
++ if (!nx_info_flags(nxi, NXF_HIDE_NETIF, 0))
++ return 1;
++ if (v6_ifa_in_nx_info(ifa, nxi))
++ return 1;
++ return 0;
+}
+
-+#endif
+
-+#endif /* _VX_CACCT_DEF_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/cacct.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cacct.h
---- linux-2.6.37/include/linux/vserver/cacct.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cacct.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,15 @@
-+#ifndef _VX_CACCT_H
-+#define _VX_CACCT_H
++struct nx_v6_sock_addr {
++ struct in6_addr saddr; /* Address used for validation */
++ struct in6_addr baddr; /* Address used for socket bind */
++};
++
++static inline
++int v6_map_sock_addr(struct inet_sock *inet, struct sockaddr_in6 *addr,
++ struct nx_v6_sock_addr *nsa)
++{
++ // struct sock *sk = &inet->sk;
++ // struct nx_info *nxi = sk->sk_nx_info;
++ struct in6_addr saddr = addr->sin6_addr;
++ struct in6_addr baddr = saddr;
+
++ nsa->saddr = saddr;
++ nsa->baddr = baddr;
++ return 0;
++}
+
-+enum sock_acc_field {
-+ VXA_SOCK_UNSPEC = 0,
-+ VXA_SOCK_UNIX,
-+ VXA_SOCK_INET,
-+ VXA_SOCK_INET6,
-+ VXA_SOCK_PACKET,
-+ VXA_SOCK_OTHER,
-+ VXA_SOCK_SIZE /* array size */
-+};
++static inline
++void v6_set_sock_addr(struct inet_sock *inet, struct nx_v6_sock_addr *nsa)
++{
++ // struct sock *sk = &inet->sk;
++ // struct in6_addr *saddr = inet6_rcv_saddr(sk);
+
-+#endif /* _VX_CACCT_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/cacct_int.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cacct_int.h
---- linux-2.6.37/include/linux/vserver/cacct_int.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cacct_int.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,21 @@
-+#ifndef _VX_CACCT_INT_H
-+#define _VX_CACCT_INT_H
++ // *saddr = nsa->baddr;
++ // inet->inet_saddr = nsa->baddr;
++}
+
++static inline
++int nx_info_has_v6(struct nx_info *nxi)
++{
++ if (!nxi)
++ return 1;
++ if (NX_IPV6(nxi))
++ return 1;
++ return 0;
++}
+
-+#ifdef __KERNEL__
++#else /* CONFIG_IPV6 */
+
+static inline
-+unsigned long vx_sock_count(struct _vx_cacct *cacct, int type, int pos)
++int nx_v6_dev_visible(struct nx_info *n, struct net_device *d)
+{
-+ return atomic_long_read(&cacct->sock[type][pos].count);
++ return 1;
+}
+
+
+static inline
-+unsigned long vx_sock_total(struct _vx_cacct *cacct, int type, int pos)
++int nx_v6_addr_conflict(struct nx_info *n, uint32_t a, const struct sock *s)
+{
-+ return atomic_long_read(&cacct->sock[type][pos].total);
++ return 1;
+}
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CACCT_INT_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/check.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/check.h
---- linux-2.6.37/include/linux/vserver/check.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/check.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,89 @@
-+#ifndef _VS_CHECK_H
-+#define _VS_CHECK_H
++static inline
++int v6_ifa_in_nx_info(struct in_ifaddr *a, struct nx_info *n)
++{
++ return 1;
++}
++
++static inline
++int nx_info_has_v6(struct nx_info *nxi)
++{
++ return 0;
++}
+
++#endif /* CONFIG_IPV6 */
+
-+#define MAX_S_CONTEXT 65535 /* Arbitrary limit */
++#define current_nx_info_has_v6() \
++ nx_info_has_v6(current_nx_info())
+
-+#ifdef CONFIG_VSERVER_DYNAMIC_IDS
-+#define MIN_D_CONTEXT 49152 /* dynamic contexts start here */
+#else
-+#define MIN_D_CONTEXT 65536
++#warning duplicate inclusion
+#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_limit.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_limit.h
+--- linux-2.6.38-rc8/include/linux/vs_limit.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_limit.h 2011-01-29 04:59:22.000000000 +0100
+@@ -0,0 +1,140 @@
++#ifndef _VS_LIMIT_H
++#define _VS_LIMIT_H
+
-+/* check conditions */
++#include "vserver/limit.h"
++#include "vserver/base.h"
++#include "vserver/context.h"
++#include "vserver/debug.h"
++#include "vserver/context.h"
++#include "vserver/limit_int.h"
+
-+#define VS_ADMIN 0x0001
-+#define VS_WATCH 0x0002
-+#define VS_HIDE 0x0004
-+#define VS_HOSTID 0x0008
+
-+#define VS_IDENT 0x0010
-+#define VS_EQUIV 0x0020
-+#define VS_PARENT 0x0040
-+#define VS_CHILD 0x0080
++#define vx_acc_cres(v, d, p, r) \
++ __vx_acc_cres(v, r, d, p, __FILE__, __LINE__)
+
-+#define VS_ARG_MASK 0x00F0
++#define vx_acc_cres_cond(x, d, p, r) \
++ __vx_acc_cres(((x) == vx_current_xid()) ? current_vx_info() : 0, \
++ r, d, p, __FILE__, __LINE__)
+
-+#define VS_DYNAMIC 0x0100
-+#define VS_STATIC 0x0200
+
-+#define VS_ATR_MASK 0x0F00
++#define vx_add_cres(v, a, p, r) \
++ __vx_add_cres(v, r, a, p, __FILE__, __LINE__)
++#define vx_sub_cres(v, a, p, r) vx_add_cres(v, -(a), p, r)
+
-+#ifdef CONFIG_VSERVER_PRIVACY
-+#define VS_ADMIN_P (0)
-+#define VS_WATCH_P (0)
-+#else
-+#define VS_ADMIN_P VS_ADMIN
-+#define VS_WATCH_P VS_WATCH
-+#endif
++#define vx_add_cres_cond(x, a, p, r) \
++ __vx_add_cres(((x) == vx_current_xid()) ? current_vx_info() : 0, \
++ r, a, p, __FILE__, __LINE__)
++#define vx_sub_cres_cond(x, a, p, r) vx_add_cres_cond(x, -(a), p, r)
+
-+#define VS_HARDIRQ 0x1000
-+#define VS_SOFTIRQ 0x2000
-+#define VS_IRQ 0x4000
+
-+#define VS_IRQ_MASK 0xF000
++/* process and file limits */
+
-+#include <linux/hardirq.h>
++#define vx_nproc_inc(p) \
++ vx_acc_cres((p)->vx_info, 1, p, RLIMIT_NPROC)
+
-+/*
-+ * check current context for ADMIN/WATCH and
-+ * optionally against supplied argument
-+ */
-+static inline int __vs_check(int cid, int id, unsigned int mode)
-+{
-+ if (mode & VS_ARG_MASK) {
-+ if ((mode & VS_IDENT) && (id == cid))
-+ return 1;
-+ }
-+ if (mode & VS_ATR_MASK) {
-+ if ((mode & VS_DYNAMIC) &&
-+ (id >= MIN_D_CONTEXT) &&
-+ (id <= MAX_S_CONTEXT))
-+ return 1;
-+ if ((mode & VS_STATIC) &&
-+ (id > 1) && (id < MIN_D_CONTEXT))
-+ return 1;
-+ }
-+ if (mode & VS_IRQ_MASK) {
-+ if ((mode & VS_IRQ) && unlikely(in_interrupt()))
-+ return 1;
-+ if ((mode & VS_HARDIRQ) && unlikely(in_irq()))
-+ return 1;
-+ if ((mode & VS_SOFTIRQ) && unlikely(in_softirq()))
-+ return 1;
-+ }
-+ return (((mode & VS_ADMIN) && (cid == 0)) ||
-+ ((mode & VS_WATCH) && (cid == 1)) ||
-+ ((mode & VS_HOSTID) && (id == 0)));
-+}
++#define vx_nproc_dec(p) \
++ vx_acc_cres((p)->vx_info,-1, p, RLIMIT_NPROC)
+
-+#define vx_check(c, m) __vs_check(vx_current_xid(), c, (m) | VS_IRQ)
++#define vx_files_inc(f) \
++ vx_acc_cres_cond((f)->f_xid, 1, f, RLIMIT_NOFILE)
+
-+#define vx_weak_check(c, m) ((m) ? vx_check(c, m) : 1)
++#define vx_files_dec(f) \
++ vx_acc_cres_cond((f)->f_xid,-1, f, RLIMIT_NOFILE)
+
++#define vx_locks_inc(l) \
++ vx_acc_cres_cond((l)->fl_xid, 1, l, RLIMIT_LOCKS)
+
-+#define nx_check(c, m) __vs_check(nx_current_nid(), c, m)
++#define vx_locks_dec(l) \
++ vx_acc_cres_cond((l)->fl_xid,-1, l, RLIMIT_LOCKS)
+
-+#define nx_weak_check(c, m) ((m) ? nx_check(c, m) : 1)
++#define vx_openfd_inc(f) \
++ vx_acc_cres(current_vx_info(), 1, (void *)(long)(f), VLIMIT_OPENFD)
+
-+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/context_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/context_cmd.h
---- linux-2.6.37/include/linux/vserver/context_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/context_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,145 @@
-+#ifndef _VX_CONTEXT_CMD_H
-+#define _VX_CONTEXT_CMD_H
++#define vx_openfd_dec(f) \
++ vx_acc_cres(current_vx_info(),-1, (void *)(long)(f), VLIMIT_OPENFD)
+
+
-+/* vinfo commands */
++#define vx_cres_avail(v, n, r) \
++ __vx_cres_avail(v, r, n, __FILE__, __LINE__)
+
-+#define VCMD_task_xid VC_CMD(VINFO, 1, 0)
+
-+#ifdef __KERNEL__
-+extern int vc_task_xid(uint32_t);
++#define vx_nproc_avail(n) \
++ vx_cres_avail(current_vx_info(), n, RLIMIT_NPROC)
+
-+#endif /* __KERNEL__ */
++#define vx_files_avail(n) \
++ vx_cres_avail(current_vx_info(), n, RLIMIT_NOFILE)
+
-+#define VCMD_vx_info VC_CMD(VINFO, 5, 0)
++#define vx_locks_avail(n) \
++ vx_cres_avail(current_vx_info(), n, RLIMIT_LOCKS)
+
-+struct vcmd_vx_info_v0 {
-+ uint32_t xid;
-+ uint32_t initpid;
-+ /* more to come */
-+};
++#define vx_openfd_avail(n) \
++ vx_cres_avail(current_vx_info(), n, VLIMIT_OPENFD)
+
-+#ifdef __KERNEL__
-+extern int vc_vx_info(struct vx_info *, void __user *);
+
-+#endif /* __KERNEL__ */
++/* dentry limits */
+
-+#define VCMD_ctx_stat VC_CMD(VSTAT, 0, 0)
++#define vx_dentry_inc(d) do { \
++ if ((d)->d_count == 1) \
++ vx_acc_cres(current_vx_info(), 1, d, VLIMIT_DENTRY); \
++ } while (0)
+
-+struct vcmd_ctx_stat_v0 {
-+ uint32_t usecnt;
-+ uint32_t tasks;
-+ /* more to come */
-+};
++#define vx_dentry_dec(d) do { \
++ if ((d)->d_count == 0) \
++ vx_acc_cres(current_vx_info(),-1, d, VLIMIT_DENTRY); \
++ } while (0)
+
-+#ifdef __KERNEL__
-+extern int vc_ctx_stat(struct vx_info *, void __user *);
++#define vx_dentry_avail(n) \
++ vx_cres_avail(current_vx_info(), n, VLIMIT_DENTRY)
+
-+#endif /* __KERNEL__ */
+
-+/* context commands */
++/* socket limits */
+
-+#define VCMD_ctx_create_v0 VC_CMD(VPROC, 1, 0)
-+#define VCMD_ctx_create VC_CMD(VPROC, 1, 1)
++#define vx_sock_inc(s) \
++ vx_acc_cres((s)->sk_vx_info, 1, s, VLIMIT_NSOCK)
+
-+struct vcmd_ctx_create {
-+ uint64_t flagword;
-+};
++#define vx_sock_dec(s) \
++ vx_acc_cres((s)->sk_vx_info,-1, s, VLIMIT_NSOCK)
+
-+#define VCMD_ctx_migrate_v0 VC_CMD(PROCMIG, 1, 0)
-+#define VCMD_ctx_migrate VC_CMD(PROCMIG, 1, 1)
++#define vx_sock_avail(n) \
++ vx_cres_avail(current_vx_info(), n, VLIMIT_NSOCK)
+
-+struct vcmd_ctx_migrate {
-+ uint64_t flagword;
-+};
+
-+#ifdef __KERNEL__
-+extern int vc_ctx_create(uint32_t, void __user *);
-+extern int vc_ctx_migrate(struct vx_info *, void __user *);
++/* ipc resource limits */
+
-+#endif /* __KERNEL__ */
++#define vx_ipcmsg_add(v, u, a) \
++ vx_add_cres(v, a, u, RLIMIT_MSGQUEUE)
+
++#define vx_ipcmsg_sub(v, u, a) \
++ vx_sub_cres(v, a, u, RLIMIT_MSGQUEUE)
+
-+/* flag commands */
++#define vx_ipcmsg_avail(v, a) \
++ vx_cres_avail(v, a, RLIMIT_MSGQUEUE)
+
-+#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;
-+};
++#define vx_ipcshm_add(v, k, a) \
++ vx_add_cres(v, a, (void *)(long)(k), VLIMIT_SHMEM)
+
-+#ifdef __KERNEL__
-+extern int vc_get_cflags(struct vx_info *, void __user *);
-+extern int vc_set_cflags(struct vx_info *, void __user *);
++#define vx_ipcshm_sub(v, k, a) \
++ vx_sub_cres(v, a, (void *)(long)(k), VLIMIT_SHMEM)
+
-+#endif /* __KERNEL__ */
++#define vx_ipcshm_avail(v, a) \
++ vx_cres_avail(v, a, VLIMIT_SHMEM)
+
+
-+/* context caps commands */
++#define vx_semary_inc(a) \
++ vx_acc_cres(current_vx_info(), 1, a, VLIMIT_SEMARY)
+
-+#define VCMD_get_ccaps VC_CMD(FLAGS, 3, 1)
-+#define VCMD_set_ccaps VC_CMD(FLAGS, 4, 1)
++#define vx_semary_dec(a) \
++ vx_acc_cres(current_vx_info(), -1, a, VLIMIT_SEMARY)
+
-+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 *);
++#define vx_nsems_add(a,n) \
++ vx_add_cres(current_vx_info(), n, a, VLIMIT_NSEMS)
+
-+#endif /* __KERNEL__ */
++#define vx_nsems_sub(a,n) \
++ vx_sub_cres(current_vx_info(), n, a, VLIMIT_NSEMS)
+
+
-+/* bcaps commands */
++#else
++#warning duplicate inclusion
++#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_memory.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_memory.h
+--- linux-2.6.38-rc8/include/linux/vs_memory.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_memory.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,58 @@
++#ifndef _VS_MEMORY_H
++#define _VS_MEMORY_H
+
-+#define VCMD_get_bcaps VC_CMD(FLAGS, 9, 0)
-+#define VCMD_set_bcaps VC_CMD(FLAGS, 10, 0)
++#include "vserver/limit.h"
++#include "vserver/base.h"
++#include "vserver/context.h"
++#include "vserver/debug.h"
++#include "vserver/context.h"
++#include "vserver/limit_int.h"
+
-+struct vcmd_bcaps {
-+ uint64_t bcaps;
-+ uint64_t bmask;
++enum {
++ VXPT_UNKNOWN = 0,
++ VXPT_ANON,
++ VXPT_NONE,
++ VXPT_FILE,
++ VXPT_SWAP,
++ VXPT_WRITE
+};
+
-+#ifdef __KERNEL__
-+extern int vc_get_bcaps(struct vx_info *, void __user *);
-+extern int vc_set_bcaps(struct vx_info *, void __user *);
++#if 0
++#define vx_page_fault(mm, vma, type, ret)
++#else
+
-+#endif /* __KERNEL__ */
++static inline
++void __vx_page_fault(struct mm_struct *mm,
++ struct vm_area_struct *vma, int type, int ret)
++{
++ struct vx_info *vxi = mm->mm_vx_info;
++ int what;
++/*
++ static char *page_type[6] =
++ { "UNKNOWN", "ANON", "NONE", "FILE", "SWAP", "WRITE" };
++ static char *page_what[4] =
++ { "FAULT_OOM", "FAULT_SIGBUS", "FAULT_MINOR", "FAULT_MAJOR" };
++*/
+
++ if (!vxi)
++ return;
+
-+/* umask commands */
++ what = (ret & 0x3);
+
-+#define VCMD_get_umask VC_CMD(FLAGS, 13, 0)
-+#define VCMD_set_umask VC_CMD(FLAGS, 14, 0)
++/* printk("[%d] page[%d][%d] %2x %s %s\n", vxi->vx_id,
++ type, what, ret, page_type[type], page_what[what]);
++*/
++ if (ret & VM_FAULT_WRITE)
++ what |= 0x4;
++ atomic_inc(&vxi->cacct.page[type][what]);
++}
+
-+struct vcmd_umask {
-+ uint64_t umask;
-+ uint64_t mask;
-+};
++#define vx_page_fault(mm, vma, type, ret) __vx_page_fault(mm, vma, type, ret)
++#endif
+
-+#ifdef __KERNEL__
-+extern int vc_get_umask(struct vx_info *, void __user *);
-+extern int vc_set_umask(struct vx_info *, void __user *);
+
-+#endif /* __KERNEL__ */
++extern unsigned long vx_badness(struct task_struct *task, struct mm_struct *mm);
+
++#else
++#warning duplicate inclusion
++#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_network.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_network.h
+--- linux-2.6.38-rc8/include/linux/vs_network.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_network.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,169 @@
++#ifndef _NX_VS_NETWORK_H
++#define _NX_VS_NETWORK_H
+
-+/* OOM badness */
++#include "vserver/context.h"
++#include "vserver/network.h"
++#include "vserver/base.h"
++#include "vserver/check.h"
++#include "vserver/debug.h"
+
-+#define VCMD_get_badness VC_CMD(MEMCTRL, 5, 0)
-+#define VCMD_set_badness VC_CMD(MEMCTRL, 6, 0)
++#include <linux/sched.h>
+
-+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 *);
++#define get_nx_info(i) __get_nx_info(i, __FILE__, __LINE__)
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CONTEXT_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/context.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/context.h
---- linux-2.6.37/include/linux/vserver/context.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/context.h 2011-01-31 21:05:40.000000000 +0100
-@@ -0,0 +1,190 @@
-+#ifndef _VX_CONTEXT_H
-+#define _VX_CONTEXT_H
++static inline struct nx_info *__get_nx_info(struct nx_info *nxi,
++ const char *_file, int _line)
++{
++ if (!nxi)
++ return NULL;
+
-+#include <linux/types.h>
-+#include <linux/capability.h>
++ vxlprintk(VXD_CBIT(nid, 2), "get_nx_info(%p[#%d.%d])",
++ nxi, nxi ? nxi->nx_id : 0,
++ nxi ? atomic_read(&nxi->nx_usecnt) : 0,
++ _file, _line);
+
++ atomic_inc(&nxi->nx_usecnt);
++ return nxi;
++}
+
-+/* context flags */
+
-+#define VXF_INFO_SCHED 0x00000002
-+#define VXF_INFO_NPROC 0x00000004
-+#define VXF_INFO_PRIVATE 0x00000008
++extern void free_nx_info(struct nx_info *);
+
-+#define VXF_INFO_INIT 0x00000010
-+#define VXF_INFO_HIDE 0x00000020
-+#define VXF_INFO_ULIMIT 0x00000040
-+#define VXF_INFO_NSPACE 0x00000080
++#define put_nx_info(i) __put_nx_info(i, __FILE__, __LINE__)
+
-+#define VXF_SCHED_HARD 0x00000100
-+#define VXF_SCHED_PRIO 0x00000200
-+#define VXF_SCHED_PAUSE 0x00000400
++static inline void __put_nx_info(struct nx_info *nxi, const char *_file, int _line)
++{
++ if (!nxi)
++ return;
+
-+#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
++ vxlprintk(VXD_CBIT(nid, 2), "put_nx_info(%p[#%d.%d])",
++ nxi, nxi ? nxi->nx_id : 0,
++ nxi ? atomic_read(&nxi->nx_usecnt) : 0,
++ _file, _line);
+
-+#define VXF_HIDE_MOUNT 0x01000000
-+/* was VXF_HIDE_NETIF 0x02000000 */
-+#define VXF_HIDE_VINFO 0x04000000
++ if (atomic_dec_and_test(&nxi->nx_usecnt))
++ free_nx_info(nxi);
++}
+
-+#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 init_nx_info(p, i) __init_nx_info(p, i, __FILE__, __LINE__)
+
-+#define VXF_FORK_RSS (1ULL << 48)
-+#define VXF_PROLIFIC (1ULL << 49)
++static inline void __init_nx_info(struct nx_info **nxp, struct nx_info *nxi,
++ const char *_file, int _line)
++{
++ if (nxi) {
++ vxlprintk(VXD_CBIT(nid, 3),
++ "init_nx_info(%p[#%d.%d])",
++ nxi, nxi ? nxi->nx_id : 0,
++ nxi ? atomic_read(&nxi->nx_usecnt) : 0,
++ _file, _line);
+
-+#define VXF_IGNEG_NICE (1ULL << 52)
++ atomic_inc(&nxi->nx_usecnt);
++ }
++ *nxp = nxi;
++}
+
-+#define VXF_ONE_TIME (0x0007ULL << 32)
+
-+#define VXF_INIT_SET (VXF_STATE_SETUP | VXF_STATE_INIT | VXF_STATE_ADMIN)
++#define set_nx_info(p, i) __set_nx_info(p, i, __FILE__, __LINE__)
+
++static inline void __set_nx_info(struct nx_info **nxp, struct nx_info *nxi,
++ const char *_file, int _line)
++{
++ struct nx_info *nxo;
+
-+/* context migration */
++ if (!nxi)
++ return;
+
-+#define VXM_SET_INIT 0x00000001
-+#define VXM_SET_REAPER 0x00000002
++ vxlprintk(VXD_CBIT(nid, 3), "set_nx_info(%p[#%d.%d])",
++ nxi, nxi ? nxi->nx_id : 0,
++ nxi ? atomic_read(&nxi->nx_usecnt) : 0,
++ _file, _line);
+
-+/* context caps */
++ atomic_inc(&nxi->nx_usecnt);
++ nxo = xchg(nxp, nxi);
++ BUG_ON(nxo);
++}
+
-+#define VXC_CAP_MASK 0x00000000
++#define clr_nx_info(p) __clr_nx_info(p, __FILE__, __LINE__)
+
-+#define VXC_SET_UTSNAME 0x00000001
-+#define VXC_SET_RLIMIT 0x00000002
-+#define VXC_FS_SECURITY 0x00000004
-+#define VXC_FS_TRUSTED 0x00000008
-+#define VXC_TIOCSTI 0x00000010
++static inline void __clr_nx_info(struct nx_info **nxp,
++ const char *_file, int _line)
++{
++ struct nx_info *nxo;
+
-+/* was VXC_RAW_ICMP 0x00000100 */
-+#define VXC_SYSLOG 0x00001000
-+#define VXC_OOM_ADJUST 0x00002000
-+#define VXC_AUDIT_CONTROL 0x00004000
++ nxo = xchg(nxp, NULL);
++ if (!nxo)
++ return;
+
-+#define VXC_SECURE_MOUNT 0x00010000
-+#define VXC_SECURE_REMOUNT 0x00020000
-+#define VXC_BINARY_MOUNT 0x00040000
++ vxlprintk(VXD_CBIT(nid, 3), "clr_nx_info(%p[#%d.%d])",
++ nxo, nxo ? nxo->nx_id : 0,
++ nxo ? atomic_read(&nxo->nx_usecnt) : 0,
++ _file, _line);
+
-+#define VXC_QUOTA_CTL 0x00100000
-+#define VXC_ADMIN_MAPPER 0x00200000
-+#define VXC_ADMIN_CLOOP 0x00400000
++ if (atomic_dec_and_test(&nxo->nx_usecnt))
++ free_nx_info(nxo);
++}
+
-+#define VXC_KTHREAD 0x01000000
-+#define VXC_NAMESPACE 0x02000000
+
++#define claim_nx_info(v, p) __claim_nx_info(v, p, __FILE__, __LINE__)
+
-+#ifdef __KERNEL__
++static inline void __claim_nx_info(struct nx_info *nxi,
++ struct task_struct *task, const char *_file, int _line)
++{
++ vxlprintk(VXD_CBIT(nid, 3), "claim_nx_info(%p[#%d.%d.%d]) %p",
++ nxi, nxi ? nxi->nx_id : 0,
++ nxi?atomic_read(&nxi->nx_usecnt):0,
++ nxi?atomic_read(&nxi->nx_tasks):0,
++ task, _file, _line);
+
-+#include <linux/list.h>
-+#include <linux/spinlock.h>
-+#include <linux/rcupdate.h>
++ atomic_inc(&nxi->nx_tasks);
++}
+
-+#include "limit_def.h"
-+#include "sched_def.h"
-+#include "cvirt_def.h"
-+#include "cacct_def.h"
-+#include "device_def.h"
+
-+#define VX_SPACES 2
++extern void unhash_nx_info(struct nx_info *);
+
-+struct _vx_info_pc {
-+ struct _vx_sched_pc sched_pc;
-+ struct _vx_cvirt_pc cvirt_pc;
-+};
++#define release_nx_info(v, p) __release_nx_info(v, p, __FILE__, __LINE__)
+
-+struct _vx_space {
-+ unsigned long vx_nsmask; /* assignment mask */
-+ struct nsproxy *vx_nsproxy; /* private namespaces */
-+ struct fs_struct *vx_fs; /* private namespace fs */
-+// const struct cred *vx_real_cred; /* real task credentials */
-+ const struct cred *vx_cred; /* task credentials */
-+};
++static inline void __release_nx_info(struct nx_info *nxi,
++ struct task_struct *task, const char *_file, int _line)
++{
++ vxlprintk(VXD_CBIT(nid, 3), "release_nx_info(%p[#%d.%d.%d]) %p",
++ nxi, nxi ? nxi->nx_id : 0,
++ nxi ? atomic_read(&nxi->nx_usecnt) : 0,
++ nxi ? atomic_read(&nxi->nx_tasks) : 0,
++ task, _file, _line);
+
-+struct vx_info {
-+ struct hlist_node vx_hlist; /* linked list of contexts */
-+ xid_t vx_id; /* context id */
-+ atomic_t vx_usecnt; /* usage count */
-+ atomic_t vx_tasks; /* tasks count */
-+ struct vx_info *vx_parent; /* parent context */
-+ int vx_state; /* context state */
++ might_sleep();
+
-+ struct _vx_space space[VX_SPACES]; /* namespace store */
++ if (atomic_dec_and_test(&nxi->nx_tasks))
++ unhash_nx_info(nxi);
++}
+
-+ uint64_t vx_flags; /* context flags */
-+ uint64_t vx_ccaps; /* context caps (vserver) */
-+ kernel_cap_t vx_bcaps; /* bounding caps (system) */
-+ unsigned long vx_umask; /* unshare mask (guest) */
+
-+ struct task_struct *vx_reaper; /* guest reaper process */
-+ pid_t vx_initpid; /* PID of guest init */
-+ int64_t vx_badness_bias; /* OOM points bias */
++#define task_get_nx_info(i) __task_get_nx_info(i, __FILE__, __LINE__)
+
-+ struct _vx_limit limit; /* vserver limits */
-+ struct _vx_sched sched; /* vserver scheduler */
-+ struct _vx_cvirt cvirt; /* virtual/bias stuff */
-+ struct _vx_cacct cacct; /* context accounting */
++static __inline__ struct nx_info *__task_get_nx_info(struct task_struct *p,
++ const char *_file, int _line)
++{
++ struct nx_info *nxi;
+
-+ struct _vx_device dmap; /* default device map targets */
++ task_lock(p);
++ vxlprintk(VXD_CBIT(nid, 5), "task_get_nx_info(%p)",
++ p, _file, _line);
++ nxi = __get_nx_info(p->nx_info, _file, _line);
++ task_unlock(p);
++ return nxi;
++}
+
-+#ifndef CONFIG_SMP
-+ struct _vx_info_pc info_pc; /* per cpu data */
-+#else
-+ struct _vx_info_pc *ptr_pc; /* per cpu array */
-+#endif
+
-+ wait_queue_head_t vx_wait; /* context exit waitqueue */
-+ int reboot_cmd; /* last sys_reboot() cmd */
-+ int exit_code; /* last process exit code */
++static inline void exit_nx_info(struct task_struct *p)
++{
++ if (p->nx_info)
++ release_nx_info(p->nx_info, p);
++}
+
-+ char vx_name[65]; /* vserver name */
-+};
+
-+#ifndef CONFIG_SMP
-+#define vx_ptr_pc(vxi) (&(vxi)->info_pc)
-+#define vx_per_cpu(vxi, v, id) vx_ptr_pc(vxi)->v
+#else
-+#define vx_ptr_pc(vxi) ((vxi)->ptr_pc)
-+#define vx_per_cpu(vxi, v, id) per_cpu_ptr(vx_ptr_pc(vxi), id)->v
++#warning duplicate inclusion
+#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_pid.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_pid.h
+--- linux-2.6.38-rc8/include/linux/vs_pid.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_pid.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,95 @@
++#ifndef _VS_PID_H
++#define _VS_PID_H
+
-+#define vx_cpu(vxi, v) vx_per_cpu(vxi, v, smp_processor_id())
++#include "vserver/base.h"
++#include "vserver/check.h"
++#include "vserver/context.h"
++#include "vserver/debug.h"
++#include "vserver/pid.h"
++#include <linux/pid_namespace.h>
+
+
-+struct vx_info_save {
-+ struct vx_info *vxi;
-+ xid_t xid;
-+};
++#define VXF_FAKE_INIT (VXF_INFO_INIT | VXF_STATE_INIT)
+
++static inline
++int vx_proc_task_visible(struct task_struct *task)
++{
++ if ((task->pid == 1) &&
++ !vx_flags(VXF_FAKE_INIT, VXF_FAKE_INIT))
++ /* show a blend through init */
++ goto visible;
++ if (vx_check(vx_task_xid(task), VS_WATCH | VS_IDENT))
++ goto visible;
++ return 0;
++visible:
++ return 1;
++}
+
-+/* status flags */
++#define find_task_by_real_pid(pid) find_task_by_pid_ns(pid, &init_pid_ns)
+
-+#define VXS_HASHED 0x0001
-+#define VXS_PAUSED 0x0010
-+#define VXS_SHUTDOWN 0x0100
-+#define VXS_HELPER 0x1000
-+#define VXS_RELEASED 0x8000
++#if 0
+
++static inline
++struct task_struct *vx_find_proc_task_by_pid(int pid)
++{
++ struct task_struct *task = find_task_by_real_pid(pid);
+
-+extern void claim_vx_info(struct vx_info *, struct task_struct *);
-+extern void release_vx_info(struct vx_info *, struct task_struct *);
++ if (task && !vx_proc_task_visible(task)) {
++ vxdprintk(VXD_CBIT(misc, 6),
++ "dropping task (find) %p[#%u,%u] for %p[#%u,%u]",
++ task, task->xid, task->pid,
++ current, current->xid, current->pid);
++ task = NULL;
++ }
++ return task;
++}
+
-+extern struct vx_info *lookup_vx_info(int);
-+extern struct vx_info *lookup_or_create_vx_info(int);
++#endif
+
-+extern int get_xid_list(int, unsigned int *, int);
-+extern int xid_is_hashed(xid_t);
++static inline
++struct task_struct *vx_get_proc_task(struct inode *inode, struct pid *pid)
++{
++ struct task_struct *task = get_pid_task(pid, PIDTYPE_PID);
+
-+extern int vx_migrate_task(struct task_struct *, struct vx_info *, int);
++ if (task && !vx_proc_task_visible(task)) {
++ vxdprintk(VXD_CBIT(misc, 6),
++ "dropping task (get) %p[#%u,%u] for %p[#%u,%u]",
++ task, task->xid, task->pid,
++ current, current->xid, current->pid);
++ put_task_struct(task);
++ task = NULL;
++ }
++ return task;
++}
+
-+extern long vs_state_change(struct vx_info *, unsigned int);
++#if 0
+
++static inline
++struct task_struct *vx_child_reaper(struct task_struct *p)
++{
++ struct vx_info *vxi = p->vx_info;
++ struct task_struct *reaper = child_reaper(p);
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CONTEXT_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/cvirt_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cvirt_cmd.h
---- linux-2.6.37/include/linux/vserver/cvirt_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cvirt_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,53 @@
-+#ifndef _VX_CVIRT_CMD_H
-+#define _VX_CVIRT_CMD_H
++ if (!vxi)
++ goto out;
+
++ BUG_ON(!p->vx_info->vx_reaper);
+
-+/* virtual host info name commands */
++ /* child reaper for the guest reaper */
++ if (vxi->vx_reaper == p)
++ goto out;
+
-+#define VCMD_set_vhi_name VC_CMD(VHOST, 1, 0)
-+#define VCMD_get_vhi_name VC_CMD(VHOST, 2, 0)
++ reaper = vxi->vx_reaper;
++out:
++ vxdprintk(VXD_CBIT(xid, 7),
++ "vx_child_reaper(%p[#%u,%u]) = %p[#%u,%u]",
++ p, p->xid, p->pid, reaper, reaper->xid, reaper->pid);
++ return reaper;
++}
+
-+struct vcmd_vhi_name_v0 {
-+ uint32_t field;
-+ char name[65];
-+};
++#endif
+
+
-+enum vhi_name_field {
-+ VHIN_CONTEXT = 0,
-+ VHIN_SYSNAME,
-+ VHIN_NODENAME,
-+ VHIN_RELEASE,
-+ VHIN_VERSION,
-+ VHIN_MACHINE,
-+ VHIN_DOMAINNAME,
-+};
++#else
++#warning duplicate inclusion
++#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_sched.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_sched.h
+--- linux-2.6.38-rc8/include/linux/vs_sched.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_sched.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,40 @@
++#ifndef _VS_SCHED_H
++#define _VS_SCHED_H
+
++#include "vserver/base.h"
++#include "vserver/context.h"
++#include "vserver/sched.h"
+
-+#ifdef __KERNEL__
+
-+#include <linux/compiler.h>
++#define MAX_PRIO_BIAS 20
++#define MIN_PRIO_BIAS -20
+
-+extern int vc_set_vhi_name(struct vx_info *, void __user *);
-+extern int vc_get_vhi_name(struct vx_info *, void __user *);
++static inline
++int vx_adjust_prio(struct task_struct *p, int prio, int max_user)
++{
++ struct vx_info *vxi = p->vx_info;
+
-+#endif /* __KERNEL__ */
++ if (vxi)
++ prio += vx_cpu(vxi, sched_pc).prio_bias;
++ return prio;
++}
+
-+#define VCMD_virt_stat VC_CMD(VSTAT, 3, 0)
++static inline void vx_account_user(struct vx_info *vxi,
++ cputime_t cputime, int nice)
++{
++ if (!vxi)
++ return;
++ vx_cpu(vxi, sched_pc).user_ticks += cputime;
++}
+
-+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];
-+};
++static inline void vx_account_system(struct vx_info *vxi,
++ cputime_t cputime, int idle)
++{
++ if (!vxi)
++ return;
++ vx_cpu(vxi, sched_pc).sys_ticks += cputime;
++}
+
-+#ifdef __KERNEL__
-+extern int vc_virt_stat(struct vx_info *, void __user *);
++#else
++#warning duplicate inclusion
++#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_socket.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_socket.h
+--- linux-2.6.38-rc8/include/linux/vs_socket.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_socket.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,67 @@
++#ifndef _VS_SOCKET_H
++#define _VS_SOCKET_H
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CVIRT_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/cvirt_def.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cvirt_def.h
---- linux-2.6.37/include/linux/vserver/cvirt_def.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cvirt_def.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,80 @@
-+#ifndef _VX_CVIRT_DEF_H
-+#define _VX_CVIRT_DEF_H
++#include "vserver/debug.h"
++#include "vserver/base.h"
++#include "vserver/cacct.h"
++#include "vserver/context.h"
++#include "vserver/tag.h"
+
-+#include <linux/jiffies.h>
-+#include <linux/spinlock.h>
-+#include <linux/wait.h>
-+#include <linux/time.h>
-+#include <asm/atomic.h>
+
++/* socket accounting */
+
-+struct _vx_usage_stat {
-+ uint64_t user;
-+ uint64_t nice;
-+ uint64_t system;
-+ uint64_t softirq;
-+ uint64_t irq;
-+ uint64_t idle;
-+ uint64_t iowait;
-+};
++#include <linux/socket.h>
+
-+struct _vx_syslog {
-+ wait_queue_head_t log_wait;
-+ spinlock_t logbuf_lock; /* lock for the log buffer */
++static inline int vx_sock_type(int family)
++{
++ switch (family) {
++ case PF_UNSPEC:
++ return VXA_SOCK_UNSPEC;
++ case PF_UNIX:
++ return VXA_SOCK_UNIX;
++ case PF_INET:
++ return VXA_SOCK_INET;
++ case PF_INET6:
++ return VXA_SOCK_INET6;
++ case PF_PACKET:
++ return VXA_SOCK_PACKET;
++ default:
++ return VXA_SOCK_OTHER;
++ }
++}
+
-+ unsigned long log_start; /* next char to be read by syslog() */
-+ unsigned long con_start; /* next char to be sent to consoles */
-+ unsigned long log_end; /* most-recently-written-char + 1 */
-+ unsigned long logged_chars; /* #chars since last read+clear operation */
++#define vx_acc_sock(v, f, p, s) \
++ __vx_acc_sock(v, f, p, s, __FILE__, __LINE__)
+
-+ char log_buf[1024];
-+};
++static inline void __vx_acc_sock(struct vx_info *vxi,
++ int family, int pos, int size, char *file, int line)
++{
++ if (vxi) {
++ int type = vx_sock_type(family);
+
++ atomic_long_inc(&vxi->cacct.sock[type][pos].count);
++ atomic_long_add(size, &vxi->cacct.sock[type][pos].total);
++ }
++}
+
-+/* context sub struct */
++#define vx_sock_recv(sk, s) \
++ vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 0, s)
++#define vx_sock_send(sk, s) \
++ vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 1, s)
++#define vx_sock_fail(sk, s) \
++ vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 2, s)
+
-+struct _vx_cvirt {
-+ atomic_t nr_threads; /* number of current threads */
-+ atomic_t nr_running; /* number of running threads */
-+ atomic_t nr_uninterruptible; /* number of uninterruptible threads */
+
-+ atomic_t nr_onhold; /* processes on hold */
-+ uint32_t onhold_last; /* jiffies when put on hold */
++#define sock_vx_init(s) do { \
++ (s)->sk_xid = 0; \
++ (s)->sk_vx_info = NULL; \
++ } while (0)
+
-+ struct timespec bias_ts; /* time offset to the host */
-+ struct timespec bias_idle;
-+ struct timespec bias_uptime; /* context creation point */
-+ uint64_t bias_clock; /* offset in clock_t */
++#define sock_nx_init(s) do { \
++ (s)->sk_nid = 0; \
++ (s)->sk_nx_info = NULL; \
++ } while (0)
+
-+ spinlock_t load_lock; /* lock for the load averages */
-+ atomic_t load_updates; /* nr of load updates done so far */
-+ uint32_t load_last; /* last time load was calculated */
-+ uint32_t load[3]; /* load averages 1,5,15 */
++#else
++#warning duplicate inclusion
++#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_tag.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_tag.h
+--- linux-2.6.38-rc8/include/linux/vs_tag.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_tag.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,47 @@
++#ifndef _VS_TAG_H
++#define _VS_TAG_H
+
-+ atomic_t total_forks; /* number of forks so far */
++#include <linux/vserver/tag.h>
+
-+ struct _vx_syslog syslog;
-+};
++/* check conditions */
+
-+struct _vx_cvirt_pc {
-+ struct _vx_usage_stat cpustat;
-+};
++#define DX_ADMIN 0x0001
++#define DX_WATCH 0x0002
++#define DX_HOSTID 0x0008
+
++#define DX_IDENT 0x0010
+
-+#ifdef CONFIG_VSERVER_DEBUG
++#define DX_ARG_MASK 0x0010
+
-+static inline void __dump_vx_cvirt(struct _vx_cvirt *cvirt)
-+{
-+ printk("\t_vx_cvirt:\n");
-+ printk("\t threads: %4d, %4d, %4d, %4d\n",
-+ atomic_read(&cvirt->nr_threads),
-+ atomic_read(&cvirt->nr_running),
-+ atomic_read(&cvirt->nr_uninterruptible),
-+ atomic_read(&cvirt->nr_onhold));
-+ /* add rest here */
-+ printk("\t total_forks = %d\n", atomic_read(&cvirt->total_forks));
-+}
+
-+#endif
++#define dx_task_tag(t) ((t)->tag)
+
-+#endif /* _VX_CVIRT_DEF_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/cvirt.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cvirt.h
---- linux-2.6.37/include/linux/vserver/cvirt.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/cvirt.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,20 @@
-+#ifndef _VX_CVIRT_H
-+#define _VX_CVIRT_H
++#define dx_current_tag() dx_task_tag(current)
+
++#define dx_check(c, m) __dx_check(dx_current_tag(), c, m)
+
-+#ifdef __KERNEL__
++#define dx_weak_check(c, m) ((m) ? dx_check(c, m) : 1)
+
-+struct timespec;
+
-+void vx_vsi_uptime(struct timespec *, struct timespec *);
++/*
++ * 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)
++{
++ if (mode & DX_ARG_MASK) {
++ if ((mode & DX_IDENT) && (id == cid))
++ return 1;
++ }
++ return (((mode & DX_ADMIN) && (cid == 0)) ||
++ ((mode & DX_WATCH) && (cid == 1)) ||
++ ((mode & DX_HOSTID) && (id == 0)));
++}
+
++struct inode;
++int dx_permission(const struct inode *inode, int mask);
+
-+struct vx_info;
+
-+void vx_update_load(struct vx_info *);
++#else
++#warning duplicate inclusion
++#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vs_time.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_time.h
+--- linux-2.6.38-rc8/include/linux/vs_time.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vs_time.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,19 @@
++#ifndef _VS_TIME_H
++#define _VS_TIME_H
+
+
-+int vx_do_syslog(int, char __user *, int);
++/* time faking stuff */
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CVIRT_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/debug_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/debug_cmd.h
---- linux-2.6.37/include/linux/vserver/debug_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/debug_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,58 @@
-+#ifndef _VX_DEBUG_CMD_H
-+#define _VX_DEBUG_CMD_H
++#ifdef CONFIG_VSERVER_VTIME
+
++extern void vx_adjust_timespec(struct timespec *ts);
++extern int vx_settimeofday(struct timespec *ts);
+
-+/* debug commands */
++#else
++#define vx_adjust_timespec(t) do { } while (0)
++#define vx_settimeofday(t) do_settimeofday(t)
++#endif
+
-+#define VCMD_dump_history VC_CMD(DEBUG, 1, 0)
++#else
++#warning duplicate inclusion
++#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/Kbuild linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/Kbuild
+--- linux-2.6.38-rc8/include/linux/vserver/Kbuild 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/Kbuild 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,8 @@
+
-+#define VCMD_read_history VC_CMD(DEBUG, 5, 0)
-+#define VCMD_read_monitor VC_CMD(DEBUG, 6, 0)
++unifdef-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
+
-+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;
-+};
++unifdef-y += switch.h network.h monitor.h inode.h device.h
+
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/base.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/base.h
+--- linux-2.6.38-rc8/include/linux/vserver/base.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/base.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,170 @@
++#ifndef _VX_BASE_H
++#define _VX_BASE_H
+
-+#ifdef __KERNEL__
+
-+#ifdef CONFIG_COMPAT
++/* context state changes */
+
-+#include <asm/compat.h>
++enum {
++ VSC_STARTUP = 1,
++ VSC_SHUTDOWN,
+
-+struct vcmd_read_history_v0_x32 {
-+ uint32_t index;
-+ uint32_t count;
-+ compat_uptr_t data_ptr;
++ VSC_NETUP,
++ VSC_NETDOWN,
+};
+
-+struct vcmd_read_monitor_v0_x32 {
-+ uint32_t index;
-+ uint32_t count;
-+ compat_uptr_t data_ptr;
-+};
+
-+#endif /* CONFIG_COMPAT */
+
-+extern int vc_dump_history(uint32_t);
++#define vx_task_xid(t) ((t)->xid)
+
-+extern int vc_read_history(uint32_t, void __user *);
-+extern int vc_read_monitor(uint32_t, void __user *);
++#define vx_current_xid() vx_task_xid(current)
+
-+#ifdef CONFIG_COMPAT
++#define current_vx_info() (current->vx_info)
+
-+extern int vc_read_history_x32(uint32_t, void __user *);
-+extern int vc_read_monitor_x32(uint32_t, void __user *);
+
-+#endif /* CONFIG_COMPAT */
++#define nx_task_nid(t) ((t)->nid)
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_DEBUG_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/debug.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/debug.h
---- linux-2.6.37/include/linux/vserver/debug.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/debug.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,140 @@
-+#ifndef _VX_DEBUG_H
-+#define _VX_DEBUG_H
++#define nx_current_nid() nx_task_nid(current)
+
++#define current_nx_info() (current->nx_info)
+
-+#define VXD_CBIT(n, m) (vx_debug_ ## n & (1 << (m)))
-+#define VXD_CMIN(n, m) (vx_debug_ ## n > (m))
-+#define VXD_MASK(n, m) (vx_debug_ ## n & (m))
+
-+#define VXD_DEV(d) (d), (d)->bd_inode->i_ino, \
-+ imajor((d)->bd_inode), iminor((d)->bd_inode)
-+#define VXF_DEV "%p[%lu,%d:%d]"
++/* generic flag merging */
+
-+#if defined(CONFIG_QUOTES_UTF8)
-+#define VS_Q_LQM "\xc2\xbb"
-+#define VS_Q_RQM "\xc2\xab"
-+#elif defined(CONFIG_QUOTES_ASCII)
-+#define VS_Q_LQM "\x27"
-+#define VS_Q_RQM "\x27"
-+#else
-+#define VS_Q_LQM "\xbb"
-+#define VS_Q_RQM "\xab"
-+#endif
++#define vs_check_flags(v, m, f) (((v) & (m)) ^ (f))
+
-+#define VS_Q(f) VS_Q_LQM f VS_Q_RQM
++#define vs_mask_flags(v, f, m) (((v) & ~(m)) | ((f) & (m)))
+
++#define vs_mask_mask(v, f, m) (((v) & ~(m)) | ((v) & (f) & (m)))
+
-+#define vxd_path(p) \
-+ ({ static char _buffer[PATH_MAX]; \
-+ d_path(p, _buffer, sizeof(_buffer)); })
++#define vs_check_bit(v, n) ((v) & (1LL << (n)))
+
-+#define vxd_cond_path(n) \
-+ ((n) ? vxd_path(&(n)->path) : "<null>" )
+
++/* context flags */
+
-+#ifdef CONFIG_VSERVER_DEBUG
++#define __vx_flags(v) ((v) ? (v)->vx_flags : 0)
+
-+extern unsigned int vx_debug_switch;
-+extern unsigned int vx_debug_xid;
-+extern unsigned int vx_debug_nid;
-+extern unsigned int vx_debug_tag;
-+extern unsigned int vx_debug_net;
-+extern unsigned int vx_debug_limit;
-+extern unsigned int vx_debug_cres;
-+extern unsigned int vx_debug_dlim;
-+extern unsigned int vx_debug_quota;
-+extern unsigned int vx_debug_cvirt;
-+extern unsigned int vx_debug_space;
-+extern unsigned int vx_debug_misc;
++#define vx_current_flags() __vx_flags(current_vx_info())
+
++#define vx_info_flags(v, m, f) \
++ vs_check_flags(__vx_flags(v), m, f)
+
-+#define VX_LOGLEVEL "vxD: "
-+#define VX_PROC_FMT "%p: "
-+#define VX_PROCESS current
++#define task_vx_flags(t, m, f) \
++ ((t) && vx_info_flags((t)->vx_info, m, f))
+
-+#define vxdprintk(c, f, x...) \
-+ do { \
-+ if (c) \
-+ printk(VX_LOGLEVEL VX_PROC_FMT f "\n", \
-+ VX_PROCESS , ##x); \
-+ } while (0)
++#define vx_flags(m, f) vx_info_flags(current_vx_info(), m, f)
+
-+#define vxlprintk(c, f, x...) \
-+ do { \
-+ if (c) \
-+ printk(VX_LOGLEVEL f " @%s:%d\n", x); \
-+ } while (0)
+
-+#define vxfprintk(c, f, x...) \
-+ do { \
-+ if (c) \
-+ printk(VX_LOGLEVEL f " %s@%s:%d\n", x); \
-+ } while (0)
++/* context caps */
+
++#define __vx_ccaps(v) ((v) ? (v)->vx_ccaps : 0)
+
-+struct vx_info;
++#define vx_current_ccaps() __vx_ccaps(current_vx_info())
+
-+void dump_vx_info(struct vx_info *, int);
-+void dump_vx_info_inactive(int);
++#define vx_info_ccaps(v, c) (__vx_ccaps(v) & (c))
+
-+#else /* CONFIG_VSERVER_DEBUG */
++#define vx_ccaps(c) vx_info_ccaps(current_vx_info(), (c))
+
-+#define vx_debug_switch 0
-+#define vx_debug_xid 0
-+#define vx_debug_nid 0
-+#define vx_debug_tag 0
-+#define vx_debug_net 0
-+#define vx_debug_limit 0
-+#define vx_debug_cres 0
-+#define vx_debug_dlim 0
-+#define vx_debug_cvirt 0
+
-+#define vxdprintk(x...) do { } while (0)
-+#define vxlprintk(x...) do { } while (0)
-+#define vxfprintk(x...) do { } while (0)
+
-+#endif /* CONFIG_VSERVER_DEBUG */
++/* network flags */
+
++#define __nx_flags(n) ((n) ? (n)->nx_flags : 0)
+
-+#ifdef CONFIG_VSERVER_WARN
++#define nx_current_flags() __nx_flags(current_nx_info())
+
-+#define VX_WARNLEVEL KERN_WARNING "vxW: "
-+#define VX_WARN_TASK "[" VS_Q("%s") ",%u:#%u|%u|%u] "
-+#define VX_WARN_XID "[xid #%u] "
-+#define VX_WARN_NID "[nid #%u] "
-+#define VX_WARN_TAG "[tag #%u] "
++#define nx_info_flags(n, m, f) \
++ vs_check_flags(__nx_flags(n), m, f)
+
-+#define vxwprintk(c, f, x...) \
-+ do { \
-+ if (c) \
-+ printk(VX_WARNLEVEL f "\n", ##x); \
-+ } while (0)
++#define task_nx_flags(t, m, f) \
++ ((t) && nx_info_flags((t)->nx_info, m, f))
+
-+#else /* CONFIG_VSERVER_WARN */
++#define nx_flags(m, f) nx_info_flags(current_nx_info(), m, f)
+
-+#define vxwprintk(x...) do { } while (0)
+
-+#endif /* CONFIG_VSERVER_WARN */
++/* network caps */
+
-+#define vxwprintk_task(c, f, x...) \
-+ vxwprintk(c, VX_WARN_TASK f, \
-+ current->comm, current->pid, \
-+ 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...) \
-+ vxwprintk(c, VX_WARN_NID f, current->nid, x)
-+#define vxwprintk_tag(c, f, x...) \
-+ vxwprintk(c, VX_WARN_TAG f, current->tag, x)
++#define __nx_ncaps(n) ((n) ? (n)->nx_ncaps : 0)
+
-+#ifdef CONFIG_VSERVER_DEBUG
-+#define vxd_assert_lock(l) assert_spin_locked(l)
-+#define vxd_assert(c, f, x...) vxlprintk(!(c), \
-+ "assertion [" f "] failed.", ##x, __FILE__, __LINE__)
-+#else
-+#define vxd_assert_lock(l) do { } while (0)
-+#define vxd_assert(c, f, x...) do { } while (0)
-+#endif
++#define nx_current_ncaps() __nx_ncaps(current_nx_info())
+
++#define nx_info_ncaps(n, c) (__nx_ncaps(n) & (c))
+
-+#endif /* _VX_DEBUG_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/device_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/device_cmd.h
---- linux-2.6.37/include/linux/vserver/device_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/device_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,44 @@
-+#ifndef _VX_DEVICE_CMD_H
-+#define _VX_DEVICE_CMD_H
++#define nx_ncaps(c) nx_info_ncaps(current_nx_info(), c)
+
+
-+/* device vserver commands */
++/* context mask capabilities */
+
-+#define VCMD_set_mapping VC_CMD(DEVICE, 1, 0)
-+#define VCMD_unset_mapping VC_CMD(DEVICE, 2, 0)
++#define __vx_mcaps(v) ((v) ? (v)->vx_ccaps >> 32UL : ~0 )
+
-+struct vcmd_set_mapping_v0 {
-+ const char __user *device;
-+ const char __user *target;
-+ uint32_t flags;
-+};
++#define vx_info_mcaps(v, c) (__vx_mcaps(v) & (c))
+
++#define vx_mcaps(c) vx_info_mcaps(current_vx_info(), c)
+
-+#ifdef __KERNEL__
+
-+#ifdef CONFIG_COMPAT
++/* context bcap mask */
+
-+#include <asm/compat.h>
++#define __vx_bcaps(v) ((v)->vx_bcaps)
+
-+struct vcmd_set_mapping_v0_x32 {
-+ compat_uptr_t device_ptr;
-+ compat_uptr_t target_ptr;
-+ uint32_t flags;
-+};
++#define vx_current_bcaps() __vx_bcaps(current_vx_info())
+
-+#endif /* CONFIG_COMPAT */
+
-+#include <linux/compiler.h>
++/* mask given bcaps */
+
-+extern int vc_set_mapping(struct vx_info *, void __user *);
-+extern int vc_unset_mapping(struct vx_info *, void __user *);
++#define vx_info_mbcaps(v, c) ((v) ? cap_intersect(__vx_bcaps(v), c) : c)
+
-+#ifdef CONFIG_COMPAT
++#define vx_mbcaps(c) vx_info_mbcaps(current_vx_info(), c)
+
-+extern int vc_set_mapping_x32(struct vx_info *, void __user *);
-+extern int vc_unset_mapping_x32(struct vx_info *, void __user *);
+
-+#endif /* CONFIG_COMPAT */
++/* masked cap_bset */
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_DEVICE_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/device_def.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/device_def.h
---- linux-2.6.37/include/linux/vserver/device_def.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/device_def.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,17 @@
-+#ifndef _VX_DEVICE_DEF_H
-+#define _VX_DEVICE_DEF_H
++#define vx_info_cap_bset(v) vx_info_mbcaps(v, current->cap_bset)
+
-+#include <linux/types.h>
++#define vx_current_cap_bset() vx_info_cap_bset(current_vx_info())
+
-+struct vx_dmap_target {
-+ dev_t target;
-+ uint32_t flags;
-+};
++#if 0
++#define vx_info_mbcap(v, b) \
++ (!vx_info_flags(v, VXF_STATE_SETUP, 0) ? \
++ vx_info_bcaps(v, b) : (b))
+
-+struct _vx_device {
-+#ifdef CONFIG_VSERVER_DEVICE
-+ struct vx_dmap_target targets[2];
++#define task_vx_mbcap(t, b) \
++ vx_info_mbcap((t)->vx_info, (t)->b)
++
++#define vx_mbcap(b) task_vx_mbcap(current, b)
+#endif
-+};
+
-+#endif /* _VX_DEVICE_DEF_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/device.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/device.h
---- linux-2.6.37/include/linux/vserver/device.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/device.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,15 @@
-+#ifndef _VX_DEVICE_H
-+#define _VX_DEVICE_H
++#define vx_cap_raised(v, c, f) cap_raised(vx_info_mbcaps(v, c), f)
+
++#define vx_capable(b, c) (capable(b) || \
++ (cap_raised(current_cap(), b) && vx_ccaps(c)))
+
-+#define DATTR_CREATE 0x00000001
-+#define DATTR_OPEN 0x00000002
++#define nx_capable(b, c) (capable(b) || \
++ (cap_raised(current_cap(), b) && nx_ncaps(c)))
+
-+#define DATTR_REMAP 0x00000010
++#define vx_task_initpid(t, n) \
++ ((t)->vx_info && \
++ ((t)->vx_info->vx_initpid == (n)))
+
-+#define DATTR_MASK 0x00000013
++#define vx_current_initpid(n) vx_task_initpid(current, n)
+
+
-+#else /* _VX_DEVICE_H */
-+#warning duplicate inclusion
-+#endif /* _VX_DEVICE_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/dlimit_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/dlimit_cmd.h
---- linux-2.6.37/include/linux/vserver/dlimit_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/dlimit_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,109 @@
-+#ifndef _VX_DLIMIT_CMD_H
-+#define _VX_DLIMIT_CMD_H
++/* context unshare mask */
+
++#define __vx_umask(v) ((v)->vx_umask)
+
-+/* dlimit vserver commands */
++#define vx_current_umask() __vx_umask(current_vx_info())
+
-+#define VCMD_add_dlimit VC_CMD(DLIMIT, 1, 0)
-+#define VCMD_rem_dlimit VC_CMD(DLIMIT, 2, 0)
++#define vx_can_unshare(b, f) (capable(b) || \
++ (cap_raised(current_cap(), b) && \
++ !((f) & ~vx_current_umask())))
+
-+#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;
-+};
++#define __vx_state(v) ((v) ? ((v)->vx_state) : 0)
+
-+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 vx_info_state(v, m) (__vx_state(v) & (m))
+
-+#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 __nx_state(n) ((n) ? ((n)->nx_state) : 0)
+
-+#define DLIMF_SHIFT 0x10
++#define nx_info_state(n, m) (__nx_state(n) & (m))
+
-+#define DLIMS_USED 0
-+#define DLIMS_TOTAL 2
++#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/cacct.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cacct.h
+--- linux-2.6.38-rc8/include/linux/vserver/cacct.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cacct.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,15 @@
++#ifndef _VX_CACCT_H
++#define _VX_CACCT_H
+
-+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;
++enum sock_acc_field {
++ VXA_SOCK_UNSPEC = 0,
++ VXA_SOCK_UNIX,
++ VXA_SOCK_INET,
++ VXA_SOCK_INET6,
++ VXA_SOCK_PACKET,
++ VXA_SOCK_OTHER,
++ VXA_SOCK_SIZE /* array size */
++};
+
-+ 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 /* _VX_CACCT_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/cacct_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cacct_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/cacct_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cacct_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,23 @@
++#ifndef _VX_CACCT_CMD_H
++#define _VX_CACCT_CMD_H
+
-+#ifdef __KERNEL__
+
-+#ifdef CONFIG_COMPAT
++/* virtual host info name commands */
+
-+#include <asm/compat.h>
++#define VCMD_sock_stat VC_CMD(VSTAT, 5, 0)
+
-+struct vcmd_ctx_dlimit_base_v0_x32 {
-+ compat_uptr_t name_ptr;
-+ uint32_t flags;
++struct vcmd_sock_stat_v0 {
++ uint32_t field;
++ uint32_t count[3];
++ uint64_t total[3];
+};
+
-+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 */
++#ifdef __KERNEL__
+
+#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_sock_stat(struct vx_info *, void __user *);
+
-+extern int vc_set_dlimit(uint32_t, void __user *);
-+extern int vc_get_dlimit(uint32_t, void __user *);
++#endif /* __KERNEL__ */
++#endif /* _VX_CACCT_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/cacct_def.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cacct_def.h
+--- linux-2.6.38-rc8/include/linux/vserver/cacct_def.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cacct_def.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,43 @@
++#ifndef _VX_CACCT_DEF_H
++#define _VX_CACCT_DEF_H
+
-+#ifdef CONFIG_COMPAT
++#include <asm/atomic.h>
++#include <linux/vserver/cacct.h>
+
-+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 *);
++struct _vx_sock_acc {
++ atomic_long_t count;
++ atomic_long_t total;
++};
+
-+#endif /* CONFIG_COMPAT */
++/* context sub struct */
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_DLIMIT_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/dlimit.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/dlimit.h
---- linux-2.6.37/include/linux/vserver/dlimit.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/dlimit.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,54 @@
-+#ifndef _VX_DLIMIT_H
-+#define _VX_DLIMIT_H
++struct _vx_cacct {
++ struct _vx_sock_acc sock[VXA_SOCK_SIZE][3];
++ atomic_t slab[8];
++ atomic_t page[6][8];
++};
+
-+#include "switch.h"
++#ifdef CONFIG_VSERVER_DEBUG
+
++static inline void __dump_vx_cacct(struct _vx_cacct *cacct)
++{
++ int i, j;
+
-+#ifdef __KERNEL__
++ printk("\t_vx_cacct:");
++ for (i = 0; i < 6; i++) {
++ struct _vx_sock_acc *ptr = cacct->sock[i];
+
-+/* keep in sync with CDLIM_INFINITY */
++ printk("\t [%d] =", i);
++ for (j = 0; j < 3; j++) {
++ printk(" [%d] = %8lu, %8lu", j,
++ atomic_long_read(&ptr[j].count),
++ atomic_long_read(&ptr[j].total));
++ }
++ printk("\n");
++ }
++}
+
-+#define DLIM_INFINITY (~0ULL)
++#endif
+
-+#include <linux/spinlock.h>
-+#include <linux/rcupdate.h>
++#endif /* _VX_CACCT_DEF_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/cacct_int.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cacct_int.h
+--- linux-2.6.38-rc8/include/linux/vserver/cacct_int.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cacct_int.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,21 @@
++#ifndef _VX_CACCT_INT_H
++#define _VX_CACCT_INT_H
+
-+struct super_block;
+
-+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 */
-+ atomic_t dl_usecnt; /* usage count */
-+ atomic_t dl_refcnt; /* reference count */
++#ifdef __KERNEL__
+
-+ struct super_block *dl_sb; /* associated superblock */
++static inline
++unsigned long vx_sock_count(struct _vx_cacct *cacct, int type, int pos)
++{
++ return atomic_long_read(&cacct->sock[type][pos].count);
++}
+
-+ spinlock_t dl_lock; /* protect the values */
+
-+ unsigned long long dl_space_used; /* used space in bytes */
-+ unsigned long long dl_space_total; /* maximum space in bytes */
-+ unsigned long dl_inodes_used; /* used inodes */
-+ unsigned long dl_inodes_total; /* maximum inodes */
++static inline
++unsigned long vx_sock_total(struct _vx_cacct *cacct, int type, int pos)
++{
++ return atomic_long_read(&cacct->sock[type][pos].total);
++}
+
-+ unsigned int dl_nrlmult; /* non root limit mult */
-+};
++#endif /* __KERNEL__ */
++#endif /* _VX_CACCT_INT_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/check.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/check.h
+--- linux-2.6.38-rc8/include/linux/vserver/check.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/check.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,89 @@
++#ifndef _VS_CHECK_H
++#define _VS_CHECK_H
+
-+struct rcu_head;
+
-+extern void rcu_free_dl_info(struct rcu_head *);
-+extern void unhash_dl_info(struct dl_info *);
++#define MAX_S_CONTEXT 65535 /* Arbitrary limit */
+
-+extern struct dl_info *locate_dl_info(struct super_block *, tag_t);
++#ifdef CONFIG_VSERVER_DYNAMIC_IDS
++#define MIN_D_CONTEXT 49152 /* dynamic contexts start here */
++#else
++#define MIN_D_CONTEXT 65536
++#endif
+
++/* check conditions */
+
-+struct kstatfs;
++#define VS_ADMIN 0x0001
++#define VS_WATCH 0x0002
++#define VS_HIDE 0x0004
++#define VS_HOSTID 0x0008
+
-+extern void vx_vsi_statfs(struct super_block *, struct kstatfs *);
++#define VS_IDENT 0x0010
++#define VS_EQUIV 0x0020
++#define VS_PARENT 0x0040
++#define VS_CHILD 0x0080
+
-+typedef uint64_t dlsize_t;
++#define VS_ARG_MASK 0x00F0
+
-+#endif /* __KERNEL__ */
-+#else /* _VX_DLIMIT_H */
-+#warning duplicate inclusion
-+#endif /* _VX_DLIMIT_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/global.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/global.h
---- linux-2.6.37/include/linux/vserver/global.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/global.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,19 @@
-+#ifndef _VX_GLOBAL_H
-+#define _VX_GLOBAL_H
++#define VS_DYNAMIC 0x0100
++#define VS_STATIC 0x0200
+
++#define VS_ATR_MASK 0x0F00
+
-+extern atomic_t vx_global_ctotal;
-+extern atomic_t vx_global_cactive;
++#ifdef CONFIG_VSERVER_PRIVACY
++#define VS_ADMIN_P (0)
++#define VS_WATCH_P (0)
++#else
++#define VS_ADMIN_P VS_ADMIN
++#define VS_WATCH_P VS_WATCH
++#endif
+
-+extern atomic_t nx_global_ctotal;
-+extern atomic_t nx_global_cactive;
++#define VS_HARDIRQ 0x1000
++#define VS_SOFTIRQ 0x2000
++#define VS_IRQ 0x4000
+
-+extern atomic_t vs_global_nsproxy;
-+extern atomic_t vs_global_fs;
-+extern atomic_t vs_global_mnt_ns;
-+extern atomic_t vs_global_uts_ns;
-+extern atomic_t vs_global_user_ns;
-+extern atomic_t vs_global_pid_ns;
++#define VS_IRQ_MASK 0xF000
+
++#include <linux/hardirq.h>
+
-+#endif /* _VX_GLOBAL_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/history.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/history.h
---- linux-2.6.37/include/linux/vserver/history.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/history.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,197 @@
-+#ifndef _VX_HISTORY_H
-+#define _VX_HISTORY_H
-+
++/*
++ * check current context for ADMIN/WATCH and
++ * optionally against supplied argument
++ */
++static inline int __vs_check(int cid, int id, unsigned int mode)
++{
++ if (mode & VS_ARG_MASK) {
++ if ((mode & VS_IDENT) && (id == cid))
++ return 1;
++ }
++ if (mode & VS_ATR_MASK) {
++ if ((mode & VS_DYNAMIC) &&
++ (id >= MIN_D_CONTEXT) &&
++ (id <= MAX_S_CONTEXT))
++ return 1;
++ if ((mode & VS_STATIC) &&
++ (id > 1) && (id < MIN_D_CONTEXT))
++ return 1;
++ }
++ if (mode & VS_IRQ_MASK) {
++ if ((mode & VS_IRQ) && unlikely(in_interrupt()))
++ return 1;
++ if ((mode & VS_HARDIRQ) && unlikely(in_irq()))
++ return 1;
++ if ((mode & VS_SOFTIRQ) && unlikely(in_softirq()))
++ return 1;
++ }
++ return (((mode & VS_ADMIN) && (cid == 0)) ||
++ ((mode & VS_WATCH) && (cid == 1)) ||
++ ((mode & VS_HOSTID) && (id == 0)));
++}
+
-+enum {
-+ VXH_UNUSED = 0,
-+ VXH_THROW_OOPS = 1,
++#define vx_check(c, m) __vs_check(vx_current_xid(), c, (m) | VS_IRQ)
+
-+ VXH_GET_VX_INFO,
-+ VXH_PUT_VX_INFO,
-+ VXH_INIT_VX_INFO,
-+ VXH_SET_VX_INFO,
-+ VXH_CLR_VX_INFO,
-+ VXH_CLAIM_VX_INFO,
-+ VXH_RELEASE_VX_INFO,
-+ VXH_ALLOC_VX_INFO,
-+ VXH_DEALLOC_VX_INFO,
-+ VXH_HASH_VX_INFO,
-+ VXH_UNHASH_VX_INFO,
-+ VXH_LOC_VX_INFO,
-+ VXH_LOOKUP_VX_INFO,
-+ VXH_CREATE_VX_INFO,
-+};
++#define vx_weak_check(c, m) ((m) ? vx_check(c, m) : 1)
+
-+struct _vxhe_vxi {
-+ struct vx_info *ptr;
-+ unsigned xid;
-+ unsigned usecnt;
-+ unsigned tasks;
-+};
+
-+struct _vxhe_set_clr {
-+ void *data;
-+};
++#define nx_check(c, m) __vs_check(nx_current_nid(), c, m)
+
-+struct _vxhe_loc_lookup {
-+ unsigned arg;
-+};
++#define nx_weak_check(c, m) ((m) ? nx_check(c, m) : 1)
+
-+struct _vx_hist_entry {
-+ void *loc;
-+ unsigned short seq;
-+ unsigned short type;
-+ struct _vxhe_vxi vxi;
-+ union {
-+ struct _vxhe_set_clr sc;
-+ struct _vxhe_loc_lookup ll;
-+ };
-+};
++#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/context.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/context.h
+--- linux-2.6.38-rc8/include/linux/vserver/context.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/context.h 2011-01-31 22:46:21.000000000 +0100
+@@ -0,0 +1,189 @@
++#ifndef _VX_CONTEXT_H
++#define _VX_CONTEXT_H
+
-+#ifdef CONFIG_VSERVER_HISTORY
++#include <linux/types.h>
++#include <linux/capability.h>
+
-+extern unsigned volatile int vxh_active;
+
-+struct _vx_hist_entry *vxh_advance(void *loc);
++/* context flags */
+
++#define VXF_INFO_SCHED 0x00000002
++#define VXF_INFO_NPROC 0x00000004
++#define VXF_INFO_PRIVATE 0x00000008
+
-+static inline
-+void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi)
-+{
-+ entry->vxi.ptr = vxi;
-+ if (vxi) {
-+ entry->vxi.usecnt = atomic_read(&vxi->vx_usecnt);
-+ entry->vxi.tasks = atomic_read(&vxi->vx_tasks);
-+ entry->vxi.xid = vxi->vx_id;
-+ }
-+}
++#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 __HERE__ current_text_addr()
++#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 __VXH_BODY(__type, __data, __here) \
-+ struct _vx_hist_entry *entry; \
-+ \
-+ preempt_disable(); \
-+ entry = vxh_advance(__here); \
-+ __data; \
-+ entry->type = __type; \
-+ preempt_enable();
++#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)
+
-+ /* pass vxi only */
++#define VXF_SC_HELPER (1ULL << 36)
++#define VXF_REBOOT_KILL (1ULL << 37)
++#define VXF_PERSISTENT (1ULL << 38)
+
-+#define __VXH_SMPL \
-+ __vxh_copy_vxi(entry, vxi)
++#define VXF_FORK_RSS (1ULL << 48)
++#define VXF_PROLIFIC (1ULL << 49)
+
-+static inline
-+void __vxh_smpl(struct vx_info *vxi, int __type, void *__here)
-+{
-+ __VXH_BODY(__type, __VXH_SMPL, __here)
-+}
++#define VXF_IGNEG_NICE (1ULL << 52)
+
-+ /* pass vxi and data (void *) */
++#define VXF_ONE_TIME (0x0007ULL << 32)
+
-+#define __VXH_DATA \
-+ __vxh_copy_vxi(entry, vxi); \
-+ entry->sc.data = data
++#define VXF_INIT_SET (VXF_STATE_SETUP | VXF_STATE_INIT | VXF_STATE_ADMIN)
+
-+static inline
-+void __vxh_data(struct vx_info *vxi, void *data,
-+ int __type, void *__here)
-+{
-+ __VXH_BODY(__type, __VXH_DATA, __here)
-+}
+
-+ /* pass vxi and arg (long) */
++/* context migration */
+
-+#define __VXH_LONG \
-+ __vxh_copy_vxi(entry, vxi); \
-+ entry->ll.arg = arg
++#define VXM_SET_INIT 0x00000001
++#define VXM_SET_REAPER 0x00000002
+
-+static inline
-+void __vxh_long(struct vx_info *vxi, long arg,
-+ int __type, void *__here)
-+{
-+ __VXH_BODY(__type, __VXH_LONG, __here)
-+}
++/* context caps */
+
++#define VXC_CAP_MASK 0x00000000
+
-+static inline
-+void __vxh_throw_oops(void *__here)
-+{
-+ __VXH_BODY(VXH_THROW_OOPS, {}, __here);
-+ /* prevent further acquisition */
-+ vxh_active = 0;
-+}
++#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 vxh_throw_oops() __vxh_throw_oops(__HERE__);
++#define VXC_SECURE_MOUNT 0x00010000
++#define VXC_SECURE_REMOUNT 0x00020000
++#define VXC_BINARY_MOUNT 0x00040000
+
-+#define __vxh_get_vx_info(v, h) __vxh_smpl(v, VXH_GET_VX_INFO, h);
-+#define __vxh_put_vx_info(v, h) __vxh_smpl(v, VXH_PUT_VX_INFO, h);
++#define VXC_QUOTA_CTL 0x00100000
++#define VXC_ADMIN_MAPPER 0x00200000
++#define VXC_ADMIN_CLOOP 0x00400000
+
-+#define __vxh_init_vx_info(v, d, h) \
-+ __vxh_data(v, d, VXH_INIT_VX_INFO, h);
-+#define __vxh_set_vx_info(v, d, h) \
-+ __vxh_data(v, d, VXH_SET_VX_INFO, h);
-+#define __vxh_clr_vx_info(v, d, h) \
-+ __vxh_data(v, d, VXH_CLR_VX_INFO, h);
++#define VXC_KTHREAD 0x01000000
++#define VXC_NAMESPACE 0x02000000
+
-+#define __vxh_claim_vx_info(v, d, h) \
-+ __vxh_data(v, d, VXH_CLAIM_VX_INFO, h);
-+#define __vxh_release_vx_info(v, d, h) \
-+ __vxh_data(v, d, VXH_RELEASE_VX_INFO, h);
+
-+#define vxh_alloc_vx_info(v) \
-+ __vxh_smpl(v, VXH_ALLOC_VX_INFO, __HERE__);
-+#define vxh_dealloc_vx_info(v) \
-+ __vxh_smpl(v, VXH_DEALLOC_VX_INFO, __HERE__);
++#ifdef __KERNEL__
+
-+#define vxh_hash_vx_info(v) \
-+ __vxh_smpl(v, VXH_HASH_VX_INFO, __HERE__);
-+#define vxh_unhash_vx_info(v) \
-+ __vxh_smpl(v, VXH_UNHASH_VX_INFO, __HERE__);
++#include <linux/list.h>
++#include <linux/spinlock.h>
++#include <linux/rcupdate.h>
+
-+#define vxh_loc_vx_info(v, l) \
-+ __vxh_long(v, l, VXH_LOC_VX_INFO, __HERE__);
-+#define vxh_lookup_vx_info(v, l) \
-+ __vxh_long(v, l, VXH_LOOKUP_VX_INFO, __HERE__);
-+#define vxh_create_vx_info(v, l) \
-+ __vxh_long(v, l, VXH_CREATE_VX_INFO, __HERE__);
++#include "limit_def.h"
++#include "sched_def.h"
++#include "cvirt_def.h"
++#include "cacct_def.h"
++#include "device_def.h"
+
-+extern void vxh_dump_history(void);
++#define VX_SPACES 2
+
++struct _vx_info_pc {
++ struct _vx_sched_pc sched_pc;
++ struct _vx_cvirt_pc cvirt_pc;
++};
+
-+#else /* CONFIG_VSERVER_HISTORY */
++struct _vx_space {
++ unsigned long vx_nsmask; /* assignment mask */
++ struct nsproxy *vx_nsproxy; /* private namespaces */
++ struct fs_struct *vx_fs; /* private namespace fs */
++ const struct cred *vx_cred; /* task credentials */
++};
+
-+#define __HERE__ 0
++struct vx_info {
++ struct hlist_node vx_hlist; /* linked list of contexts */
++ xid_t vx_id; /* context id */
++ atomic_t vx_usecnt; /* usage count */
++ atomic_t vx_tasks; /* tasks count */
++ struct vx_info *vx_parent; /* parent context */
++ int vx_state; /* context state */
+
-+#define vxh_throw_oops() do { } while (0)
++ struct _vx_space space[VX_SPACES]; /* namespace store */
+
-+#define __vxh_get_vx_info(v, h) do { } while (0)
-+#define __vxh_put_vx_info(v, h) do { } while (0)
++ uint64_t vx_flags; /* context flags */
++ uint64_t vx_ccaps; /* context caps (vserver) */
++ kernel_cap_t vx_bcaps; /* bounding caps (system) */
++ unsigned long vx_umask; /* unshare mask (guest) */
+
-+#define __vxh_init_vx_info(v, d, h) do { } while (0)
-+#define __vxh_set_vx_info(v, d, h) do { } while (0)
-+#define __vxh_clr_vx_info(v, d, h) do { } while (0)
++ struct task_struct *vx_reaper; /* guest reaper process */
++ pid_t vx_initpid; /* PID of guest init */
++ int64_t vx_badness_bias; /* OOM points bias */
+
-+#define __vxh_claim_vx_info(v, d, h) do { } while (0)
-+#define __vxh_release_vx_info(v, d, h) do { } while (0)
++ struct _vx_limit limit; /* vserver limits */
++ struct _vx_sched sched; /* vserver scheduler */
++ struct _vx_cvirt cvirt; /* virtual/bias stuff */
++ struct _vx_cacct cacct; /* context accounting */
+
-+#define vxh_alloc_vx_info(v) do { } while (0)
-+#define vxh_dealloc_vx_info(v) do { } while (0)
++ struct _vx_device dmap; /* default device map targets */
+
-+#define vxh_hash_vx_info(v) do { } while (0)
-+#define vxh_unhash_vx_info(v) do { } while (0)
++#ifndef CONFIG_SMP
++ struct _vx_info_pc info_pc; /* per cpu data */
++#else
++ struct _vx_info_pc *ptr_pc; /* per cpu array */
++#endif
+
-+#define vxh_loc_vx_info(v, l) do { } while (0)
-+#define vxh_lookup_vx_info(v, l) do { } while (0)
-+#define vxh_create_vx_info(v, l) do { } while (0)
++ wait_queue_head_t vx_wait; /* context exit waitqueue */
++ int reboot_cmd; /* last sys_reboot() cmd */
++ int exit_code; /* last process exit code */
+
-+#define vxh_dump_history() do { } while (0)
++ char vx_name[65]; /* vserver name */
++};
+
++#ifndef CONFIG_SMP
++#define vx_ptr_pc(vxi) (&(vxi)->info_pc)
++#define vx_per_cpu(vxi, v, id) vx_ptr_pc(vxi)->v
++#else
++#define vx_ptr_pc(vxi) ((vxi)->ptr_pc)
++#define vx_per_cpu(vxi, v, id) per_cpu_ptr(vx_ptr_pc(vxi), id)->v
++#endif
+
-+#endif /* CONFIG_VSERVER_HISTORY */
++#define vx_cpu(vxi, v) vx_per_cpu(vxi, v, smp_processor_id())
+
-+#endif /* _VX_HISTORY_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/inode_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/inode_cmd.h
---- linux-2.6.37/include/linux/vserver/inode_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/inode_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,59 @@
-+#ifndef _VX_INODE_CMD_H
-+#define _VX_INODE_CMD_H
+
++struct vx_info_save {
++ struct vx_info *vxi;
++ xid_t xid;
++};
+
-+/* inode vserver commands */
+
-+#define VCMD_get_iattr VC_CMD(INODE, 1, 1)
-+#define VCMD_set_iattr VC_CMD(INODE, 2, 1)
++/* status flags */
+
-+#define VCMD_fget_iattr VC_CMD(INODE, 3, 0)
-+#define VCMD_fset_iattr VC_CMD(INODE, 4, 0)
++#define VXS_HASHED 0x0001
++#define VXS_PAUSED 0x0010
++#define VXS_SHUTDOWN 0x0100
++#define VXS_HELPER 0x1000
++#define VXS_RELEASED 0x8000
+
-+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;
-+};
++extern void claim_vx_info(struct vx_info *, struct task_struct *);
++extern void release_vx_info(struct vx_info *, struct task_struct *);
+
++extern struct vx_info *lookup_vx_info(int);
++extern struct vx_info *lookup_or_create_vx_info(int);
+
-+#ifdef __KERNEL__
++extern int get_xid_list(int, unsigned int *, int);
++extern int xid_is_hashed(xid_t);
+
++extern int vx_migrate_task(struct task_struct *, struct vx_info *, int);
+
-+#ifdef CONFIG_COMPAT
++extern long vs_state_change(struct vx_info *, unsigned int);
+
-+#include <asm/compat.h>
+
-+struct vcmd_ctx_iattr_v1_x32 {
-+ compat_uptr_t name_ptr;
-+ uint32_t tag;
-+ uint32_t flags;
-+ uint32_t mask;
-+};
++#endif /* __KERNEL__ */
++#endif /* _VX_CONTEXT_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/context_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/context_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/context_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/context_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,145 @@
++#ifndef _VX_CONTEXT_CMD_H
++#define _VX_CONTEXT_CMD_H
+
-+#endif /* CONFIG_COMPAT */
+
-+#include <linux/compiler.h>
++/* vinfo commands */
+
-+extern int vc_get_iattr(void __user *);
-+extern int vc_set_iattr(void __user *);
++#define VCMD_task_xid VC_CMD(VINFO, 1, 0)
+
-+extern int vc_fget_iattr(uint32_t, void __user *);
-+extern int vc_fset_iattr(uint32_t, void __user *);
++#ifdef __KERNEL__
++extern int vc_task_xid(uint32_t);
+
-+#ifdef CONFIG_COMPAT
++#endif /* __KERNEL__ */
+
-+extern int vc_get_iattr_x32(void __user *);
-+extern int vc_set_iattr_x32(void __user *);
++#define VCMD_vx_info VC_CMD(VINFO, 5, 0)
+
-+#endif /* CONFIG_COMPAT */
++struct vcmd_vx_info_v0 {
++ uint32_t xid;
++ uint32_t initpid;
++ /* more to come */
++};
++
++#ifdef __KERNEL__
++extern int vc_vx_info(struct vx_info *, void __user *);
+
+#endif /* __KERNEL__ */
-+#endif /* _VX_INODE_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/inode.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/inode.h
---- linux-2.6.37/include/linux/vserver/inode.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/inode.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,39 @@
-+#ifndef _VX_INODE_H
-+#define _VX_INODE_H
+
++#define VCMD_ctx_stat VC_CMD(VSTAT, 0, 0)
+
-+#define IATTR_TAG 0x01000000
++struct vcmd_ctx_stat_v0 {
++ uint32_t usecnt;
++ uint32_t tasks;
++ /* more to come */
++};
+
-+#define IATTR_ADMIN 0x00000001
-+#define IATTR_WATCH 0x00000002
-+#define IATTR_HIDE 0x00000004
-+#define IATTR_FLAGS 0x00000007
++#ifdef __KERNEL__
++extern int vc_ctx_stat(struct vx_info *, void __user *);
+
-+#define IATTR_BARRIER 0x00010000
-+#define IATTR_IXUNLINK 0x00020000
-+#define IATTR_IMMUTABLE 0x00040000
-+#define IATTR_COW 0x00080000
++#endif /* __KERNEL__ */
+
-+#ifdef __KERNEL__
++/* context commands */
+
++#define VCMD_ctx_create_v0 VC_CMD(VPROC, 1, 0)
++#define VCMD_ctx_create VC_CMD(VPROC, 1, 1)
+
-+#ifdef CONFIG_VSERVER_PROC_SECURE
-+#define IATTR_PROC_DEFAULT ( IATTR_ADMIN | IATTR_HIDE )
-+#define IATTR_PROC_SYMLINK ( IATTR_ADMIN )
-+#else
-+#define IATTR_PROC_DEFAULT ( IATTR_ADMIN )
-+#define IATTR_PROC_SYMLINK ( IATTR_ADMIN )
-+#endif
++struct vcmd_ctx_create {
++ uint64_t flagword;
++};
+
-+#define vx_hide_check(c, m) (((m) & IATTR_HIDE) ? vx_check(c, m) : 1)
++#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;
++};
++
++#ifdef __KERNEL__
++extern int vc_ctx_create(uint32_t, void __user *);
++extern int vc_ctx_migrate(struct vx_info *, void __user *);
+
+#endif /* __KERNEL__ */
+
-+/* inode ioctls */
+
-+#define FIOC_GETXFLG _IOR('x', 5, long)
-+#define FIOC_SETXFLG _IOW('x', 6, long)
++/* flag commands */
+
-+#else /* _VX_INODE_H */
-+#warning duplicate inclusion
-+#endif /* _VX_INODE_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/Kbuild linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/Kbuild
---- linux-2.6.37/include/linux/vserver/Kbuild 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/Kbuild 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,8 @@
++#define VCMD_get_cflags VC_CMD(FLAGS, 1, 0)
++#define VCMD_set_cflags VC_CMD(FLAGS, 2, 0)
+
-+unifdef-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
++struct vcmd_ctx_flags_v0 {
++ uint64_t flagword;
++ uint64_t mask;
++};
+
-+unifdef-y += switch.h network.h monitor.h inode.h device.h
++#ifdef __KERNEL__
++extern int vc_get_cflags(struct vx_info *, void __user *);
++extern int vc_set_cflags(struct vx_info *, void __user *);
+
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/limit_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/limit_cmd.h
---- linux-2.6.37/include/linux/vserver/limit_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/limit_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,71 @@
-+#ifndef _VX_LIMIT_CMD_H
-+#define _VX_LIMIT_CMD_H
++#endif /* __KERNEL__ */
+
+
-+/* rlimit vserver commands */
++/* context caps 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)
++#define VCMD_get_ccaps VC_CMD(FLAGS, 3, 1)
++#define VCMD_set_ccaps VC_CMD(FLAGS, 4, 1)
+
-+struct vcmd_ctx_rlimit_v0 {
-+ uint32_t id;
-+ uint64_t minimum;
-+ uint64_t softlimit;
-+ uint64_t maximum;
++struct vcmd_ctx_caps_v1 {
++ uint64_t ccaps;
++ uint64_t cmask;
+};
+
-+struct vcmd_ctx_rlimit_mask_v0 {
-+ uint32_t minimum;
-+ uint32_t softlimit;
-+ uint32_t maximum;
-+};
++#ifdef __KERNEL__
++extern int vc_get_ccaps(struct vx_info *, void __user *);
++extern int vc_set_ccaps(struct vx_info *, void __user *);
+
-+#define VCMD_rlimit_stat VC_CMD(VSTAT, 1, 0)
++#endif /* __KERNEL__ */
+
-+struct vcmd_rlimit_stat_v0 {
-+ uint32_t id;
-+ uint32_t hits;
-+ uint64_t value;
-+ uint64_t minimum;
-+ uint64_t maximum;
-+};
+
-+#define CRLIM_UNSET (0ULL)
-+#define CRLIM_INFINITY (~0ULL)
-+#define CRLIM_KEEP (~1ULL)
++/* 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 *);
+
-+#ifdef CONFIG_IA32_EMULATION
++#endif /* __KERNEL__ */
+
-+struct vcmd_ctx_rlimit_v0_x32 {
-+ uint32_t id;
-+ uint64_t minimum;
-+ uint64_t softlimit;
-+ uint64_t maximum;
-+} __attribute__ ((packed));
+
-+#endif /* CONFIG_IA32_EMULATION */
++/* umask commands */
+
-+#include <linux/compiler.h>
++#define VCMD_get_umask VC_CMD(FLAGS, 13, 0)
++#define VCMD_set_umask VC_CMD(FLAGS, 14, 0)
+
-+extern int vc_get_rlimit_mask(uint32_t, void __user *);
-+extern int vc_get_rlimit(struct vx_info *, void __user *);
-+extern int vc_set_rlimit(struct vx_info *, void __user *);
-+extern int vc_reset_hits(struct vx_info *, void __user *);
-+extern int vc_reset_minmax(struct vx_info *, void __user *);
++struct vcmd_umask {
++ uint64_t umask;
++ uint64_t mask;
++};
+
-+extern int vc_rlimit_stat(struct vx_info *, void __user *);
++#ifdef __KERNEL__
++extern int vc_get_umask(struct vx_info *, void __user *);
++extern int vc_set_umask(struct vx_info *, void __user *);
+
-+#ifdef CONFIG_IA32_EMULATION
++#endif /* __KERNEL__ */
+
-+extern int vc_get_rlimit_x32(struct vx_info *, void __user *);
-+extern int vc_set_rlimit_x32(struct vx_info *, void __user *);
+
-+#endif /* CONFIG_IA32_EMULATION */
++/* 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_LIMIT_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/limit_def.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/limit_def.h
---- linux-2.6.37/include/linux/vserver/limit_def.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/limit_def.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,47 @@
-+#ifndef _VX_LIMIT_DEF_H
-+#define _VX_LIMIT_DEF_H
++#endif /* _VX_CONTEXT_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/cvirt.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cvirt.h
+--- linux-2.6.38-rc8/include/linux/vserver/cvirt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cvirt.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,20 @@
++#ifndef _VX_CVIRT_H
++#define _VX_CVIRT_H
+
-+#include <asm/atomic.h>
-+#include <asm/resource.h>
+
-+#include "limit.h"
++#ifdef __KERNEL__
+
++struct timespec;
+
-+struct _vx_res_limit {
-+ rlim_t soft; /* Context soft limit */
-+ rlim_t hard; /* Context hard limit */
++void vx_vsi_uptime(struct timespec *, struct timespec *);
+
-+ rlim_atomic_t rcur; /* Current value */
-+ rlim_t rmin; /* Context minimum */
-+ rlim_t rmax; /* Context maximum */
+
-+ atomic_t lhit; /* Limit hits */
-+};
++struct vx_info;
+
-+/* context sub struct */
++void vx_update_load(struct vx_info *);
+
-+struct _vx_limit {
-+ struct _vx_res_limit res[NUM_LIMITS];
-+};
+
-+#ifdef CONFIG_VSERVER_DEBUG
++int vx_do_syslog(int, char __user *, int);
+
-+static inline void __dump_vx_limit(struct _vx_limit *limit)
-+{
-+ int i;
++#endif /* __KERNEL__ */
++#endif /* _VX_CVIRT_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/cvirt_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cvirt_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/cvirt_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cvirt_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,53 @@
++#ifndef _VX_CVIRT_CMD_H
++#define _VX_CVIRT_CMD_H
+
-+ printk("\t_vx_limit:");
-+ for (i = 0; i < NUM_LIMITS; i++) {
-+ printk("\t [%2d] = %8lu %8lu/%8lu, %8ld/%8ld, %8d\n",
-+ i, (unsigned long)__rlim_get(limit, i),
-+ (unsigned long)__rlim_rmin(limit, i),
-+ (unsigned long)__rlim_rmax(limit, i),
-+ (long)__rlim_soft(limit, i),
-+ (long)__rlim_hard(limit, i),
-+ atomic_read(&__rlim_lhit(limit, i)));
-+ }
-+}
+
-+#endif
++/* virtual host info name commands */
+
-+#endif /* _VX_LIMIT_DEF_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/limit.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/limit.h
---- linux-2.6.37/include/linux/vserver/limit.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/limit.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,71 @@
-+#ifndef _VX_LIMIT_H
-+#define _VX_LIMIT_H
++#define VCMD_set_vhi_name VC_CMD(VHOST, 1, 0)
++#define VCMD_get_vhi_name VC_CMD(VHOST, 2, 0)
+
-+#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 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__
+
-+#define VLIM_NOCHECK ((1L << VLIMIT_DENTRY) | (1L << RLIMIT_RSS))
++#include <linux/compiler.h>
+
-+/* keep in sync with CRLIM_INFINITY */
++extern int vc_set_vhi_name(struct vx_info *, void __user *);
++extern int vc_get_vhi_name(struct vx_info *, void __user *);
+
-+#define VLIM_INFINITY (~0ULL)
++#endif /* __KERNEL__ */
+
-+#include <asm/atomic.h>
-+#include <asm/resource.h>
++#define VCMD_virt_stat VC_CMD(VSTAT, 3, 0)
+
-+#ifndef RLIM_INFINITY
-+#warning RLIM_INFINITY is undefined
-+#endif
++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];
++};
+
-+#define __rlim_val(l, r, v) ((l)->res[r].v)
++#ifdef __KERNEL__
++extern int vc_virt_stat(struct vx_info *, void __user *);
+
-+#define __rlim_soft(l, r) __rlim_val(l, r, soft)
-+#define __rlim_hard(l, r) __rlim_val(l, r, hard)
++#endif /* __KERNEL__ */
++#endif /* _VX_CVIRT_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/cvirt_def.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cvirt_def.h
+--- linux-2.6.38-rc8/include/linux/vserver/cvirt_def.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/cvirt_def.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,80 @@
++#ifndef _VX_CVIRT_DEF_H
++#define _VX_CVIRT_DEF_H
+
-+#define __rlim_rcur(l, r) __rlim_val(l, r, rcur)
-+#define __rlim_rmin(l, r) __rlim_val(l, r, rmin)
-+#define __rlim_rmax(l, r) __rlim_val(l, r, rmax)
++#include <linux/jiffies.h>
++#include <linux/spinlock.h>
++#include <linux/wait.h>
++#include <linux/time.h>
++#include <asm/atomic.h>
+
-+#define __rlim_lhit(l, r) __rlim_val(l, r, lhit)
-+#define __rlim_hit(l, r) atomic_inc(&__rlim_lhit(l, r))
+
-+typedef atomic_long_t rlim_atomic_t;
-+typedef unsigned long rlim_t;
++struct _vx_usage_stat {
++ uint64_t user;
++ uint64_t nice;
++ uint64_t system;
++ uint64_t softirq;
++ uint64_t irq;
++ uint64_t idle;
++ uint64_t iowait;
++};
+
-+#define __rlim_get(l, r) atomic_long_read(&__rlim_rcur(l, r))
-+#define __rlim_set(l, r, v) atomic_long_set(&__rlim_rcur(l, r), v)
-+#define __rlim_inc(l, r) atomic_long_inc(&__rlim_rcur(l, r))
-+#define __rlim_dec(l, r) atomic_long_dec(&__rlim_rcur(l, r))
-+#define __rlim_add(l, r, v) atomic_long_add(v, &__rlim_rcur(l, r))
-+#define __rlim_sub(l, r, v) atomic_long_sub(v, &__rlim_rcur(l, r))
++struct _vx_syslog {
++ wait_queue_head_t log_wait;
++ spinlock_t logbuf_lock; /* lock for the log buffer */
+
++ unsigned long log_start; /* next char to be read by syslog() */
++ unsigned long con_start; /* next char to be sent to consoles */
++ unsigned long log_end; /* most-recently-written-char + 1 */
++ unsigned long logged_chars; /* #chars since last read+clear operation */
+
-+#if (RLIM_INFINITY == VLIM_INFINITY)
-+#define VX_VLIM(r) ((long long)(long)(r))
-+#define VX_RLIM(v) ((rlim_t)(v))
-+#else
-+#define VX_VLIM(r) (((r) == RLIM_INFINITY) \
-+ ? VLIM_INFINITY : (long long)(r))
-+#define VX_RLIM(v) (((v) == VLIM_INFINITY) \
-+ ? RLIM_INFINITY : (rlim_t)(v))
-+#endif
++ char log_buf[1024];
++};
+
-+struct sysinfo;
+
-+void vx_vsi_meminfo(struct sysinfo *);
-+void vx_vsi_swapinfo(struct sysinfo *);
-+long vx_vsi_cached(struct sysinfo *);
++/* context sub struct */
+
-+#define NUM_LIMITS 24
++struct _vx_cvirt {
++ atomic_t nr_threads; /* number of current threads */
++ atomic_t nr_running; /* number of running threads */
++ atomic_t nr_uninterruptible; /* number of uninterruptible threads */
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_LIMIT_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/limit_int.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/limit_int.h
---- linux-2.6.37/include/linux/vserver/limit_int.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/limit_int.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,198 @@
-+#ifndef _VX_LIMIT_INT_H
-+#define _VX_LIMIT_INT_H
++ atomic_t nr_onhold; /* processes on hold */
++ uint32_t onhold_last; /* jiffies when put on hold */
+
-+#include "context.h"
++ struct timespec bias_ts; /* time offset to the host */
++ struct timespec bias_idle;
++ struct timespec bias_uptime; /* context creation point */
++ uint64_t bias_clock; /* offset in clock_t */
+
-+#ifdef __KERNEL__
++ spinlock_t load_lock; /* lock for the load averages */
++ atomic_t load_updates; /* nr of load updates done so far */
++ uint32_t load_last; /* last time load was calculated */
++ uint32_t load[3]; /* load averages 1,5,15 */
+
-+#define VXD_RCRES_COND(r) VXD_CBIT(cres, r)
-+#define VXD_RLIMIT_COND(r) VXD_CBIT(limit, r)
++ atomic_t total_forks; /* number of forks so far */
+
-+extern const char *vlimit_name[NUM_LIMITS];
++ struct _vx_syslog syslog;
++};
+
-+static inline void __vx_acc_cres(struct vx_info *vxi,
-+ int res, int dir, void *_data, char *_file, int _line)
-+{
-+ if (VXD_RCRES_COND(res))
-+ vxlprintk(1, "vx_acc_cres[%5d,%s,%2d]: %5ld%s (%p)",
-+ (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
-+ (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
-+ (dir > 0) ? "++" : "--", _data, _file, _line);
-+ if (!vxi)
-+ return;
++struct _vx_cvirt_pc {
++ struct _vx_usage_stat cpustat;
++};
+
-+ if (dir > 0)
-+ __rlim_inc(&vxi->limit, res);
-+ else
-+ __rlim_dec(&vxi->limit, res);
-+}
+
-+static inline void __vx_add_cres(struct vx_info *vxi,
-+ int res, int amount, void *_data, char *_file, int _line)
-+{
-+ if (VXD_RCRES_COND(res))
-+ vxlprintk(1, "vx_add_cres[%5d,%s,%2d]: %5ld += %5d (%p)",
-+ (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
-+ (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
-+ amount, _data, _file, _line);
-+ if (amount == 0)
-+ return;
-+ if (!vxi)
-+ return;
-+ __rlim_add(&vxi->limit, res, amount);
-+}
++#ifdef CONFIG_VSERVER_DEBUG
+
-+static inline
-+int __vx_cres_adjust_max(struct _vx_limit *limit, int res, rlim_t value)
++static inline void __dump_vx_cvirt(struct _vx_cvirt *cvirt)
+{
-+ int cond = (value > __rlim_rmax(limit, res));
-+
-+ if (cond)
-+ __rlim_rmax(limit, res) = value;
-+ return cond;
++ printk("\t_vx_cvirt:\n");
++ printk("\t threads: %4d, %4d, %4d, %4d\n",
++ atomic_read(&cvirt->nr_threads),
++ atomic_read(&cvirt->nr_running),
++ atomic_read(&cvirt->nr_uninterruptible),
++ atomic_read(&cvirt->nr_onhold));
++ /* add rest here */
++ printk("\t total_forks = %d\n", atomic_read(&cvirt->total_forks));
+}
+
-+static inline
-+int __vx_cres_adjust_min(struct _vx_limit *limit, int res, rlim_t value)
-+{
-+ int cond = (value < __rlim_rmin(limit, res));
++#endif
+
-+ if (cond)
-+ __rlim_rmin(limit, res) = value;
-+ return cond;
-+}
++#endif /* _VX_CVIRT_DEF_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/debug.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/debug.h
+--- linux-2.6.38-rc8/include/linux/vserver/debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/debug.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,140 @@
++#ifndef _VX_DEBUG_H
++#define _VX_DEBUG_H
+
-+static inline
-+void __vx_cres_fixup(struct _vx_limit *limit, int res, rlim_t value)
-+{
-+ if (!__vx_cres_adjust_max(limit, res, value))
-+ __vx_cres_adjust_min(limit, res, value);
-+}
+
++#define VXD_CBIT(n, m) (vx_debug_ ## n & (1 << (m)))
++#define VXD_CMIN(n, m) (vx_debug_ ## n > (m))
++#define VXD_MASK(n, m) (vx_debug_ ## n & (m))
+
-+/* return values:
-+ +1 ... no limit hit
-+ -1 ... over soft limit
-+ 0 ... over hard limit */
++#define VXD_DEV(d) (d), (d)->bd_inode->i_ino, \
++ imajor((d)->bd_inode), iminor((d)->bd_inode)
++#define VXF_DEV "%p[%lu,%d:%d]"
+
-+static inline int __vx_cres_avail(struct vx_info *vxi,
-+ int res, int num, char *_file, int _line)
-+{
-+ struct _vx_limit *limit;
-+ rlim_t value;
++#if defined(CONFIG_QUOTES_UTF8)
++#define VS_Q_LQM "\xc2\xbb"
++#define VS_Q_RQM "\xc2\xab"
++#elif defined(CONFIG_QUOTES_ASCII)
++#define VS_Q_LQM "\x27"
++#define VS_Q_RQM "\x27"
++#else
++#define VS_Q_LQM "\xbb"
++#define VS_Q_RQM "\xab"
++#endif
+
-+ if (VXD_RLIMIT_COND(res))
-+ vxlprintk(1, "vx_cres_avail[%5d,%s,%2d]: %5ld/%5ld > %5ld + %5d",
-+ (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
-+ (vxi ? (long)__rlim_soft(&vxi->limit, res) : -1),
-+ (vxi ? (long)__rlim_hard(&vxi->limit, res) : -1),
-+ (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
-+ num, _file, _line);
-+ if (!vxi)
-+ return 1;
++#define VS_Q(f) VS_Q_LQM f VS_Q_RQM
+
-+ limit = &vxi->limit;
-+ value = __rlim_get(limit, res);
+
-+ if (!__vx_cres_adjust_max(limit, res, value))
-+ __vx_cres_adjust_min(limit, res, value);
++#define vxd_path(p) \
++ ({ static char _buffer[PATH_MAX]; \
++ d_path(p, _buffer, sizeof(_buffer)); })
+
-+ if (num == 0)
-+ return 1;
++#define vxd_cond_path(n) \
++ ((n) ? vxd_path(&(n)->path) : "<null>" )
+
-+ if (__rlim_soft(limit, res) == RLIM_INFINITY)
-+ return -1;
-+ if (value + num <= __rlim_soft(limit, res))
-+ return -1;
+
-+ if (__rlim_hard(limit, res) == RLIM_INFINITY)
-+ return 1;
-+ if (value + num <= __rlim_hard(limit, res))
-+ return 1;
++#ifdef CONFIG_VSERVER_DEBUG
+
-+ __rlim_hit(limit, res);
-+ return 0;
-+}
++extern unsigned int vx_debug_switch;
++extern unsigned int vx_debug_xid;
++extern unsigned int vx_debug_nid;
++extern unsigned int vx_debug_tag;
++extern unsigned int vx_debug_net;
++extern unsigned int vx_debug_limit;
++extern unsigned int vx_debug_cres;
++extern unsigned int vx_debug_dlim;
++extern unsigned int vx_debug_quota;
++extern unsigned int vx_debug_cvirt;
++extern unsigned int vx_debug_space;
++extern unsigned int vx_debug_misc;
+
+
-+static const int VLA_RSS[] = { RLIMIT_RSS, VLIMIT_ANON, VLIMIT_MAPPED, 0 };
++#define VX_LOGLEVEL "vxD: "
++#define VX_PROC_FMT "%p: "
++#define VX_PROCESS current
+
-+static inline
-+rlim_t __vx_cres_array_sum(struct _vx_limit *limit, const int *array)
-+{
-+ rlim_t value, sum = 0;
-+ int res;
++#define vxdprintk(c, f, x...) \
++ do { \
++ if (c) \
++ printk(VX_LOGLEVEL VX_PROC_FMT f "\n", \
++ VX_PROCESS , ##x); \
++ } while (0)
+
-+ while ((res = *array++)) {
-+ value = __rlim_get(limit, res);
-+ __vx_cres_fixup(limit, res, value);
-+ sum += value;
-+ }
-+ return sum;
-+}
++#define vxlprintk(c, f, x...) \
++ do { \
++ if (c) \
++ printk(VX_LOGLEVEL f " @%s:%d\n", x); \
++ } while (0)
+
-+static inline
-+rlim_t __vx_cres_array_fixup(struct _vx_limit *limit, const int *array)
-+{
-+ rlim_t value = __vx_cres_array_sum(limit, array + 1);
-+ int res = *array;
++#define vxfprintk(c, f, x...) \
++ do { \
++ if (c) \
++ printk(VX_LOGLEVEL f " %s@%s:%d\n", x); \
++ } while (0)
+
-+ if (value == __rlim_get(limit, res))
-+ return value;
+
-+ __rlim_set(limit, res, value);
-+ /* now adjust min/max */
-+ if (!__vx_cres_adjust_max(limit, res, value))
-+ __vx_cres_adjust_min(limit, res, value);
++struct vx_info;
+
-+ return value;
-+}
++void dump_vx_info(struct vx_info *, int);
++void dump_vx_info_inactive(int);
+
-+static inline int __vx_cres_array_avail(struct vx_info *vxi,
-+ const int *array, int num, char *_file, int _line)
-+{
-+ struct _vx_limit *limit;
-+ rlim_t value = 0;
-+ int res;
++#else /* CONFIG_VSERVER_DEBUG */
+
-+ if (num == 0)
-+ return 1;
-+ if (!vxi)
-+ return 1;
++#define vx_debug_switch 0
++#define vx_debug_xid 0
++#define vx_debug_nid 0
++#define vx_debug_tag 0
++#define vx_debug_net 0
++#define vx_debug_limit 0
++#define vx_debug_cres 0
++#define vx_debug_dlim 0
++#define vx_debug_cvirt 0
+
-+ limit = &vxi->limit;
-+ res = *array;
-+ value = __vx_cres_array_sum(limit, array + 1);
++#define vxdprintk(x...) do { } while (0)
++#define vxlprintk(x...) do { } while (0)
++#define vxfprintk(x...) do { } while (0)
+
-+ __rlim_set(limit, res, value);
-+ __vx_cres_fixup(limit, res, value);
++#endif /* CONFIG_VSERVER_DEBUG */
+
-+ return __vx_cres_avail(vxi, res, num, _file, _line);
-+}
+
++#ifdef CONFIG_VSERVER_WARN
+
-+static inline void vx_limit_fixup(struct _vx_limit *limit, int id)
-+{
-+ rlim_t value;
-+ int res;
++#define VX_WARNLEVEL KERN_WARNING "vxW: "
++#define VX_WARN_TASK "[" VS_Q("%s") ",%u:#%u|%u|%u] "
++#define VX_WARN_XID "[xid #%u] "
++#define VX_WARN_NID "[nid #%u] "
++#define VX_WARN_TAG "[tag #%u] "
+
-+ /* complex resources first */
-+ if ((id < 0) || (id == RLIMIT_RSS))
-+ __vx_cres_array_fixup(limit, VLA_RSS);
++#define vxwprintk(c, f, x...) \
++ do { \
++ if (c) \
++ printk(VX_WARNLEVEL f "\n", ##x); \
++ } while (0)
+
-+ for (res = 0; res < NUM_LIMITS; res++) {
-+ if ((id > 0) && (res != id))
-+ continue;
++#else /* CONFIG_VSERVER_WARN */
+
-+ value = __rlim_get(limit, res);
-+ __vx_cres_fixup(limit, res, value);
++#define vxwprintk(x...) do { } while (0)
+
-+ /* not supposed to happen, maybe warn? */
-+ if (__rlim_rmax(limit, res) > __rlim_hard(limit, res))
-+ __rlim_rmax(limit, res) = __rlim_hard(limit, res);
-+ }
-+}
++#endif /* CONFIG_VSERVER_WARN */
+
++#define vxwprintk_task(c, f, x...) \
++ vxwprintk(c, VX_WARN_TASK f, \
++ current->comm, current->pid, \
++ 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...) \
++ vxwprintk(c, VX_WARN_NID f, current->nid, x)
++#define vxwprintk_tag(c, f, x...) \
++ vxwprintk(c, VX_WARN_TAG f, current->tag, x)
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_LIMIT_INT_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/monitor.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/monitor.h
---- linux-2.6.37/include/linux/vserver/monitor.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/monitor.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,96 @@
-+#ifndef _VX_MONITOR_H
-+#define _VX_MONITOR_H
++#ifdef CONFIG_VSERVER_DEBUG
++#define vxd_assert_lock(l) assert_spin_locked(l)
++#define vxd_assert(c, f, x...) vxlprintk(!(c), \
++ "assertion [" f "] failed.", ##x, __FILE__, __LINE__)
++#else
++#define vxd_assert_lock(l) do { } while (0)
++#define vxd_assert(c, f, x...) do { } while (0)
++#endif
+
-+#include <linux/types.h>
+
-+enum {
-+ VXM_UNUSED = 0,
++#endif /* _VX_DEBUG_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/debug_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/debug_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/debug_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/debug_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,58 @@
++#ifndef _VX_DEBUG_CMD_H
++#define _VX_DEBUG_CMD_H
+
-+ VXM_SYNC = 0x10,
+
-+ VXM_UPDATE = 0x20,
-+ VXM_UPDATE_1,
-+ VXM_UPDATE_2,
++/* debug commands */
+
-+ VXM_RQINFO_1 = 0x24,
-+ VXM_RQINFO_2,
++#define VCMD_dump_history VC_CMD(DEBUG, 1, 0)
+
-+ VXM_ACTIVATE = 0x40,
-+ VXM_DEACTIVATE,
-+ VXM_IDLE,
++#define VCMD_read_history VC_CMD(DEBUG, 5, 0)
++#define VCMD_read_monitor VC_CMD(DEBUG, 6, 0)
+
-+ VXM_HOLD = 0x44,
-+ VXM_UNHOLD,
-+
-+ VXM_MIGRATE = 0x48,
-+ VXM_RESCHED,
-+
-+ /* all other bits are flags */
-+ VXM_SCHED = 0x80,
-+};
-+
-+struct _vxm_update_1 {
-+ uint32_t tokens_max;
-+ uint32_t fill_rate;
-+ uint32_t interval;
++struct vcmd_read_history_v0 {
++ uint32_t index;
++ uint32_t count;
++ char __user *data;
+};
+
-+struct _vxm_update_2 {
-+ uint32_t tokens_min;
-+ uint32_t fill_rate;
-+ uint32_t interval;
++struct vcmd_read_monitor_v0 {
++ uint32_t index;
++ uint32_t count;
++ char __user *data;
+};
+
-+struct _vxm_rqinfo_1 {
-+ uint16_t running;
-+ uint16_t onhold;
-+ uint16_t iowait;
-+ uint16_t uintr;
-+ uint32_t idle_tokens;
-+};
+
-+struct _vxm_rqinfo_2 {
-+ uint32_t norm_time;
-+ uint32_t idle_time;
-+ uint32_t idle_skip;
-+};
++#ifdef __KERNEL__
+
-+struct _vxm_sched {
-+ uint32_t tokens;
-+ uint32_t norm_time;
-+ uint32_t idle_time;
-+};
++#ifdef CONFIG_COMPAT
+
-+struct _vxm_task {
-+ uint16_t pid;
-+ uint16_t state;
-+};
++#include <asm/compat.h>
+
-+struct _vxm_event {
-+ uint32_t jif;
-+ union {
-+ uint32_t seq;
-+ uint32_t sec;
-+ };
-+ union {
-+ uint32_t tokens;
-+ uint32_t nsec;
-+ struct _vxm_task tsk;
-+ };
++struct vcmd_read_history_v0_x32 {
++ uint32_t index;
++ uint32_t count;
++ compat_uptr_t data_ptr;
+};
+
-+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;
-+ };
++struct vcmd_read_monitor_v0_x32 {
++ uint32_t index;
++ uint32_t count;
++ compat_uptr_t data_ptr;
+};
+
++#endif /* CONFIG_COMPAT */
+
-+#endif /* _VX_MONITOR_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/network_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/network_cmd.h
---- linux-2.6.37/include/linux/vserver/network_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/network_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,150 @@
-+#ifndef _VX_NETWORK_CMD_H
-+#define _VX_NETWORK_CMD_H
++extern int vc_dump_history(uint32_t);
+
++extern int vc_read_history(uint32_t, void __user *);
++extern int vc_read_monitor(uint32_t, void __user *);
+
-+/* vinfo commands */
++#ifdef CONFIG_COMPAT
+
-+#define VCMD_task_nid VC_CMD(VINFO, 2, 0)
++extern int vc_read_history_x32(uint32_t, void __user *);
++extern int vc_read_monitor_x32(uint32_t, void __user *);
+
-+#ifdef __KERNEL__
-+extern int vc_task_nid(uint32_t);
++#endif /* CONFIG_COMPAT */
+
+#endif /* __KERNEL__ */
++#endif /* _VX_DEBUG_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/device.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/device.h
+--- linux-2.6.38-rc8/include/linux/vserver/device.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/device.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,15 @@
++#ifndef _VX_DEVICE_H
++#define _VX_DEVICE_H
+
-+#define VCMD_nx_info VC_CMD(VINFO, 6, 0)
+
-+struct vcmd_nx_info_v0 {
-+ uint32_t nid;
-+ /* more to come */
-+};
++#define DATTR_CREATE 0x00000001
++#define DATTR_OPEN 0x00000002
+
-+#ifdef __KERNEL__
-+extern int vc_nx_info(struct nx_info *, void __user *);
++#define DATTR_REMAP 0x00000010
+
-+#endif /* __KERNEL__ */
++#define DATTR_MASK 0x00000013
+
-+#include <linux/in.h>
-+#include <linux/in6.h>
+
-+#define VCMD_net_create_v0 VC_CMD(VNET, 1, 0)
-+#define VCMD_net_create VC_CMD(VNET, 1, 1)
++#else /* _VX_DEVICE_H */
++#warning duplicate inclusion
++#endif /* _VX_DEVICE_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/device_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/device_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/device_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/device_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,44 @@
++#ifndef _VX_DEVICE_CMD_H
++#define _VX_DEVICE_CMD_H
+
-+struct vcmd_net_create {
-+ uint64_t flagword;
-+};
+
-+#define VCMD_net_migrate VC_CMD(NETMIG, 1, 0)
++/* device vserver commands */
+
-+#define VCMD_net_add VC_CMD(NETALT, 1, 0)
-+#define VCMD_net_remove VC_CMD(NETALT, 2, 0)
++#define VCMD_set_mapping VC_CMD(DEVICE, 1, 0)
++#define VCMD_unset_mapping VC_CMD(DEVICE, 2, 0)
+
-+struct vcmd_net_addr_v0 {
-+ uint16_t type;
-+ uint16_t count;
-+ struct in_addr ip[4];
-+ struct in_addr mask[4];
++struct vcmd_set_mapping_v0 {
++ const char __user *device;
++ const char __user *target;
++ uint32_t flags;
+};
+
-+#define VCMD_net_add_ipv4 VC_CMD(NETALT, 1, 1)
-+#define VCMD_net_remove_ipv4 VC_CMD(NETALT, 2, 1)
-+
-+struct vcmd_net_addr_ipv4_v1 {
-+ uint16_t type;
-+ uint16_t flags;
-+ struct in_addr ip;
-+ struct in_addr mask;
-+};
+
-+#define VCMD_net_add_ipv6 VC_CMD(NETALT, 3, 1)
-+#define VCMD_net_remove_ipv6 VC_CMD(NETALT, 4, 1)
++#ifdef __KERNEL__
+
-+struct vcmd_net_addr_ipv6_v1 {
-+ uint16_t type;
-+ uint16_t flags;
-+ uint32_t prefix;
-+ struct in6_addr ip;
-+ struct in6_addr mask;
-+};
++#ifdef CONFIG_COMPAT
+
-+#define VCMD_add_match_ipv4 VC_CMD(NETALT, 5, 0)
-+#define VCMD_get_match_ipv4 VC_CMD(NETALT, 6, 0)
++#include <asm/compat.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;
++struct vcmd_set_mapping_v0_x32 {
++ compat_uptr_t device_ptr;
++ compat_uptr_t target_ptr;
++ uint32_t flags;
+};
+
-+#define VCMD_add_match_ipv6 VC_CMD(NETALT, 7, 0)
-+#define VCMD_get_match_ipv6 VC_CMD(NETALT, 8, 0)
-+
-+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 /* CONFIG_COMPAT */
+
++#include <linux/compiler.h>
+
-+#ifdef __KERNEL__
-+extern int vc_net_create(uint32_t, void __user *);
-+extern int vc_net_migrate(struct nx_info *, void __user *);
++extern int vc_set_mapping(struct vx_info *, void __user *);
++extern int vc_unset_mapping(struct vx_info *, void __user *);
+
-+extern int vc_net_add(struct nx_info *, void __user *);
-+extern int vc_net_remove(struct nx_info *, void __user *);
++#ifdef CONFIG_COMPAT
+
-+extern int vc_net_add_ipv4(struct nx_info *, void __user *);
-+extern int vc_net_remove_ipv4(struct nx_info *, void __user *);
++extern int vc_set_mapping_x32(struct vx_info *, void __user *);
++extern int vc_unset_mapping_x32(struct vx_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 *);
++#endif /* CONFIG_COMPAT */
+
-+extern int vc_add_match_ipv4(struct nx_info *, void __user *);
-+extern int vc_get_match_ipv4(struct nx_info *, void __user *);
++#endif /* __KERNEL__ */
++#endif /* _VX_DEVICE_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/device_def.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/device_def.h
+--- linux-2.6.38-rc8/include/linux/vserver/device_def.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/device_def.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,17 @@
++#ifndef _VX_DEVICE_DEF_H
++#define _VX_DEVICE_DEF_H
+
-+extern int vc_add_match_ipv6(struct nx_info *, void __user *);
-+extern int vc_get_match_ipv6(struct nx_info *, void __user *);
++#include <linux/types.h>
+
-+#endif /* __KERNEL__ */
++struct vx_dmap_target {
++ dev_t target;
++ uint32_t flags;
++};
+
++struct _vx_device {
++#ifdef CONFIG_VSERVER_DEVICE
++ struct vx_dmap_target targets[2];
++#endif
++};
+
-+/* flag commands */
++#endif /* _VX_DEVICE_DEF_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/dlimit.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/dlimit.h
+--- linux-2.6.38-rc8/include/linux/vserver/dlimit.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/dlimit.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,54 @@
++#ifndef _VX_DLIMIT_H
++#define _VX_DLIMIT_H
+
-+#define VCMD_get_nflags VC_CMD(FLAGS, 5, 0)
-+#define VCMD_set_nflags VC_CMD(FLAGS, 6, 0)
++#include "switch.h"
+
-+struct vcmd_net_flags_v0 {
-+ uint64_t flagword;
-+ uint64_t mask;
-+};
+
+#ifdef __KERNEL__
-+extern int vc_get_nflags(struct nx_info *, void __user *);
-+extern int vc_set_nflags(struct nx_info *, void __user *);
+
-+#endif /* __KERNEL__ */
++/* keep in sync with CDLIM_INFINITY */
+
++#define DLIM_INFINITY (~0ULL)
+
-+/* network caps commands */
++#include <linux/spinlock.h>
++#include <linux/rcupdate.h>
+
-+#define VCMD_get_ncaps VC_CMD(FLAGS, 7, 0)
-+#define VCMD_set_ncaps VC_CMD(FLAGS, 8, 0)
++struct super_block;
+
-+struct vcmd_net_caps_v0 {
-+ uint64_t ncaps;
-+ uint64_t cmask;
-+};
++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 */
++ atomic_t dl_usecnt; /* usage count */
++ atomic_t dl_refcnt; /* reference count */
+
-+#ifdef __KERNEL__
-+extern int vc_get_ncaps(struct nx_info *, void __user *);
-+extern int vc_set_ncaps(struct nx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CONTEXT_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/network.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/network.h
---- linux-2.6.37/include/linux/vserver/network.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/network.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,146 @@
-+#ifndef _VX_NETWORK_H
-+#define _VX_NETWORK_H
-+
-+#include <linux/types.h>
-+
-+
-+#define MAX_N_CONTEXT 65535 /* Arbitrary limit */
++ struct super_block *dl_sb; /* associated superblock */
+
++ spinlock_t dl_lock; /* protect the values */
+
-+/* network flags */
++ unsigned long long dl_space_used; /* used space in bytes */
++ unsigned long long dl_space_total; /* maximum space in bytes */
++ unsigned long dl_inodes_used; /* used inodes */
++ unsigned long dl_inodes_total; /* maximum inodes */
+
-+#define NXF_INFO_PRIVATE 0x00000008
++ unsigned int dl_nrlmult; /* non root limit mult */
++};
+
-+#define NXF_SINGLE_IP 0x00000100
-+#define NXF_LBACK_REMAP 0x00000200
-+#define NXF_LBACK_ALLOW 0x00000400
++struct rcu_head;
+
-+#define NXF_HIDE_NETIF 0x02000000
-+#define NXF_HIDE_LBACK 0x04000000
++extern void rcu_free_dl_info(struct rcu_head *);
++extern void unhash_dl_info(struct dl_info *);
+
-+#define NXF_STATE_SETUP (1ULL << 32)
-+#define NXF_STATE_ADMIN (1ULL << 34)
++extern struct dl_info *locate_dl_info(struct super_block *, tag_t);
+
-+#define NXF_SC_HELPER (1ULL << 36)
-+#define NXF_PERSISTENT (1ULL << 38)
+
-+#define NXF_ONE_TIME (0x0005ULL << 32)
++struct kstatfs;
+
++extern void vx_vsi_statfs(struct super_block *, struct kstatfs *);
+
-+#define NXF_INIT_SET (__nxf_init_set())
++typedef uint64_t dlsize_t;
+
-+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;
-+}
++#endif /* __KERNEL__ */
++#else /* _VX_DLIMIT_H */
++#warning duplicate inclusion
++#endif /* _VX_DLIMIT_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/dlimit_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/dlimit_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/dlimit_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/dlimit_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,109 @@
++#ifndef _VX_DLIMIT_CMD_H
++#define _VX_DLIMIT_CMD_H
+
+
-+/* network caps */
++/* dlimit vserver commands */
+
-+#define NXC_TUN_CREATE 0x00000001
++#define VCMD_add_dlimit VC_CMD(DLIMIT, 1, 0)
++#define VCMD_rem_dlimit VC_CMD(DLIMIT, 2, 0)
+
-+#define NXC_RAW_ICMP 0x00000100
++#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;
++};
+
-+/* address types */
++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 NXA_TYPE_IPV4 0x0001
-+#define NXA_TYPE_IPV6 0x0002
++#define CDLIM_UNSET ((uint32_t)0UL)
++#define CDLIM_INFINITY ((uint32_t)~0UL)
++#define CDLIM_KEEP ((uint32_t)~1UL)
+
-+#define NXA_TYPE_NONE 0x0000
-+#define NXA_TYPE_ANY 0x00FF
++#define DLIME_UNIT 0
++#define DLIME_KILO 1
++#define DLIME_MEGA 2
++#define DLIME_GIGA 3
+
-+#define NXA_TYPE_ADDR 0x0010
-+#define NXA_TYPE_MASK 0x0020
-+#define NXA_TYPE_RANGE 0x0040
++#define DLIMF_SHIFT 0x10
+
-+#define NXA_MASK_ALL (NXA_TYPE_ADDR | NXA_TYPE_MASK | NXA_TYPE_RANGE)
++#define DLIMS_USED 0
++#define DLIMS_TOTAL 2
+
-+#define NXA_MOD_BCAST 0x0100
-+#define NXA_MOD_LBACK 0x0200
++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);
++}
+
-+#define NXA_LOOPBACK 0x1000
++static inline
++uint32_t dlimit_space_64to32(uint64_t val, uint32_t *flags, int shift)
++{
++ int exp = 0;
+
-+#define NXA_MASK_BIND (NXA_MASK_ALL | NXA_MOD_BCAST | NXA_MOD_LBACK)
-+#define NXA_MASK_SHOW (NXA_MASK_ALL | NXA_LOOPBACK)
++ 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__
+
-+#include <linux/list.h>
-+#include <linux/spinlock.h>
-+#include <linux/rcupdate.h>
-+#include <linux/in.h>
-+#include <linux/in6.h>
-+#include <asm/atomic.h>
++#ifdef CONFIG_COMPAT
+
-+struct nx_addr_v4 {
-+ struct nx_addr_v4 *next;
-+ struct in_addr ip[2];
-+ struct in_addr mask;
-+ uint16_t type;
-+ uint16_t flags;
-+};
++#include <asm/compat.h>
+
-+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 vcmd_ctx_dlimit_base_v0_x32 {
++ compat_uptr_t name_ptr;
++ uint32_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 */
-+
-+ uint64_t nx_flags; /* network flag word */
-+ uint64_t nx_ncaps; /* network capabilities */
-+
-+ 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 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 */
+
-+/* status flags */
++#include <linux/compiler.h>
+
-+#define NXS_HASHED 0x0001
-+#define NXS_SHUTDOWN 0x0100
-+#define NXS_RELEASED 0x8000
++extern int vc_add_dlimit(uint32_t, void __user *);
++extern int vc_rem_dlimit(uint32_t, void __user *);
+
-+extern struct nx_info *lookup_nx_info(int);
++extern int vc_set_dlimit(uint32_t, void __user *);
++extern int vc_get_dlimit(uint32_t, void __user *);
+
-+extern int get_nid_list(int, unsigned int *, int);
-+extern int nid_is_hashed(nid_t);
++#ifdef CONFIG_COMPAT
+
-+extern int nx_migrate_task(struct task_struct *, struct nx_info *);
++extern int vc_add_dlimit_x32(uint32_t, void __user *);
++extern int vc_rem_dlimit_x32(uint32_t, void __user *);
+
-+extern long vs_net_change(struct nx_info *, unsigned int);
++extern int vc_set_dlimit_x32(uint32_t, void __user *);
++extern int vc_get_dlimit_x32(uint32_t, void __user *);
+
-+struct sock;
++#endif /* CONFIG_COMPAT */
+
++#endif /* __KERNEL__ */
++#endif /* _VX_DLIMIT_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/global.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/global.h
+--- linux-2.6.38-rc8/include/linux/vserver/global.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/global.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,19 @@
++#ifndef _VX_GLOBAL_H
++#define _VX_GLOBAL_H
+
-+#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
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_NETWORK_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/percpu.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/percpu.h
---- linux-2.6.37/include/linux/vserver/percpu.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/percpu.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,14 @@
-+#ifndef _VX_PERCPU_H
-+#define _VX_PERCPU_H
++extern atomic_t vx_global_ctotal;
++extern atomic_t vx_global_cactive;
+
-+#include "cvirt_def.h"
-+#include "sched_def.h"
++extern atomic_t nx_global_ctotal;
++extern atomic_t nx_global_cactive;
+
-+struct _vx_percpu {
-+ struct _vx_cvirt_pc cvirt;
-+ struct _vx_sched_pc sched;
-+};
++extern atomic_t vs_global_nsproxy;
++extern atomic_t vs_global_fs;
++extern atomic_t vs_global_mnt_ns;
++extern atomic_t vs_global_uts_ns;
++extern atomic_t vs_global_user_ns;
++extern atomic_t vs_global_pid_ns;
+
-+#define PERCPU_PERCTX (sizeof(struct _vx_percpu))
+
-+#endif /* _VX_PERCPU_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/pid.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/pid.h
---- linux-2.6.37/include/linux/vserver/pid.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/pid.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,51 @@
-+#ifndef _VSERVER_PID_H
-+#define _VSERVER_PID_H
++#endif /* _VX_GLOBAL_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/history.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/history.h
+--- linux-2.6.38-rc8/include/linux/vserver/history.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/history.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,197 @@
++#ifndef _VX_HISTORY_H
++#define _VX_HISTORY_H
+
-+/* pid faking stuff */
+
-+#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)
++enum {
++ VXH_UNUSED = 0,
++ VXH_THROW_OOPS = 1,
+
-+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 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)
++ VXH_GET_VX_INFO,
++ VXH_PUT_VX_INFO,
++ VXH_INIT_VX_INFO,
++ VXH_SET_VX_INFO,
++ VXH_CLR_VX_INFO,
++ VXH_CLAIM_VX_INFO,
++ VXH_RELEASE_VX_INFO,
++ VXH_ALLOC_VX_INFO,
++ VXH_DEALLOC_VX_INFO,
++ VXH_HASH_VX_INFO,
++ VXH_UNHASH_VX_INFO,
++ VXH_LOC_VX_INFO,
++ VXH_LOOKUP_VX_INFO,
++ VXH_CREATE_VX_INFO,
++};
+
-+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;
-+}
++struct _vxhe_vxi {
++ struct vx_info *ptr;
++ unsigned xid;
++ unsigned usecnt;
++ unsigned tasks;
++};
+
-+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/sched_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/sched_cmd.h
---- linux-2.6.37/include/linux/vserver/sched_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/sched_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,21 @@
-+#ifndef _VX_SCHED_CMD_H
-+#define _VX_SCHED_CMD_H
++struct _vxhe_set_clr {
++ void *data;
++};
+
++struct _vxhe_loc_lookup {
++ unsigned arg;
++};
+
-+struct vcmd_prio_bias {
-+ int32_t cpu_id;
-+ int32_t prio_bias;
++struct _vx_hist_entry {
++ void *loc;
++ unsigned short seq;
++ unsigned short type;
++ struct _vxhe_vxi vxi;
++ union {
++ struct _vxhe_set_clr sc;
++ struct _vxhe_loc_lookup ll;
++ };
+};
+
-+#define VCMD_set_prio_bias VC_CMD(SCHED, 4, 0)
-+#define VCMD_get_prio_bias VC_CMD(SCHED, 5, 0)
++#ifdef CONFIG_VSERVER_HISTORY
+
-+#ifdef __KERNEL__
++extern unsigned volatile int vxh_active;
+
-+#include <linux/compiler.h>
++struct _vx_hist_entry *vxh_advance(void *loc);
+
-+extern int vc_set_prio_bias(struct vx_info *, void __user *);
-+extern int vc_get_prio_bias(struct vx_info *, void __user *);
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_SCHED_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/sched_def.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/sched_def.h
---- linux-2.6.37/include/linux/vserver/sched_def.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/sched_def.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,38 @@
-+#ifndef _VX_SCHED_DEF_H
-+#define _VX_SCHED_DEF_H
++static inline
++void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi)
++{
++ entry->vxi.ptr = vxi;
++ if (vxi) {
++ entry->vxi.usecnt = atomic_read(&vxi->vx_usecnt);
++ entry->vxi.tasks = atomic_read(&vxi->vx_tasks);
++ entry->vxi.xid = vxi->vx_id;
++ }
++}
+
-+#include <linux/spinlock.h>
-+#include <linux/jiffies.h>
-+#include <linux/cpumask.h>
-+#include <asm/atomic.h>
-+#include <asm/param.h>
+
++#define __HERE__ current_text_addr()
+
-+/* context sub struct */
++#define __VXH_BODY(__type, __data, __here) \
++ struct _vx_hist_entry *entry; \
++ \
++ preempt_disable(); \
++ entry = vxh_advance(__here); \
++ __data; \
++ entry->type = __type; \
++ preempt_enable();
+
-+struct _vx_sched {
-+ int prio_bias; /* bias offset for priority */
+
-+ cpumask_t update; /* CPUs which should update */
-+};
++ /* pass vxi only */
+
-+struct _vx_sched_pc {
-+ int prio_bias; /* bias offset for priority */
++#define __VXH_SMPL \
++ __vxh_copy_vxi(entry, vxi)
+
-+ uint64_t user_ticks; /* token tick events */
-+ uint64_t sys_ticks; /* token tick events */
-+ uint64_t hold_ticks; /* token ticks paused */
-+};
++static inline
++void __vxh_smpl(struct vx_info *vxi, int __type, void *__here)
++{
++ __VXH_BODY(__type, __VXH_SMPL, __here)
++}
+
++ /* pass vxi and data (void *) */
+
-+#ifdef CONFIG_VSERVER_DEBUG
++#define __VXH_DATA \
++ __vxh_copy_vxi(entry, vxi); \
++ entry->sc.data = data
+
-+static inline void __dump_vx_sched(struct _vx_sched *sched)
++static inline
++void __vxh_data(struct vx_info *vxi, void *data,
++ int __type, void *__here)
+{
-+ printk("\t_vx_sched:\n");
-+ printk("\t priority = %4d\n", sched->prio_bias);
++ __VXH_BODY(__type, __VXH_DATA, __here)
+}
+
-+#endif
-+
-+#endif /* _VX_SCHED_DEF_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/sched.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/sched.h
---- linux-2.6.37/include/linux/vserver/sched.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/sched.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,23 @@
-+#ifndef _VX_SCHED_H
-+#define _VX_SCHED_H
++ /* pass vxi and arg (long) */
+
++#define __VXH_LONG \
++ __vxh_copy_vxi(entry, vxi); \
++ entry->ll.arg = arg
+
-+#ifdef __KERNEL__
++static inline
++void __vxh_long(struct vx_info *vxi, long arg,
++ int __type, void *__here)
++{
++ __VXH_BODY(__type, __VXH_LONG, __here)
++}
+
-+struct timespec;
+
-+void vx_vsi_uptime(struct timespec *, struct timespec *);
++static inline
++void __vxh_throw_oops(void *__here)
++{
++ __VXH_BODY(VXH_THROW_OOPS, {}, __here);
++ /* prevent further acquisition */
++ vxh_active = 0;
++}
+
+
-+struct vx_info;
++#define vxh_throw_oops() __vxh_throw_oops(__HERE__);
+
-+void vx_update_load(struct vx_info *);
++#define __vxh_get_vx_info(v, h) __vxh_smpl(v, VXH_GET_VX_INFO, h);
++#define __vxh_put_vx_info(v, h) __vxh_smpl(v, VXH_PUT_VX_INFO, h);
+
++#define __vxh_init_vx_info(v, d, h) \
++ __vxh_data(v, d, VXH_INIT_VX_INFO, h);
++#define __vxh_set_vx_info(v, d, h) \
++ __vxh_data(v, d, VXH_SET_VX_INFO, h);
++#define __vxh_clr_vx_info(v, d, h) \
++ __vxh_data(v, d, VXH_CLR_VX_INFO, h);
+
-+void vx_update_sched_param(struct _vx_sched *sched,
-+ struct _vx_sched_pc *sched_pc);
++#define __vxh_claim_vx_info(v, d, h) \
++ __vxh_data(v, d, VXH_CLAIM_VX_INFO, h);
++#define __vxh_release_vx_info(v, d, h) \
++ __vxh_data(v, d, VXH_RELEASE_VX_INFO, h);
+
-+#endif /* __KERNEL__ */
-+#else /* _VX_SCHED_H */
-+#warning duplicate inclusion
-+#endif /* _VX_SCHED_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/signal_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/signal_cmd.h
---- linux-2.6.37/include/linux/vserver/signal_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/signal_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,43 @@
-+#ifndef _VX_SIGNAL_CMD_H
-+#define _VX_SIGNAL_CMD_H
++#define vxh_alloc_vx_info(v) \
++ __vxh_smpl(v, VXH_ALLOC_VX_INFO, __HERE__);
++#define vxh_dealloc_vx_info(v) \
++ __vxh_smpl(v, VXH_DEALLOC_VX_INFO, __HERE__);
+
++#define vxh_hash_vx_info(v) \
++ __vxh_smpl(v, VXH_HASH_VX_INFO, __HERE__);
++#define vxh_unhash_vx_info(v) \
++ __vxh_smpl(v, VXH_UNHASH_VX_INFO, __HERE__);
+
-+/* signalling vserver commands */
++#define vxh_loc_vx_info(v, l) \
++ __vxh_long(v, l, VXH_LOC_VX_INFO, __HERE__);
++#define vxh_lookup_vx_info(v, l) \
++ __vxh_long(v, l, VXH_LOOKUP_VX_INFO, __HERE__);
++#define vxh_create_vx_info(v, l) \
++ __vxh_long(v, l, VXH_CREATE_VX_INFO, __HERE__);
+
-+#define VCMD_ctx_kill VC_CMD(PROCTRL, 1, 0)
-+#define VCMD_wait_exit VC_CMD(EVENT, 99, 0)
++extern void vxh_dump_history(void);
+
-+struct vcmd_ctx_kill_v0 {
-+ int32_t pid;
-+ int32_t sig;
-+};
+
-+struct vcmd_wait_exit_v0 {
-+ int32_t reboot_cmd;
-+ int32_t exit_code;
-+};
++#else /* CONFIG_VSERVER_HISTORY */
+
-+#ifdef __KERNEL__
++#define __HERE__ 0
+
-+extern int vc_ctx_kill(struct vx_info *, void __user *);
-+extern int vc_wait_exit(struct vx_info *, void __user *);
++#define vxh_throw_oops() do { } while (0)
+
-+#endif /* __KERNEL__ */
++#define __vxh_get_vx_info(v, h) do { } while (0)
++#define __vxh_put_vx_info(v, h) do { } while (0)
+
-+/* process alteration commands */
++#define __vxh_init_vx_info(v, d, h) do { } while (0)
++#define __vxh_set_vx_info(v, d, h) do { } while (0)
++#define __vxh_clr_vx_info(v, d, h) do { } while (0)
+
-+#define VCMD_get_pflags VC_CMD(PROCALT, 5, 0)
-+#define VCMD_set_pflags VC_CMD(PROCALT, 6, 0)
++#define __vxh_claim_vx_info(v, d, h) do { } while (0)
++#define __vxh_release_vx_info(v, d, h) do { } while (0)
+
-+struct vcmd_pflags_v0 {
-+ uint32_t flagword;
-+ uint32_t mask;
-+};
++#define vxh_alloc_vx_info(v) do { } while (0)
++#define vxh_dealloc_vx_info(v) do { } while (0)
+
-+#ifdef __KERNEL__
++#define vxh_hash_vx_info(v) do { } while (0)
++#define vxh_unhash_vx_info(v) do { } while (0)
+
-+extern int vc_get_pflags(uint32_t pid, void __user *);
-+extern int vc_set_pflags(uint32_t pid, void __user *);
++#define vxh_loc_vx_info(v, l) do { } while (0)
++#define vxh_lookup_vx_info(v, l) do { } while (0)
++#define vxh_create_vx_info(v, l) do { } while (0)
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_SIGNAL_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/signal.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/signal.h
---- linux-2.6.37/include/linux/vserver/signal.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/signal.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,14 @@
-+#ifndef _VX_SIGNAL_H
-+#define _VX_SIGNAL_H
++#define vxh_dump_history() do { } while (0)
+
+
-+#ifdef __KERNEL__
++#endif /* CONFIG_VSERVER_HISTORY */
+
-+struct vx_info;
-+
-+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-2.6.37/include/linux/vserver/space_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/space_cmd.h
---- linux-2.6.37/include/linux/vserver/space_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/space_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,38 @@
-+#ifndef _VX_SPACE_CMD_H
-+#define _VX_SPACE_CMD_H
-+
-+
-+#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 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 /* _VX_HISTORY_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/inode.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/inode.h
+--- linux-2.6.38-rc8/include/linux/vserver/inode.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/inode.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,39 @@
++#ifndef _VX_INODE_H
++#define _VX_INODE_H
+
-+#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)
++#define IATTR_TAG 0x01000000
+
++#define IATTR_ADMIN 0x00000001
++#define IATTR_WATCH 0x00000002
++#define IATTR_HIDE 0x00000004
++#define IATTR_FLAGS 0x00000007
+
-+struct vcmd_space_mask_v1 {
-+ uint64_t mask;
-+};
++#define IATTR_BARRIER 0x00010000
++#define IATTR_IXUNLINK 0x00020000
++#define IATTR_IMMUTABLE 0x00040000
++#define IATTR_COW 0x00080000
+
-+struct vcmd_space_mask_v2 {
-+ uint64_t mask;
-+ uint32_t index;
-+};
++#ifdef __KERNEL__
+
+
-+#ifdef __KERNEL__
++#ifdef CONFIG_VSERVER_PROC_SECURE
++#define IATTR_PROC_DEFAULT ( IATTR_ADMIN | IATTR_HIDE )
++#define IATTR_PROC_SYMLINK ( IATTR_ADMIN )
++#else
++#define IATTR_PROC_DEFAULT ( IATTR_ADMIN )
++#define IATTR_PROC_SYMLINK ( IATTR_ADMIN )
++#endif
+
-+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);
++#define vx_hide_check(c, m) (((m) & IATTR_HIDE) ? vx_check(c, m) : 1)
+
+#endif /* __KERNEL__ */
-+#endif /* _VX_SPACE_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/space.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/space.h
---- linux-2.6.37/include/linux/vserver/space.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/space.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,12 @@
-+#ifndef _VX_SPACE_H
-+#define _VX_SPACE_H
-+
-+#include <linux/types.h>
+
-+struct vx_info;
++/* inode ioctls */
+
-+int vx_set_space(struct vx_info *vxi, unsigned long mask, unsigned index);
++#define FIOC_GETXFLG _IOR('x', 5, long)
++#define FIOC_SETXFLG _IOW('x', 6, long)
+
-+#else /* _VX_SPACE_H */
++#else /* _VX_INODE_H */
+#warning duplicate inclusion
-+#endif /* _VX_SPACE_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/switch.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/switch.h
---- linux-2.6.37/include/linux/vserver/switch.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/switch.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,98 @@
-+#ifndef _VX_SWITCH_H
-+#define _VX_SWITCH_H
-+
-+#include <linux/types.h>
-+
-+
-+#define VC_CATEGORY(c) (((c) >> 24) & 0x3F)
-+#define VC_COMMAND(c) (((c) >> 16) & 0xFF)
-+#define VC_VERSION(c) ((c) & 0xFFF)
-+
-+#define VC_CMD(c, i, v) ((((VC_CAT_ ## c) & 0x3F) << 24) \
-+ | (((i) & 0xFF) << 16) | ((v) & 0xFFF))
++#endif /* _VX_INODE_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/inode_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/inode_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/inode_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/inode_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,59 @@
++#ifndef _VX_INODE_CMD_H
++#define _VX_INODE_CMD_H
+
-+/*
+
-+ Syscall Matrix V2.8
++/* inode vserver commands */
+
-+ |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 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)
+
-+#define VC_CAT_VERSION 0
++struct vcmd_ctx_iattr_v1 {
++ const char __user *name;
++ uint32_t tag;
++ uint32_t flags;
++ uint32_t mask;
++};
+
-+#define VC_CAT_VSETUP 1
-+#define VC_CAT_VHOST 2
++struct vcmd_ctx_fiattr_v0 {
++ uint32_t tag;
++ uint32_t flags;
++ uint32_t mask;
++};
+
-+#define VC_CAT_DEVICE 6
+
-+#define VC_CAT_VPROC 9
-+#define VC_CAT_PROCALT 10
-+#define VC_CAT_PROCMIG 11
-+#define VC_CAT_PROCTRL 12
++#ifdef __KERNEL__
+
-+#define VC_CAT_SCHED 14
-+#define VC_CAT_MEMCTRL 20
+
-+#define VC_CAT_VNET 25
-+#define VC_CAT_NETALT 26
-+#define VC_CAT_NETMIG 27
-+#define VC_CAT_NETCTRL 28
++#ifdef CONFIG_COMPAT
+
-+#define VC_CAT_TAGMIG 35
-+#define VC_CAT_DLIMIT 36
-+#define VC_CAT_INODE 38
++#include <asm/compat.h>
+
-+#define VC_CAT_VSTAT 40
-+#define VC_CAT_VINFO 46
-+#define VC_CAT_EVENT 48
++struct vcmd_ctx_iattr_v1_x32 {
++ compat_uptr_t name_ptr;
++ uint32_t tag;
++ uint32_t flags;
++ uint32_t mask;
++};
+
-+#define VC_CAT_FLAGS 52
-+#define VC_CAT_VSPACE 54
-+#define VC_CAT_DEBUG 56
-+#define VC_CAT_RLIMIT 60
++#endif /* CONFIG_COMPAT */
+
-+#define VC_CAT_SYSTEST 61
-+#define VC_CAT_COMPAT 63
++#include <linux/compiler.h>
+
-+/* query version */
++extern int vc_get_iattr(void __user *);
++extern int vc_set_iattr(void __user *);
+
-+#define VCMD_get_version VC_CMD(VERSION, 0, 0)
-+#define VCMD_get_vci VC_CMD(VERSION, 1, 0)
++extern int vc_fget_iattr(uint32_t, void __user *);
++extern int vc_fset_iattr(uint32_t, void __user *);
+
++#ifdef CONFIG_COMPAT
+
-+#ifdef __KERNEL__
++extern int vc_get_iattr_x32(void __user *);
++extern int vc_set_iattr_x32(void __user *);
+
-+#include <linux/errno.h>
++#endif /* CONFIG_COMPAT */
+
+#endif /* __KERNEL__ */
++#endif /* _VX_INODE_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/limit.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/limit.h
+--- linux-2.6.38-rc8/include/linux/vserver/limit.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/limit.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,71 @@
++#ifndef _VX_LIMIT_H
++#define _VX_LIMIT_H
+
-+#endif /* _VX_SWITCH_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
+
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/tag_cmd.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/tag_cmd.h
---- linux-2.6.37/include/linux/vserver/tag_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/tag_cmd.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,22 @@
-+#ifndef _VX_TAG_CMD_H
-+#define _VX_TAG_CMD_H
+
++#ifdef __KERNEL__
+
-+/* vinfo commands */
++#define VLIM_NOCHECK ((1L << VLIMIT_DENTRY) | (1L << RLIMIT_RSS))
+
-+#define VCMD_task_tag VC_CMD(VINFO, 3, 0)
++/* keep in sync with CRLIM_INFINITY */
+
-+#ifdef __KERNEL__
-+extern int vc_task_tag(uint32_t);
++#define VLIM_INFINITY (~0ULL)
+
-+#endif /* __KERNEL__ */
++#include <asm/atomic.h>
++#include <asm/resource.h>
+
-+/* context commands */
++#ifndef RLIM_INFINITY
++#warning RLIM_INFINITY is undefined
++#endif
+
-+#define VCMD_tag_migrate VC_CMD(TAGMIG, 1, 0)
++#define __rlim_val(l, r, v) ((l)->res[r].v)
+
-+#ifdef __KERNEL__
-+extern int vc_tag_migrate(uint32_t);
++#define __rlim_soft(l, r) __rlim_val(l, r, soft)
++#define __rlim_hard(l, r) __rlim_val(l, r, hard)
+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_TAG_CMD_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vserver/tag.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/tag.h
---- linux-2.6.37/include/linux/vserver/tag.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vserver/tag.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,143 @@
-+#ifndef _DX_TAG_H
-+#define _DX_TAG_H
++#define __rlim_rcur(l, r) __rlim_val(l, r, rcur)
++#define __rlim_rmin(l, r) __rlim_val(l, r, rmin)
++#define __rlim_rmax(l, r) __rlim_val(l, r, rmax)
+
-+#include <linux/types.h>
++#define __rlim_lhit(l, r) __rlim_val(l, r, lhit)
++#define __rlim_hit(l, r) atomic_inc(&__rlim_lhit(l, r))
+
++typedef atomic_long_t rlim_atomic_t;
++typedef unsigned long rlim_t;
+
-+#define DX_TAG(in) (IS_TAGGED(in))
++#define __rlim_get(l, r) atomic_long_read(&__rlim_rcur(l, r))
++#define __rlim_set(l, r, v) atomic_long_set(&__rlim_rcur(l, r), v)
++#define __rlim_inc(l, r) atomic_long_inc(&__rlim_rcur(l, r))
++#define __rlim_dec(l, r) atomic_long_dec(&__rlim_rcur(l, r))
++#define __rlim_add(l, r, v) atomic_long_add(v, &__rlim_rcur(l, r))
++#define __rlim_sub(l, r, v) atomic_long_sub(v, &__rlim_rcur(l, r))
+
+
-+#ifdef CONFIG_TAG_NFSD
-+#define DX_TAG_NFSD 1
++#if (RLIM_INFINITY == VLIM_INFINITY)
++#define VX_VLIM(r) ((long long)(long)(r))
++#define VX_RLIM(v) ((rlim_t)(v))
+#else
-+#define DX_TAG_NFSD 0
++#define VX_VLIM(r) (((r) == RLIM_INFINITY) \
++ ? VLIM_INFINITY : (long long)(r))
++#define VX_RLIM(v) (((v) == VLIM_INFINITY) \
++ ? RLIM_INFINITY : (rlim_t)(v))
+#endif
+
++struct sysinfo;
+
-+#ifdef CONFIG_TAGGING_NONE
-+
-+#define MAX_UID 0xFFFFFFFF
-+#define MAX_GID 0xFFFFFFFF
-+
-+#define INOTAG_TAG(cond, uid, gid, tag) (0)
-+
-+#define TAGINO_UID(cond, uid, tag) (uid)
-+#define TAGINO_GID(cond, gid, tag) (gid)
++void vx_vsi_meminfo(struct sysinfo *);
++void vx_vsi_swapinfo(struct sysinfo *);
++long vx_vsi_cached(struct sysinfo *);
+
-+#endif
++#define NUM_LIMITS 24
+
++#endif /* __KERNEL__ */
++#endif /* _VX_LIMIT_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/limit_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/limit_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/limit_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/limit_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,71 @@
++#ifndef _VX_LIMIT_CMD_H
++#define _VX_LIMIT_CMD_H
+
-+#ifdef CONFIG_TAGGING_GID16
+
-+#define MAX_UID 0xFFFFFFFF
-+#define MAX_GID 0x0000FFFF
++/* rlimit vserver commands */
+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? (((gid) >> 16) & 0xFFFF) : 0)
++#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)
+
-+#define TAGINO_UID(cond, uid, tag) (uid)
-+#define TAGINO_GID(cond, gid, tag) \
-+ ((cond) ? (((gid) & 0xFFFF) | ((tag) << 16)) : (gid))
++struct vcmd_ctx_rlimit_v0 {
++ uint32_t id;
++ uint64_t minimum;
++ uint64_t softlimit;
++ uint64_t maximum;
++};
+
-+#endif
++struct vcmd_ctx_rlimit_mask_v0 {
++ uint32_t minimum;
++ uint32_t softlimit;
++ uint32_t maximum;
++};
+
++#define VCMD_rlimit_stat VC_CMD(VSTAT, 1, 0)
+
-+#ifdef CONFIG_TAGGING_ID24
++struct vcmd_rlimit_stat_v0 {
++ uint32_t id;
++ uint32_t hits;
++ uint64_t value;
++ uint64_t minimum;
++ uint64_t maximum;
++};
+
-+#define MAX_UID 0x00FFFFFF
-+#define MAX_GID 0x00FFFFFF
++#define CRLIM_UNSET (0ULL)
++#define CRLIM_INFINITY (~0ULL)
++#define CRLIM_KEEP (~1ULL)
+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) : 0)
++#ifdef __KERNEL__
+
-+#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))
++#ifdef CONFIG_IA32_EMULATION
+
-+#endif
++struct vcmd_ctx_rlimit_v0_x32 {
++ uint32_t id;
++ uint64_t minimum;
++ uint64_t softlimit;
++ uint64_t maximum;
++} __attribute__ ((packed));
+
++#endif /* CONFIG_IA32_EMULATION */
+
-+#ifdef CONFIG_TAGGING_UID16
++#include <linux/compiler.h>
+
-+#define MAX_UID 0x0000FFFF
-+#define MAX_GID 0xFFFFFFFF
++extern int vc_get_rlimit_mask(uint32_t, void __user *);
++extern int vc_get_rlimit(struct vx_info *, void __user *);
++extern int vc_set_rlimit(struct vx_info *, void __user *);
++extern int vc_reset_hits(struct vx_info *, void __user *);
++extern int vc_reset_minmax(struct vx_info *, void __user *);
+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? (((uid) >> 16) & 0xFFFF) : 0)
++extern int vc_rlimit_stat(struct vx_info *, void __user *);
+
-+#define TAGINO_UID(cond, uid, tag) \
-+ ((cond) ? (((uid) & 0xFFFF) | ((tag) << 16)) : (uid))
-+#define TAGINO_GID(cond, gid, tag) (gid)
++#ifdef CONFIG_IA32_EMULATION
+
-+#endif
++extern int vc_get_rlimit_x32(struct vx_info *, void __user *);
++extern int vc_set_rlimit_x32(struct vx_info *, void __user *);
+
++#endif /* CONFIG_IA32_EMULATION */
+
-+#ifdef CONFIG_TAGGING_INTERN
++#endif /* __KERNEL__ */
++#endif /* _VX_LIMIT_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/limit_def.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/limit_def.h
+--- linux-2.6.38-rc8/include/linux/vserver/limit_def.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/limit_def.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,47 @@
++#ifndef _VX_LIMIT_DEF_H
++#define _VX_LIMIT_DEF_H
+
-+#define MAX_UID 0xFFFFFFFF
-+#define MAX_GID 0xFFFFFFFF
++#include <asm/atomic.h>
++#include <asm/resource.h>
+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? (tag) : 0)
++#include "limit.h"
+
-+#define TAGINO_UID(cond, uid, tag) (uid)
-+#define TAGINO_GID(cond, gid, tag) (gid)
+
-+#endif
++struct _vx_res_limit {
++ rlim_t soft; /* Context soft limit */
++ rlim_t hard; /* Context hard limit */
+
++ rlim_atomic_t rcur; /* Current value */
++ rlim_t rmin; /* Context minimum */
++ rlim_t rmax; /* Context maximum */
+
-+#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
++ atomic_t lhit; /* Limit hits */
++};
+
-+#ifndef CONFIG_TAGGING_INTERN
-+#define TAGINO_TAG(cond, tag) (0)
-+#else
-+#define TAGINO_TAG(cond, tag) ((cond) ? (tag) : 0)
-+#endif
++/* context sub struct */
+
-+#define INOTAG_UID(cond, uid, gid) \
-+ ((cond) ? ((uid) & MAX_UID) : (uid))
-+#define INOTAG_GID(cond, uid, gid) \
-+ ((cond) ? ((gid) & MAX_GID) : (gid))
++struct _vx_limit {
++ struct _vx_res_limit res[NUM_LIMITS];
++};
+
++#ifdef CONFIG_VSERVER_DEBUG
+
-+static inline uid_t dx_map_uid(uid_t uid)
++static inline void __dump_vx_limit(struct _vx_limit *limit)
+{
-+ if ((uid > MAX_UID) && (uid != -1))
-+ uid = -2;
-+ return (uid & MAX_UID);
-+}
++ int i;
+
-+static inline gid_t dx_map_gid(gid_t gid)
-+{
-+ if ((gid > MAX_GID) && (gid != -1))
-+ gid = -2;
-+ return (gid & MAX_GID);
++ printk("\t_vx_limit:");
++ for (i = 0; i < NUM_LIMITS; i++) {
++ printk("\t [%2d] = %8lu %8lu/%8lu, %8ld/%8ld, %8d\n",
++ i, (unsigned long)__rlim_get(limit, i),
++ (unsigned long)__rlim_rmin(limit, i),
++ (unsigned long)__rlim_rmax(limit, i),
++ (long)__rlim_soft(limit, i),
++ (long)__rlim_hard(limit, i),
++ atomic_read(&__rlim_lhit(limit, i)));
++ }
+}
+
-+struct peer_tag {
-+ int32_t xid;
-+ int32_t nid;
-+};
-+
-+#define dx_notagcheck(sb) ((sb) && ((sb)->s_flags & MS_NOTAGCHECK))
-+
-+int dx_parse_tag(char *string, tag_t *tag, int remove, int *mnt_flags,
-+ unsigned long *flags);
-+
-+#ifdef CONFIG_PROPAGATE
-+
-+void __dx_propagate_tag(struct nameidata *nd, struct inode *inode);
++#endif
+
-+#define dx_propagate_tag(n, i) __dx_propagate_tag(n, i)
++#endif /* _VX_LIMIT_DEF_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/limit_int.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/limit_int.h
+--- linux-2.6.38-rc8/include/linux/vserver/limit_int.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/limit_int.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,198 @@
++#ifndef _VX_LIMIT_INT_H
++#define _VX_LIMIT_INT_H
+
-+#else
-+#define dx_propagate_tag(n, i) do { } while (0)
-+#endif
++#include "context.h"
+
-+#endif /* _DX_TAG_H */
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_inet6.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_inet6.h
---- linux-2.6.37/include/linux/vs_inet6.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_inet6.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,246 @@
-+#ifndef _VS_INET6_H
-+#define _VS_INET6_H
++#ifdef __KERNEL__
+
-+#include "vserver/base.h"
-+#include "vserver/network.h"
-+#include "vserver/debug.h"
++#define VXD_RCRES_COND(r) VXD_CBIT(cres, r)
++#define VXD_RLIMIT_COND(r) VXD_CBIT(limit, r)
+
-+#include <net/ipv6.h>
++extern const char *vlimit_name[NUM_LIMITS];
+
-+#define NXAV6(a) &(a)->ip, &(a)->mask, (a)->prefix, (a)->type
-+#define NXAV6_FMT "[%pI6/%pI6/%d:%04x]"
++static inline void __vx_acc_cres(struct vx_info *vxi,
++ int res, int dir, void *_data, char *_file, int _line)
++{
++ if (VXD_RCRES_COND(res))
++ vxlprintk(1, "vx_acc_cres[%5d,%s,%2d]: %5ld%s (%p)",
++ (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
++ (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
++ (dir > 0) ? "++" : "--", _data, _file, _line);
++ if (!vxi)
++ return;
+
++ if (dir > 0)
++ __rlim_inc(&vxi->limit, res);
++ else
++ __rlim_dec(&vxi->limit, res);
++}
+
-+#ifdef CONFIG_IPV6
++static inline void __vx_add_cres(struct vx_info *vxi,
++ int res, int amount, void *_data, char *_file, int _line)
++{
++ if (VXD_RCRES_COND(res))
++ vxlprintk(1, "vx_add_cres[%5d,%s,%2d]: %5ld += %5d (%p)",
++ (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
++ (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
++ amount, _data, _file, _line);
++ if (amount == 0)
++ return;
++ if (!vxi)
++ return;
++ __rlim_add(&vxi->limit, res, amount);
++}
+
+static inline
-+int v6_addr_match(struct nx_addr_v6 *nxa,
-+ const struct in6_addr *addr, uint16_t mask)
++int __vx_cres_adjust_max(struct _vx_limit *limit, int res, rlim_t value)
+{
-+ int ret = 0;
++ int cond = (value > __rlim_rmax(limit, res));
+
-+ switch (nxa->type & mask) {
-+ case NXA_TYPE_MASK:
-+ ret = ipv6_masked_addr_cmp(&nxa->ip, &nxa->mask, addr);
-+ break;
-+ case NXA_TYPE_ADDR:
-+ ret = ipv6_addr_equal(&nxa->ip, addr);
-+ break;
-+ case NXA_TYPE_ANY:
-+ ret = 1;
-+ break;
-+ }
-+ vxdprintk(VXD_CBIT(net, 0),
-+ "v6_addr_match(%p" NXAV6_FMT ",%pI6,%04x) = %d",
-+ nxa, NXAV6(nxa), addr, mask, ret);
-+ return ret;
++ if (cond)
++ __rlim_rmax(limit, res) = value;
++ return cond;
+}
+
+static inline
-+int v6_addr_in_nx_info(struct nx_info *nxi,
-+ const struct in6_addr *addr, uint16_t mask)
++int __vx_cres_adjust_min(struct _vx_limit *limit, int res, rlim_t value)
+{
-+ struct nx_addr_v6 *nxa;
-+ int ret = 1;
++ int cond = (value < __rlim_rmin(limit, res));
+
-+ if (!nxi)
-+ goto out;
-+ for (nxa = &nxi->v6; nxa; nxa = nxa->next)
-+ if (v6_addr_match(nxa, addr, mask))
-+ goto out;
-+ ret = 0;
-+out:
-+ vxdprintk(VXD_CBIT(net, 0),
-+ "v6_addr_in_nx_info(%p[#%u],%pI6,%04x) = %d",
-+ nxi, nxi ? nxi->nx_id : 0, addr, mask, ret);
-+ return ret;
-+}
-+
-+static inline
-+int v6_nx_addr_match(struct nx_addr_v6 *nxa, struct nx_addr_v6 *addr, uint16_t mask)
-+{
-+ /* FIXME: needs full range checks */
-+ return v6_addr_match(nxa, &addr->ip, mask);
++ if (cond)
++ __rlim_rmin(limit, res) = value;
++ return cond;
+}
+
+static inline
-+int v6_nx_addr_in_nx_info(struct nx_info *nxi, struct nx_addr_v6 *nxa, uint16_t mask)
++void __vx_cres_fixup(struct _vx_limit *limit, int res, rlim_t value)
+{
-+ struct nx_addr_v6 *ptr;
-+
-+ for (ptr = &nxi->v6; ptr; ptr = ptr->next)
-+ if (v6_nx_addr_match(ptr, nxa, mask))
-+ return 1;
-+ return 0;
++ if (!__vx_cres_adjust_max(limit, res, value))
++ __vx_cres_adjust_min(limit, res, value);
+}
+
+
-+/*
-+ * Check if a given address matches for a socket
-+ *
-+ * nxi: the socket's nx_info if any
-+ * addr: to be verified address
-+ */
-+static inline
-+int v6_sock_addr_match (
-+ struct nx_info *nxi,
-+ struct inet_sock *inet,
-+ struct in6_addr *addr)
-+{
-+ struct sock *sk = &inet->sk;
-+ struct in6_addr *saddr = inet6_rcv_saddr(sk);
-+
-+ if (!ipv6_addr_any(addr) &&
-+ ipv6_addr_equal(saddr, addr))
-+ return 1;
-+ if (ipv6_addr_any(saddr))
-+ return v6_addr_in_nx_info(nxi, addr, -1);
-+ return 0;
-+}
-+
-+/*
-+ * check if address is covered by socket
-+ *
-+ * sk: the socket to check against
-+ * addr: the address in question (must be != 0)
-+ */
++/* return values:
++ +1 ... no limit hit
++ -1 ... over soft limit
++ 0 ... over hard limit */
+
-+static inline
-+int __v6_addr_match_socket(const struct sock *sk, struct nx_addr_v6 *nxa)
++static inline int __vx_cres_avail(struct vx_info *vxi,
++ int res, int num, char *_file, int _line)
+{
-+ struct nx_info *nxi = sk->sk_nx_info;
-+ struct in6_addr *saddr = inet6_rcv_saddr(sk);
-+
-+ vxdprintk(VXD_CBIT(net, 5),
-+ "__v6_addr_in_socket(%p," NXAV6_FMT ") %p:%pI6 %p;%lx",
-+ sk, NXAV6(nxa), nxi, saddr, sk->sk_socket,
-+ (sk->sk_socket?sk->sk_socket->flags:0));
++ struct _vx_limit *limit;
++ rlim_t value;
+
-+ if (!ipv6_addr_any(saddr)) { /* direct address match */
-+ return v6_addr_match(nxa, saddr, -1);
-+ } else if (nxi) { /* match against nx_info */
-+ return v6_nx_addr_in_nx_info(nxi, nxa, -1);
-+ } else { /* unrestricted any socket */
++ if (VXD_RLIMIT_COND(res))
++ vxlprintk(1, "vx_cres_avail[%5d,%s,%2d]: %5ld/%5ld > %5ld + %5d",
++ (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
++ (vxi ? (long)__rlim_soft(&vxi->limit, res) : -1),
++ (vxi ? (long)__rlim_hard(&vxi->limit, res) : -1),
++ (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
++ num, _file, _line);
++ if (!vxi)
+ return 1;
-+ }
-+}
-+
-+
-+/* inet related checks and helpers */
-+
-+
-+struct in_ifaddr;
-+struct net_device;
-+struct sock;
-+
-+
-+#include <linux/netdevice.h>
-+#include <linux/inetdevice.h>
-+#include <net/inet_timewait_sock.h>
-+
-+
-+int dev_in_nx_info(struct net_device *, struct nx_info *);
-+int v6_dev_in_nx_info(struct net_device *, struct nx_info *);
-+int nx_v6_addr_conflict(struct nx_info *, struct nx_info *);
+
++ limit = &vxi->limit;
++ value = __rlim_get(limit, res);
+
++ if (!__vx_cres_adjust_max(limit, res, value))
++ __vx_cres_adjust_min(limit, res, value);
+
-+static inline
-+int v6_ifa_in_nx_info(struct inet6_ifaddr *ifa, struct nx_info *nxi)
-+{
-+ if (!nxi)
++ if (num == 0)
+ return 1;
-+ if (!ifa)
-+ return 0;
-+ return v6_addr_in_nx_info(nxi, &ifa->addr, -1);
-+}
+
-+static inline
-+int nx_v6_ifa_visible(struct nx_info *nxi, struct inet6_ifaddr *ifa)
-+{
-+ vxdprintk(VXD_CBIT(net, 1), "nx_v6_ifa_visible(%p[#%u],%p) %d",
-+ nxi, nxi ? nxi->nx_id : 0, ifa,
-+ nxi ? v6_ifa_in_nx_info(ifa, nxi) : 0);
++ if (__rlim_soft(limit, res) == RLIM_INFINITY)
++ return -1;
++ if (value + num <= __rlim_soft(limit, res))
++ return -1;
+
-+ if (!nx_info_flags(nxi, NXF_HIDE_NETIF, 0))
++ if (__rlim_hard(limit, res) == RLIM_INFINITY)
+ return 1;
-+ if (v6_ifa_in_nx_info(ifa, nxi))
++ if (value + num <= __rlim_hard(limit, res))
+ return 1;
++
++ __rlim_hit(limit, res);
+ return 0;
+}
+
+
-+struct nx_v6_sock_addr {
-+ struct in6_addr saddr; /* Address used for validation */
-+ struct in6_addr baddr; /* Address used for socket bind */
-+};
++static const int VLA_RSS[] = { RLIMIT_RSS, VLIMIT_ANON, VLIMIT_MAPPED, 0 };
+
+static inline
-+int v6_map_sock_addr(struct inet_sock *inet, struct sockaddr_in6 *addr,
-+ struct nx_v6_sock_addr *nsa)
++rlim_t __vx_cres_array_sum(struct _vx_limit *limit, const int *array)
+{
-+ // struct sock *sk = &inet->sk;
-+ // struct nx_info *nxi = sk->sk_nx_info;
-+ struct in6_addr saddr = addr->sin6_addr;
-+ struct in6_addr baddr = saddr;
++ rlim_t value, sum = 0;
++ int res;
+
-+ nsa->saddr = saddr;
-+ nsa->baddr = baddr;
-+ return 0;
++ while ((res = *array++)) {
++ value = __rlim_get(limit, res);
++ __vx_cres_fixup(limit, res, value);
++ sum += value;
++ }
++ return sum;
+}
+
+static inline
-+void v6_set_sock_addr(struct inet_sock *inet, struct nx_v6_sock_addr *nsa)
++rlim_t __vx_cres_array_fixup(struct _vx_limit *limit, const int *array)
+{
-+ // struct sock *sk = &inet->sk;
-+ // struct in6_addr *saddr = inet6_rcv_saddr(sk);
++ rlim_t value = __vx_cres_array_sum(limit, array + 1);
++ int res = *array;
+
-+ // *saddr = nsa->baddr;
-+ // inet->inet_saddr = nsa->baddr;
++ if (value == __rlim_get(limit, res))
++ return value;
++
++ __rlim_set(limit, res, value);
++ /* now adjust min/max */
++ if (!__vx_cres_adjust_max(limit, res, value))
++ __vx_cres_adjust_min(limit, res, value);
++
++ return value;
+}
+
-+static inline
-+int nx_info_has_v6(struct nx_info *nxi)
++static inline int __vx_cres_array_avail(struct vx_info *vxi,
++ const int *array, int num, char *_file, int _line)
+{
-+ if (!nxi)
++ struct _vx_limit *limit;
++ rlim_t value = 0;
++ int res;
++
++ if (num == 0)
+ return 1;
-+ if (NX_IPV6(nxi))
++ if (!vxi)
+ return 1;
-+ return 0;
-+}
+
-+#else /* CONFIG_IPV6 */
++ limit = &vxi->limit;
++ res = *array;
++ value = __vx_cres_array_sum(limit, array + 1);
+
-+static inline
-+int nx_v6_dev_visible(struct nx_info *n, struct net_device *d)
-+{
-+ return 1;
++ __rlim_set(limit, res, value);
++ __vx_cres_fixup(limit, res, value);
++
++ return __vx_cres_avail(vxi, res, num, _file, _line);
+}
+
+
-+static inline
-+int nx_v6_addr_conflict(struct nx_info *n, uint32_t a, const struct sock *s)
++static inline void vx_limit_fixup(struct _vx_limit *limit, int id)
+{
-+ return 1;
-+}
++ rlim_t value;
++ int res;
+
-+static inline
-+int v6_ifa_in_nx_info(struct in_ifaddr *a, struct nx_info *n)
-+{
-+ return 1;
-+}
++ /* complex resources first */
++ if ((id < 0) || (id == RLIMIT_RSS))
++ __vx_cres_array_fixup(limit, VLA_RSS);
+
-+static inline
-+int nx_info_has_v6(struct nx_info *nxi)
-+{
-+ return 0;
++ for (res = 0; res < NUM_LIMITS; res++) {
++ if ((id > 0) && (res != id))
++ continue;
++
++ value = __rlim_get(limit, res);
++ __vx_cres_fixup(limit, res, value);
++
++ /* not supposed to happen, maybe warn? */
++ if (__rlim_rmax(limit, res) > __rlim_hard(limit, res))
++ __rlim_rmax(limit, res) = __rlim_hard(limit, res);
++ }
+}
+
-+#endif /* CONFIG_IPV6 */
+
-+#define current_nx_info_has_v6() \
-+ nx_info_has_v6(current_nx_info())
++#endif /* __KERNEL__ */
++#endif /* _VX_LIMIT_INT_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/monitor.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/monitor.h
+--- linux-2.6.38-rc8/include/linux/vserver/monitor.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/monitor.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,96 @@
++#ifndef _VX_MONITOR_H
++#define _VX_MONITOR_H
+
-+#else
-+#warning duplicate inclusion
-+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_inet.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_inet.h
---- linux-2.6.37/include/linux/vs_inet.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_inet.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,351 @@
-+#ifndef _VS_INET_H
-+#define _VS_INET_H
++#include <linux/types.h>
+
-+#include "vserver/base.h"
-+#include "vserver/network.h"
-+#include "vserver/debug.h"
++enum {
++ VXM_UNUSED = 0,
+
-+#define IPI_LOOPBACK htonl(INADDR_LOOPBACK)
++ VXM_SYNC = 0x10,
+
-+#define NXAV4(a) NIPQUAD((a)->ip[0]), NIPQUAD((a)->ip[1]), \
-+ NIPQUAD((a)->mask), (a)->type
-+#define NXAV4_FMT "[" NIPQUAD_FMT "-" NIPQUAD_FMT "/" NIPQUAD_FMT ":%04x]"
++ VXM_UPDATE = 0x20,
++ VXM_UPDATE_1,
++ VXM_UPDATE_2,
+
-+#define NIPQUAD(addr) \
-+ ((unsigned char *)&addr)[0], \
-+ ((unsigned char *)&addr)[1], \
-+ ((unsigned char *)&addr)[2], \
-+ ((unsigned char *)&addr)[3]
++ VXM_RQINFO_1 = 0x24,
++ VXM_RQINFO_2,
+
-+#define NIPQUAD_FMT "%u.%u.%u.%u"
++ VXM_ACTIVATE = 0x40,
++ VXM_DEACTIVATE,
++ VXM_IDLE,
+
++ VXM_HOLD = 0x44,
++ VXM_UNHOLD,
+
-+static inline
-+int v4_addr_match(struct nx_addr_v4 *nxa, __be32 addr, uint16_t tmask)
-+{
-+ __be32 ip = nxa->ip[0].s_addr;
-+ __be32 mask = nxa->mask.s_addr;
-+ __be32 bcast = ip | ~mask;
-+ int ret = 0;
++ VXM_MIGRATE = 0x48,
++ VXM_RESCHED,
+
-+ switch (nxa->type & tmask) {
-+ case NXA_TYPE_MASK:
-+ ret = (ip == (addr & mask));
-+ break;
-+ case NXA_TYPE_ADDR:
-+ ret = 3;
-+ if (addr == ip)
-+ break;
-+ /* fall through to broadcast */
-+ case NXA_MOD_BCAST:
-+ ret = ((tmask & NXA_MOD_BCAST) && (addr == bcast));
-+ break;
-+ case NXA_TYPE_RANGE:
-+ ret = ((nxa->ip[0].s_addr <= addr) &&
-+ (nxa->ip[1].s_addr > addr));
-+ break;
-+ case NXA_TYPE_ANY:
-+ ret = 2;
-+ break;
-+ }
++ /* all other bits are flags */
++ VXM_SCHED = 0x80,
++};
+
-+ vxdprintk(VXD_CBIT(net, 0),
-+ "v4_addr_match(%p" NXAV4_FMT "," NIPQUAD_FMT ",%04x) = %d",
-+ nxa, NXAV4(nxa), NIPQUAD(addr), tmask, ret);
-+ return ret;
-+}
++struct _vxm_update_1 {
++ uint32_t tokens_max;
++ uint32_t fill_rate;
++ uint32_t interval;
++};
+
-+static inline
-+int v4_addr_in_nx_info(struct nx_info *nxi, __be32 addr, uint16_t tmask)
-+{
-+ struct nx_addr_v4 *nxa;
-+ int ret = 1;
++struct _vxm_update_2 {
++ uint32_t tokens_min;
++ uint32_t fill_rate;
++ uint32_t interval;
++};
+
-+ if (!nxi)
-+ goto out;
++struct _vxm_rqinfo_1 {
++ uint16_t running;
++ uint16_t onhold;
++ uint16_t iowait;
++ uint16_t uintr;
++ uint32_t idle_tokens;
++};
+
-+ ret = 2;
-+ /* allow 127.0.0.1 when remapping lback */
-+ if ((tmask & NXA_LOOPBACK) &&
-+ (addr == IPI_LOOPBACK) &&
-+ nx_info_flags(nxi, NXF_LBACK_REMAP, 0))
-+ goto out;
-+ ret = 3;
-+ /* check for lback address */
-+ if ((tmask & NXA_MOD_LBACK) &&
-+ (nxi->v4_lback.s_addr == addr))
-+ goto out;
-+ ret = 4;
-+ /* check for broadcast address */
-+ if ((tmask & NXA_MOD_BCAST) &&
-+ (nxi->v4_bcast.s_addr == addr))
-+ goto out;
-+ ret = 5;
-+ /* check for v4 addresses */
-+ for (nxa = &nxi->v4; nxa; nxa = nxa->next)
-+ if (v4_addr_match(nxa, addr, tmask))
-+ goto out;
-+ ret = 0;
-+out:
-+ 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);
-+ return ret;
-+}
++struct _vxm_rqinfo_2 {
++ uint32_t norm_time;
++ uint32_t idle_time;
++ uint32_t idle_skip;
++};
+
-+static inline
-+int v4_nx_addr_match(struct nx_addr_v4 *nxa, struct nx_addr_v4 *addr, uint16_t mask)
-+{
-+ /* FIXME: needs full range checks */
-+ return v4_addr_match(nxa, addr->ip[0].s_addr, mask);
-+}
++struct _vxm_sched {
++ uint32_t tokens;
++ uint32_t norm_time;
++ uint32_t idle_time;
++};
+
-+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;
++struct _vxm_task {
++ uint16_t pid;
++ uint16_t state;
++};
+
-+ for (ptr = &nxi->v4; ptr; ptr = ptr->next)
-+ if (v4_nx_addr_match(ptr, nxa, mask))
-+ return 1;
-+ return 0;
-+}
++struct _vxm_event {
++ uint32_t jif;
++ union {
++ uint32_t seq;
++ uint32_t sec;
++ };
++ union {
++ uint32_t tokens;
++ uint32_t nsec;
++ struct _vxm_task tsk;
++ };
++};
+
-+#include <net/inet_sock.h>
++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;
++ };
++};
+
-+/*
-+ * Check if a given address matches for a socket
-+ *
-+ * nxi: the socket's nx_info if any
-+ * addr: to be verified address
-+ */
-+static inline
-+int v4_sock_addr_match (
-+ struct nx_info *nxi,
-+ struct inet_sock *inet,
-+ __be32 addr)
-+{
-+ __be32 saddr = inet->inet_rcv_saddr;
-+ __be32 bcast = nxi ? nxi->v4_bcast.s_addr : INADDR_BROADCAST;
+
-+ if (addr && (saddr == addr || bcast == addr))
-+ return 1;
-+ if (!saddr)
-+ return v4_addr_in_nx_info(nxi, addr, NXA_MASK_BIND);
-+ return 0;
-+}
++#endif /* _VX_MONITOR_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/network.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/network.h
+--- linux-2.6.38-rc8/include/linux/vserver/network.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/network.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,146 @@
++#ifndef _VX_NETWORK_H
++#define _VX_NETWORK_H
+
++#include <linux/types.h>
+
-+/* inet related checks and helpers */
+
++#define MAX_N_CONTEXT 65535 /* Arbitrary limit */
+
-+struct in_ifaddr;
-+struct net_device;
-+struct sock;
+
-+#ifdef CONFIG_INET
++/* network flags */
+
-+#include <linux/netdevice.h>
-+#include <linux/inetdevice.h>
-+#include <net/inet_sock.h>
-+#include <net/inet_timewait_sock.h>
++#define NXF_INFO_PRIVATE 0x00000008
+
++#define NXF_SINGLE_IP 0x00000100
++#define NXF_LBACK_REMAP 0x00000200
++#define NXF_LBACK_ALLOW 0x00000400
+
-+int dev_in_nx_info(struct net_device *, struct nx_info *);
-+int v4_dev_in_nx_info(struct net_device *, struct nx_info *);
-+int nx_v4_addr_conflict(struct nx_info *, struct nx_info *);
++#define NXF_HIDE_NETIF 0x02000000
++#define NXF_HIDE_LBACK 0x04000000
+
++#define NXF_STATE_SETUP (1ULL << 32)
++#define NXF_STATE_ADMIN (1ULL << 34)
+
-+/*
-+ * check if address is covered by socket
-+ *
-+ * sk: the socket to check against
-+ * addr: the address in question (must be != 0)
-+ */
++#define NXF_SC_HELPER (1ULL << 36)
++#define NXF_PERSISTENT (1ULL << 38)
+
-+static inline
-+int __v4_addr_match_socket(const struct sock *sk, struct nx_addr_v4 *nxa)
-+{
-+ struct nx_info *nxi = sk->sk_nx_info;
-+ __be32 saddr = inet_rcv_saddr(sk);
++#define NXF_ONE_TIME (0x0005ULL << 32)
+
-+ vxdprintk(VXD_CBIT(net, 5),
-+ "__v4_addr_in_socket(%p," NXAV4_FMT ") %p:" NIPQUAD_FMT " %p;%lx",
-+ sk, NXAV4(nxa), nxi, NIPQUAD(saddr), sk->sk_socket,
-+ (sk->sk_socket?sk->sk_socket->flags:0));
+
-+ if (saddr) { /* direct address match */
-+ return v4_addr_match(nxa, saddr, -1);
-+ } else if (nxi) { /* match against nx_info */
-+ return v4_nx_addr_in_nx_info(nxi, nxa, -1);
-+ } else { /* unrestricted any socket */
-+ return 1;
-+ }
++#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 */
+
-+static inline
-+int nx_dev_visible(struct nx_info *nxi, struct net_device *dev)
-+{
-+ vxdprintk(VXD_CBIT(net, 1),
-+ "nx_dev_visible(%p[#%u],%p " VS_Q("%s") ") %d",
-+ nxi, nxi ? nxi->nx_id : 0, dev, dev->name,
-+ nxi ? dev_in_nx_info(dev, nxi) : 0);
++#define NXC_TUN_CREATE 0x00000001
+
-+ if (!nx_info_flags(nxi, NXF_HIDE_NETIF, 0))
-+ return 1;
-+ if (dev_in_nx_info(dev, nxi))
-+ return 1;
-+ return 0;
-+}
++#define NXC_RAW_ICMP 0x00000100
+
+
-+static inline
-+int v4_ifa_in_nx_info(struct in_ifaddr *ifa, struct nx_info *nxi)
-+{
-+ if (!nxi)
-+ return 1;
-+ if (!ifa)
-+ return 0;
-+ return v4_addr_in_nx_info(nxi, ifa->ifa_local, NXA_MASK_SHOW);
-+}
++/* address types */
+
-+static inline
-+int nx_v4_ifa_visible(struct nx_info *nxi, struct in_ifaddr *ifa)
-+{
-+ vxdprintk(VXD_CBIT(net, 1), "nx_v4_ifa_visible(%p[#%u],%p) %d",
-+ nxi, nxi ? nxi->nx_id : 0, ifa,
-+ nxi ? v4_ifa_in_nx_info(ifa, nxi) : 0);
++#define NXA_TYPE_IPV4 0x0001
++#define NXA_TYPE_IPV6 0x0002
+
-+ if (!nx_info_flags(nxi, NXF_HIDE_NETIF, 0))
-+ return 1;
-+ if (v4_ifa_in_nx_info(ifa, nxi))
-+ return 1;
-+ return 0;
-+}
++#define NXA_TYPE_NONE 0x0000
++#define NXA_TYPE_ANY 0x00FF
+
++#define NXA_TYPE_ADDR 0x0010
++#define NXA_TYPE_MASK 0x0020
++#define NXA_TYPE_RANGE 0x0040
+
-+struct nx_v4_sock_addr {
-+ __be32 saddr; /* Address used for validation */
-+ __be32 baddr; /* Address used for socket bind */
-+};
++#define NXA_MASK_ALL (NXA_TYPE_ADDR | NXA_TYPE_MASK | NXA_TYPE_RANGE)
+
-+static inline
-+int v4_map_sock_addr(struct inet_sock *inet, struct sockaddr_in *addr,
-+ struct nx_v4_sock_addr *nsa)
-+{
-+ struct sock *sk = &inet->sk;
-+ struct nx_info *nxi = sk->sk_nx_info;
-+ __be32 saddr = addr->sin_addr.s_addr;
-+ __be32 baddr = saddr;
++#define NXA_MOD_BCAST 0x0100
++#define NXA_MOD_LBACK 0x0200
+
-+ vxdprintk(VXD_CBIT(net, 3),
-+ "inet_bind(%p)* %p,%p;%lx " NIPQUAD_FMT,
-+ sk, sk->sk_nx_info, sk->sk_socket,
-+ (sk->sk_socket ? sk->sk_socket->flags : 0),
-+ NIPQUAD(saddr));
++#define NXA_LOOPBACK 0x1000
+
-+ if (nxi) {
-+ if (saddr == INADDR_ANY) {
-+ if (nx_info_flags(nxi, NXF_SINGLE_IP, 0))
-+ baddr = nxi->v4.ip[0].s_addr;
-+ } else if (saddr == IPI_LOOPBACK) {
-+ if (nx_info_flags(nxi, NXF_LBACK_REMAP, 0))
-+ baddr = nxi->v4_lback.s_addr;
-+ } else { /* normal address bind */
-+ if (!v4_addr_in_nx_info(nxi, saddr, NXA_MASK_BIND))
-+ return -EADDRNOTAVAIL;
-+ }
-+ }
++#define NXA_MASK_BIND (NXA_MASK_ALL | NXA_MOD_BCAST | NXA_MOD_LBACK)
++#define NXA_MASK_SHOW (NXA_MASK_ALL | NXA_LOOPBACK)
+
-+ vxdprintk(VXD_CBIT(net, 3),
-+ "inet_bind(%p) " NIPQUAD_FMT ", " NIPQUAD_FMT,
-+ sk, NIPQUAD(saddr), NIPQUAD(baddr));
++#ifdef __KERNEL__
+
-+ nsa->saddr = saddr;
-+ nsa->baddr = baddr;
-+ return 0;
-+}
++#include <linux/list.h>
++#include <linux/spinlock.h>
++#include <linux/rcupdate.h>
++#include <linux/in.h>
++#include <linux/in6.h>
++#include <asm/atomic.h>
+
-+static inline
-+void v4_set_sock_addr(struct inet_sock *inet, struct nx_v4_sock_addr *nsa)
-+{
-+ inet->inet_saddr = nsa->baddr;
-+ inet->inet_rcv_saddr = nsa->baddr;
-+}
++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 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;
++};
+
-+/*
-+ * helper to simplify inet_lookup_listener
-+ *
-+ * nxi: the socket's nx_info if any
-+ * addr: to be verified address
-+ * saddr: socket address
-+ */
-+static inline int v4_inet_addr_match (
-+ struct nx_info *nxi,
-+ __be32 addr,
-+ __be32 saddr)
-+{
-+ if (addr && (saddr == addr))
-+ return 1;
-+ if (!saddr)
-+ return nxi ? v4_addr_in_nx_info(nxi, addr, NXA_MASK_BIND) : 1;
-+ return 0;
-+}
++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 */
+
-+static inline __be32 nx_map_sock_lback(struct nx_info *nxi, __be32 addr)
-+{
-+ if (nx_info_flags(nxi, NXF_HIDE_LBACK, 0) &&
-+ (addr == nxi->v4_lback.s_addr))
-+ return IPI_LOOPBACK;
-+ return addr;
-+}
++ uint64_t nx_flags; /* network flag word */
++ uint64_t nx_ncaps; /* network capabilities */
+
-+static inline
-+int nx_info_has_v4(struct nx_info *nxi)
-+{
-+ if (!nxi)
-+ return 1;
-+ if (NX_IPV4(nxi))
-+ return 1;
-+ if (nx_info_flags(nxi, NXF_LBACK_REMAP, 0))
-+ return 1;
-+ return 0;
-+}
++ 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 */
++};
+
-+#else /* CONFIG_INET */
+
-+static inline
-+int nx_dev_visible(struct nx_info *n, struct net_device *d)
-+{
-+ return 1;
-+}
++/* status flags */
+
-+static inline
-+int nx_v4_addr_conflict(struct nx_info *n, uint32_t a, const struct sock *s)
-+{
-+ return 1;
-+}
++#define NXS_HASHED 0x0001
++#define NXS_SHUTDOWN 0x0100
++#define NXS_RELEASED 0x8000
+
-+static inline
-+int v4_ifa_in_nx_info(struct in_ifaddr *a, struct nx_info *n)
-+{
-+ return 1;
-+}
++extern struct nx_info *lookup_nx_info(int);
+
-+static inline
-+int nx_info_has_v4(struct nx_info *nxi)
-+{
-+ return 0;
-+}
++extern int get_nid_list(int, unsigned int *, int);
++extern int nid_is_hashed(nid_t);
+
-+#endif /* CONFIG_INET */
++extern int nx_migrate_task(struct task_struct *, struct nx_info *);
++
++extern long vs_net_change(struct nx_info *, unsigned int);
++
++struct sock;
+
-+#define current_nx_info_has_v4() \
-+ nx_info_has_v4(current_nx_info())
+
++#define NX_IPV4(n) ((n)->v4.type != NXA_TYPE_NONE)
++#ifdef CONFIG_IPV6
++#define NX_IPV6(n) ((n)->v6.type != NXA_TYPE_NONE)
+#else
-+// #warning duplicate inclusion
++#define NX_IPV6(n) (0)
+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_limit.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_limit.h
---- linux-2.6.37/include/linux/vs_limit.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_limit.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,140 @@
-+#ifndef _VS_LIMIT_H
-+#define _VS_LIMIT_H
+
-+#include "vserver/limit.h"
-+#include "vserver/base.h"
-+#include "vserver/context.h"
-+#include "vserver/debug.h"
-+#include "vserver/context.h"
-+#include "vserver/limit_int.h"
++#endif /* __KERNEL__ */
++#endif /* _VX_NETWORK_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/network_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/network_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/network_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/network_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,150 @@
++#ifndef _VX_NETWORK_CMD_H
++#define _VX_NETWORK_CMD_H
+
+
-+#define vx_acc_cres(v, d, p, r) \
-+ __vx_acc_cres(v, r, d, p, __FILE__, __LINE__)
++/* vinfo commands */
+
-+#define vx_acc_cres_cond(x, d, p, r) \
-+ __vx_acc_cres(((x) == vx_current_xid()) ? current_vx_info() : 0, \
-+ r, d, p, __FILE__, __LINE__)
++#define VCMD_task_nid VC_CMD(VINFO, 2, 0)
+
++#ifdef __KERNEL__
++extern int vc_task_nid(uint32_t);
+
-+#define vx_add_cres(v, a, p, r) \
-+ __vx_add_cres(v, r, a, p, __FILE__, __LINE__)
-+#define vx_sub_cres(v, a, p, r) vx_add_cres(v, -(a), p, r)
++#endif /* __KERNEL__ */
+
-+#define vx_add_cres_cond(x, a, p, r) \
-+ __vx_add_cres(((x) == vx_current_xid()) ? current_vx_info() : 0, \
-+ r, a, p, __FILE__, __LINE__)
-+#define vx_sub_cres_cond(x, a, p, r) vx_add_cres_cond(x, -(a), p, r)
++#define VCMD_nx_info VC_CMD(VINFO, 6, 0)
+
++struct vcmd_nx_info_v0 {
++ uint32_t nid;
++ /* more to come */
++};
+
-+/* process and file limits */
++#ifdef __KERNEL__
++extern int vc_nx_info(struct nx_info *, void __user *);
+
-+#define vx_nproc_inc(p) \
-+ vx_acc_cres((p)->vx_info, 1, p, RLIMIT_NPROC)
++#endif /* __KERNEL__ */
+
-+#define vx_nproc_dec(p) \
-+ vx_acc_cres((p)->vx_info,-1, p, RLIMIT_NPROC)
++#include <linux/in.h>
++#include <linux/in6.h>
+
-+#define vx_files_inc(f) \
-+ vx_acc_cres_cond((f)->f_xid, 1, f, RLIMIT_NOFILE)
++#define VCMD_net_create_v0 VC_CMD(VNET, 1, 0)
++#define VCMD_net_create VC_CMD(VNET, 1, 1)
+
-+#define vx_files_dec(f) \
-+ vx_acc_cres_cond((f)->f_xid,-1, f, RLIMIT_NOFILE)
++struct vcmd_net_create {
++ uint64_t flagword;
++};
+
-+#define vx_locks_inc(l) \
-+ vx_acc_cres_cond((l)->fl_xid, 1, l, RLIMIT_LOCKS)
++#define VCMD_net_migrate VC_CMD(NETMIG, 1, 0)
+
-+#define vx_locks_dec(l) \
-+ vx_acc_cres_cond((l)->fl_xid,-1, l, RLIMIT_LOCKS)
++#define VCMD_net_add VC_CMD(NETALT, 1, 0)
++#define VCMD_net_remove VC_CMD(NETALT, 2, 0)
+
-+#define vx_openfd_inc(f) \
-+ vx_acc_cres(current_vx_info(), 1, (void *)(long)(f), VLIMIT_OPENFD)
++struct vcmd_net_addr_v0 {
++ uint16_t type;
++ uint16_t count;
++ struct in_addr ip[4];
++ struct in_addr mask[4];
++};
+
-+#define vx_openfd_dec(f) \
-+ vx_acc_cres(current_vx_info(),-1, (void *)(long)(f), VLIMIT_OPENFD)
++#define VCMD_net_add_ipv4 VC_CMD(NETALT, 1, 1)
++#define VCMD_net_remove_ipv4 VC_CMD(NETALT, 2, 1)
+
++struct vcmd_net_addr_ipv4_v1 {
++ uint16_t type;
++ uint16_t flags;
++ struct in_addr ip;
++ struct in_addr mask;
++};
+
-+#define vx_cres_avail(v, n, r) \
-+ __vx_cres_avail(v, r, n, __FILE__, __LINE__)
++#define VCMD_net_add_ipv6 VC_CMD(NETALT, 3, 1)
++#define VCMD_net_remove_ipv6 VC_CMD(NETALT, 4, 1)
+
++struct vcmd_net_addr_ipv6_v1 {
++ uint16_t type;
++ uint16_t flags;
++ uint32_t prefix;
++ struct in6_addr ip;
++ struct in6_addr mask;
++};
+
-+#define vx_nproc_avail(n) \
-+ vx_cres_avail(current_vx_info(), n, RLIMIT_NPROC)
++#define VCMD_add_match_ipv4 VC_CMD(NETALT, 5, 0)
++#define VCMD_get_match_ipv4 VC_CMD(NETALT, 6, 0)
+
-+#define vx_files_avail(n) \
-+ vx_cres_avail(current_vx_info(), n, RLIMIT_NOFILE)
++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 vx_locks_avail(n) \
-+ vx_cres_avail(current_vx_info(), n, RLIMIT_LOCKS)
++#define VCMD_add_match_ipv6 VC_CMD(NETALT, 7, 0)
++#define VCMD_get_match_ipv6 VC_CMD(NETALT, 8, 0)
+
-+#define vx_openfd_avail(n) \
-+ vx_cres_avail(current_vx_info(), n, VLIMIT_OPENFD)
++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;
++};
+
+
-+/* dentry limits */
++#ifdef __KERNEL__
++extern int vc_net_create(uint32_t, void __user *);
++extern int vc_net_migrate(struct nx_info *, void __user *);
+
-+#define vx_dentry_inc(d) do { \
-+ if (atomic_read(&d->d_count) == 1) \
-+ vx_acc_cres(current_vx_info(), 1, d, VLIMIT_DENTRY); \
-+ } while (0)
++extern int vc_net_add(struct nx_info *, void __user *);
++extern int vc_net_remove(struct nx_info *, void __user *);
+
-+#define vx_dentry_dec(d) do { \
-+ if (atomic_read(&d->d_count) == 0) \
-+ vx_acc_cres(current_vx_info(),-1, d, VLIMIT_DENTRY); \
-+ } while (0)
++extern int vc_net_add_ipv4(struct nx_info *, void __user *);
++extern int vc_net_remove_ipv4(struct nx_info *, void __user *);
+
-+#define vx_dentry_avail(n) \
-+ vx_cres_avail(current_vx_info(), n, VLIMIT_DENTRY)
++extern int vc_net_add_ipv6(struct nx_info *, void __user *);
++extern int vc_net_remove_ipv6(struct nx_info *, void __user *);
+
++extern int vc_add_match_ipv4(struct nx_info *, void __user *);
++extern int vc_get_match_ipv4(struct nx_info *, void __user *);
+
-+/* socket limits */
++extern int vc_add_match_ipv6(struct nx_info *, void __user *);
++extern int vc_get_match_ipv6(struct nx_info *, void __user *);
+
-+#define vx_sock_inc(s) \
-+ vx_acc_cres((s)->sk_vx_info, 1, s, VLIMIT_NSOCK)
++#endif /* __KERNEL__ */
+
-+#define vx_sock_dec(s) \
-+ vx_acc_cres((s)->sk_vx_info,-1, s, VLIMIT_NSOCK)
+
-+#define vx_sock_avail(n) \
-+ vx_cres_avail(current_vx_info(), n, VLIMIT_NSOCK)
++/* flag commands */
+
++#define VCMD_get_nflags VC_CMD(FLAGS, 5, 0)
++#define VCMD_set_nflags VC_CMD(FLAGS, 6, 0)
+
-+/* ipc resource limits */
++struct vcmd_net_flags_v0 {
++ uint64_t flagword;
++ uint64_t mask;
++};
+
-+#define vx_ipcmsg_add(v, u, a) \
-+ vx_add_cres(v, a, u, RLIMIT_MSGQUEUE)
++#ifdef __KERNEL__
++extern int vc_get_nflags(struct nx_info *, void __user *);
++extern int vc_set_nflags(struct nx_info *, void __user *);
+
-+#define vx_ipcmsg_sub(v, u, a) \
-+ vx_sub_cres(v, a, u, RLIMIT_MSGQUEUE)
++#endif /* __KERNEL__ */
+
-+#define vx_ipcmsg_avail(v, a) \
-+ vx_cres_avail(v, a, RLIMIT_MSGQUEUE)
+
++/* network caps commands */
+
-+#define vx_ipcshm_add(v, k, a) \
-+ vx_add_cres(v, a, (void *)(long)(k), VLIMIT_SHMEM)
++#define VCMD_get_ncaps VC_CMD(FLAGS, 7, 0)
++#define VCMD_set_ncaps VC_CMD(FLAGS, 8, 0)
+
-+#define vx_ipcshm_sub(v, k, a) \
-+ vx_sub_cres(v, a, (void *)(long)(k), VLIMIT_SHMEM)
++struct vcmd_net_caps_v0 {
++ uint64_t ncaps;
++ uint64_t cmask;
++};
+
-+#define vx_ipcshm_avail(v, a) \
-+ vx_cres_avail(v, a, VLIMIT_SHMEM)
++#ifdef __KERNEL__
++extern int vc_get_ncaps(struct nx_info *, void __user *);
++extern int vc_set_ncaps(struct nx_info *, void __user *);
+
++#endif /* __KERNEL__ */
++#endif /* _VX_CONTEXT_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/percpu.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/percpu.h
+--- linux-2.6.38-rc8/include/linux/vserver/percpu.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/percpu.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,14 @@
++#ifndef _VX_PERCPU_H
++#define _VX_PERCPU_H
+
-+#define vx_semary_inc(a) \
-+ vx_acc_cres(current_vx_info(), 1, a, VLIMIT_SEMARY)
++#include "cvirt_def.h"
++#include "sched_def.h"
+
-+#define vx_semary_dec(a) \
-+ vx_acc_cres(current_vx_info(), -1, a, VLIMIT_SEMARY)
++struct _vx_percpu {
++ struct _vx_cvirt_pc cvirt;
++ struct _vx_sched_pc sched;
++};
+
++#define PERCPU_PERCTX (sizeof(struct _vx_percpu))
+
-+#define vx_nsems_add(a,n) \
-+ vx_add_cres(current_vx_info(), n, a, VLIMIT_NSEMS)
++#endif /* _VX_PERCPU_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/pid.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/pid.h
+--- linux-2.6.38-rc8/include/linux/vserver/pid.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/pid.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,51 @@
++#ifndef _VSERVER_PID_H
++#define _VSERVER_PID_H
+
-+#define vx_nsems_sub(a,n) \
-+ vx_sub_cres(current_vx_info(), n, a, VLIMIT_NSEMS)
++/* pid faking stuff */
+
++#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)
+
-+#else
-+#warning duplicate inclusion
-+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_memory.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_memory.h
---- linux-2.6.37/include/linux/vs_memory.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_memory.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,58 @@
-+#ifndef _VS_MEMORY_H
-+#define _VS_MEMORY_H
++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;
++}
+
-+#include "vserver/limit.h"
-+#include "vserver/base.h"
-+#include "vserver/context.h"
-+#include "vserver/debug.h"
-+#include "vserver/context.h"
-+#include "vserver/limit_int.h"
++#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)
+
-+enum {
-+ VXPT_UNKNOWN = 0,
-+ VXPT_ANON,
-+ VXPT_NONE,
-+ VXPT_FILE,
-+ VXPT_SWAP,
-+ VXPT_WRITE
-+};
++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;
++}
+
-+#if 0
-+#define vx_page_fault(mm, vma, type, ret)
-+#else
++#endif
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/sched.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/sched.h
+--- linux-2.6.38-rc8/include/linux/vserver/sched.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/sched.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,23 @@
++#ifndef _VX_SCHED_H
++#define _VX_SCHED_H
+
-+static inline
-+void __vx_page_fault(struct mm_struct *mm,
-+ struct vm_area_struct *vma, int type, int ret)
-+{
-+ struct vx_info *vxi = mm->mm_vx_info;
-+ int what;
-+/*
-+ static char *page_type[6] =
-+ { "UNKNOWN", "ANON", "NONE", "FILE", "SWAP", "WRITE" };
-+ static char *page_what[4] =
-+ { "FAULT_OOM", "FAULT_SIGBUS", "FAULT_MINOR", "FAULT_MAJOR" };
-+*/
+
-+ if (!vxi)
-+ return;
++#ifdef __KERNEL__
+
-+ what = (ret & 0x3);
++struct timespec;
+
-+/* printk("[%d] page[%d][%d] %2x %s %s\n", vxi->vx_id,
-+ type, what, ret, page_type[type], page_what[what]);
-+*/
-+ if (ret & VM_FAULT_WRITE)
-+ what |= 0x4;
-+ atomic_inc(&vxi->cacct.page[type][what]);
-+}
++void vx_vsi_uptime(struct timespec *, struct timespec *);
+
-+#define vx_page_fault(mm, vma, type, ret) __vx_page_fault(mm, vma, type, ret)
-+#endif
+
++struct vx_info;
+
-+extern unsigned long vx_badness(struct task_struct *task, struct mm_struct *mm);
++void vx_update_load(struct vx_info *);
+
-+#else
-+#warning duplicate inclusion
-+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_network.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_network.h
---- linux-2.6.37/include/linux/vs_network.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_network.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,169 @@
-+#ifndef _NX_VS_NETWORK_H
-+#define _NX_VS_NETWORK_H
+
-+#include "vserver/context.h"
-+#include "vserver/network.h"
-+#include "vserver/base.h"
-+#include "vserver/check.h"
-+#include "vserver/debug.h"
-+
-+#include <linux/sched.h>
++void vx_update_sched_param(struct _vx_sched *sched,
++ struct _vx_sched_pc *sched_pc);
+
++#endif /* __KERNEL__ */
++#else /* _VX_SCHED_H */
++#warning duplicate inclusion
++#endif /* _VX_SCHED_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/sched_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/sched_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/sched_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/sched_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,21 @@
++#ifndef _VX_SCHED_CMD_H
++#define _VX_SCHED_CMD_H
+
-+#define get_nx_info(i) __get_nx_info(i, __FILE__, __LINE__)
+
-+static inline struct nx_info *__get_nx_info(struct nx_info *nxi,
-+ const char *_file, int _line)
-+{
-+ if (!nxi)
-+ return NULL;
++struct vcmd_prio_bias {
++ int32_t cpu_id;
++ int32_t prio_bias;
++};
+
-+ vxlprintk(VXD_CBIT(nid, 2), "get_nx_info(%p[#%d.%d])",
-+ nxi, nxi ? nxi->nx_id : 0,
-+ nxi ? atomic_read(&nxi->nx_usecnt) : 0,
-+ _file, _line);
++#define VCMD_set_prio_bias VC_CMD(SCHED, 4, 0)
++#define VCMD_get_prio_bias VC_CMD(SCHED, 5, 0)
+
-+ atomic_inc(&nxi->nx_usecnt);
-+ return nxi;
-+}
++#ifdef __KERNEL__
+
++#include <linux/compiler.h>
+
-+extern void free_nx_info(struct nx_info *);
++extern int vc_set_prio_bias(struct vx_info *, void __user *);
++extern int vc_get_prio_bias(struct vx_info *, void __user *);
+
-+#define put_nx_info(i) __put_nx_info(i, __FILE__, __LINE__)
++#endif /* __KERNEL__ */
++#endif /* _VX_SCHED_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/sched_def.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/sched_def.h
+--- linux-2.6.38-rc8/include/linux/vserver/sched_def.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/sched_def.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,38 @@
++#ifndef _VX_SCHED_DEF_H
++#define _VX_SCHED_DEF_H
+
-+static inline void __put_nx_info(struct nx_info *nxi, const char *_file, int _line)
-+{
-+ if (!nxi)
-+ return;
++#include <linux/spinlock.h>
++#include <linux/jiffies.h>
++#include <linux/cpumask.h>
++#include <asm/atomic.h>
++#include <asm/param.h>
+
-+ vxlprintk(VXD_CBIT(nid, 2), "put_nx_info(%p[#%d.%d])",
-+ nxi, nxi ? nxi->nx_id : 0,
-+ nxi ? atomic_read(&nxi->nx_usecnt) : 0,
-+ _file, _line);
+
-+ if (atomic_dec_and_test(&nxi->nx_usecnt))
-+ free_nx_info(nxi);
-+}
++/* context sub struct */
+
++struct _vx_sched {
++ int prio_bias; /* bias offset for priority */
+
-+#define init_nx_info(p, i) __init_nx_info(p, i, __FILE__, __LINE__)
++ cpumask_t update; /* CPUs which should update */
++};
+
-+static inline void __init_nx_info(struct nx_info **nxp, struct nx_info *nxi,
-+ const char *_file, int _line)
-+{
-+ if (nxi) {
-+ vxlprintk(VXD_CBIT(nid, 3),
-+ "init_nx_info(%p[#%d.%d])",
-+ nxi, nxi ? nxi->nx_id : 0,
-+ nxi ? atomic_read(&nxi->nx_usecnt) : 0,
-+ _file, _line);
++struct _vx_sched_pc {
++ int prio_bias; /* bias offset for priority */
+
-+ atomic_inc(&nxi->nx_usecnt);
-+ }
-+ *nxp = nxi;
-+}
++ uint64_t user_ticks; /* token tick events */
++ uint64_t sys_ticks; /* token tick events */
++ uint64_t hold_ticks; /* token ticks paused */
++};
+
+
-+#define set_nx_info(p, i) __set_nx_info(p, i, __FILE__, __LINE__)
++#ifdef CONFIG_VSERVER_DEBUG
+
-+static inline void __set_nx_info(struct nx_info **nxp, struct nx_info *nxi,
-+ const char *_file, int _line)
++static inline void __dump_vx_sched(struct _vx_sched *sched)
+{
-+ struct nx_info *nxo;
-+
-+ if (!nxi)
-+ return;
++ printk("\t_vx_sched:\n");
++ printk("\t priority = %4d\n", sched->prio_bias);
++}
+
-+ vxlprintk(VXD_CBIT(nid, 3), "set_nx_info(%p[#%d.%d])",
-+ nxi, nxi ? nxi->nx_id : 0,
-+ nxi ? atomic_read(&nxi->nx_usecnt) : 0,
-+ _file, _line);
++#endif
+
-+ atomic_inc(&nxi->nx_usecnt);
-+ nxo = xchg(nxp, nxi);
-+ BUG_ON(nxo);
-+}
++#endif /* _VX_SCHED_DEF_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/signal.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/signal.h
+--- linux-2.6.38-rc8/include/linux/vserver/signal.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/signal.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,14 @@
++#ifndef _VX_SIGNAL_H
++#define _VX_SIGNAL_H
+
-+#define clr_nx_info(p) __clr_nx_info(p, __FILE__, __LINE__)
+
-+static inline void __clr_nx_info(struct nx_info **nxp,
-+ const char *_file, int _line)
-+{
-+ struct nx_info *nxo;
++#ifdef __KERNEL__
+
-+ nxo = xchg(nxp, NULL);
-+ if (!nxo)
-+ return;
++struct vx_info;
+
-+ vxlprintk(VXD_CBIT(nid, 3), "clr_nx_info(%p[#%d.%d])",
-+ nxo, nxo ? nxo->nx_id : 0,
-+ nxo ? atomic_read(&nxo->nx_usecnt) : 0,
-+ _file, _line);
++int vx_info_kill(struct vx_info *, int, int);
+
-+ if (atomic_dec_and_test(&nxo->nx_usecnt))
-+ free_nx_info(nxo);
-+}
++#endif /* __KERNEL__ */
++#else /* _VX_SIGNAL_H */
++#warning duplicate inclusion
++#endif /* _VX_SIGNAL_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/signal_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/signal_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/signal_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/signal_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,43 @@
++#ifndef _VX_SIGNAL_CMD_H
++#define _VX_SIGNAL_CMD_H
+
+
-+#define claim_nx_info(v, p) __claim_nx_info(v, p, __FILE__, __LINE__)
++/* signalling vserver commands */
+
-+static inline void __claim_nx_info(struct nx_info *nxi,
-+ struct task_struct *task, const char *_file, int _line)
-+{
-+ vxlprintk(VXD_CBIT(nid, 3), "claim_nx_info(%p[#%d.%d.%d]) %p",
-+ nxi, nxi ? nxi->nx_id : 0,
-+ nxi?atomic_read(&nxi->nx_usecnt):0,
-+ nxi?atomic_read(&nxi->nx_tasks):0,
-+ task, _file, _line);
++#define VCMD_ctx_kill VC_CMD(PROCTRL, 1, 0)
++#define VCMD_wait_exit VC_CMD(EVENT, 99, 0)
+
-+ atomic_inc(&nxi->nx_tasks);
-+}
++struct vcmd_ctx_kill_v0 {
++ int32_t pid;
++ int32_t sig;
++};
+
++struct vcmd_wait_exit_v0 {
++ int32_t reboot_cmd;
++ int32_t exit_code;
++};
+
-+extern void unhash_nx_info(struct nx_info *);
++#ifdef __KERNEL__
+
-+#define release_nx_info(v, p) __release_nx_info(v, p, __FILE__, __LINE__)
++extern int vc_ctx_kill(struct vx_info *, void __user *);
++extern int vc_wait_exit(struct vx_info *, void __user *);
+
-+static inline void __release_nx_info(struct nx_info *nxi,
-+ struct task_struct *task, const char *_file, int _line)
-+{
-+ vxlprintk(VXD_CBIT(nid, 3), "release_nx_info(%p[#%d.%d.%d]) %p",
-+ nxi, nxi ? nxi->nx_id : 0,
-+ nxi ? atomic_read(&nxi->nx_usecnt) : 0,
-+ nxi ? atomic_read(&nxi->nx_tasks) : 0,
-+ task, _file, _line);
++#endif /* __KERNEL__ */
+
-+ might_sleep();
++/* process alteration commands */
+
-+ if (atomic_dec_and_test(&nxi->nx_tasks))
-+ unhash_nx_info(nxi);
-+}
++#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;
++};
+
-+#define task_get_nx_info(i) __task_get_nx_info(i, __FILE__, __LINE__)
++#ifdef __KERNEL__
+
-+static __inline__ struct nx_info *__task_get_nx_info(struct task_struct *p,
-+ const char *_file, int _line)
-+{
-+ struct nx_info *nxi;
++extern int vc_get_pflags(uint32_t pid, void __user *);
++extern int vc_set_pflags(uint32_t pid, void __user *);
+
-+ task_lock(p);
-+ vxlprintk(VXD_CBIT(nid, 5), "task_get_nx_info(%p)",
-+ p, _file, _line);
-+ nxi = __get_nx_info(p->nx_info, _file, _line);
-+ task_unlock(p);
-+ return nxi;
-+}
++#endif /* __KERNEL__ */
++#endif /* _VX_SIGNAL_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/space.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/space.h
+--- linux-2.6.38-rc8/include/linux/vserver/space.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/space.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,12 @@
++#ifndef _VX_SPACE_H
++#define _VX_SPACE_H
+
++#include <linux/types.h>
+
-+static inline void exit_nx_info(struct task_struct *p)
-+{
-+ if (p->nx_info)
-+ release_nx_info(p->nx_info, p);
-+}
++struct vx_info;
+
++int vx_set_space(struct vx_info *vxi, unsigned long mask, unsigned index);
+
-+#else
++#else /* _VX_SPACE_H */
+#warning duplicate inclusion
-+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_pid.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_pid.h
---- linux-2.6.37/include/linux/vs_pid.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_pid.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,95 @@
-+#ifndef _VS_PID_H
-+#define _VS_PID_H
++#endif /* _VX_SPACE_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/space_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/space_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/space_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/space_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,38 @@
++#ifndef _VX_SPACE_CMD_H
++#define _VX_SPACE_CMD_H
+
-+#include "vserver/base.h"
-+#include "vserver/check.h"
-+#include "vserver/context.h"
-+#include "vserver/debug.h"
-+#include "vserver/pid.h"
-+#include <linux/pid_namespace.h>
+
++#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 VXF_FAKE_INIT (VXF_INFO_INIT | VXF_STATE_INIT)
++#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)
+
-+static inline
-+int vx_proc_task_visible(struct task_struct *task)
-+{
-+ if ((task->pid == 1) &&
-+ !vx_flags(VXF_FAKE_INIT, VXF_FAKE_INIT))
-+ /* show a blend through init */
-+ goto visible;
-+ if (vx_check(vx_task_xid(task), VS_WATCH | VS_IDENT))
-+ goto visible;
-+ return 0;
-+visible:
-+ return 1;
-+}
++#define VCMD_get_space_mask_v0 VC_CMD(PROCALT, 4, 0)
+
-+#define find_task_by_real_pid(pid) find_task_by_pid_ns(pid, &init_pid_ns)
++#define VCMD_get_space_mask VC_CMD(VSPACE, 0, 1)
++#define VCMD_get_space_default VC_CMD(VSPACE, 1, 0)
+
-+#if 0
+
-+static inline
-+struct task_struct *vx_find_proc_task_by_pid(int pid)
-+{
-+ struct task_struct *task = find_task_by_real_pid(pid);
++struct vcmd_space_mask_v1 {
++ uint64_t mask;
++};
+
-+ if (task && !vx_proc_task_visible(task)) {
-+ vxdprintk(VXD_CBIT(misc, 6),
-+ "dropping task (find) %p[#%u,%u] for %p[#%u,%u]",
-+ task, task->xid, task->pid,
-+ current, current->xid, current->pid);
-+ task = NULL;
-+ }
-+ return task;
-+}
++struct vcmd_space_mask_v2 {
++ uint64_t mask;
++ uint32_t index;
++};
+
-+#endif
+
-+static inline
-+struct task_struct *vx_get_proc_task(struct inode *inode, struct pid *pid)
-+{
-+ struct task_struct *task = get_pid_task(pid, PIDTYPE_PID);
++#ifdef __KERNEL__
+
-+ if (task && !vx_proc_task_visible(task)) {
-+ vxdprintk(VXD_CBIT(misc, 6),
-+ "dropping task (get) %p[#%u,%u] for %p[#%u,%u]",
-+ task, task->xid, task->pid,
-+ current, current->xid, current->pid);
-+ put_task_struct(task);
-+ task = NULL;
-+ }
-+ return task;
-+}
++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);
+
-+#if 0
++#endif /* __KERNEL__ */
++#endif /* _VX_SPACE_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/switch.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/switch.h
+--- linux-2.6.38-rc8/include/linux/vserver/switch.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/switch.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,98 @@
++#ifndef _VX_SWITCH_H
++#define _VX_SWITCH_H
+
-+static inline
-+struct task_struct *vx_child_reaper(struct task_struct *p)
-+{
-+ struct vx_info *vxi = p->vx_info;
-+ struct task_struct *reaper = child_reaper(p);
++#include <linux/types.h>
+
-+ if (!vxi)
-+ goto out;
+
-+ BUG_ON(!p->vx_info->vx_reaper);
++#define VC_CATEGORY(c) (((c) >> 24) & 0x3F)
++#define VC_COMMAND(c) (((c) >> 16) & 0xFF)
++#define VC_VERSION(c) ((c) & 0xFFF)
+
-+ /* child reaper for the guest reaper */
-+ if (vxi->vx_reaper == p)
-+ goto out;
++#define VC_CMD(c, i, v) ((((VC_CAT_ ## c) & 0x3F) << 24) \
++ | (((i) & 0xFF) << 16) | ((v) & 0xFFF))
+
-+ reaper = vxi->vx_reaper;
-+out:
-+ vxdprintk(VXD_CBIT(xid, 7),
-+ "vx_child_reaper(%p[#%u,%u]) = %p[#%u,%u]",
-+ p, p->xid, p->pid, reaper, reaper->xid, reaper->pid);
-+ return reaper;
-+}
++/*
+
-+#endif
++ Syscall Matrix V2.8
+
++ |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|
++ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
+
-+#else
-+#warning duplicate inclusion
-+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_sched.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_sched.h
---- linux-2.6.37/include/linux/vs_sched.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_sched.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,40 @@
-+#ifndef _VS_SCHED_H
-+#define _VS_SCHED_H
++*/
+
-+#include "vserver/base.h"
-+#include "vserver/context.h"
-+#include "vserver/sched.h"
++#define VC_CAT_VERSION 0
+
++#define VC_CAT_VSETUP 1
++#define VC_CAT_VHOST 2
+
-+#define MAX_PRIO_BIAS 20
-+#define MIN_PRIO_BIAS -20
++#define VC_CAT_DEVICE 6
+
-+static inline
-+int vx_adjust_prio(struct task_struct *p, int prio, int max_user)
-+{
-+ struct vx_info *vxi = p->vx_info;
++#define VC_CAT_VPROC 9
++#define VC_CAT_PROCALT 10
++#define VC_CAT_PROCMIG 11
++#define VC_CAT_PROCTRL 12
+
-+ if (vxi)
-+ prio += vx_cpu(vxi, sched_pc).prio_bias;
-+ return prio;
-+}
++#define VC_CAT_SCHED 14
++#define VC_CAT_MEMCTRL 20
+
-+static inline void vx_account_user(struct vx_info *vxi,
-+ cputime_t cputime, int nice)
-+{
-+ if (!vxi)
-+ return;
-+ vx_cpu(vxi, sched_pc).user_ticks += cputime;
-+}
++#define VC_CAT_VNET 25
++#define VC_CAT_NETALT 26
++#define VC_CAT_NETMIG 27
++#define VC_CAT_NETCTRL 28
+
-+static inline void vx_account_system(struct vx_info *vxi,
-+ cputime_t cputime, int idle)
-+{
-+ if (!vxi)
-+ return;
-+ vx_cpu(vxi, sched_pc).sys_ticks += cputime;
-+}
++#define VC_CAT_TAGMIG 35
++#define VC_CAT_DLIMIT 36
++#define VC_CAT_INODE 38
+
-+#else
-+#warning duplicate inclusion
-+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_socket.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_socket.h
---- linux-2.6.37/include/linux/vs_socket.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_socket.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,67 @@
-+#ifndef _VS_SOCKET_H
-+#define _VS_SOCKET_H
++#define VC_CAT_VSTAT 40
++#define VC_CAT_VINFO 46
++#define VC_CAT_EVENT 48
+
-+#include "vserver/debug.h"
-+#include "vserver/base.h"
-+#include "vserver/cacct.h"
-+#include "vserver/context.h"
-+#include "vserver/tag.h"
++#define VC_CAT_FLAGS 52
++#define VC_CAT_VSPACE 54
++#define VC_CAT_DEBUG 56
++#define VC_CAT_RLIMIT 60
+
++#define VC_CAT_SYSTEST 61
++#define VC_CAT_COMPAT 63
+
-+/* socket accounting */
++/* query version */
+
-+#include <linux/socket.h>
++#define VCMD_get_version VC_CMD(VERSION, 0, 0)
++#define VCMD_get_vci VC_CMD(VERSION, 1, 0)
+
-+static inline int vx_sock_type(int family)
-+{
-+ switch (family) {
-+ case PF_UNSPEC:
-+ return VXA_SOCK_UNSPEC;
-+ case PF_UNIX:
-+ return VXA_SOCK_UNIX;
-+ case PF_INET:
-+ return VXA_SOCK_INET;
-+ case PF_INET6:
-+ return VXA_SOCK_INET6;
-+ case PF_PACKET:
-+ return VXA_SOCK_PACKET;
-+ default:
-+ return VXA_SOCK_OTHER;
-+ }
-+}
+
-+#define vx_acc_sock(v, f, p, s) \
-+ __vx_acc_sock(v, f, p, s, __FILE__, __LINE__)
++#ifdef __KERNEL__
+
-+static inline void __vx_acc_sock(struct vx_info *vxi,
-+ int family, int pos, int size, char *file, int line)
-+{
-+ if (vxi) {
-+ int type = vx_sock_type(family);
++#include <linux/errno.h>
+
-+ atomic_long_inc(&vxi->cacct.sock[type][pos].count);
-+ atomic_long_add(size, &vxi->cacct.sock[type][pos].total);
-+ }
-+}
++#endif /* __KERNEL__ */
+
-+#define vx_sock_recv(sk, s) \
-+ vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 0, s)
-+#define vx_sock_send(sk, s) \
-+ vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 1, s)
-+#define vx_sock_fail(sk, s) \
-+ vx_acc_sock((sk)->sk_vx_info, (sk)->sk_family, 2, s)
++#endif /* _VX_SWITCH_H */
+
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/tag.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/tag.h
+--- linux-2.6.38-rc8/include/linux/vserver/tag.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/tag.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,143 @@
++#ifndef _DX_TAG_H
++#define _DX_TAG_H
+
-+#define sock_vx_init(s) do { \
-+ (s)->sk_xid = 0; \
-+ (s)->sk_vx_info = NULL; \
-+ } while (0)
++#include <linux/types.h>
+
-+#define sock_nx_init(s) do { \
-+ (s)->sk_nid = 0; \
-+ (s)->sk_nx_info = NULL; \
-+ } while (0)
+
++#define DX_TAG(in) (IS_TAGGED(in))
++
++
++#ifdef CONFIG_TAG_NFSD
++#define DX_TAG_NFSD 1
+#else
-+#warning duplicate inclusion
++#define DX_TAG_NFSD 0
+#endif
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_tag.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_tag.h
---- linux-2.6.37/include/linux/vs_tag.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_tag.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,47 @@
-+#ifndef _VS_TAG_H
-+#define _VS_TAG_H
-+
-+#include <linux/vserver/tag.h>
+
-+/* check conditions */
+
-+#define DX_ADMIN 0x0001
-+#define DX_WATCH 0x0002
-+#define DX_HOSTID 0x0008
++#ifdef CONFIG_TAGGING_NONE
+
-+#define DX_IDENT 0x0010
++#define MAX_UID 0xFFFFFFFF
++#define MAX_GID 0xFFFFFFFF
+
-+#define DX_ARG_MASK 0x0010
++#define INOTAG_TAG(cond, uid, gid, tag) (0)
+
++#define TAGINO_UID(cond, uid, tag) (uid)
++#define TAGINO_GID(cond, gid, tag) (gid)
+
-+#define dx_task_tag(t) ((t)->tag)
++#endif
+
-+#define dx_current_tag() dx_task_tag(current)
+
-+#define dx_check(c, m) __dx_check(dx_current_tag(), c, m)
++#ifdef CONFIG_TAGGING_GID16
+
-+#define dx_weak_check(c, m) ((m) ? dx_check(c, m) : 1)
++#define MAX_UID 0xFFFFFFFF
++#define MAX_GID 0x0000FFFF
+
++#define INOTAG_TAG(cond, uid, gid, tag) \
++ ((cond) ? (((gid) >> 16) & 0xFFFF) : 0)
+
-+/*
-+ * 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)
-+{
-+ if (mode & DX_ARG_MASK) {
-+ if ((mode & DX_IDENT) && (id == cid))
-+ return 1;
-+ }
-+ return (((mode & DX_ADMIN) && (cid == 0)) ||
-+ ((mode & DX_WATCH) && (cid == 1)) ||
-+ ((mode & DX_HOSTID) && (id == 0)));
-+}
++#define TAGINO_UID(cond, uid, tag) (uid)
++#define TAGINO_GID(cond, gid, tag) \
++ ((cond) ? (((gid) & 0xFFFF) | ((tag) << 16)) : (gid))
+
-+struct inode;
-+int dx_permission(const struct inode *inode, int mask);
++#endif
+
+
-+#else
-+#warning duplicate inclusion
++#ifdef CONFIG_TAGGING_ID24
++
++#define MAX_UID 0x00FFFFFF
++#define MAX_GID 0x00FFFFFF
++
++#define INOTAG_TAG(cond, uid, gid, tag) \
++ ((cond) ? ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) : 0)
++
++#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
-diff -NurpP --minimal linux-2.6.37/include/linux/vs_time.h linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_time.h
---- linux-2.6.37/include/linux/vs_time.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/linux/vs_time.h 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,19 @@
-+#ifndef _VS_TIME_H
-+#define _VS_TIME_H
+
+
-+/* time faking stuff */
++#ifdef CONFIG_TAGGING_UID16
+
-+#ifdef CONFIG_VSERVER_VTIME
++#define MAX_UID 0x0000FFFF
++#define MAX_GID 0xFFFFFFFF
+
-+extern void vx_adjust_timespec(struct timespec *ts);
-+extern int vx_settimeofday(struct timespec *ts);
++#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
++
++
++#ifdef CONFIG_TAGGING_INTERN
++
++#define MAX_UID 0xFFFFFFFF
++#define MAX_GID 0xFFFFFFFF
++
++#define INOTAG_TAG(cond, uid, gid, tag) \
++ ((cond) ? (tag) : 0)
+
++#define TAGINO_UID(cond, uid, tag) (uid)
++#define TAGINO_GID(cond, gid, tag) (gid)
++
++#endif
++
++
++#ifndef CONFIG_TAGGING_NONE
++#define dx_current_fstag(sb) \
++ ((sb)->s_flags & MS_TAGGED ? dx_current_tag() : 0)
+#else
-+#define vx_adjust_timespec(t) do { } while (0)
-+#define vx_settimeofday(t) do_settimeofday(t)
++#define dx_current_fstag(sb) (0)
+#endif
+
++#ifndef CONFIG_TAGGING_INTERN
++#define TAGINO_TAG(cond, tag) (0)
+#else
-+#warning duplicate inclusion
++#define TAGINO_TAG(cond, tag) ((cond) ? (tag) : 0)
++#endif
++
++#define INOTAG_UID(cond, uid, gid) \
++ ((cond) ? ((uid) & MAX_UID) : (uid))
++#define INOTAG_GID(cond, uid, gid) \
++ ((cond) ? ((gid) & MAX_GID) : (gid))
++
++
++static inline uid_t dx_map_uid(uid_t uid)
++{
++ if ((uid > MAX_UID) && (uid != -1))
++ uid = -2;
++ return (uid & MAX_UID);
++}
++
++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 dx_notagcheck(sb) ((sb) && ((sb)->s_flags & MS_NOTAGCHECK))
++
++int dx_parse_tag(char *string, tag_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
-diff -NurpP --minimal linux-2.6.37/include/net/addrconf.h linux-2.6.37-vs2.3.0.37-rc3/include/net/addrconf.h
---- linux-2.6.37/include/net/addrconf.h 2011-01-05 21:50:35.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/net/addrconf.h 2010-11-23 02:09:41.000000000 +0100
-@@ -84,7 +84,8 @@ extern int ipv6_dev_get_saddr(struct n
++
++#endif /* _DX_TAG_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/linux/vserver/tag_cmd.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/tag_cmd.h
+--- linux-2.6.38-rc8/include/linux/vserver/tag_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/linux/vserver/tag_cmd.h 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,22 @@
++#ifndef _VX_TAG_CMD_H
++#define _VX_TAG_CMD_H
++
++
++/* vinfo commands */
++
++#define VCMD_task_tag VC_CMD(VINFO, 3, 0)
++
++#ifdef __KERNEL__
++extern int vc_task_tag(uint32_t);
++
++#endif /* __KERNEL__ */
++
++/* context commands */
++
++#define VCMD_tag_migrate VC_CMD(TAGMIG, 1, 0)
++
++#ifdef __KERNEL__
++extern int vc_tag_migrate(uint32_t);
++
++#endif /* __KERNEL__ */
++#endif /* _VX_TAG_CMD_H */
+diff -NurpP --minimal linux-2.6.38-rc8/include/net/addrconf.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/net/addrconf.h
+--- linux-2.6.38-rc8/include/net/addrconf.h 2011-03-10 17:09:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/net/addrconf.h 2011-01-29 02:01:07.000000000 +0100
+@@ -82,7 +82,8 @@ extern int ipv6_dev_get_saddr(struct n
struct net_device *dev,
const struct in6_addr *daddr,
unsigned int srcprefs,
extern int ipv6_get_lladdr(struct net_device *dev,
struct in6_addr *addr,
unsigned char banned_flags);
-diff -NurpP --minimal linux-2.6.37/include/net/af_unix.h linux-2.6.37-vs2.3.0.37-rc3/include/net/af_unix.h
---- linux-2.6.37/include/net/af_unix.h 2011-01-05 21:50:35.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/net/af_unix.h 2011-01-05 22:30:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/include/net/af_unix.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/net/af_unix.h
+--- linux-2.6.38-rc8/include/net/af_unix.h 2011-01-05 21:50:35.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/net/af_unix.h 2011-01-29 02:01:07.000000000 +0100
@@ -4,6 +4,7 @@
#include <linux/socket.h>
#include <linux/un.h>
#include <net/sock.h>
extern void unix_inflight(struct file *fp);
-diff -NurpP --minimal linux-2.6.37/include/net/inet_timewait_sock.h linux-2.6.37-vs2.3.0.37-rc3/include/net/inet_timewait_sock.h
---- linux-2.6.37/include/net/inet_timewait_sock.h 2010-08-02 16:52:56.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/net/inet_timewait_sock.h 2010-11-23 02:09:41.000000000 +0100
-@@ -117,6 +117,10 @@ struct inet_timewait_sock {
- #define tw_hash __tw_common.skc_hash
- #define tw_prot __tw_common.skc_prot
+diff -NurpP --minimal linux-2.6.38-rc8/include/net/inet_timewait_sock.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/net/inet_timewait_sock.h
+--- linux-2.6.38-rc8/include/net/inet_timewait_sock.h 2011-03-10 17:09:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/net/inet_timewait_sock.h 2011-01-29 03:12:58.000000000 +0100
+@@ -113,6 +113,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;
- /* 3 bits hole, try to pack */
-diff -NurpP --minimal linux-2.6.37/include/net/route.h linux-2.6.37-vs2.3.0.37-rc3/include/net/route.h
---- linux-2.6.37/include/net/route.h 2010-10-21 13:07:56.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/net/route.h 2010-11-23 02:09:41.000000000 +0100
-@@ -145,6 +145,9 @@ static inline void ip_rt_put(struct rtab
+ unsigned char tw_rcv_wscale;
+diff -NurpP --minimal linux-2.6.38-rc8/include/net/route.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/net/route.h
+--- linux-2.6.38-rc8/include/net/route.h 2011-03-10 17:09:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/net/route.h 2011-01-29 02:01:07.000000000 +0100
+@@ -153,6 +153,9 @@ static inline void ip_rt_put(struct rtab
dst_release(&rt->dst);
}
#define IPTOS_RT_MASK (IPTOS_TOS_MASK & ~3)
extern const __u8 ip_tos2prio[16];
-@@ -154,6 +157,9 @@ static inline char rt_tos2priority(u8 to
+@@ -162,6 +165,9 @@ static inline char rt_tos2priority(u8 to
return ip_tos2prio[IPTOS_TOS(tos)>>1];
}
static inline int ip_route_connect(struct rtable **rp, __be32 dst,
__be32 src, u32 tos, int oif, u8 protocol,
__be16 sport, __be16 dport, struct sock *sk,
-@@ -171,11 +177,24 @@ static inline int ip_route_connect(struc
-
+@@ -177,11 +183,24 @@ static inline int ip_route_connect(struc
+ .fl_ip_dport = dport };
int err;
struct net *net = sock_net(sk);
+ struct nx_info *nx_info = current_nx_info();
err = __ip_route_output_key(net, rp, &fl);
if (err)
return err;
-diff -NurpP --minimal linux-2.6.37/include/net/sock.h linux-2.6.37-vs2.3.0.37-rc3/include/net/sock.h
---- linux-2.6.37/include/net/sock.h 2011-01-05 21:50:36.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/include/net/sock.h 2011-01-05 22:30:42.000000000 +0100
-@@ -150,6 +150,10 @@ struct sock_common {
+diff -NurpP --minimal linux-2.6.38-rc8/include/net/sock.h linux-2.6.38-rc8-vs2.3.0.37-rc6/include/net/sock.h
+--- linux-2.6.38-rc8/include/net/sock.h 2011-03-10 17:09:26.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/include/net/sock.h 2011-02-17 02:17:51.000000000 +0100
+@@ -148,6 +148,10 @@ struct sock_common {
#ifdef CONFIG_NET_NS
struct net *skc_net;
#endif
+ struct vx_info *skc_vx_info;
+ nid_t skc_nid;
+ struct nx_info *skc_nx_info;
- };
-
- /**
-@@ -241,6 +245,10 @@ struct sock {
+ /*
+ * fields between dontcopy_begin/dontcopy_end
+ * are not copied in sock_copy()
+@@ -256,6 +260,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_vx_info __sk_common.skc_vx_info
+#define sk_nid __sk_common.skc_nid
+#define sk_nx_info __sk_common.skc_nx_info
- kmemcheck_bitfield_begin(flags);
- unsigned int sk_shutdown : 2,
- sk_no_check : 2,
-diff -NurpP --minimal linux-2.6.37/init/Kconfig linux-2.6.37-vs2.3.0.37-rc3/init/Kconfig
---- linux-2.6.37/init/Kconfig 2011-01-05 21:50:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/init/Kconfig 2011-01-05 22:30:42.000000000 +0100
-@@ -503,6 +503,7 @@ config HAVE_UNSTABLE_SCHED_CLOCK
+ socket_lock_t sk_lock;
+ struct sk_buff_head sk_receive_queue;
+ /*
+diff -NurpP --minimal linux-2.6.38-rc8/init/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/init/Kconfig
+--- linux-2.6.38-rc8/init/Kconfig 2011-03-10 17:09:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/init/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -559,6 +559,7 @@ config HAVE_UNSTABLE_SCHED_CLOCK
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
-@@ -528,6 +529,7 @@ config CGROUP_DEBUG
+@@ -584,6 +585,7 @@ config CGROUP_DEBUG
config CGROUP_NS
bool "Namespace cgroup subsystem"
help
Provides a simple namespace cgroup subsystem to
provide hierarchical naming of sets of namespaces,
-diff -NurpP --minimal linux-2.6.37/init/main.c linux-2.6.37-vs2.3.0.37-rc3/init/main.c
---- linux-2.6.37/init/main.c 2011-01-05 21:50:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/init/main.c 2010-11-23 02:09:41.000000000 +0100
-@@ -67,6 +67,7 @@
- #include <linux/sfi.h>
+diff -NurpP --minimal linux-2.6.38-rc8/init/main.c linux-2.6.38-rc8-vs2.3.0.37-rc6/init/main.c
+--- linux-2.6.38-rc8/init/main.c 2011-03-10 17:09:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/init/main.c 2011-01-29 02:21:25.000000000 +0100
+@@ -68,6 +68,7 @@
#include <linux/shmem_fs.h>
#include <linux/slab.h>
+ #include <linux/perf_event.h>
+#include <linux/vserver/percpu.h>
#include <asm/io.h>
#include <asm/bugs.h>
-diff -NurpP --minimal linux-2.6.37/ipc/mqueue.c linux-2.6.37-vs2.3.0.37-rc3/ipc/mqueue.c
---- linux-2.6.37/ipc/mqueue.c 2011-01-05 21:50:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/ipc/mqueue.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/ipc/mqueue.c linux-2.6.38-rc8-vs2.3.0.37-rc6/ipc/mqueue.c
+--- linux-2.6.38-rc8/ipc/mqueue.c 2011-03-10 17:09:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/ipc/mqueue.c 2011-01-29 02:01:07.000000000 +0100
@@ -33,6 +33,8 @@
#include <linux/pid.h>
#include <linux/ipc_namespace.h>
} else if (S_ISDIR(mode)) {
inc_nlink(inode);
/* Some things misbehave if size == 0 on a directory */
-@@ -268,8 +276,11 @@ static void mqueue_evict_inode(struct in
+@@ -275,8 +283,11 @@ static void mqueue_evict_inode(struct in
+ info->attr.mq_msgsize);
user = info->user;
if (user) {
/*
* get_ns_from_inode() ensures that the
* (ipc_ns = sb->s_fs_info) is either a valid ipc_ns
-@@ -279,6 +290,7 @@ static void mqueue_evict_inode(struct in
+@@ -286,6 +297,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-2.6.37/ipc/msg.c linux-2.6.37-vs2.3.0.37-rc3/ipc/msg.c
---- linux-2.6.37/ipc/msg.c 2010-08-02 16:52:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/ipc/msg.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/ipc/msg.c linux-2.6.38-rc8-vs2.3.0.37-rc6/ipc/msg.c
+--- linux-2.6.38-rc8/ipc/msg.c 2010-08-02 16:52:57.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/ipc/msg.c 2011-01-29 02:01:07.000000000 +0100
@@ -37,6 +37,7 @@
#include <linux/rwsem.h>
#include <linux/nsproxy.h>
msq->q_perm.security = NULL;
retval = security_msg_queue_alloc(msq);
-diff -NurpP --minimal linux-2.6.37/ipc/namespace.c linux-2.6.37-vs2.3.0.37-rc3/ipc/namespace.c
---- linux-2.6.37/ipc/namespace.c 2009-09-10 15:26:27.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/ipc/namespace.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/ipc/namespace.c linux-2.6.38-rc8-vs2.3.0.37-rc6/ipc/namespace.c
+--- linux-2.6.38-rc8/ipc/namespace.c 2009-09-10 15:26:27.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/ipc/namespace.c 2011-01-29 02:01:07.000000000 +0100
@@ -11,6 +11,8 @@
#include <linux/slab.h>
#include <linux/fs.h>
#include "util.h"
-diff -NurpP --minimal linux-2.6.37/ipc/sem.c linux-2.6.37-vs2.3.0.37-rc3/ipc/sem.c
---- linux-2.6.37/ipc/sem.c 2010-10-21 13:07:56.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/ipc/sem.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/ipc/sem.c linux-2.6.38-rc8-vs2.3.0.37-rc6/ipc/sem.c
+--- linux-2.6.38-rc8/ipc/sem.c 2010-10-21 13:07:56.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/ipc/sem.c 2011-01-29 02:01:07.000000000 +0100
@@ -86,6 +86,8 @@
#include <linux/rwsem.h>
#include <linux/nsproxy.h>
security_sem_free(sma);
ipc_rcu_putref(sma);
}
-diff -NurpP --minimal linux-2.6.37/ipc/shm.c linux-2.6.37-vs2.3.0.37-rc3/ipc/shm.c
---- linux-2.6.37/ipc/shm.c 2011-01-05 21:50:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/ipc/shm.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/ipc/shm.c linux-2.6.38-rc8-vs2.3.0.37-rc6/ipc/shm.c
+--- linux-2.6.38-rc8/ipc/shm.c 2011-01-05 21:50:37.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/ipc/shm.c 2011-01-29 02:01:07.000000000 +0100
@@ -39,6 +39,8 @@
#include <linux/nsproxy.h>
#include <linux/mount.h>
return error;
no_id:
-diff -NurpP --minimal linux-2.6.37/kernel/capability.c linux-2.6.37-vs2.3.0.37-rc3/kernel/capability.c
---- linux-2.6.37/kernel/capability.c 2010-08-02 16:52:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/capability.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/Makefile linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/Makefile
+--- linux-2.6.38-rc8/kernel/Makefile 2011-03-10 17:09:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/Makefile 2011-01-29 02:01:07.000000000 +0100
+@@ -25,6 +25,7 @@ CFLAGS_REMOVE_perf_event.o = -pg
+ CFLAGS_REMOVE_irq_work.o = -pg
+ endif
+
++obj-y += vserver/
+ obj-$(CONFIG_FREEZER) += freezer.o
+ obj-$(CONFIG_PROFILING) += profile.o
+ obj-$(CONFIG_SYSCTL_SYSCALL_CHECK) += sysctl_check.o
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/capability.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/capability.c
+--- linux-2.6.38-rc8/kernel/capability.c 2011-03-10 17:09:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/capability.c 2011-02-17 02:17:51.000000000 +0100
@@ -14,6 +14,7 @@
#include <linux/security.h>
#include <linux/syscalls.h>
if (unlikely(!cap_valid(cap))) {
printk(KERN_CRIT "capable() called with invalid cap=%u\n", cap);
BUG();
-diff -NurpP --minimal linux-2.6.37/kernel/compat.c linux-2.6.37-vs2.3.0.37-rc3/kernel/compat.c
---- linux-2.6.37/kernel/compat.c 2010-10-21 13:07:56.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/compat.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/compat.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/compat.c
+--- linux-2.6.38-rc8/kernel/compat.c 2010-10-21 13:07:56.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/compat.c 2011-01-29 02:01:07.000000000 +0100
@@ -914,7 +914,7 @@ asmlinkage long compat_sys_stime(compat_
if (err)
return err;
return 0;
}
-diff -NurpP --minimal linux-2.6.37/kernel/cred.c linux-2.6.37-vs2.3.0.37-rc3/kernel/cred.c
---- linux-2.6.37/kernel/cred.c 2011-01-05 21:50:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/cred.c 2011-01-31 21:05:40.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/cred.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/cred.c
+--- linux-2.6.38-rc8/kernel/cred.c 2011-03-10 17:09:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/cred.c 2011-02-17 02:17:51.000000000 +0100
@@ -60,31 +60,6 @@ struct cred init_cred = {
#endif
};
EXPORT_SYMBOL(prepare_creds);
/*
-diff -NurpP --minimal linux-2.6.37/kernel/exit.c linux-2.6.37-vs2.3.0.37-rc3/kernel/exit.c
---- linux-2.6.37/kernel/exit.c 2011-01-05 21:50:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/exit.c 2011-01-05 22:30:42.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/exit.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/exit.c
+--- linux-2.6.38-rc8/kernel/exit.c 2011-03-10 17:09:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/exit.c 2011-01-29 02:01:07.000000000 +0100
@@ -48,6 +48,10 @@
#include <linux/fs_struct.h>
#include <linux/init_task.h>
}
}
}
-@@ -1043,11 +1049,16 @@ NORET_TYPE void do_exit(long code)
+@@ -1047,11 +1053,16 @@ NORET_TYPE void do_exit(long code)
validate_creds_for_do_exit(tsk);
BUG();
/* Avoid "noreturn function does return". */
for (;;)
-diff -NurpP --minimal linux-2.6.37/kernel/fork.c linux-2.6.37-vs2.3.0.37-rc3/kernel/fork.c
---- linux-2.6.37/kernel/fork.c 2011-01-05 21:50:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/fork.c 2011-01-05 22:30:42.000000000 +0100
-@@ -66,6 +66,10 @@
- #include <linux/posix-timers.h>
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/fork.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/fork.c
+--- linux-2.6.38-rc8/kernel/fork.c 2011-03-10 17:09:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/fork.c 2011-01-29 03:19:29.000000000 +0100
+@@ -67,6 +67,10 @@
#include <linux/user-return-notifier.h>
#include <linux/oom.h>
+ #include <linux/khugepaged.h>
+#include <linux/vs_context.h>
+#include <linux/vs_network.h>
+#include <linux/vs_limit.h>
#include <asm/pgtable.h>
#include <asm/pgalloc.h>
-@@ -161,6 +165,8 @@ void free_task(struct task_struct *tsk)
+@@ -162,6 +166,8 @@ void free_task(struct task_struct *tsk)
account_kernel_stack(tsk->stack, -1);
free_thread_info(tsk->stack);
rt_mutex_debug_task_free(tsk);
ftrace_graph_exit_task(tsk);
free_task_struct(tsk);
}
-@@ -495,6 +501,7 @@ static struct mm_struct * mm_init(struct
+@@ -500,6 +506,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;
}
-@@ -528,6 +535,7 @@ void __mmdrop(struct mm_struct *mm)
- mm_free_pgd(mm);
- destroy_context(mm);
- mmu_notifier_mm_destroy(mm);
+@@ -536,6 +543,7 @@ void __mmdrop(struct mm_struct *mm)
+ #ifdef CONFIG_TRANSPARENT_HUGEPAGE
+ VM_BUG_ON(mm->pmd_huge_pte);
+ #endif
+ clr_vx_info(&mm->mm_vx_info);
free_mm(mm);
}
EXPORT_SYMBOL_GPL(__mmdrop);
-@@ -663,6 +671,7 @@ struct mm_struct *dup_mm(struct task_str
+@@ -672,6 +680,7 @@ struct mm_struct *dup_mm(struct task_str
goto fail_nomem;
memcpy(mm, oldmm, sizeof(*mm));
/* Initializing for Swap token stuff */
mm->token_priority = 0;
-@@ -701,6 +710,7 @@ fail_nocontext:
+@@ -714,6 +723,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;
-@@ -980,6 +990,8 @@ static struct task_struct *copy_process(
+@@ -995,6 +1005,8 @@ static struct task_struct *copy_process(
int retval;
struct task_struct *p;
int cgroup_callbacks_done = 0;
if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS))
return ERR_PTR(-EINVAL);
-@@ -1026,7 +1038,12 @@ static struct task_struct *copy_process(
+@@ -1041,7 +1053,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) &&
-@@ -1291,6 +1308,18 @@ static struct task_struct *copy_process(
+@@ -1306,6 +1323,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-2.6.37/kernel/kthread.c linux-2.6.37-vs2.3.0.37-rc3/kernel/kthread.c
---- linux-2.6.37/kernel/kthread.c 2011-01-05 21:50:38.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/kthread.c 2011-01-05 22:30:42.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/kthread.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/kthread.c
+--- linux-2.6.38-rc8/kernel/kthread.c 2011-03-10 17:09:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/kthread.c 2011-01-29 02:01:07.000000000 +0100
@@ -16,6 +16,7 @@
#include <linux/mutex.h>
#include <linux/slab.h>
#include <trace/events/sched.h>
static DEFINE_SPINLOCK(kthread_create_lock);
-diff -NurpP --minimal linux-2.6.37/kernel/Makefile linux-2.6.37-vs2.3.0.37-rc3/kernel/Makefile
---- linux-2.6.37/kernel/Makefile 2011-01-05 21:50:37.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/Makefile 2010-11-23 02:09:41.000000000 +0100
-@@ -25,6 +25,7 @@ CFLAGS_REMOVE_perf_event.o = -pg
- CFLAGS_REMOVE_irq_work.o = -pg
- endif
-
-+obj-y += vserver/
- obj-$(CONFIG_FREEZER) += freezer.o
- obj-$(CONFIG_PROFILING) += profile.o
- obj-$(CONFIG_SYSCTL_SYSCALL_CHECK) += sysctl_check.o
-diff -NurpP --minimal linux-2.6.37/kernel/nsproxy.c linux-2.6.37-vs2.3.0.37-rc3/kernel/nsproxy.c
---- linux-2.6.37/kernel/nsproxy.c 2010-07-07 18:31:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/nsproxy.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/nsproxy.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/nsproxy.c
+--- linux-2.6.38-rc8/kernel/nsproxy.c 2010-07-07 18:31:57.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/nsproxy.c 2011-01-29 02:01:07.000000000 +0100
@@ -20,6 +20,8 @@
#include <linux/mnt_namespace.h>
#include <linux/utsname.h>
return -EPERM;
*new_nsp = create_new_namespaces(unshare_flags, current,
-diff -NurpP --minimal linux-2.6.37/kernel/pid.c linux-2.6.37-vs2.3.0.37-rc3/kernel/pid.c
---- linux-2.6.37/kernel/pid.c 2011-01-05 21:50:38.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/pid.c 2010-11-23 02:37:26.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/pid.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/pid.c
+--- linux-2.6.38-rc8/kernel/pid.c 2011-01-05 21:50:38.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/pid.c 2011-01-29 02:01:07.000000000 +0100
@@ -36,6 +36,7 @@
#include <linux/pid_namespace.h>
#include <linux/init_task.h>
pid_t pid_vnr(struct pid *pid)
{
return pid_nr_ns(pid, current->nsproxy->pid_ns);
-diff -NurpP --minimal linux-2.6.37/kernel/pid_namespace.c linux-2.6.37-vs2.3.0.37-rc3/kernel/pid_namespace.c
---- linux-2.6.37/kernel/pid_namespace.c 2010-07-07 18:31:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/pid_namespace.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/pid_namespace.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/pid_namespace.c
+--- linux-2.6.38-rc8/kernel/pid_namespace.c 2010-07-07 18:31:57.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/pid_namespace.c 2011-01-29 02:01:07.000000000 +0100
@@ -14,6 +14,7 @@
#include <linux/err.h>
#include <linux/acct.h>
kmem_cache_free(pid_ns_cachep, ns);
}
-diff -NurpP --minimal linux-2.6.37/kernel/posix-timers.c linux-2.6.37-vs2.3.0.37-rc3/kernel/posix-timers.c
---- linux-2.6.37/kernel/posix-timers.c 2010-10-21 13:07:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/posix-timers.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/posix-timers.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/posix-timers.c
+--- linux-2.6.38-rc8/kernel/posix-timers.c 2011-03-10 17:09:27.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/posix-timers.c 2011-01-29 02:01:07.000000000 +0100
@@ -46,6 +46,7 @@
#include <linux/wait.h>
#include <linux/workqueue.h>
/*
* Management arrays for POSIX timers. Timers are kept in slab memory
-@@ -363,6 +364,7 @@ int posix_timer_event(struct k_itimer *t
+@@ -369,6 +370,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().
-@@ -379,10 +381,18 @@ int posix_timer_event(struct k_itimer *t
+@@ -385,10 +387,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-2.6.37/kernel/printk.c linux-2.6.37-vs2.3.0.37-rc3/kernel/printk.c
---- linux-2.6.37/kernel/printk.c 2011-01-05 21:50:38.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/printk.c 2011-01-05 22:30:42.000000000 +0100
-@@ -39,6 +39,7 @@
- #include <linux/syslog.h>
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/printk.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/printk.c
+--- linux-2.6.38-rc8/kernel/printk.c 2011-03-10 17:09:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/printk.c 2011-02-17 02:34:59.000000000 +0100
+@@ -40,6 +40,7 @@
#include <linux/cpu.h>
#include <linux/notifier.h>
+ #include <linux/rculist.h>
+#include <linux/vs_cvirt.h>
#include <asm/uaccess.h>
-@@ -272,18 +273,19 @@ int do_syslog(int type, char __user *buf
- unsigned i, j, limit, count;
- int do_clear = 0;
- char c;
-- int error = 0;
-+ int error;
-
- /*
- * If this is from /proc/kmsg we only do the capabilities checks
- * at open time.
- */
- if (type == SYSLOG_ACTION_OPEN || !from_file) {
-- if (dmesg_restrict && !capable(CAP_SYS_ADMIN))
-+ if (dmesg_restrict &&
-+ !vx_capable(CAP_SYS_ADMIN, VXC_SYSLOG))
- return -EPERM;
- if ((type != SYSLOG_ACTION_READ_ALL &&
- type != SYSLOG_ACTION_SIZE_BUFFER) &&
-- !capable(CAP_SYS_ADMIN))
-+ !vx_capable(CAP_SYS_ADMIN, VXC_SYSLOG))
- return -EPERM;
- }
+@@ -280,7 +281,7 @@ static int check_syslog_permissions(int
+ return 0;
-@@ -291,12 +293,9 @@ int do_syslog(int type, char __user *buf
+ 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)) {
+@@ -308,12 +309,9 @@ int do_syslog(int type, char __user *buf
if (error)
return error;
error = -EINVAL;
if (!buf || len < 0)
goto out;
-@@ -307,6 +306,16 @@ int do_syslog(int type, char __user *buf
+@@ -324,6 +322,16 @@ int do_syslog(int type, char __user *buf
error = -EFAULT;
goto out;
}
error = wait_event_interruptible(log_wait,
(log_start - log_end));
if (error)
-@@ -333,16 +342,6 @@ int do_syslog(int type, char __user *buf
+@@ -350,16 +358,6 @@ int do_syslog(int type, char __user *buf
/* FALL THRU */
/* Read last kernel messages */
case SYSLOG_ACTION_READ_ALL:
count = len;
if (count > log_buf_len)
count = log_buf_len;
-diff -NurpP --minimal linux-2.6.37/kernel/ptrace.c linux-2.6.37-vs2.3.0.37-rc3/kernel/ptrace.c
---- linux-2.6.37/kernel/ptrace.c 2011-01-05 21:50:38.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/ptrace.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/ptrace.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/ptrace.c
+--- linux-2.6.38-rc8/kernel/ptrace.c 2011-03-10 17:09:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/ptrace.c 2011-03-10 17:21:19.000000000 +0100
@@ -22,6 +22,7 @@
#include <linux/syscalls.h>
#include <linux/uaccess.h>
dumpable = get_dumpable(task->mm);
if (!dumpable && !capable(CAP_SYS_PTRACE))
return -EPERM;
-+ if (!vx_check(task->xid, VS_ADMIN_P|VS_IDENT))
++ 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))
if (request == PTRACE_ATTACH) {
ret = ptrace_attach(child);
/*
-diff -NurpP --minimal linux-2.6.37/kernel/sched.c linux-2.6.37-vs2.3.0.37-rc3/kernel/sched.c
---- linux-2.6.37/kernel/sched.c 2011-01-05 21:50:38.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/sched.c 2011-01-05 22:30:42.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/sched.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/sched.c
+--- linux-2.6.38-rc8/kernel/sched.c 2011-03-10 17:09:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/sched.c 2011-01-29 02:01:07.000000000 +0100
@@ -72,6 +72,8 @@
#include <linux/ctype.h>
#include <linux/ftrace.h>
#include <asm/tlb.h>
#include <asm/irq_regs.h>
-@@ -3361,9 +3363,17 @@ static void calc_global_nohz(unsigned lo
+@@ -3228,9 +3230,17 @@ static void calc_global_nohz(unsigned lo
*/
void get_avenrun(unsigned long *loads, unsigned long offset, int shift)
{
}
/*
-@@ -3651,16 +3661,19 @@ void account_user_time(struct task_struc
+@@ -3518,16 +3528,19 @@ void account_user_time(struct task_struc
cputime_t cputime_scaled)
{
struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
cpustat->nice = cputime64_add(cpustat->nice, tmp);
else
cpustat->user = cputime64_add(cpustat->user, tmp);
-@@ -3711,6 +3724,7 @@ void account_system_time(struct task_str
+@@ -3578,6 +3591,7 @@ void account_system_time(struct task_str
cputime_t cputime, cputime_t cputime_scaled)
{
struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
cputime64_t tmp;
if ((p->flags & PF_VCPU) && (irq_count() - hardirq_offset == 0)) {
-@@ -3721,6 +3735,7 @@ void account_system_time(struct task_str
+@@ -3588,6 +3602,7 @@ void account_system_time(struct task_str
/* Add system time to process. */
p->stime = cputime_add(p->stime, cputime);
p->stimescaled = cputime_add(p->stimescaled, cputime_scaled);
account_group_system_time(p, cputime);
/* Add system time to cpustat. */
-@@ -4804,7 +4819,7 @@ SYSCALL_DEFINE1(nice, int, increment)
+@@ -4671,7 +4686,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-2.6.37/kernel/sched_fair.c linux-2.6.37-vs2.3.0.37-rc3/kernel/sched_fair.c
---- linux-2.6.37/kernel/sched_fair.c 2011-01-05 21:50:38.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/sched_fair.c 2011-01-05 22:30:42.000000000 +0100
-@@ -782,6 +782,9 @@ enqueue_entity(struct cfs_rq *cfs_rq, st
- check_spread(cfs_rq, se);
- if (se != cfs_rq->curr)
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/sched_fair.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/sched_fair.c
+--- linux-2.6.38-rc8/kernel/sched_fair.c 2011-03-10 17:09:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/sched_fair.c 2011-02-02 22:20:27.000000000 +0100
+@@ -992,6 +992,8 @@ enqueue_entity(struct cfs_rq *cfs_rq, st
__enqueue_entity(cfs_rq, se);
-+
+ se->on_rq = 1;
+
+ if (entity_is_task(se))
+ vx_activate_task(task_of(se));
+ if (cfs_rq->nr_running == 1)
+ list_add_leaf_cfs_rq(cfs_rq);
}
-
- static void __clear_buddies(struct cfs_rq *cfs_rq, struct sched_entity *se)
-@@ -825,6 +828,8 @@ dequeue_entity(struct cfs_rq *cfs_rq, st
-
+@@ -1038,6 +1040,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);
update_min_vruntime(cfs_rq);
-
-diff -NurpP --minimal linux-2.6.37/kernel/signal.c linux-2.6.37-vs2.3.0.37-rc3/kernel/signal.c
---- linux-2.6.37/kernel/signal.c 2011-01-05 21:50:38.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/signal.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/signal.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/signal.c
+--- linux-2.6.38-rc8/kernel/signal.c 2011-01-05 21:50:38.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/signal.c 2011-01-29 02:01:07.000000000 +0100
@@ -28,6 +28,8 @@
#include <linux/freezer.h>
#include <linux/pid_namespace.h>
if (sig_kernel_stop(signr)) {
/*
* The default action is to stop all threads in
-diff -NurpP --minimal linux-2.6.37/kernel/softirq.c linux-2.6.37-vs2.3.0.37-rc3/kernel/softirq.c
---- linux-2.6.37/kernel/softirq.c 2011-01-05 21:50:38.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/softirq.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/softirq.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/softirq.c
+--- linux-2.6.38-rc8/kernel/softirq.c 2011-03-10 17:09:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/softirq.c 2011-01-29 02:01:07.000000000 +0100
@@ -24,6 +24,7 @@
#include <linux/ftrace.h>
#include <linux/smp.h>
#define CREATE_TRACE_POINTS
#include <trace/events/irq.h>
-diff -NurpP --minimal linux-2.6.37/kernel/sys.c linux-2.6.37-vs2.3.0.37-rc3/kernel/sys.c
---- linux-2.6.37/kernel/sys.c 2010-10-21 13:07:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/sys.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/sys.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/sys.c
+--- linux-2.6.38-rc8/kernel/sys.c 2011-03-10 17:09:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/sys.c 2011-02-02 22:20:27.000000000 +0100
@@ -42,6 +42,7 @@
#include <linux/syscalls.h>
#include <linux/kprobes.h>
#include <linux/user_namespace.h>
+#include <linux/vs_pid.h>
- #include <asm/uaccess.h>
- #include <asm/io.h>
-@@ -131,7 +132,10 @@ static int set_one_prio(struct task_stru
+ #include <linux/kmsg_dump.h>
+
+@@ -133,7 +134,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);
-@@ -181,6 +185,8 @@ SYSCALL_DEFINE3(setpriority, int, which,
+@@ -183,6 +187,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;
-@@ -244,6 +250,8 @@ SYSCALL_DEFINE2(getpriority, int, which,
+@@ -246,6 +252,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;
-@@ -357,6 +365,8 @@ EXPORT_SYMBOL_GPL(kernel_power_off);
+@@ -363,6 +371,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
-@@ -389,6 +399,9 @@ SYSCALL_DEFINE4(reboot, int, magic1, int
+@@ -395,6 +405,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:
-@@ -1169,7 +1182,7 @@ SYSCALL_DEFINE2(sethostname, char __user
+@@ -1177,7 +1190,7 @@ SYSCALL_DEFINE2(sethostname, char __user
int errno;
char tmp[__NEW_UTS_LEN];
return -EPERM;
if (len < 0 || len > __NEW_UTS_LEN)
return -EINVAL;
-@@ -1218,7 +1231,7 @@ SYSCALL_DEFINE2(setdomainname, char __us
+@@ -1226,7 +1239,7 @@ SYSCALL_DEFINE2(setdomainname, char __us
int errno;
char tmp[__NEW_UTS_LEN];
return -EPERM;
if (len < 0 || len > __NEW_UTS_LEN)
return -EINVAL;
-@@ -1334,7 +1347,7 @@ int do_prlimit(struct task_struct *tsk,
+@@ -1342,7 +1355,7 @@ int do_prlimit(struct task_struct *tsk,
task_lock(tsk->group_leader);
if (new_rlim) {
if (new_rlim->rlim_max > rlim->rlim_max &&
retval = -EPERM;
if (!retval)
retval = security_task_setrlimit(tsk->group_leader,
-@@ -1383,7 +1396,7 @@ static int check_prlimit_permission(stru
+@@ -1392,7 +1405,7 @@ static int check_prlimit_permission(stru
cred->gid != tcred->egid ||
cred->gid != tcred->sgid ||
cred->gid != tcred->gid) &&
return -EPERM;
}
-diff -NurpP --minimal linux-2.6.37/kernel/sysctl_binary.c linux-2.6.37-vs2.3.0.37-rc3/kernel/sysctl_binary.c
---- linux-2.6.37/kernel/sysctl_binary.c 2010-08-02 16:52:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/sysctl_binary.c 2010-11-23 02:09:41.000000000 +0100
-@@ -73,6 +73,7 @@ static const struct bin_table bin_kern_t
-
- { CTL_INT, KERN_PANIC, "panic" },
- { CTL_INT, KERN_REALROOTDEV, "real-root-dev" },
-+ { CTL_STR, KERN_VSHELPER, "vshelper" },
-
- { CTL_STR, KERN_SPARC_REBOOT, "reboot-cmd" },
- { CTL_INT, KERN_CTLALTDEL, "ctrl-alt-del" },
-diff -NurpP --minimal linux-2.6.37/kernel/sysctl.c linux-2.6.37-vs2.3.0.37-rc3/kernel/sysctl.c
---- linux-2.6.37/kernel/sysctl.c 2011-01-05 21:50:39.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/sysctl.c 2010-11-23 02:09:41.000000000 +0100
-@@ -73,6 +73,7 @@
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/sysctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/sysctl.c
+--- linux-2.6.38-rc8/kernel/sysctl.c 2011-03-10 17:09:28.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/sysctl.c 2011-02-02 22:20:27.000000000 +0100
+@@ -74,6 +74,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
-@@ -571,6 +572,13 @@ static struct ctl_table kern_table[] = {
+@@ -568,6 +569,13 @@ static struct ctl_table kern_table[] = {
.proc_handler = proc_dostring,
},
#endif
#ifdef CONFIG_CHR_DEV_SG
{
.procname = "sg-big-buff",
-diff -NurpP --minimal linux-2.6.37/kernel/time/timekeeping.c linux-2.6.37-vs2.3.0.37-rc3/kernel/time/timekeeping.c
---- linux-2.6.37/kernel/time/timekeeping.c 2010-10-21 13:07:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/time/timekeeping.c 2010-11-23 02:09:41.000000000 +0100
-@@ -229,6 +229,7 @@ void getnstimeofday(struct timespec *ts)
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/sysctl_binary.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/sysctl_binary.c
+--- linux-2.6.38-rc8/kernel/sysctl_binary.c 2011-03-10 17:09:29.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/sysctl_binary.c 2011-01-29 02:01:07.000000000 +0100
+@@ -73,6 +73,7 @@ static const struct bin_table bin_kern_t
+
+ { CTL_INT, KERN_PANIC, "panic" },
+ { CTL_INT, KERN_REALROOTDEV, "real-root-dev" },
++ { CTL_STR, KERN_VSHELPER, "vshelper" },
+
+ { CTL_STR, KERN_SPARC_REBOOT, "reboot-cmd" },
+ { CTL_INT, KERN_CTLALTDEL, "ctrl-alt-del" },
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/time/timekeeping.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/time/timekeeping.c
+--- linux-2.6.38-rc8/kernel/time/timekeeping.c 2011-03-10 17:09:29.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/time/timekeeping.c 2011-01-29 02:01:07.000000000 +0100
+@@ -233,6 +233,7 @@ void getnstimeofday(struct timespec *ts)
} while (read_seqretry(&xtime_lock, seq));
timespec_add_ns(ts, nsecs);
}
EXPORT_SYMBOL(getnstimeofday);
-diff -NurpP --minimal linux-2.6.37/kernel/time.c linux-2.6.37-vs2.3.0.37-rc3/kernel/time.c
---- linux-2.6.37/kernel/time.c 2010-10-21 13:07:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/time.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/time.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/time.c
+--- linux-2.6.38-rc8/kernel/time.c 2011-03-10 17:09:29.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/time.c 2011-01-29 02:01:07.000000000 +0100
@@ -92,7 +92,7 @@ SYSCALL_DEFINE1(stime, time_t __user *,
if (err)
return err;
}
return 0;
}
-diff -NurpP --minimal linux-2.6.37/kernel/timer.c linux-2.6.37-vs2.3.0.37-rc3/kernel/timer.c
---- linux-2.6.37/kernel/timer.c 2011-01-05 21:50:39.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/timer.c 2011-01-05 22:30:42.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/timer.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/timer.c
+--- linux-2.6.38-rc8/kernel/timer.c 2011-03-10 17:09:29.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/timer.c 2011-02-17 02:17:51.000000000 +0100
@@ -40,6 +40,10 @@
#include <linux/irq_work.h>
#include <linux/sched.h>
#include <asm/uaccess.h>
#include <asm/unistd.h>
-@@ -1341,12 +1345,6 @@ SYSCALL_DEFINE1(alarm, unsigned int, sec
+@@ -1321,12 +1325,6 @@ SYSCALL_DEFINE1(alarm, unsigned int, sec
#endif
/**
* sys_getpid - return the thread group id of the current process
-@@ -1375,10 +1373,23 @@ SYSCALL_DEFINE0(getppid)
+@@ -1355,10 +1353,23 @@ SYSCALL_DEFINE0(getppid)
rcu_read_lock();
pid = task_tgid_vnr(current->real_parent);
rcu_read_unlock();
SYSCALL_DEFINE0(getuid)
{
/* Only we change this so SMP safe */
-diff -NurpP --minimal linux-2.6.37/kernel/user_namespace.c linux-2.6.37-vs2.3.0.37-rc3/kernel/user_namespace.c
---- linux-2.6.37/kernel/user_namespace.c 2010-10-21 13:07:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/user_namespace.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/user_namespace.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/user_namespace.c
+--- linux-2.6.38-rc8/kernel/user_namespace.c 2011-03-10 17:09:29.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/user_namespace.c 2011-01-29 02:01:07.000000000 +0100
@@ -11,6 +11,7 @@
#include <linux/user_namespace.h>
#include <linux/highuid.h>
#include <linux/cred.h>
+#include <linux/vserver/global.h>
- /*
- * Create a new user namespace, deriving the creator from the user in the
-@@ -31,6 +32,7 @@ int create_user_ns(struct cred *new)
+ static struct kmem_cache *user_ns_cachep __read_mostly;
+
+@@ -33,6 +34,7 @@ int create_user_ns(struct cred *new)
return -ENOMEM;
kref_init(&ns->kref);
for (n = 0; n < UIDHASH_SZ; ++n)
INIT_HLIST_HEAD(ns->uidhash_table + n);
-@@ -79,6 +81,8 @@ void free_user_ns(struct kref *kref)
+@@ -81,6 +83,8 @@ void free_user_ns(struct kref *kref)
struct user_namespace *ns =
container_of(kref, struct user_namespace, kref);
INIT_WORK(&ns->destroyer, free_user_ns_work);
schedule_work(&ns->destroyer);
}
-diff -NurpP --minimal linux-2.6.37/kernel/utsname.c linux-2.6.37-vs2.3.0.37-rc3/kernel/utsname.c
---- linux-2.6.37/kernel/utsname.c 2009-09-10 15:26:28.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/utsname.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/utsname.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/utsname.c
+--- linux-2.6.38-rc8/kernel/utsname.c 2009-09-10 15:26:28.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/utsname.c 2011-01-29 02:01:07.000000000 +0100
@@ -14,14 +14,17 @@
#include <linux/utsname.h>
#include <linux/err.h>
+ atomic_dec(&vs_global_uts_ns);
kfree(ns);
}
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/cacct.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cacct.c
---- linux-2.6.37/kernel/vserver/cacct.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cacct.c 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,42 @@
-+/*
-+ * linux/kernel/vserver/cacct.c
-+ *
-+ * Virtual Server: Context Accounting
-+ *
-+ * Copyright (C) 2006-2007 Herbert Pötzl
-+ *
-+ * V0.01 added accounting stats
-+ *
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/vs_context.h>
-+#include <linux/vserver/cacct_cmd.h>
-+#include <linux/vserver/cacct_int.h>
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/Kconfig
+--- linux-2.6.38-rc8/kernel/vserver/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,265 @@
++#
++# Linux VServer configuration
++#
+
-+#include <asm/errno.h>
-+#include <asm/uaccess.h>
++menu "Linux VServer"
+
++config VSERVER_AUTO_LBACK
++ bool "Automatically Assign Loopback IP"
++ default y
++ help
++ Automatically assign a guest specific loopback
++ IP and add it to the kernel network stack on
++ startup.
+
-+int vc_sock_stat(struct vx_info *vxi, void __user *data)
-+{
-+ struct vcmd_sock_stat_v0 vc_data;
-+ int j, field;
++config VSERVER_AUTO_SINGLE
++ bool "Automatic Single IP Special Casing"
++ depends on EXPERIMENTAL
++ default y
++ help
++ This allows network contexts with a single IP to
++ automatically remap 0.0.0.0 bindings to that IP,
++ avoiding further network checks and improving
++ performance.
+
-+ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
-+ return -EFAULT;
++ (note: such guests do not allow to change the ip
++ on the fly and do not show loopback addresses)
+
-+ field = vc_data.field;
-+ if ((field < 0) || (field >= VXA_SOCK_SIZE))
++config VSERVER_COWBL
++ bool "Enable COW Immutable Link Breaking"
++ default y
++ help
++ This enables the COW (Copy-On-Write) link break code.
++ It allows you to treat unified files like normal files
++ when writing to them (which will implicitely break the
++ link and create a copy of the unified file)
++
++config VSERVER_VTIME
++ bool "Enable Virtualized Guest Time"
++ depends on EXPERIMENTAL
++ default n
++ help
++ This enables per guest time offsets to allow for
++ adjusting the system clock individually per guest.
++ this adds some overhead to the time functions and
++ therefore should not be enabled without good reason.
++
++config VSERVER_DEVICE
++ bool "Enable Guest Device Mapping"
++ depends on EXPERIMENTAL
++ default n
++ help
++ This enables generic device remapping.
++
++config VSERVER_PROC_SECURE
++ bool "Enable Proc Security"
++ depends on PROC_FS
++ default y
++ help
++ This configures ProcFS security to initially hide
++ non-process entries for all contexts except the main and
++ spectator context (i.e. for all guests), which is a secure
++ default.
++
++ (note: on 1.2x the entries were visible by default)
++
++config VSERVER_HARDCPU
++ bool "Enable Hard CPU Limits"
++ default y
++ help
++ Activate the Hard CPU Limits
++
++ This will compile in code that allows the Token Bucket
++ Scheduler to put processes on hold when a context's
++ tokens are depleted (provided that its per-context
++ sched_hard flag is set).
++
++ Processes belonging to that context will not be able
++ to consume CPU resources again until a per-context
++ configured minimum of tokens has been reached.
++
++config VSERVER_IDLETIME
++ bool "Avoid idle CPUs by skipping Time"
++ depends on VSERVER_HARDCPU
++ default y
++ help
++ This option allows the scheduler to artificially
++ advance time (per cpu) when otherwise the idle
++ task would be scheduled, thus keeping the cpu
++ busy and sharing the available resources among
++ certain contexts.
++
++config VSERVER_IDLELIMIT
++ bool "Limit the IDLE task"
++ depends on VSERVER_HARDCPU
++ default n
++ help
++ Limit the idle slices, so the the next context
++ will be scheduled as soon as possible.
++
++ This might improve interactivity and latency, but
++ will also marginally increase scheduling overhead.
++
++choice
++ prompt "Persistent Inode Tagging"
++ default TAGGING_ID24
++ help
++ This adds persistent context information to filesystems
++ mounted with the tagxid option. Tagging is a requirement
++ for per-context disk limits and per-context quota.
++
++
++config TAGGING_NONE
++ bool "Disabled"
++ help
++ do not store per-context information in inodes.
++
++config TAGGING_UID16
++ bool "UID16/GID32"
++ help
++ reduces UID to 16 bit, but leaves GID at 32 bit.
++
++config TAGGING_GID16
++ bool "UID32/GID16"
++ help
++ reduces GID to 16 bit, but leaves UID at 32 bit.
++
++config TAGGING_ID24
++ bool "UID24/GID24"
++ help
++ uses the upper 8bit from UID and GID for XID tagging
++ which leaves 24bit for UID/GID each, which should be
++ more than sufficient for normal use.
++
++config TAGGING_INTERN
++ bool "UID32/GID32"
++ help
++ this uses otherwise reserved inode fields in the on
++ disk representation, which limits the use to a few
++ filesystems (currently ext2 and ext3)
++
++endchoice
++
++config TAG_NFSD
++ bool "Tag NFSD User Auth and Files"
++ default n
++ help
++ Enable this if you do want the in-kernel NFS
++ Server to use the tagging specified above.
++ (will require patched clients too)
++
++config VSERVER_PRIVACY
++ bool "Honor Privacy Aspects of Guests"
++ default n
++ help
++ When enabled, most context checks will disallow
++ access to structures assigned to a specific context,
++ like ptys or loop devices.
++
++config VSERVER_CONTEXTS
++ int "Maximum number of Contexts (1-65533)" if EMBEDDED
++ range 1 65533
++ default "768" if 64BIT
++ default "256"
++ help
++ This setting will optimize certain data structures
++ and memory allocations according to the expected
++ maximum.
++
++ note: this is not a strict upper limit.
++
++config VSERVER_WARN
++ bool "VServer Warnings"
++ default y
++ help
++ This enables various runtime warnings, which will
++ notify about potential manipulation attempts or
++ resource shortage. It is generally considered to
++ be a good idea to have that enabled.
++
++config VSERVER_WARN_DEVPTS
++ bool "VServer DevPTS Warnings"
++ depends on VSERVER_WARN
++ default y
++ help
++ This enables DevPTS related warnings, issued when a
++ process inside a context tries to lookup or access
++ a dynamic pts from the host or a different context.
++
++config VSERVER_DEBUG
++ bool "VServer Debugging Code"
++ default n
++ help
++ Set this to yes if you want to be able to activate
++ debugging output at runtime. It adds a very small
++ overhead to all vserver related functions and
++ increases the kernel size by about 20k.
++
++config VSERVER_HISTORY
++ bool "VServer History Tracing"
++ depends on VSERVER_DEBUG
++ default n
++ help
++ Set this to yes if you want to record the history of
++ linux-vserver activities, so they can be replayed in
++ the event of a kernel panic or oops.
++
++config VSERVER_HISTORY_SIZE
++ int "Per-CPU History Size (32-65536)"
++ depends on VSERVER_HISTORY
++ range 32 65536
++ default 64
++ help
++ This allows you to specify the number of entries in
++ the per-CPU history buffer.
++
++config VSERVER_LEGACY_MEM
++ bool "Legacy Memory Limits"
++ default n
++ help
++ This provides fake memory limits to keep
++ older tools happy in the face of memory
++ cgroups
++
++choice
++ prompt "Quotes used in debug and warn messages"
++ default QUOTES_ISO8859
++
++config QUOTES_ISO8859
++ bool "Extended ASCII (ISO 8859) angle quotes"
++ help
++ This uses the extended ASCII characters \xbb
++ and \xab for quoting file and process names.
++
++config QUOTES_UTF8
++ bool "UTF-8 angle quotes"
++ help
++ This uses the the UTF-8 sequences for angle
++ quotes to quote file and process names.
++
++config QUOTES_ASCII
++ bool "ASCII single quotes"
++ help
++ This uses the ASCII single quote character
++ (\x27) to quote file and process names.
++
++endchoice
++
++endmenu
++
++
++config VSERVER
++ bool
++ default y
++ select NAMESPACES
++ select UTS_NS
++ select IPC_NS
++ select USER_NS
++ select SYSVIPC
++
++config VSERVER_SECURITY
++ bool
++ depends on SECURITY
++ default y
++ select SECURITY_CAPABILITIES
++
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/Makefile linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/Makefile
+--- linux-2.6.38-rc8/kernel/vserver/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/Makefile 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,18 @@
++#
++# Makefile for the Linux vserver routines.
++#
++
++
++obj-y += vserver.o
++
++vserver-y := switch.o context.o space.o sched.o network.o inode.o \
++ limit.o cvirt.o cacct.o signal.o helper.o init.o \
++ dlimit.o tag.o
++
++vserver-$(CONFIG_INET) += inet.o
++vserver-$(CONFIG_PROC_FS) += proc.o
++vserver-$(CONFIG_VSERVER_DEBUG) += sysctl.o debug.o
++vserver-$(CONFIG_VSERVER_HISTORY) += history.o
++vserver-$(CONFIG_VSERVER_MONITOR) += monitor.o
++vserver-$(CONFIG_VSERVER_DEVICE) += device.o
++
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/cacct.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cacct.c
+--- linux-2.6.38-rc8/kernel/vserver/cacct.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cacct.c 2011-01-29 02:01:07.000000000 +0100
+@@ -0,0 +1,42 @@
++/*
++ * linux/kernel/vserver/cacct.c
++ *
++ * Virtual Server: Context Accounting
++ *
++ * Copyright (C) 2006-2007 Herbert Pötzl
++ *
++ * V0.01 added accounting stats
++ *
++ */
++
++#include <linux/types.h>
++#include <linux/vs_context.h>
++#include <linux/vserver/cacct_cmd.h>
++#include <linux/vserver/cacct_int.h>
++
++#include <asm/errno.h>
++#include <asm/uaccess.h>
++
++
++int vc_sock_stat(struct vx_info *vxi, void __user *data)
++{
++ struct vcmd_sock_stat_v0 vc_data;
++ int j, field;
++
++ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
++ return -EFAULT;
++
++ field = vc_data.field;
++ if ((field < 0) || (field >= VXA_SOCK_SIZE))
+ return -EINVAL;
+
+ for (j = 0; j < 3; j++) {
+ return 0;
+}
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/cacct_init.h linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cacct_init.h
---- linux-2.6.37/kernel/vserver/cacct_init.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cacct_init.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/cacct_init.h linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cacct_init.h
+--- linux-2.6.38-rc8/kernel/vserver/cacct_init.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cacct_init.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,25 @@
+
+
+ return;
+}
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/cacct_proc.h linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cacct_proc.h
---- linux-2.6.37/kernel/vserver/cacct_proc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cacct_proc.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/cacct_proc.h linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cacct_proc.h
+--- linux-2.6.38-rc8/kernel/vserver/cacct_proc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cacct_proc.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,53 @@
+#ifndef _VX_CACCT_PROC_H
+#define _VX_CACCT_PROC_H
+}
+
+#endif /* _VX_CACCT_PROC_H */
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/context.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/context.c
---- linux-2.6.37/kernel/vserver/context.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/context.c 2011-01-31 21:05:40.000000000 +0100
-@@ -0,0 +1,1086 @@
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/context.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/context.c
+--- linux-2.6.38-rc8/kernel/vserver/context.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/context.c 2011-01-31 22:46:59.000000000 +0100
+@@ -0,0 +1,1079 @@
+/*
+ * linux/kernel/vserver/context.c
+ *
+ spin_unlock(&fs->lock);
+ if (kill)
+ free_fs_struct(fs);
-+#if 0
-+ cred = xchg(&space->vx_real_cred, NULL);
-+ if (cred) {
-+ alter_cred_subscribers(cred, -1);
-+ put_cred(cred);
-+ }
+
-+#endif
+ cred = (struct cred *)xchg(&space->vx_cred, NULL);
+ if (cred)
+ abort_creds(cred);
+
+EXPORT_SYMBOL_GPL(free_vx_info);
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/cvirt.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cvirt.c
---- linux-2.6.37/kernel/vserver/cvirt.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cvirt.c 2011-01-08 03:33:34.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/cvirt.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cvirt.c
+--- linux-2.6.38-rc8/kernel/vserver/cvirt.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cvirt.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,303 @@
+/*
+ * linux/kernel/vserver/cvirt.c
+
+#endif
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/cvirt_init.h linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cvirt_init.h
---- linux-2.6.37/kernel/vserver/cvirt_init.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cvirt_init.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/cvirt_init.h linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cvirt_init.h
+--- linux-2.6.38-rc8/kernel/vserver/cvirt_init.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cvirt_init.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,69 @@
+
+
+ return;
+}
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/cvirt_proc.h linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cvirt_proc.h
---- linux-2.6.37/kernel/vserver/cvirt_proc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/cvirt_proc.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/cvirt_proc.h linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cvirt_proc.h
+--- linux-2.6.38-rc8/kernel/vserver/cvirt_proc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/cvirt_proc.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,135 @@
+#ifndef _VX_CVIRT_PROC_H
+#define _VX_CVIRT_PROC_H
+}
+
+#endif /* _VX_CVIRT_PROC_H */
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/debug.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/debug.c
---- linux-2.6.37/kernel/vserver/debug.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/debug.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/debug.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/debug.c
+--- linux-2.6.38-rc8/kernel/vserver/debug.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/debug.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,32 @@
+/*
+ * kernel/vserver/debug.c
+
+EXPORT_SYMBOL_GPL(dump_vx_info);
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/device.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/device.c
---- linux-2.6.37/kernel/vserver/device.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/device.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/device.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/device.c
+--- linux-2.6.38-rc8/kernel/vserver/device.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/device.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,443 @@
+/*
+ * linux/kernel/vserver/device.c
+#endif /* CONFIG_COMPAT */
+
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/dlimit.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/dlimit.c
---- linux-2.6.37/kernel/vserver/dlimit.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/dlimit.c 2011-01-05 23:26:15.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/dlimit.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/dlimit.c
+--- linux-2.6.38-rc8/kernel/vserver/dlimit.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/dlimit.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,531 @@
+/*
+ * linux/kernel/vserver/dlimit.c
+EXPORT_SYMBOL_GPL(locate_dl_info);
+EXPORT_SYMBOL_GPL(rcu_free_dl_info);
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/helper.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/helper.c
---- linux-2.6.37/kernel/vserver/helper.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/helper.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/helper.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/helper.c
+--- linux-2.6.38-rc8/kernel/vserver/helper.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/helper.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,223 @@
+/*
+ * linux/kernel/vserver/helper.c
+ return do_vshelper(vshelper_path, argv, envp, 1);
+}
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/history.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/history.c
---- linux-2.6.37/kernel/vserver/history.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/history.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/history.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/history.c
+--- linux-2.6.38-rc8/kernel/vserver/history.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/history.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,258 @@
+/*
+ * kernel/vserver/history.c
+
+#endif /* CONFIG_COMPAT */
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/inet.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/inet.c
---- linux-2.6.37/kernel/vserver/inet.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/inet.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/inet.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/inet.c
+--- linux-2.6.38-rc8/kernel/vserver/inet.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/inet.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,224 @@
+
+#include <linux/in.h>
+
+EXPORT_SYMBOL_GPL(ip_v4_find_src);
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/init.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/init.c
---- linux-2.6.37/kernel/vserver/init.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/init.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/init.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/init.c
+--- linux-2.6.38-rc8/kernel/vserver/init.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/init.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,45 @@
+/*
+ * linux/kernel/init.c
+module_init(init_vserver);
+module_exit(exit_vserver);
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/inode.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/inode.c
---- linux-2.6.37/kernel/vserver/inode.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/inode.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/inode.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/inode.c
+--- linux-2.6.38-rc8/kernel/vserver/inode.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/inode.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,435 @@
+/*
+ * linux/kernel/vserver/inode.c
+ | (IS_COW(in) ? IATTR_COW : 0);
+ *mask = IATTR_IXUNLINK | IATTR_IMMUTABLE | IATTR_COW;
+
-+ if (S_ISDIR(in->i_mode))
-+ *mask |= IATTR_BARRIER;
-+
-+ if (IS_TAGGED(in)) {
-+ *tag = in->i_tag;
-+ *mask |= IATTR_TAG;
-+ }
-+
-+ switch (in->i_sb->s_magic) {
-+ case PROC_SUPER_MAGIC:
-+ entry = PROC_I(in)->pde;
-+
-+ /* check for specific inodes? */
-+ if (entry)
-+ *mask |= IATTR_FLAGS;
-+ if (entry)
-+ *flags |= (entry->vx_flags & IATTR_FLAGS);
-+ else
-+ *flags |= (PROC_I(in)->vx_flags & IATTR_FLAGS);
-+ break;
-+
-+ case DEVPTS_SUPER_MAGIC:
-+ *tag = in->i_tag;
-+ *mask |= IATTR_TAG;
-+ break;
-+
-+ default:
-+ break;
-+ }
-+ return 0;
-+}
-+
-+int vc_get_iattr(void __user *data)
-+{
-+ struct path path;
-+ struct vcmd_ctx_iattr_v1 vc_data = { .tag = -1 };
-+ int ret;
-+
-+ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
-+ return -EFAULT;
-+
-+ ret = user_lpath(vc_data.name, &path);
-+ if (!ret) {
-+ ret = __vc_get_iattr(path.dentry->d_inode,
-+ &vc_data.tag, &vc_data.flags, &vc_data.mask);
-+ path_put(&path);
-+ }
-+ if (ret)
-+ return ret;
-+
-+ if (copy_to_user(data, &vc_data, sizeof(vc_data)))
-+ ret = -EFAULT;
-+ return ret;
-+}
-+
-+#ifdef CONFIG_COMPAT
-+
-+int vc_get_iattr_x32(void __user *data)
-+{
-+ struct path path;
-+ struct vcmd_ctx_iattr_v1_x32 vc_data = { .tag = -1 };
-+ int ret;
-+
-+ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
-+ return -EFAULT;
-+
-+ ret = user_lpath(compat_ptr(vc_data.name_ptr), &path);
-+ if (!ret) {
-+ ret = __vc_get_iattr(path.dentry->d_inode,
-+ &vc_data.tag, &vc_data.flags, &vc_data.mask);
-+ path_put(&path);
-+ }
-+ if (ret)
-+ return ret;
-+
-+ if (copy_to_user(data, &vc_data, sizeof(vc_data)))
-+ ret = -EFAULT;
-+ return ret;
-+}
-+
-+#endif /* CONFIG_COMPAT */
-+
-+
-+int vc_fget_iattr(uint32_t fd, void __user *data)
-+{
-+ struct file *filp;
-+ struct vcmd_ctx_fiattr_v0 vc_data = { .tag = -1 };
-+ int ret;
-+
-+ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
-+ return -EFAULT;
-+
-+ filp = fget(fd);
-+ if (!filp || !filp->f_dentry || !filp->f_dentry->d_inode)
-+ return -EBADF;
-+
-+ ret = __vc_get_iattr(filp->f_dentry->d_inode,
-+ &vc_data.tag, &vc_data.flags, &vc_data.mask);
-+
-+ fput(filp);
-+
-+ if (copy_to_user(data, &vc_data, sizeof(vc_data)))
-+ ret = -EFAULT;
-+ return ret;
-+}
-+
-+
-+static int __vc_set_iattr(struct dentry *de, uint32_t *tag, uint32_t *flags, uint32_t *mask)
-+{
-+ struct inode *in = de->d_inode;
-+ int error = 0, is_proc = 0, has_tag = 0;
-+ struct iattr attr = { 0 };
-+
-+ if (!in || !in->i_sb)
-+ return -ESRCH;
-+
-+ is_proc = (in->i_sb->s_magic == PROC_SUPER_MAGIC);
-+ if ((*mask & IATTR_FLAGS) && !is_proc)
-+ return -EINVAL;
-+
-+ has_tag = IS_TAGGED(in) ||
-+ (in->i_sb->s_magic == DEVPTS_SUPER_MAGIC);
-+ if ((*mask & IATTR_TAG) && !has_tag)
-+ return -EINVAL;
++ if (S_ISDIR(in->i_mode))
++ *mask |= IATTR_BARRIER;
+
-+ mutex_lock(&in->i_mutex);
-+ if (*mask & IATTR_TAG) {
-+ attr.ia_tag = *tag;
-+ attr.ia_valid |= ATTR_TAG;
++ if (IS_TAGGED(in)) {
++ *tag = in->i_tag;
++ *mask |= IATTR_TAG;
+ }
+
-+ if (*mask & IATTR_FLAGS) {
-+ struct proc_dir_entry *entry = PROC_I(in)->pde;
-+ unsigned int iflags = PROC_I(in)->vx_flags;
++ switch (in->i_sb->s_magic) {
++ case PROC_SUPER_MAGIC:
++ entry = PROC_I(in)->pde;
+
-+ iflags = (iflags & ~(*mask & IATTR_FLAGS))
-+ | (*flags & IATTR_FLAGS);
-+ PROC_I(in)->vx_flags = iflags;
++ /* check for specific inodes? */
+ if (entry)
-+ entry->vx_flags = iflags;
-+ }
-+
-+ if (*mask & (IATTR_IMMUTABLE | IATTR_IXUNLINK |
-+ IATTR_BARRIER | IATTR_COW)) {
-+ int iflags = in->i_flags;
-+ int vflags = in->i_vflags;
++ *mask |= IATTR_FLAGS;
++ if (entry)
++ *flags |= (entry->vx_flags & IATTR_FLAGS);
++ else
++ *flags |= (PROC_I(in)->vx_flags & IATTR_FLAGS);
++ break;
+
-+ if (*mask & IATTR_IMMUTABLE) {
-+ if (*flags & IATTR_IMMUTABLE)
-+ iflags |= S_IMMUTABLE;
-+ else
-+ iflags &= ~S_IMMUTABLE;
-+ }
-+ if (*mask & IATTR_IXUNLINK) {
-+ if (*flags & IATTR_IXUNLINK)
-+ iflags |= S_IXUNLINK;
-+ else
-+ iflags &= ~S_IXUNLINK;
-+ }
-+ if (S_ISDIR(in->i_mode) && (*mask & IATTR_BARRIER)) {
-+ if (*flags & IATTR_BARRIER)
-+ vflags |= V_BARRIER;
-+ else
-+ vflags &= ~V_BARRIER;
-+ }
-+ if (S_ISREG(in->i_mode) && (*mask & IATTR_COW)) {
-+ if (*flags & IATTR_COW)
-+ vflags |= V_COW;
-+ else
-+ vflags &= ~V_COW;
-+ }
-+ if (in->i_op && in->i_op->sync_flags) {
-+ error = in->i_op->sync_flags(in, iflags, vflags);
-+ if (error)
-+ goto out;
-+ }
-+ }
++ case DEVPTS_SUPER_MAGIC:
++ *tag = in->i_tag;
++ *mask |= IATTR_TAG;
++ break;
+
-+ if (attr.ia_valid) {
-+ if (in->i_op && in->i_op->setattr)
-+ error = in->i_op->setattr(de, &attr);
-+ else {
-+ error = inode_change_ok(in, &attr);
-+ if (!error) {
-+ setattr_copy(in, &attr);
-+ mark_inode_dirty(in);
-+ }
-+ }
++ default:
++ break;
+ }
-+
-+out:
-+ mutex_unlock(&in->i_mutex);
-+ return error;
++ return 0;
+}
+
-+int vc_set_iattr(void __user *data)
++int vc_get_iattr(void __user *data)
+{
+ struct path path;
-+ struct vcmd_ctx_iattr_v1 vc_data;
++ struct vcmd_ctx_iattr_v1 vc_data = { .tag = -1 };
+ int ret;
+
-+ if (!capable(CAP_LINUX_IMMUTABLE))
-+ return -EPERM;
+ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
+ return -EFAULT;
+
+ ret = user_lpath(vc_data.name, &path);
+ if (!ret) {
-+ ret = __vc_set_iattr(path.dentry,
++ ret = __vc_get_iattr(path.dentry->d_inode,
+ &vc_data.tag, &vc_data.flags, &vc_data.mask);
+ path_put(&path);
+ }
++ if (ret)
++ return ret;
+
+ if (copy_to_user(data, &vc_data, sizeof(vc_data)))
+ ret = -EFAULT;
+
+#ifdef CONFIG_COMPAT
+
-+int vc_set_iattr_x32(void __user *data)
++int vc_get_iattr_x32(void __user *data)
+{
+ struct path path;
-+ struct vcmd_ctx_iattr_v1_x32 vc_data;
++ struct vcmd_ctx_iattr_v1_x32 vc_data = { .tag = -1 };
+ int ret;
+
-+ if (!capable(CAP_LINUX_IMMUTABLE))
-+ return -EPERM;
+ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
+ return -EFAULT;
+
+ ret = user_lpath(compat_ptr(vc_data.name_ptr), &path);
+ if (!ret) {
-+ ret = __vc_set_iattr(path.dentry,
++ ret = __vc_get_iattr(path.dentry->d_inode,
+ &vc_data.tag, &vc_data.flags, &vc_data.mask);
+ path_put(&path);
+ }
++ if (ret)
++ return ret;
+
+ if (copy_to_user(data, &vc_data, sizeof(vc_data)))
+ ret = -EFAULT;
+
+#endif /* CONFIG_COMPAT */
+
-+int vc_fset_iattr(uint32_t fd, void __user *data)
++
++int vc_fget_iattr(uint32_t fd, void __user *data)
+{
+ struct file *filp;
-+ struct vcmd_ctx_fiattr_v0 vc_data;
++ struct vcmd_ctx_fiattr_v0 vc_data = { .tag = -1 };
+ int ret;
+
-+ if (!capable(CAP_LINUX_IMMUTABLE))
-+ return -EPERM;
+ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
+ return -EFAULT;
+
+ if (!filp || !filp->f_dentry || !filp->f_dentry->d_inode)
+ return -EBADF;
+
-+ ret = __vc_set_iattr(filp->f_dentry, &vc_data.tag,
-+ &vc_data.flags, &vc_data.mask);
++ ret = __vc_get_iattr(filp->f_dentry->d_inode,
++ &vc_data.tag, &vc_data.flags, &vc_data.mask);
+
+ fput(filp);
+
+ if (copy_to_user(data, &vc_data, sizeof(vc_data)))
-+ return -EFAULT;
++ ret = -EFAULT;
+ return ret;
+}
+
+
-+enum { Opt_notagcheck, Opt_tag, Opt_notag, Opt_tagid, Opt_err };
-+
-+static match_table_t tokens = {
-+ {Opt_notagcheck, "notagcheck"},
-+#ifdef CONFIG_PROPAGATE
-+ {Opt_notag, "notag"},
-+ {Opt_tag, "tag"},
-+ {Opt_tagid, "tagid=%u"},
-+#endif
-+ {Opt_err, NULL}
-+};
-+
-+
-+static void __dx_parse_remove(char *string, char *opt)
-+{
-+ char *p = strstr(string, opt);
-+ char *q = p;
-+
-+ if (p) {
-+ while (*q != '\0' && *q != ',')
-+ q++;
-+ while (*q)
-+ *p++ = *q++;
-+ while (*p)
-+ *p++ = '\0';
-+ }
-+}
-+
-+int dx_parse_tag(char *string, tag_t *tag, int remove, int *mnt_flags,
-+ unsigned long *flags)
-+{
-+ int set = 0;
-+ substring_t args[MAX_OPT_ARGS];
-+ int token, option = 0;
-+ char *s, *p, *opts;
-+
-+ if (!string)
-+ return 0;
-+ s = kstrdup(string, GFP_KERNEL | GFP_ATOMIC);
-+ if (!s)
-+ return 0;
-+
-+ opts = s;
-+ while ((p = strsep(&opts, ",")) != NULL) {
-+ token = match_token(p, tokens, args);
-+
-+ vxdprintk(VXD_CBIT(tag, 7),
-+ "dx_parse_tag(" VS_Q("%s") "): %d:#%d",
-+ p, token, option);
-+
-+ switch (token) {
-+#ifdef CONFIG_PROPAGATE
-+ case Opt_tag:
-+ if (tag)
-+ *tag = 0;
-+ if (remove)
-+ __dx_parse_remove(s, "tag");
-+ *mnt_flags |= MNT_TAGID;
-+ set |= MNT_TAGID;
-+ break;
-+ case Opt_notag:
-+ if (remove)
-+ __dx_parse_remove(s, "notag");
-+ *mnt_flags |= MNT_NOTAG;
-+ set |= MNT_NOTAG;
-+ break;
-+ case Opt_tagid:
-+ if (tag && !match_int(args, &option))
-+ *tag = option;
-+ if (remove)
-+ __dx_parse_remove(s, "tagid");
-+ *mnt_flags |= MNT_TAGID;
-+ set |= MNT_TAGID;
-+ break;
-+#endif
-+ case Opt_notagcheck:
-+ if (remove)
-+ __dx_parse_remove(s, "notagcheck");
-+ *flags |= MS_NOTAGCHECK;
-+ set |= MS_NOTAGCHECK;
-+ break;
-+ }
-+ }
-+ if (set)
-+ strcpy(string, s);
-+ kfree(s);
-+ return set;
-+}
-+
-+#ifdef CONFIG_PROPAGATE
-+
-+void __dx_propagate_tag(struct nameidata *nd, struct inode *inode)
++static int __vc_set_iattr(struct dentry *de, uint32_t *tag, uint32_t *flags, uint32_t *mask)
+{
-+ tag_t new_tag = 0;
-+ struct vfsmount *mnt;
-+ int propagate;
-+
-+ if (!nd)
-+ return;
-+ mnt = nd->path.mnt;
-+ if (!mnt)
-+ return;
-+
-+ propagate = (mnt->mnt_flags & MNT_TAGID);
-+ if (propagate)
-+ new_tag = mnt->mnt_tag;
-+
-+ vxdprintk(VXD_CBIT(tag, 7),
-+ "dx_propagate_tag(%p[#%lu.%d]): %d,%d",
-+ inode, inode->i_ino, inode->i_tag,
-+ new_tag, (propagate) ? 1 : 0);
-+
-+ if (propagate)
-+ inode->i_tag = new_tag;
-+}
++ struct inode *in = de->d_inode;
++ int error = 0, is_proc = 0, has_tag = 0;
++ struct iattr attr = { 0 };
+
-+#include <linux/module.h>
++ if (!in || !in->i_sb)
++ return -ESRCH;
+
-+EXPORT_SYMBOL_GPL(__dx_propagate_tag);
++ is_proc = (in->i_sb->s_magic == PROC_SUPER_MAGIC);
++ if ((*mask & IATTR_FLAGS) && !is_proc)
++ return -EINVAL;
+
-+#endif /* CONFIG_PROPAGATE */
++ has_tag = IS_TAGGED(in) ||
++ (in->i_sb->s_magic == DEVPTS_SUPER_MAGIC);
++ if ((*mask & IATTR_TAG) && !has_tag)
++ return -EINVAL;
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/Kconfig linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/Kconfig
---- linux-2.6.37/kernel/vserver/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/Kconfig 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,265 @@
-+#
-+# Linux VServer configuration
-+#
++ mutex_lock(&in->i_mutex);
++ if (*mask & IATTR_TAG) {
++ attr.ia_tag = *tag;
++ attr.ia_valid |= ATTR_TAG;
++ }
+
-+menu "Linux VServer"
++ if (*mask & IATTR_FLAGS) {
++ struct proc_dir_entry *entry = PROC_I(in)->pde;
++ unsigned int iflags = PROC_I(in)->vx_flags;
+
-+config VSERVER_AUTO_LBACK
-+ bool "Automatically Assign Loopback IP"
-+ default y
-+ help
-+ Automatically assign a guest specific loopback
-+ IP and add it to the kernel network stack on
-+ startup.
++ iflags = (iflags & ~(*mask & IATTR_FLAGS))
++ | (*flags & IATTR_FLAGS);
++ PROC_I(in)->vx_flags = iflags;
++ if (entry)
++ entry->vx_flags = iflags;
++ }
+
-+config VSERVER_AUTO_SINGLE
-+ bool "Automatic Single IP Special Casing"
-+ depends on EXPERIMENTAL
-+ default y
-+ help
-+ This allows network contexts with a single IP to
-+ automatically remap 0.0.0.0 bindings to that IP,
-+ avoiding further network checks and improving
-+ performance.
++ if (*mask & (IATTR_IMMUTABLE | IATTR_IXUNLINK |
++ IATTR_BARRIER | IATTR_COW)) {
++ int iflags = in->i_flags;
++ int vflags = in->i_vflags;
+
-+ (note: such guests do not allow to change the ip
-+ on the fly and do not show loopback addresses)
++ if (*mask & IATTR_IMMUTABLE) {
++ if (*flags & IATTR_IMMUTABLE)
++ iflags |= S_IMMUTABLE;
++ else
++ iflags &= ~S_IMMUTABLE;
++ }
++ if (*mask & IATTR_IXUNLINK) {
++ if (*flags & IATTR_IXUNLINK)
++ iflags |= S_IXUNLINK;
++ else
++ iflags &= ~S_IXUNLINK;
++ }
++ if (S_ISDIR(in->i_mode) && (*mask & IATTR_BARRIER)) {
++ if (*flags & IATTR_BARRIER)
++ vflags |= V_BARRIER;
++ else
++ vflags &= ~V_BARRIER;
++ }
++ if (S_ISREG(in->i_mode) && (*mask & IATTR_COW)) {
++ if (*flags & IATTR_COW)
++ vflags |= V_COW;
++ else
++ vflags &= ~V_COW;
++ }
++ if (in->i_op && in->i_op->sync_flags) {
++ error = in->i_op->sync_flags(in, iflags, vflags);
++ if (error)
++ goto out;
++ }
++ }
+
-+config VSERVER_COWBL
-+ bool "Enable COW Immutable Link Breaking"
-+ default y
-+ help
-+ This enables the COW (Copy-On-Write) link break code.
-+ It allows you to treat unified files like normal files
-+ when writing to them (which will implicitely break the
-+ link and create a copy of the unified file)
++ if (attr.ia_valid) {
++ if (in->i_op && in->i_op->setattr)
++ error = in->i_op->setattr(de, &attr);
++ else {
++ error = inode_change_ok(in, &attr);
++ if (!error) {
++ setattr_copy(in, &attr);
++ mark_inode_dirty(in);
++ }
++ }
++ }
+
-+config VSERVER_VTIME
-+ bool "Enable Virtualized Guest Time"
-+ depends on EXPERIMENTAL
-+ default n
-+ help
-+ This enables per guest time offsets to allow for
-+ adjusting the system clock individually per guest.
-+ this adds some overhead to the time functions and
-+ therefore should not be enabled without good reason.
++out:
++ mutex_unlock(&in->i_mutex);
++ return error;
++}
+
-+config VSERVER_DEVICE
-+ bool "Enable Guest Device Mapping"
-+ depends on EXPERIMENTAL
-+ default n
-+ help
-+ This enables generic device remapping.
++int vc_set_iattr(void __user *data)
++{
++ struct path path;
++ struct vcmd_ctx_iattr_v1 vc_data;
++ int ret;
+
-+config VSERVER_PROC_SECURE
-+ bool "Enable Proc Security"
-+ depends on PROC_FS
-+ default y
-+ help
-+ This configures ProcFS security to initially hide
-+ non-process entries for all contexts except the main and
-+ spectator context (i.e. for all guests), which is a secure
-+ default.
++ if (!capable(CAP_LINUX_IMMUTABLE))
++ return -EPERM;
++ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
++ return -EFAULT;
+
-+ (note: on 1.2x the entries were visible by default)
++ ret = user_lpath(vc_data.name, &path);
++ if (!ret) {
++ ret = __vc_set_iattr(path.dentry,
++ &vc_data.tag, &vc_data.flags, &vc_data.mask);
++ path_put(&path);
++ }
+
-+config VSERVER_HARDCPU
-+ bool "Enable Hard CPU Limits"
-+ default y
-+ help
-+ Activate the Hard CPU Limits
++ if (copy_to_user(data, &vc_data, sizeof(vc_data)))
++ ret = -EFAULT;
++ return ret;
++}
+
-+ This will compile in code that allows the Token Bucket
-+ Scheduler to put processes on hold when a context's
-+ tokens are depleted (provided that its per-context
-+ sched_hard flag is set).
++#ifdef CONFIG_COMPAT
+
-+ Processes belonging to that context will not be able
-+ to consume CPU resources again until a per-context
-+ configured minimum of tokens has been reached.
++int vc_set_iattr_x32(void __user *data)
++{
++ struct path path;
++ struct vcmd_ctx_iattr_v1_x32 vc_data;
++ int ret;
+
-+config VSERVER_IDLETIME
-+ bool "Avoid idle CPUs by skipping Time"
-+ depends on VSERVER_HARDCPU
-+ default y
-+ help
-+ This option allows the scheduler to artificially
-+ advance time (per cpu) when otherwise the idle
-+ task would be scheduled, thus keeping the cpu
-+ busy and sharing the available resources among
-+ certain contexts.
++ if (!capable(CAP_LINUX_IMMUTABLE))
++ return -EPERM;
++ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
++ return -EFAULT;
+
-+config VSERVER_IDLELIMIT
-+ bool "Limit the IDLE task"
-+ depends on VSERVER_HARDCPU
-+ default n
-+ help
-+ Limit the idle slices, so the the next context
-+ will be scheduled as soon as possible.
++ ret = user_lpath(compat_ptr(vc_data.name_ptr), &path);
++ if (!ret) {
++ ret = __vc_set_iattr(path.dentry,
++ &vc_data.tag, &vc_data.flags, &vc_data.mask);
++ path_put(&path);
++ }
+
-+ This might improve interactivity and latency, but
-+ will also marginally increase scheduling overhead.
++ if (copy_to_user(data, &vc_data, sizeof(vc_data)))
++ ret = -EFAULT;
++ return ret;
++}
+
-+choice
-+ prompt "Persistent Inode Tagging"
-+ default TAGGING_ID24
-+ help
-+ This adds persistent context information to filesystems
-+ mounted with the tagxid option. Tagging is a requirement
-+ for per-context disk limits and per-context quota.
++#endif /* CONFIG_COMPAT */
+
++int vc_fset_iattr(uint32_t fd, void __user *data)
++{
++ struct file *filp;
++ struct vcmd_ctx_fiattr_v0 vc_data;
++ int ret;
+
-+config TAGGING_NONE
-+ bool "Disabled"
-+ help
-+ do not store per-context information in inodes.
++ if (!capable(CAP_LINUX_IMMUTABLE))
++ return -EPERM;
++ if (copy_from_user(&vc_data, data, sizeof(vc_data)))
++ return -EFAULT;
+
-+config TAGGING_UID16
-+ bool "UID16/GID32"
-+ help
-+ reduces UID to 16 bit, but leaves GID at 32 bit.
++ filp = fget(fd);
++ if (!filp || !filp->f_dentry || !filp->f_dentry->d_inode)
++ return -EBADF;
+
-+config TAGGING_GID16
-+ bool "UID32/GID16"
-+ help
-+ reduces GID to 16 bit, but leaves UID at 32 bit.
++ ret = __vc_set_iattr(filp->f_dentry, &vc_data.tag,
++ &vc_data.flags, &vc_data.mask);
+
-+config TAGGING_ID24
-+ bool "UID24/GID24"
-+ help
-+ uses the upper 8bit from UID and GID for XID tagging
-+ which leaves 24bit for UID/GID each, which should be
-+ more than sufficient for normal use.
++ fput(filp);
+
-+config TAGGING_INTERN
-+ bool "UID32/GID32"
-+ help
-+ this uses otherwise reserved inode fields in the on
-+ disk representation, which limits the use to a few
-+ filesystems (currently ext2 and ext3)
++ if (copy_to_user(data, &vc_data, sizeof(vc_data)))
++ return -EFAULT;
++ return ret;
++}
+
-+endchoice
+
-+config TAG_NFSD
-+ bool "Tag NFSD User Auth and Files"
-+ default n
-+ help
-+ Enable this if you do want the in-kernel NFS
-+ Server to use the tagging specified above.
-+ (will require patched clients too)
++enum { Opt_notagcheck, Opt_tag, Opt_notag, Opt_tagid, Opt_err };
+
-+config VSERVER_PRIVACY
-+ bool "Honor Privacy Aspects of Guests"
-+ default n
-+ help
-+ When enabled, most context checks will disallow
-+ access to structures assigned to a specific context,
-+ like ptys or loop devices.
++static match_table_t tokens = {
++ {Opt_notagcheck, "notagcheck"},
++#ifdef CONFIG_PROPAGATE
++ {Opt_notag, "notag"},
++ {Opt_tag, "tag"},
++ {Opt_tagid, "tagid=%u"},
++#endif
++ {Opt_err, NULL}
++};
+
-+config VSERVER_CONTEXTS
-+ int "Maximum number of Contexts (1-65533)" if EMBEDDED
-+ range 1 65533
-+ default "768" if 64BIT
-+ default "256"
-+ help
-+ This setting will optimize certain data structures
-+ and memory allocations according to the expected
-+ maximum.
+
-+ note: this is not a strict upper limit.
++static void __dx_parse_remove(char *string, char *opt)
++{
++ char *p = strstr(string, opt);
++ char *q = p;
+
-+config VSERVER_WARN
-+ bool "VServer Warnings"
-+ default y
-+ help
-+ This enables various runtime warnings, which will
-+ notify about potential manipulation attempts or
-+ resource shortage. It is generally considered to
-+ be a good idea to have that enabled.
++ if (p) {
++ while (*q != '\0' && *q != ',')
++ q++;
++ while (*q)
++ *p++ = *q++;
++ while (*p)
++ *p++ = '\0';
++ }
++}
+
-+config VSERVER_WARN_DEVPTS
-+ bool "VServer DevPTS Warnings"
-+ depends on VSERVER_WARN
-+ default y
-+ help
-+ This enables DevPTS related warnings, issued when a
-+ process inside a context tries to lookup or access
-+ a dynamic pts from the host or a different context.
++int dx_parse_tag(char *string, tag_t *tag, int remove, int *mnt_flags,
++ unsigned long *flags)
++{
++ int set = 0;
++ substring_t args[MAX_OPT_ARGS];
++ int token, option = 0;
++ char *s, *p, *opts;
+
-+config VSERVER_DEBUG
-+ bool "VServer Debugging Code"
-+ default n
-+ help
-+ Set this to yes if you want to be able to activate
-+ debugging output at runtime. It adds a very small
-+ overhead to all vserver related functions and
-+ increases the kernel size by about 20k.
++ if (!string)
++ return 0;
++ s = kstrdup(string, GFP_KERNEL | GFP_ATOMIC);
++ if (!s)
++ return 0;
+
-+config VSERVER_HISTORY
-+ bool "VServer History Tracing"
-+ depends on VSERVER_DEBUG
-+ default n
-+ help
-+ Set this to yes if you want to record the history of
-+ linux-vserver activities, so they can be replayed in
-+ the event of a kernel panic or oops.
++ opts = s;
++ while ((p = strsep(&opts, ",")) != NULL) {
++ token = match_token(p, tokens, args);
+
-+config VSERVER_HISTORY_SIZE
-+ int "Per-CPU History Size (32-65536)"
-+ depends on VSERVER_HISTORY
-+ range 32 65536
-+ default 64
-+ help
-+ This allows you to specify the number of entries in
-+ the per-CPU history buffer.
++ vxdprintk(VXD_CBIT(tag, 7),
++ "dx_parse_tag(" VS_Q("%s") "): %d:#%d",
++ p, token, option);
+
-+config VSERVER_LEGACY_MEM
-+ bool "Legacy Memory Limits"
-+ default n
-+ help
-+ This provides fake memory limits to keep
-+ older tools happy in the face of memory
-+ cgroups
++ switch (token) {
++#ifdef CONFIG_PROPAGATE
++ case Opt_tag:
++ if (tag)
++ *tag = 0;
++ if (remove)
++ __dx_parse_remove(s, "tag");
++ *mnt_flags |= MNT_TAGID;
++ set |= MNT_TAGID;
++ break;
++ case Opt_notag:
++ if (remove)
++ __dx_parse_remove(s, "notag");
++ *mnt_flags |= MNT_NOTAG;
++ set |= MNT_NOTAG;
++ break;
++ case Opt_tagid:
++ if (tag && !match_int(args, &option))
++ *tag = option;
++ if (remove)
++ __dx_parse_remove(s, "tagid");
++ *mnt_flags |= MNT_TAGID;
++ set |= MNT_TAGID;
++ break;
++#endif
++ case Opt_notagcheck:
++ if (remove)
++ __dx_parse_remove(s, "notagcheck");
++ *flags |= MS_NOTAGCHECK;
++ set |= MS_NOTAGCHECK;
++ break;
++ }
++ }
++ if (set)
++ strcpy(string, s);
++ kfree(s);
++ return set;
++}
+
-+choice
-+ prompt "Quotes used in debug and warn messages"
-+ default QUOTES_ISO8859
++#ifdef CONFIG_PROPAGATE
+
-+config QUOTES_ISO8859
-+ bool "Extended ASCII (ISO 8859) angle quotes"
-+ help
-+ This uses the extended ASCII characters \xbb
-+ and \xab for quoting file and process names.
++void __dx_propagate_tag(struct nameidata *nd, struct inode *inode)
++{
++ tag_t new_tag = 0;
++ struct vfsmount *mnt;
++ int propagate;
+
-+config QUOTES_UTF8
-+ bool "UTF-8 angle quotes"
-+ help
-+ This uses the the UTF-8 sequences for angle
-+ quotes to quote file and process names.
++ if (!nd)
++ return;
++ mnt = nd->path.mnt;
++ if (!mnt)
++ return;
+
-+config QUOTES_ASCII
-+ bool "ASCII single quotes"
-+ help
-+ This uses the ASCII single quote character
-+ (\x27) to quote file and process names.
++ propagate = (mnt->mnt_flags & MNT_TAGID);
++ if (propagate)
++ new_tag = mnt->mnt_tag;
+
-+endchoice
++ vxdprintk(VXD_CBIT(tag, 7),
++ "dx_propagate_tag(%p[#%lu.%d]): %d,%d",
++ inode, inode->i_ino, inode->i_tag,
++ new_tag, (propagate) ? 1 : 0);
+
-+endmenu
++ if (propagate)
++ inode->i_tag = new_tag;
++}
+
++#include <linux/module.h>
+
-+config VSERVER
-+ bool
-+ default y
-+ select NAMESPACES
-+ select UTS_NS
-+ select IPC_NS
-+ select USER_NS
-+ select SYSVIPC
++EXPORT_SYMBOL_GPL(__dx_propagate_tag);
+
-+config VSERVER_SECURITY
-+ bool
-+ depends on SECURITY
-+ default y
-+ select SECURITY_CAPABILITIES
++#endif /* CONFIG_PROPAGATE */
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/limit.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/limit.c
---- linux-2.6.37/kernel/vserver/limit.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/limit.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/limit.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/limit.c
+--- linux-2.6.38-rc8/kernel/vserver/limit.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/limit.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,354 @@
+/*
+ * linux/kernel/vserver/limit.c
+ return points;
+}
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/limit_init.h linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/limit_init.h
---- linux-2.6.37/kernel/vserver/limit_init.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/limit_init.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/limit_init.h linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/limit_init.h
+--- linux-2.6.38-rc8/kernel/vserver/limit_init.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/limit_init.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,31 @@
+
+
+ }
+}
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/limit_proc.h linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/limit_proc.h
---- linux-2.6.37/kernel/vserver/limit_proc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/limit_proc.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/limit_proc.h linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/limit_proc.h
+--- linux-2.6.38-rc8/kernel/vserver/limit_proc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/limit_proc.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,57 @@
+#ifndef _VX_LIMIT_PROC_H
+#define _VX_LIMIT_PROC_H
+#endif /* _VX_LIMIT_PROC_H */
+
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/Makefile linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/Makefile
---- linux-2.6.37/kernel/vserver/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/Makefile 2010-11-23 02:09:41.000000000 +0100
-@@ -0,0 +1,18 @@
-+#
-+# Makefile for the Linux vserver routines.
-+#
-+
-+
-+obj-y += vserver.o
-+
-+vserver-y := switch.o context.o space.o sched.o network.o inode.o \
-+ limit.o cvirt.o cacct.o signal.o helper.o init.o \
-+ dlimit.o tag.o
-+
-+vserver-$(CONFIG_INET) += inet.o
-+vserver-$(CONFIG_PROC_FS) += proc.o
-+vserver-$(CONFIG_VSERVER_DEBUG) += sysctl.o debug.o
-+vserver-$(CONFIG_VSERVER_HISTORY) += history.o
-+vserver-$(CONFIG_VSERVER_MONITOR) += monitor.o
-+vserver-$(CONFIG_VSERVER_DEVICE) += device.o
-+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/network.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/network.c
---- linux-2.6.37/kernel/vserver/network.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/network.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/network.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/network.c
+--- linux-2.6.38-rc8/kernel/vserver/network.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/network.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,864 @@
+/*
+ * linux/kernel/vserver/network.c
+EXPORT_SYMBOL_GPL(free_nx_info);
+EXPORT_SYMBOL_GPL(unhash_nx_info);
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/proc.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/proc.c
---- linux-2.6.37/kernel/vserver/proc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/proc.c 2011-01-08 03:33:34.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/proc.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/proc.c
+--- linux-2.6.38-rc8/kernel/vserver/proc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/proc.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,1098 @@
+/*
+ * linux/kernel/vserver/proc.c
+ return buffer - orig;
+}
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/sched.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/sched.c
---- linux-2.6.37/kernel/vserver/sched.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/sched.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/sched.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/sched.c
+--- linux-2.6.38-rc8/kernel/vserver/sched.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/sched.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,82 @@
+/*
+ * linux/kernel/vserver/sched.c
+ return 0;
+}
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/sched_init.h linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/sched_init.h
---- linux-2.6.37/kernel/vserver/sched_init.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/sched_init.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/sched_init.h linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/sched_init.h
+--- linux-2.6.38-rc8/kernel/vserver/sched_init.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/sched_init.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,27 @@
+
+static inline void vx_info_init_sched(struct _vx_sched *sched)
+{
+ return;
+}
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/sched_proc.h linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/sched_proc.h
---- linux-2.6.37/kernel/vserver/sched_proc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/sched_proc.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/sched_proc.h linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/sched_proc.h
+--- linux-2.6.38-rc8/kernel/vserver/sched_proc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/sched_proc.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,32 @@
+#ifndef _VX_SCHED_PROC_H
+#define _VX_SCHED_PROC_H
+}
+
+#endif /* _VX_SCHED_PROC_H */
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/signal.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/signal.c
---- linux-2.6.37/kernel/vserver/signal.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/signal.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/signal.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/signal.c
+--- linux-2.6.38-rc8/kernel/vserver/signal.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/signal.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,132 @@
+/*
+ * linux/kernel/vserver/signal.c
+ return ret;
+}
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/space.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/space.c
---- linux-2.6.37/kernel/vserver/space.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/space.c 2011-01-31 21:05:40.000000000 +0100
-@@ -0,0 +1,438 @@
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/space.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/space.c
+--- linux-2.6.38-rc8/kernel/vserver/space.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/space.c 2011-02-01 03:30:46.000000000 +0100
+@@ -0,0 +1,417 @@
+/*
+ * linux/kernel/vserver/space.c
+ *
+ struct cred *cred;
+
+ vxdprintk(VXD_CBIT(space, 10),
-+#if 1
-+ "vx_enter_space(%p[#%u])", vxi, vxi->vx_id);
-+#else
-+ "vx_enter_space(%p[#%u],%p,%p) cred (%p,%p)",
-+ vxi, vxi->vx_id,
-+ space->vx_real_cred, space->vx_cred,
++ "vx_enter_space(%p[#%u],%p) cred (%p,%p)",
++ vxi, vxi->vx_id, space->vx_cred,
+ current->real_cred, current->cred);
-+ exit_creds(current);
-+ current->real_cred = get_cred(space->vx_real_cred);
-+ alter_cred_subscribers(current->real_cred, 1);
-+#endif
-+ cred = __prepare_creds(space->vx_cred);
-+ if (cred)
-+ commit_creds(cred);
++
++ if (space->vx_cred) {
++ cred = __prepare_creds(space->vx_cred);
++ if (cred)
++ commit_creds(cred);
++ }
+ }
+
+ ret = 0;
+ struct cred *cred;
+
+ vxdprintk(VXD_CBIT(space, 10),
-+#if 1
-+ "vx_set_space(%p[#%u])", vxi, vxi->vx_id);
-+#else
-+ "vx_set_space(%p[#%u],%p,%p) cred (%p,%p)",
-+ vxi, vxi->vx_id,
-+ space->vx_real_cred, space->vx_cred,
++ "vx_set_space(%p[#%u],%p) cred (%p,%p)",
++ vxi, vxi->vx_id, space->vx_cred,
+ current->real_cred, current->cred);
+
-+ if (current->real_cred) {
-+ cred = get_cred(current->real_cred);
-+ alter_cred_subscribers(cred, 1);
-+ } else
-+ cred = NULL;
-+ cred = xchg(&space->vx_real_cred, cred);
-+ if (cred) {
-+ alter_cred_subscribers(cred, -1);
-+ put_cred(cred);
-+ }
-+
-+#endif
+ cred = prepare_creds();
+ cred = (struct cred *)xchg(&space->vx_cred, cred);
+ if (cred)
+ return 0;
+}
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/switch.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/switch.c
---- linux-2.6.37/kernel/vserver/switch.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/switch.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/switch.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/switch.c
+--- linux-2.6.38-rc8/kernel/vserver/switch.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/switch.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,531 @@
+/*
+ * linux/kernel/vserver/switch.c
+}
+
+#endif /* CONFIG_COMPAT */
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/sysctl.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/sysctl.c
---- linux-2.6.37/kernel/vserver/sysctl.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/sysctl.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/sysctl.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/sysctl.c
+--- linux-2.6.38-rc8/kernel/vserver/sysctl.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/sysctl.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,241 @@
+/*
+ * kernel/vserver/sysctl.c
+EXPORT_SYMBOL_GPL(vx_debug_space);
+EXPORT_SYMBOL_GPL(vx_debug_misc);
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/tag.c linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/tag.c
---- linux-2.6.37/kernel/vserver/tag.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/tag.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/tag.c linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/tag.c
+--- linux-2.6.38-rc8/kernel/vserver/tag.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/tag.c 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,63 @@
+/*
+ * linux/kernel/vserver/tag.c
+}
+
+
-diff -NurpP --minimal linux-2.6.37/kernel/vserver/vci_config.h linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/vci_config.h
---- linux-2.6.37/kernel/vserver/vci_config.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/kernel/vserver/vci_config.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/kernel/vserver/vci_config.h linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/vci_config.h
+--- linux-2.6.38-rc8/kernel/vserver/vci_config.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/kernel/vserver/vci_config.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,82 @@
+
+/* interface version */
+ 0;
+}
+
-diff -NurpP --minimal linux-2.6.37/mm/filemap_xip.c linux-2.6.37-vs2.3.0.37-rc3/mm/filemap_xip.c
---- linux-2.6.37/mm/filemap_xip.c 2010-07-07 18:31:58.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/filemap_xip.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/filemap_xip.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/filemap_xip.c
+--- linux-2.6.38-rc8/mm/filemap_xip.c 2010-07-07 18:31:58.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/filemap_xip.c 2011-01-29 02:01:07.000000000 +0100
@@ -18,6 +18,7 @@
#include <linux/seqlock.h>
#include <linux/mutex.h>
#include <asm/tlbflush.h>
#include <asm/io.h>
-diff -NurpP --minimal linux-2.6.37/mm/fremap.c linux-2.6.37-vs2.3.0.37-rc3/mm/fremap.c
---- linux-2.6.37/mm/fremap.c 2010-10-21 13:07:57.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/fremap.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/fremap.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/fremap.c
+--- linux-2.6.38-rc8/mm/fremap.c 2010-10-21 13:07:57.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/fremap.c 2011-01-29 02:01:07.000000000 +0100
@@ -16,6 +16,7 @@
#include <linux/module.h>
#include <linux/syscalls.h>
#include <asm/mmu_context.h>
#include <asm/cacheflush.h>
-diff -NurpP --minimal linux-2.6.37/mm/hugetlb.c linux-2.6.37-vs2.3.0.37-rc3/mm/hugetlb.c
---- linux-2.6.37/mm/hugetlb.c 2011-01-05 21:50:39.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/hugetlb.c 2011-01-05 22:30:43.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/hugetlb.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/hugetlb.c
+--- linux-2.6.38-rc8/mm/hugetlb.c 2011-03-10 17:09:29.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/hugetlb.c 2011-01-29 02:01:07.000000000 +0100
@@ -28,6 +28,7 @@
#include <linux/hugetlb.h>
#include "internal.h"
const unsigned long hugetlb_zero = 0, hugetlb_infinity = ~0UL;
-diff -NurpP --minimal linux-2.6.37/mm/memcontrol.c linux-2.6.37-vs2.3.0.37-rc3/mm/memcontrol.c
---- linux-2.6.37/mm/memcontrol.c 2011-01-05 21:50:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/memcontrol.c 2011-01-05 22:30:43.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/memcontrol.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/memcontrol.c
+--- linux-2.6.38-rc8/mm/memcontrol.c 2011-03-10 17:09:29.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/memcontrol.c 2011-02-17 02:17:51.000000000 +0100
@@ -681,6 +681,31 @@ struct mem_cgroup *mem_cgroup_from_task(
struct mem_cgroup, css);
}
static struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm)
{
struct mem_cgroup *mem = NULL;
-diff -NurpP --minimal linux-2.6.37/mm/memory.c linux-2.6.37-vs2.3.0.37-rc3/mm/memory.c
---- linux-2.6.37/mm/memory.c 2011-01-05 21:50:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/memory.c 2010-11-23 02:09:41.000000000 +0100
-@@ -3153,6 +3153,7 @@ static inline int handle_pte_fault(struc
+diff -NurpP --minimal linux-2.6.38-rc8/mm/memory.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/memory.c
+--- linux-2.6.38-rc8/mm/memory.c 2011-03-10 17:09:29.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/memory.c 2011-03-07 16:53:28.000000000 +0100
+@@ -3225,6 +3225,7 @@ int handle_pte_fault(struct mm_struct *m
{
pte_t entry;
spinlock_t *ptl;
entry = *pte;
if (!pte_present(entry)) {
-@@ -3177,9 +3178,12 @@ static inline int handle_pte_fault(struc
+@@ -3249,9 +3250,12 @@ int handle_pte_fault(struct mm_struct *m
if (unlikely(!pte_same(*pte, entry)))
goto unlock;
if (flags & FAULT_FLAG_WRITE) {
entry = pte_mkdirty(entry);
}
entry = pte_mkyoung(entry);
-@@ -3197,7 +3201,10 @@ static inline int handle_pte_fault(struc
+@@ -3269,7 +3273,10 @@ int handle_pte_fault(struct mm_struct *m
}
unlock:
pte_unmap_unlock(pte, ptl);
}
/*
-diff -NurpP --minimal linux-2.6.37/mm/mremap.c linux-2.6.37-vs2.3.0.37-rc3/mm/mremap.c
---- linux-2.6.37/mm/mremap.c 2011-01-05 21:50:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/mremap.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/mremap.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/mremap.c
+--- linux-2.6.38-rc8/mm/mremap.c 2011-03-10 17:09:29.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/mremap.c 2011-03-07 16:53:28.000000000 +0100
@@ -19,6 +19,7 @@
#include <linux/security.h>
#include <linux/syscalls.h>
#include <asm/uaccess.h>
#include <asm/cacheflush.h>
-diff -NurpP --minimal linux-2.6.37/mm/oom_kill.c linux-2.6.37-vs2.3.0.37-rc3/mm/oom_kill.c
---- linux-2.6.37/mm/oom_kill.c 2011-01-05 21:50:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/oom_kill.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/oom_kill.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/oom_kill.c
+--- linux-2.6.38-rc8/mm/oom_kill.c 2011-01-05 21:50:40.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/oom_kill.c 2011-01-29 02:01:07.000000000 +0100
@@ -31,6 +31,9 @@
#include <linux/memcontrol.h>
#include <linux/mempolicy.h>
}
if (oom_kill_process(p, gfp_mask, order, points, totalpages, NULL,
-diff -NurpP --minimal linux-2.6.37/mm/page_alloc.c linux-2.6.37-vs2.3.0.37-rc3/mm/page_alloc.c
---- linux-2.6.37/mm/page_alloc.c 2011-01-05 21:50:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/page_alloc.c 2011-01-05 22:30:43.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/page_alloc.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/page_alloc.c
+--- linux-2.6.38-rc8/mm/page_alloc.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/page_alloc.c 2011-03-07 16:53:28.000000000 +0100
@@ -53,6 +53,8 @@
#include <linux/compaction.h>
#include <trace/events/kmem.h>
#include <asm/tlbflush.h>
#include <asm/div64.h>
-@@ -2335,6 +2337,9 @@ void si_meminfo(struct sysinfo *val)
+@@ -2388,6 +2390,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);
-@@ -2355,6 +2360,9 @@ void si_meminfo_node(struct sysinfo *val
+@@ -2408,6 +2413,9 @@ void si_meminfo_node(struct sysinfo *val
val->freehigh = 0;
#endif
val->mem_unit = PAGE_SIZE;
}
#endif
-diff -NurpP --minimal linux-2.6.37/mm/rmap.c linux-2.6.37-vs2.3.0.37-rc3/mm/rmap.c
---- linux-2.6.37/mm/rmap.c 2011-01-05 21:50:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/rmap.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/pgtable-generic.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/pgtable-generic.c
+--- linux-2.6.38-rc8/mm/pgtable-generic.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/pgtable-generic.c 2011-02-02 22:20:27.000000000 +0100
+@@ -6,6 +6,8 @@
+ * Copyright (C) 2010 Linus Torvalds
+ */
+
++#include <linux/mm.h>
++
+ #include <linux/pagemap.h>
+ #include <asm/tlb.h>
+ #include <asm-generic/pgtable.h>
+diff -NurpP --minimal linux-2.6.38-rc8/mm/rmap.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/rmap.c
+--- linux-2.6.38-rc8/mm/rmap.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/rmap.c 2011-01-29 02:01:07.000000000 +0100
@@ -57,6 +57,7 @@
#include <linux/mmu_notifier.h>
#include <linux/migrate.h>
#include <asm/tlbflush.h>
-diff -NurpP --minimal linux-2.6.37/mm/shmem.c linux-2.6.37-vs2.3.0.37-rc3/mm/shmem.c
---- linux-2.6.37/mm/shmem.c 2011-01-05 21:50:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/shmem.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/shmem.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/shmem.c
+--- linux-2.6.38-rc8/mm/shmem.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/shmem.c 2011-01-29 02:01:07.000000000 +0100
@@ -1816,7 +1816,7 @@ static int shmem_statfs(struct dentry *d
{
struct shmem_sb_info *sbinfo = SHMEM_SB(dentry->d_sb);
sb->s_op = &shmem_ops;
sb->s_time_gran = 1;
#ifdef CONFIG_TMPFS_POSIX_ACL
-diff -NurpP --minimal linux-2.6.37/mm/slab.c linux-2.6.37-vs2.3.0.37-rc3/mm/slab.c
---- linux-2.6.37/mm/slab.c 2011-01-05 21:50:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/slab.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/slab.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/slab.c
+--- linux-2.6.38-rc8/mm/slab.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/slab.c 2011-01-29 02:01:07.000000000 +0100
@@ -407,6 +407,8 @@ static void kmem_list3_init(struct kmem_
#define STATS_INC_FREEMISS(x) do { } while (0)
#endif
kmemcheck_slab_free(cachep, objp, obj_size(cachep));
-diff -NurpP --minimal linux-2.6.37/mm/slab_vs.h linux-2.6.37-vs2.3.0.37-rc3/mm/slab_vs.h
---- linux-2.6.37/mm/slab_vs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/slab_vs.h 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/slab_vs.h linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/slab_vs.h
+--- linux-2.6.38-rc8/mm/slab_vs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/slab_vs.h 2011-01-29 02:01:07.000000000 +0100
@@ -0,0 +1,29 @@
+
+#include <linux/vserver/context.h>
+ atomic_sub(cachep->buffer_size, &vxi->cacct.slab[what]);
+}
+
-diff -NurpP --minimal linux-2.6.37/mm/swapfile.c linux-2.6.37-vs2.3.0.37-rc3/mm/swapfile.c
---- linux-2.6.37/mm/swapfile.c 2011-01-05 21:50:40.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/mm/swapfile.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/mm/swapfile.c linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/swapfile.c
+--- linux-2.6.38-rc8/mm/swapfile.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/mm/swapfile.c 2011-03-07 16:53:28.000000000 +0100
@@ -36,6 +36,8 @@
#include <asm/tlbflush.h>
#include <linux/swapops.h>
static bool swap_count_continued(struct swap_info_struct *, pgoff_t,
unsigned char);
-@@ -1773,6 +1775,16 @@ static int swap_show(struct seq_file *sw
+@@ -1775,6 +1777,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;
}
-@@ -2178,6 +2190,8 @@ void si_swapinfo(struct sysinfo *val)
+@@ -2181,6 +2193,8 @@ void si_swapinfo(struct sysinfo *val)
val->freeswap = nr_swap_pages + nr_to_be_unused;
val->totalswap = total_swap_pages + nr_to_be_unused;
spin_unlock(&swap_lock);
}
/*
-diff -NurpP --minimal linux-2.6.37/net/core/dev.c linux-2.6.37-vs2.3.0.37-rc3/net/core/dev.c
---- linux-2.6.37/net/core/dev.c 2011-01-05 21:50:41.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/core/dev.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/bridge/br_multicast.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/bridge/br_multicast.c
+--- linux-2.6.38-rc8/net/bridge/br_multicast.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/bridge/br_multicast.c 2011-03-10 16:51:08.000000000 +0100
+@@ -446,7 +446,7 @@ static struct sk_buff *br_ip6_multicast_
+ ip6h->nexthdr = IPPROTO_HOPOPTS;
+ ip6h->hop_limit = 1;
+ ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0,
+- &ip6h->saddr);
++ &ip6h->saddr, NULL);
+ ipv6_addr_set(&ip6h->daddr, htonl(0xff020000), 0, 0, htonl(1));
+ ipv6_eth_mc_map(&ip6h->daddr, eth->h_dest);
+
+diff -NurpP --minimal linux-2.6.38-rc8/net/core/dev.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/core/dev.c
+--- linux-2.6.38-rc8/net/core/dev.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/core/dev.c 2011-03-07 16:53:28.000000000 +0100
@@ -127,6 +127,7 @@
#include <linux/in.h>
#include <linux/jhash.h>
return dev;
return NULL;
-@@ -763,10 +768,12 @@ struct net_device *dev_getbyhwaddr(struc
+@@ -763,7 +768,8 @@ struct net_device *dev_getbyhwaddr_rcu(s
- ASSERT_RTNL();
-
-- for_each_netdev(net, dev)
-+ for_each_netdev(net, dev) {
+ for_each_netdev_rcu(net, dev)
if (dev->type == type &&
- !memcmp(dev->dev_addr, ha, dev->addr_len))
+ !memcmp(dev->dev_addr, ha, dev->addr_len) &&
+ nx_dev_visible(current_nx_info(), dev))
return dev;
-+ }
return NULL;
- }
-@@ -777,9 +784,11 @@ struct net_device *__dev_getfirstbyhwtyp
+@@ -775,9 +781,11 @@ struct net_device *__dev_getfirstbyhwtyp
struct net_device *dev;
ASSERT_RTNL();
return NULL;
}
-@@ -897,6 +906,8 @@ static int __dev_alloc_name(struct net *
+@@ -895,6 +903,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);
-@@ -3746,6 +3757,8 @@ static int dev_ifconf(struct net *net, c
+@@ -3865,6 +3875,8 @@ static int dev_ifconf(struct net *net, c
total = 0;
for_each_netdev(net, dev) {
for (i = 0; i < NPROTO; i++) {
if (gifconf_list[i]) {
int done;
-@@ -3817,6 +3830,10 @@ static void dev_seq_printf_stats(struct
+@@ -3936,6 +3948,10 @@ static void dev_seq_printf_stats(struct
struct rtnl_link_stats64 temp;
const struct rtnl_link_stats64 *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-2.6.37/net/core/rtnetlink.c linux-2.6.37-vs2.3.0.37-rc3/net/core/rtnetlink.c
---- linux-2.6.37/net/core/rtnetlink.c 2011-01-05 21:50:41.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/core/rtnetlink.c 2010-11-23 02:09:41.000000000 +0100
-@@ -891,6 +891,8 @@ static int rtnl_dump_ifinfo(struct sk_bu
+diff -NurpP --minimal linux-2.6.38-rc8/net/core/rtnetlink.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/core/rtnetlink.c
+--- linux-2.6.38-rc8/net/core/rtnetlink.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/core/rtnetlink.c 2011-02-17 02:17:52.000000000 +0100
+@@ -1012,6 +1012,8 @@ static int rtnl_dump_ifinfo(struct sk_bu
hlist_for_each_entry(dev, node, head, index_hlist) {
if (idx < s_idx)
goto cont;
if (rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK,
NETLINK_CB(cb->skb).pid,
cb->nlh->nlmsg_seq, 0,
-@@ -1607,6 +1609,9 @@ void rtmsg_ifinfo(int type, struct net_d
+@@ -1771,6 +1773,9 @@ void rtmsg_ifinfo(int type, struct net_d
struct sk_buff *skb;
int err = -ENOBUFS;
skb = nlmsg_new(if_nlmsg_size(dev), GFP_KERNEL);
if (skb == NULL)
goto errout;
-diff -NurpP --minimal linux-2.6.37/net/core/sock.c linux-2.6.37-vs2.3.0.37-rc3/net/core/sock.c
---- linux-2.6.37/net/core/sock.c 2011-01-05 21:50:41.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/core/sock.c 2011-01-05 22:30:43.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/core/sock.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/core/sock.c
+--- linux-2.6.38-rc8/net/core/sock.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/core/sock.c 2011-01-29 02:01:07.000000000 +0100
@@ -127,6 +127,10 @@
#include <net/cls_cgroup.h>
#ifdef CONFIG_INET
#include <net/tcp.h>
-@@ -1069,6 +1073,8 @@ static struct sock *sk_prot_alloc(struct
+@@ -1070,6 +1074,8 @@ static struct sock *sk_prot_alloc(struct
goto out_free_sec;
sk_tx_queue_clear(sk);
}
return sk;
-@@ -1168,6 +1174,11 @@ static void __sk_free(struct sock *sk)
+@@ -1169,6 +1175,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);
}
-@@ -1215,6 +1226,8 @@ struct sock *sk_clone(const struct sock
+@@ -1216,6 +1227,8 @@ struct sock *sk_clone(const struct sock
/* SANITY */
get_net(sock_net(newsk));
sk_node_init(&newsk->sk_node);
sock_lock_init(newsk);
bh_lock_sock(newsk);
-@@ -1270,6 +1283,12 @@ struct sock *sk_clone(const struct sock
+@@ -1271,6 +1284,12 @@ struct sock *sk_clone(const struct sock
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
-@@ -2016,6 +2035,12 @@ void sock_init_data(struct socket *sock,
+@@ -2017,6 +2036,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-2.6.37/net/ipv4/af_inet.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/af_inet.c
---- linux-2.6.37/net/ipv4/af_inet.c 2011-01-05 21:50:41.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/af_inet.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/af_inet.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/af_inet.c
+--- linux-2.6.38-rc8/net/ipv4/af_inet.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/af_inet.c 2011-02-17 02:17:52.000000000 +0100
@@ -116,6 +116,7 @@
#ifdef CONFIG_IP_MROUTE
#include <linux/mroute.h>
sin->sin_port = inet->inet_sport;
sin->sin_addr.s_addr = addr;
}
-diff -NurpP --minimal linux-2.6.37/net/ipv4/devinet.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/devinet.c
---- linux-2.6.37/net/ipv4/devinet.c 2011-01-05 21:50:41.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/devinet.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/devinet.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/devinet.c
+--- linux-2.6.38-rc8/net/ipv4/devinet.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/devinet.c 2011-03-07 16:53:28.000000000 +0100
@@ -420,6 +420,7 @@ struct in_device *inetdev_by_index(struc
}
EXPORT_SYMBOL(inetdev_by_index);
if (!buf) {
done += sizeof(ifr);
continue;
-@@ -1183,6 +1193,7 @@ static int inet_dump_ifaddr(struct sk_bu
+@@ -1193,6 +1203,7 @@ static int inet_dump_ifaddr(struct sk_bu
struct net_device *dev;
struct in_device *in_dev;
struct in_ifaddr *ifa;
struct hlist_head *head;
struct hlist_node *node;
-@@ -1205,6 +1216,8 @@ static int inet_dump_ifaddr(struct sk_bu
+@@ -1215,6 +1226,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-2.6.37/net/ipv4/fib_hash.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/fib_hash.c
---- linux-2.6.37/net/ipv4/fib_hash.c 2011-01-05 21:50:41.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/fib_hash.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/fib_hash.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/fib_hash.c
+--- linux-2.6.38-rc8/net/ipv4/fib_hash.c 2011-01-05 21:50:41.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/fib_hash.c 2011-01-29 02:01:07.000000000 +0100
@@ -1080,7 +1080,7 @@ static int fib_seq_show(struct seq_file
prefix = f->fn_key;
mask = FZ_MASK(iter->zone);
seq_printf(seq,
"%s\t%08X\t%08X\t%04X\t%d\t%u\t%d\t%08X\t%d\t%u\t%u%n",
fi->fib_dev ? fi->fib_dev->name : "*", prefix,
-diff -NurpP --minimal linux-2.6.37/net/ipv4/inet_connection_sock.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/inet_connection_sock.c
---- linux-2.6.37/net/ipv4/inet_connection_sock.c 2010-10-21 13:07:58.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/inet_connection_sock.c 2010-11-23 02:09:41.000000000 +0100
-@@ -52,10 +52,40 @@ void inet_get_local_port_range(int *low,
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/inet_connection_sock.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/inet_connection_sock.c
+--- linux-2.6.38-rc8/net/ipv4/inet_connection_sock.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/inet_connection_sock.c 2011-01-29 05:17:31.000000000 +0100
+@@ -52,6 +52,37 @@ void inet_get_local_port_range(int *low,
}
EXPORT_SYMBOL(inet_get_local_port_range);
+int ipv4_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2)
+{
-+ __be32 sk1_rcv_saddr = inet_rcv_saddr(sk1),
-+ sk2_rcv_saddr = inet_rcv_saddr(sk2);
++ __be32 sk1_rcv_saddr = sk_rcv_saddr(sk1),
++ sk2_rcv_saddr = sk_rcv_saddr(sk2);
+
+ if (inet_v6_ipv6only(sk2))
+ return 0;
int inet_csk_bind_conflict(const struct sock *sk,
const struct inet_bind_bucket *tb)
{
-- const __be32 sk_rcv_saddr = inet_rcv_saddr(sk);
- struct sock *sk2;
- struct hlist_node *node;
- int reuse = sk->sk_reuse;
-@@ -75,9 +105,7 @@ int inet_csk_bind_conflict(const struct
+@@ -74,9 +105,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) {
-- const __be32 sk2_rcv_saddr = inet_rcv_saddr(sk2);
-- if (!sk2_rcv_saddr || !sk_rcv_saddr ||
-- sk2_rcv_saddr == sk_rcv_saddr)
+ ((1 << sk2->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))) {
+- 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-2.6.37/net/ipv4/inet_diag.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/inet_diag.c
---- linux-2.6.37/net/ipv4/inet_diag.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/inet_diag.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/inet_diag.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/inet_diag.c
+--- linux-2.6.38-rc8/net/ipv4/inet_diag.c 2011-01-05 21:50:42.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/inet_diag.c 2011-01-29 02:01:07.000000000 +0100
@@ -33,6 +33,8 @@
#include <linux/stddef.h>
if (num < s_num)
goto next_dying;
if (r->id.idiag_sport != tw->tw_sport &&
-diff -NurpP --minimal linux-2.6.37/net/ipv4/inet_hashtables.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/inet_hashtables.c
---- linux-2.6.37/net/ipv4/inet_hashtables.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/inet_hashtables.c 2011-01-05 22:30:43.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/inet_hashtables.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/inet_hashtables.c
+--- linux-2.6.38-rc8/net/ipv4/inet_hashtables.c 2011-01-05 21:50:42.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/inet_hashtables.c 2011-01-29 02:01:07.000000000 +0100
@@ -21,6 +21,7 @@
#include <net/inet_connection_sock.h>
/*
* 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-2.6.37/net/ipv4/netfilter/nf_nat_helper.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/netfilter/nf_nat_helper.c
---- linux-2.6.37/net/ipv4/netfilter/nf_nat_helper.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/netfilter/nf_nat_helper.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/netfilter/nf_nat_helper.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/netfilter/nf_nat_helper.c
+--- linux-2.6.38-rc8/net/ipv4/netfilter/nf_nat_helper.c 2011-01-05 21:50:42.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/netfilter/nf_nat_helper.c 2011-01-29 02:01:07.000000000 +0100
@@ -20,6 +20,7 @@
#include <net/route.h>
#include <net/netfilter/nf_conntrack.h>
#include <net/netfilter/nf_conntrack_helper.h>
#include <net/netfilter/nf_conntrack_ecache.h>
-diff -NurpP --minimal linux-2.6.37/net/ipv4/netfilter.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/netfilter.c
---- linux-2.6.37/net/ipv4/netfilter.c 2010-10-21 13:07:58.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/netfilter.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/netfilter.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/netfilter.c
+--- linux-2.6.38-rc8/net/ipv4/netfilter.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/netfilter.c 2011-01-29 02:01:07.000000000 +0100
@@ -5,7 +5,7 @@
#include <linux/ip.h>
#include <linux/skbuff.h>
#include <net/xfrm.h>
#include <net/ip.h>
#include <net/netfilter/nf_queue.h>
-diff -NurpP --minimal linux-2.6.37/net/ipv4/raw.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/raw.c
---- linux-2.6.37/net/ipv4/raw.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/raw.c 2010-11-23 02:09:41.000000000 +0100
-@@ -116,7 +116,7 @@ static struct sock *__raw_v4_lookup(stru
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/raw.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/raw.c
+--- linux-2.6.38-rc8/net/ipv4/raw.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/raw.c 2011-02-17 02:17:52.000000000 +0100
+@@ -117,7 +117,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 */
}
-@@ -383,6 +383,12 @@ static int raw_send_hdrinc(struct sock *
+@@ -384,6 +384,12 @@ static int raw_send_hdrinc(struct sock *
icmp_out_count(net, ((struct icmphdr *)
skb_transport_header(skb))->type);
sin->sin_port = 0;
memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
}
-@@ -875,7 +891,8 @@ static struct sock *raw_get_first(struct
+@@ -893,7 +909,8 @@ static struct sock *raw_get_first(struct
struct hlist_node *node;
sk_for_each(sk, node, &state->h->ht[state->bucket])
goto found;
}
sk = NULL;
-@@ -891,7 +908,8 @@ static struct sock *raw_get_next(struct
+@@ -909,7 +926,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]);
-@@ -950,7 +968,10 @@ static void raw_sock_seq_show(struct seq
+@@ -968,7 +986,10 @@ static void raw_sock_seq_show(struct seq
seq_printf(seq, "%4d: %08X:%04X %08X:%04X"
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d\n",
sk_wmem_alloc_get(sp),
sk_rmem_alloc_get(sp),
0, 0L, 0, sock_i_uid(sp), 0, sock_i_ino(sp),
-diff -NurpP --minimal linux-2.6.37/net/ipv4/tcp.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/tcp.c
---- linux-2.6.37/net/ipv4/tcp.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/tcp.c 2011-01-05 22:30:43.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/tcp.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/tcp.c
+--- linux-2.6.38-rc8/net/ipv4/tcp.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/tcp.c 2011-01-29 02:01:07.000000000 +0100
@@ -266,6 +266,7 @@
#include <linux/crypto.h>
#include <linux/time.h>
#include <net/icmp.h>
#include <net/tcp.h>
-diff -NurpP --minimal linux-2.6.37/net/ipv4/tcp_ipv4.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/tcp_ipv4.c
---- linux-2.6.37/net/ipv4/tcp_ipv4.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/tcp_ipv4.c 2011-01-05 22:33:32.000000000 +0100
-@@ -2018,6 +2018,12 @@ static void *listening_get_next(struct s
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/tcp_ipv4.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/tcp_ipv4.c
+--- linux-2.6.38-rc8/net/ipv4/tcp_ipv4.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/tcp_ipv4.c 2011-02-02 22:20:27.000000000 +0100
+@@ -1988,6 +1988,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;
-@@ -2043,6 +2049,10 @@ get_req:
+@@ -2012,6 +2018,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) {
-@@ -2119,6 +2129,11 @@ static void *established_get_first(struc
+@@ -2088,6 +2098,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;
-@@ -2129,6 +2144,11 @@ static void *established_get_first(struc
+@@ -2098,6 +2113,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;
-@@ -2158,7 +2178,9 @@ static void *established_get_next(struct
+@@ -2127,7 +2147,9 @@ static void *established_get_next(struct
tw = cur;
tw = tw_next(tw);
get_tw:
tw = tw_next(tw);
}
if (tw) {
-@@ -2182,6 +2204,11 @@ get_tw:
+@@ -2151,6 +2173,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;
}
-@@ -2391,9 +2418,9 @@ static void get_openreq4(struct sock *sk
+@@ -2360,9 +2387,9 @@ static void get_openreq4(struct sock *sk
seq_printf(f, "%4d: %08X:%04X %08X:%04X"
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %u %d %p%n",
i,
ntohs(ireq->rmt_port),
TCP_SYN_RECV,
0, 0, /* could print option size, but that is af dependent. */
-@@ -2445,7 +2472,10 @@ static void get_tcp4_sock(struct sock *s
+@@ -2414,7 +2441,10 @@ static void get_tcp4_sock(struct sock *s
seq_printf(f, "%4d: %08X:%04X %08X:%04X %02X %08X:%08X %02X:%08lX "
"%08X %5d %8d %lu %d %p %lu %lu %u %u %d%n",
tp->write_seq - tp->snd_una,
rx_queue,
timer_active,
-@@ -2480,7 +2510,10 @@ static void get_timewait4_sock(struct in
+@@ -2449,7 +2479,10 @@ static void get_timewait4_sock(struct in
seq_printf(f, "%4d: %08X:%04X %08X:%04X"
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p%n",
3, jiffies_to_clock_t(ttd), 0, 0, 0, 0,
atomic_read(&tw->tw_refcnt), tw, len);
}
-diff -NurpP --minimal linux-2.6.37/net/ipv4/tcp_minisocks.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/tcp_minisocks.c
---- linux-2.6.37/net/ipv4/tcp_minisocks.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/tcp_minisocks.c 2011-01-05 22:30:43.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/tcp_minisocks.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/tcp_minisocks.c
+--- linux-2.6.38-rc8/net/ipv4/tcp_minisocks.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/tcp_minisocks.c 2011-01-29 02:01:07.000000000 +0100
@@ -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>
-@@ -290,6 +293,11 @@ void tcp_time_wait(struct sock *sk, int
+@@ -335,6 +338,11 @@ void tcp_time_wait(struct sock *sk, int
tcptw->tw_ts_recent = tp->rx_opt.ts_recent;
tcptw->tw_ts_recent_stamp = tp->rx_opt.ts_recent_stamp;
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
if (tw->tw_family == PF_INET6) {
struct ipv6_pinfo *np = inet6_sk(sk);
-diff -NurpP --minimal linux-2.6.37/net/ipv4/udp.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/udp.c
---- linux-2.6.37/net/ipv4/udp.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv4/udp.c 2011-01-05 22:30:43.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv4/udp.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/udp.c
+--- linux-2.6.38-rc8/net/ipv4/udp.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv4/udp.c 2011-01-29 02:01:07.000000000 +0100
@@ -296,14 +296,7 @@ fail:
}
EXPORT_SYMBOL(udp_lib_get_port);
+
if (result) {
- if (unlikely(!atomic_inc_not_zero(&result->sk_refcnt)))
+ if (unlikely(!atomic_inc_not_zero_hint(&result->sk_refcnt, 2)))
result = NULL;
@@ -508,6 +513,7 @@ begin:
goto begin;
ipv6_only_sock(s) ||
(s->sk_bound_dev_if && s->sk_bound_dev_if != dif))
continue;
-@@ -900,8 +905,13 @@ int udp_sendmsg(struct kiocb *iocb, stru
- { .sport = inet->inet_sport,
- .dport = dport } } };
+@@ -898,8 +903,13 @@ int udp_sendmsg(struct kiocb *iocb, stru
+ .fl_ip_sport = inet->inet_sport,
+ .fl_ip_dport = dport };
struct net *net = sock_net(sk);
+ struct nx_info *nxi = sk->sk_nx_info;
err = ip_route_output_flow(net, &rt, &fl, sk, 1);
if (err) {
if (err == -ENETUNREACH)
-@@ -1183,7 +1193,8 @@ try_again:
+@@ -1181,7 +1191,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)
-@@ -1924,6 +1935,8 @@ static struct sock *udp_get_first(struct
+@@ -1922,6 +1933,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;
}
-@@ -1941,7 +1954,9 @@ static struct sock *udp_get_next(struct
+@@ -1939,7 +1952,9 @@ static struct sock *udp_get_next(struct
do {
sk = sk_nulls_next(sk);
if (!sk) {
if (state->bucket <= state->udp_table->mask)
-@@ -2048,7 +2063,10 @@ static void udp4_format_sock(struct sock
+@@ -2046,7 +2061,10 @@ static void udp4_format_sock(struct sock
seq_printf(f, "%5d: %08X:%04X %08X:%04X"
" %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d%n",
sk_wmem_alloc_get(sp),
sk_rmem_alloc_get(sp),
0, 0L, 0, sock_i_uid(sp), 0, sock_i_ino(sp),
-diff -NurpP --minimal linux-2.6.37/net/ipv6/addrconf.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/addrconf.c
---- linux-2.6.37/net/ipv6/addrconf.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/addrconf.c 2011-01-05 22:30:43.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/Kconfig linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/Kconfig
+--- linux-2.6.38-rc8/net/ipv6/Kconfig 2010-08-02 16:52:59.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/Kconfig 2011-01-29 02:01:07.000000000 +0100
+@@ -4,8 +4,8 @@
+
+ # IPv6 as module will cause a CRASH if you try to unload it
+ menuconfig IPV6
+- tristate "The IPv6 protocol"
+- default m
++ bool "The IPv6 protocol"
++ default n
+ ---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-2.6.38-rc8/net/ipv6/addrconf.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/addrconf.c
+--- linux-2.6.38-rc8/net/ipv6/addrconf.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/addrconf.c 2011-02-02 22:20:27.000000000 +0100
@@ -87,6 +87,8 @@
#include <linux/proc_fs.h>
/* Set to 3 to get tracing... */
#define ACONF_DEBUG 2
-@@ -1124,7 +1126,7 @@ out:
+@@ -1121,7 +1123,7 @@ out:
int ipv6_dev_get_saddr(struct net *net, 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];
-@@ -1196,6 +1198,8 @@ int ipv6_dev_get_saddr(struct net *net,
+@@ -1193,6 +1195,8 @@ int ipv6_dev_get_saddr(struct net *net,
dev->name);
continue;
}
score->rule = -1;
bitmap_zero(score->scorebits, IPV6_SADDR_RULE_MAX);
-@@ -3079,7 +3083,10 @@ static void if6_seq_stop(struct seq_file
+@@ -3061,7 +3065,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,
-@@ -3585,6 +3592,11 @@ static int in6_dump_addrs(struct inet6_d
+@@ -3567,6 +3574,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) {
-@@ -3595,6 +3607,8 @@ static int in6_dump_addrs(struct inet6_d
+@@ -3577,6 +3589,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).pid,
cb->nlh->nlmsg_seq,
-@@ -3611,6 +3625,8 @@ static int in6_dump_addrs(struct inet6_d
+@@ -3593,6 +3607,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).pid,
cb->nlh->nlmsg_seq,
-@@ -3626,6 +3642,8 @@ static int in6_dump_addrs(struct inet6_d
+@@ -3608,6 +3624,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).pid,
cb->nlh->nlmsg_seq,
-@@ -3975,6 +3993,11 @@ static int inet6_dump_ifinfo(struct sk_b
+@@ -3993,6 +4011,11 @@ static int inet6_dump_ifinfo(struct sk_b
struct inet6_dev *idev;
struct hlist_head *head;
struct hlist_node *node;
s_h = cb->args[0];
s_idx = cb->args[1];
-@@ -3986,6 +4009,8 @@ static int inet6_dump_ifinfo(struct sk_b
+@@ -4004,6 +4027,8 @@ static int inet6_dump_ifinfo(struct sk_b
hlist_for_each_entry_rcu(dev, node, head, index_hlist) {
if (idx < s_idx)
goto cont;
idev = __in6_dev_get(dev);
if (!idev)
goto cont;
-diff -NurpP --minimal linux-2.6.37/net/ipv6/af_inet6.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/af_inet6.c
---- linux-2.6.37/net/ipv6/af_inet6.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/af_inet6.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/af_inet6.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/af_inet6.c
+--- linux-2.6.38-rc8/net/ipv6/af_inet6.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/af_inet6.c 2011-01-29 02:01:07.000000000 +0100
@@ -42,6 +42,8 @@
#include <linux/netdevice.h>
#include <linux/icmpv6.h>
if ((addr_type & IPV6_ADDR_MULTICAST) && sock->type == SOCK_STREAM)
return -EINVAL;
@@ -303,6 +314,7 @@ int inet6_bind(struct socket *sock, stru
- /* Reproduce AF_INET checks to make the bindings consitant */
+ /* Reproduce AF_INET checks to make the bindings consistent */
v4addr = addr->sin6_addr.s6_addr32[3];
chk_addr_ret = inet_addr_type(net, v4addr);
+
if (ipv6_addr_any(&np->rcv_saddr))
ipv6_addr_copy(&sin->sin6_addr, &np->saddr);
else
-diff -NurpP --minimal linux-2.6.37/net/ipv6/fib6_rules.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/fib6_rules.c
---- linux-2.6.37/net/ipv6/fib6_rules.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/fib6_rules.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/fib6_rules.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/fib6_rules.c
+--- linux-2.6.38-rc8/net/ipv6/fib6_rules.c 2011-01-05 21:50:42.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/fib6_rules.c 2011-01-29 02:01:07.000000000 +0100
@@ -88,7 +88,7 @@ static int fib6_rule_action(struct fib_r
ip6_dst_idev(&rt->dst)->dev,
&flp->fl6_dst,
goto again;
if (!ipv6_prefix_equal(&saddr, &r->src.addr,
r->src.plen))
-diff -NurpP --minimal linux-2.6.37/net/ipv6/inet6_hashtables.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/inet6_hashtables.c
---- linux-2.6.37/net/ipv6/inet6_hashtables.c 2010-02-25 11:52:10.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/inet6_hashtables.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/inet6_hashtables.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/inet6_hashtables.c
+--- linux-2.6.38-rc8/net/ipv6/inet6_hashtables.c 2010-02-25 11:52:10.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/inet6_hashtables.c 2011-01-29 02:01:07.000000000 +0100
@@ -16,6 +16,7 @@
#include <linux/module.h>
}
if (sk->sk_bound_dev_if) {
if (sk->sk_bound_dev_if != dif)
-diff -NurpP --minimal linux-2.6.37/net/ipv6/ip6_output.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/ip6_output.c
---- linux-2.6.37/net/ipv6/ip6_output.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/ip6_output.c 2011-01-05 22:30:43.000000000 +0100
-@@ -930,7 +930,7 @@ static int ip6_dst_lookup_tail(struct so
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/ip6_output.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/ip6_output.c
+--- linux-2.6.38-rc8/net/ipv6/ip6_output.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/ip6_output.c 2011-01-29 02:01:07.000000000 +0100
+@@ -933,7 +933,7 @@ static int ip6_dst_lookup_tail(struct so
err = ipv6_dev_get_saddr(net, ip6_dst_idev(*dst)->dev,
&fl->fl6_dst,
sk ? inet6_sk(sk)->srcprefs : 0,
if (err)
goto out_err_release;
}
-diff -NurpP --minimal linux-2.6.37/net/ipv6/Kconfig linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/Kconfig
---- linux-2.6.37/net/ipv6/Kconfig 2010-08-02 16:52:59.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/Kconfig 2010-11-23 02:09:41.000000000 +0100
-@@ -4,8 +4,8 @@
-
- # IPv6 as module will cause a CRASH if you try to unload it
- menuconfig IPV6
-- tristate "The IPv6 protocol"
-- default m
-+ bool "The IPv6 protocol"
-+ default n
- ---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-2.6.37/net/ipv6/ndisc.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/ndisc.c
---- linux-2.6.37/net/ipv6/ndisc.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/ndisc.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/ndisc.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/ndisc.c
+--- linux-2.6.38-rc8/net/ipv6/ndisc.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/ndisc.c 2011-03-10 16:52:54.000000000 +0100
@@ -595,7 +595,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,
- &tmpaddr))
-+ &tmpaddr, NULL /* FIXME: ? */ ))
++ &tmpaddr, NULL))
return;
src_addr = &tmpaddr;
}
-diff -NurpP --minimal linux-2.6.37/net/ipv6/raw.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/raw.c
---- linux-2.6.37/net/ipv6/raw.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/raw.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/raw.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/raw.c
+--- linux-2.6.38-rc8/net/ipv6/raw.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/raw.c 2011-02-17 02:17:52.000000000 +0100
@@ -30,6 +30,7 @@
#include <linux/icmpv6.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv6.h>
+#include <linux/vs_inet6.h>
#include <linux/skbuff.h>
+ #include <linux/compat.h>
#include <asm/uaccess.h>
- #include <asm/ioctls.h>
-@@ -283,6 +284,13 @@ static int rawv6_bind(struct sock *sk, s
+@@ -284,6 +285,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-2.6.37/net/ipv6/route.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/route.c
---- linux-2.6.37/net/ipv6/route.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/route.c 2011-01-05 22:30:43.000000000 +0100
-@@ -2290,7 +2290,8 @@ static int rt6_fill_node(struct net *net
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/route.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/route.c
+--- linux-2.6.38-rc8/net/ipv6/route.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/route.c 2011-03-10 17:21:19.000000000 +0100
+@@ -2289,7 +2289,8 @@ static int rt6_fill_node(struct net *net
struct inet6_dev *idev = ip6_dst_idev(&rt->dst);
struct in6_addr saddr_buf;
if (ipv6_dev_get_saddr(net, idev ? idev->dev : NULL,
NLA_PUT(skb, RTA_PREFSRC, 16, &saddr_buf);
}
-diff -NurpP --minimal linux-2.6.37/net/ipv6/tcp_ipv6.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/tcp_ipv6.c
---- linux-2.6.37/net/ipv6/tcp_ipv6.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/tcp_ipv6.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/tcp_ipv6.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/tcp_ipv6.c
+--- linux-2.6.38-rc8/net/ipv6/tcp_ipv6.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/tcp_ipv6.c 2011-01-29 02:01:07.000000000 +0100
@@ -69,6 +69,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,
-@@ -160,8 +161,15 @@ static int tcp_v6_connect(struct sock *s
+@@ -161,8 +162,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-2.6.37/net/ipv6/udp.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/udp.c
---- linux-2.6.37/net/ipv6/udp.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/udp.c 2011-01-05 22:30:43.000000000 +0100
-@@ -48,13 +48,14 @@
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/udp.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/udp.c
+--- linux-2.6.38-rc8/net/ipv6/udp.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/udp.c 2011-01-29 05:23:17.000000000 +0100
+@@ -45,41 +45,67 @@
+ #include <net/tcp_states.h>
+ #include <net/ip6_checksum.h>
+ #include <net/xfrm.h>
++#include <linux/vs_inet6.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
-+#include <linux/vs_inet6.h>
#include "udp_impl.h"
- int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
+-int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
++int ipv6_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2)
{
- const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr;
+- const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr;
++ const struct in6_addr *sk1_rcv_saddr6 = &inet6_sk(sk1)->rcv_saddr;
const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2);
-- __be32 sk1_rcv_saddr = inet_sk(sk)->inet_rcv_saddr;
-+ __be32 sk_rcv_saddr = inet_sk(sk)->inet_rcv_saddr;
- __be32 sk2_rcv_saddr = inet_rcv_saddr(sk2);
- int sk_ipv6only = ipv6_only_sock(sk);
+- __be32 sk1_rcv_saddr = sk_rcv_saddr(sk);
++ __be32 sk1_rcv_saddr = sk_rcv_saddr(sk1);
+ __be32 sk2_rcv_saddr = sk_rcv_saddr(sk2);
+- int sk_ipv6only = ipv6_only_sock(sk);
++ int sk1_ipv6only = ipv6_only_sock(sk1);
int sk2_ipv6only = inet_v6_ipv6only(sk2);
-@@ -62,24 +63,49 @@ int ipv6_rcv_saddr_equal(const struct so
+- int addr_type = ipv6_addr_type(sk_rcv_saddr6);
++ int addr_type = ipv6_addr_type(sk1_rcv_saddr6);
int addr_type2 = sk2_rcv_saddr6 ? ipv6_addr_type(sk2_rcv_saddr6) : IPV6_ADDR_MAPPED;
/* if both are mapped, treat as IPv4 */
- if (addr_type == IPV6_ADDR_MAPPED && addr_type2 == IPV6_ADDR_MAPPED)
- return (!sk2_ipv6only &&
-- (!sk1_rcv_saddr || !sk2_rcv_saddr ||
-- sk1_rcv_saddr == sk2_rcv_saddr));
+ if (addr_type == IPV6_ADDR_MAPPED && addr_type2 == IPV6_ADDR_MAPPED) {
+ if (!sk2_ipv6only &&
-+ (!sk_rcv_saddr || !sk2_rcv_saddr ||
-+ sk_rcv_saddr == sk2_rcv_saddr))
+ (!sk1_rcv_saddr || !sk2_rcv_saddr ||
+- sk1_rcv_saddr == sk2_rcv_saddr));
++ sk1_rcv_saddr == sk2_rcv_saddr))
+ goto vs_v4;
+ else
+ return 0;
+ goto vs;
if (addr_type == IPV6_ADDR_ANY &&
- !(sk_ipv6only && addr_type2 == IPV6_ADDR_MAPPED))
+- !(sk_ipv6only && addr_type2 == IPV6_ADDR_MAPPED))
- return 1;
++ !(sk1_ipv6only && addr_type2 == IPV6_ADDR_MAPPED))
+ goto vs;
if (sk2_rcv_saddr6 &&
- ipv6_addr_equal(sk_rcv_saddr6, sk2_rcv_saddr6))
+- ipv6_addr_equal(sk_rcv_saddr6, sk2_rcv_saddr6))
- return 1;
++ ipv6_addr_equal(sk1_rcv_saddr6, sk2_rcv_saddr6))
+ goto vs;
return 0;
+
+vs_v4:
-+ if (!sk_rcv_saddr && !sk2_rcv_saddr)
-+ return nx_v4_addr_conflict(sk->sk_nx_info, sk2->sk_nx_info);
++ if (!sk1_rcv_saddr && !sk2_rcv_saddr)
++ return nx_v4_addr_conflict(sk1->sk_nx_info, sk2->sk_nx_info);
+ if (!sk2_rcv_saddr)
-+ return v4_addr_in_nx_info(sk->sk_nx_info, sk2_rcv_saddr, -1);
-+ if (!sk_rcv_saddr)
-+ return v4_addr_in_nx_info(sk2->sk_nx_info, sk_rcv_saddr, -1);
++ return v4_addr_in_nx_info(sk1->sk_nx_info, sk2_rcv_saddr, -1);
++ if (!sk1_rcv_saddr)
++ return v4_addr_in_nx_info(sk2->sk_nx_info, sk1_rcv_saddr, -1);
+ return 1;
+vs:
+ if (addr_type2 == IPV6_ADDR_ANY && addr_type == IPV6_ADDR_ANY)
-+ return nx_v6_addr_conflict(sk->sk_nx_info, sk2->sk_nx_info);
++ return nx_v6_addr_conflict(sk1->sk_nx_info, sk2->sk_nx_info);
+ else if (addr_type2 == IPV6_ADDR_ANY)
-+ return v6_addr_in_nx_info(sk2->sk_nx_info, sk_rcv_saddr6, -1);
++ return v6_addr_in_nx_info(sk2->sk_nx_info, sk1_rcv_saddr6, -1);
+ else if (addr_type == IPV6_ADDR_ANY) {
+ if (addr_type2 == IPV6_ADDR_MAPPED)
-+ return nx_v4_addr_conflict(sk->sk_nx_info, sk2->sk_nx_info);
++ return nx_v4_addr_conflict(sk1->sk_nx_info, sk2->sk_nx_info);
+ else
-+ return v6_addr_in_nx_info(sk->sk_nx_info, sk2_rcv_saddr6, -1);
++ return v6_addr_in_nx_info(sk1->sk_nx_info, sk2_rcv_saddr6, -1);
+ }
+ return 1;
}
}
if (!ipv6_addr_any(&np->daddr)) {
if (!ipv6_addr_equal(&np->daddr, saddr))
-diff -NurpP --minimal linux-2.6.37/net/ipv6/xfrm6_policy.c linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/xfrm6_policy.c
---- linux-2.6.37/net/ipv6/xfrm6_policy.c 2011-01-05 21:50:42.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/ipv6/xfrm6_policy.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/ipv6/xfrm6_policy.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/xfrm6_policy.c
+--- linux-2.6.38-rc8/net/ipv6/xfrm6_policy.c 2011-03-10 17:09:30.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/ipv6/xfrm6_policy.c 2011-02-02 22:20:27.000000000 +0100
@@ -62,7 +62,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-2.6.37/net/netfilter/ipvs/ip_vs_xmit.c linux-2.6.37-vs2.3.0.37-rc3/net/netfilter/ipvs/ip_vs_xmit.c
---- linux-2.6.37/net/netfilter/ipvs/ip_vs_xmit.c 2011-01-05 21:50:43.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/netfilter/ipvs/ip_vs_xmit.c 2011-01-06 00:35:16.000000000 +0100
-@@ -231,7 +231,7 @@ __ip_vs_route_output_v6(struct net *net,
+diff -NurpP --minimal linux-2.6.38-rc8/net/netfilter/ipvs/ip_vs_xmit.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/netfilter/ipvs/ip_vs_xmit.c
+--- linux-2.6.38-rc8/net/netfilter/ipvs/ip_vs_xmit.c 2011-03-10 17:09:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/netfilter/ipvs/ip_vs_xmit.c 2011-01-29 02:01:07.000000000 +0100
+@@ -213,7 +213,7 @@ __ip_vs_route_output_v6(struct net *net,
return dst;
if (ipv6_addr_any(&fl.fl6_src) &&
ipv6_dev_get_saddr(net, ip6_dst_idev(dst)->dev,
goto out_err;
if (do_xfrm && xfrm_lookup(net, &dst, &fl, NULL, 0) < 0)
goto out_err;
-diff -NurpP --minimal linux-2.6.37/net/netlink/af_netlink.c linux-2.6.37-vs2.3.0.37-rc3/net/netlink/af_netlink.c
---- linux-2.6.37/net/netlink/af_netlink.c 2011-01-05 21:50:43.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/netlink/af_netlink.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/netlink/af_netlink.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/netlink/af_netlink.c
+--- linux-2.6.38-rc8/net/netlink/af_netlink.c 2011-03-10 17:09:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/netlink/af_netlink.c 2011-03-10 17:21:19.000000000 +0100
@@ -55,6 +55,9 @@
#include <linux/types.h>
#include <linux/audit.h>
#include <net/net_namespace.h>
#include <net/sock.h>
-@@ -1912,6 +1915,8 @@ static struct sock *netlink_seq_socket_i
+@@ -1922,6 +1925,8 @@ static struct sock *netlink_seq_socket_i
sk_for_each(s, node, &hash->table[j]) {
if (sock_net(s) != seq_file_net(seq))
continue;
if (off == pos) {
iter->link = i;
iter->hash_idx = j;
-@@ -1946,7 +1951,8 @@ static void *netlink_seq_next(struct seq
+@@ -1956,7 +1961,8 @@ static void *netlink_seq_next(struct seq
s = v;
do {
s = sk_next(s);
if (s)
return s;
-@@ -1958,7 +1964,8 @@ static void *netlink_seq_next(struct seq
+@@ -1968,7 +1974,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-2.6.37/net/sctp/ipv6.c linux-2.6.37-vs2.3.0.37-rc3/net/sctp/ipv6.c
---- linux-2.6.37/net/sctp/ipv6.c 2011-01-05 21:50:45.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/sctp/ipv6.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/sctp/ipv6.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/sctp/ipv6.c
+--- linux-2.6.38-rc8/net/sctp/ipv6.c 2011-01-05 21:50:45.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/sctp/ipv6.c 2011-01-29 02:01:07.000000000 +0100
@@ -306,7 +306,8 @@ static void sctp_v6_get_saddr(struct sct
dst ? ip6_dst_idev(dst)->dev : NULL,
&daddr->v6.sin6_addr,
SCTP_DEBUG_PRINTK("saddr from ipv6_get_saddr: %pI6\n",
&saddr->v6.sin6_addr);
return;
-diff -NurpP --minimal linux-2.6.37/net/socket.c linux-2.6.37-vs2.3.0.37-rc3/net/socket.c
---- linux-2.6.37/net/socket.c 2011-01-05 21:50:45.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/socket.c 2011-01-05 22:30:44.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/socket.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/socket.c
+--- linux-2.6.38-rc8/net/socket.c 2011-03-10 17:09:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/socket.c 2011-01-29 02:01:07.000000000 +0100
@@ -98,6 +98,10 @@
#include <net/sock.h>
#include <linux/if_tun.h>
#include <linux/ipv6_route.h>
-@@ -550,7 +554,7 @@ static inline int __sock_sendmsg(struct
+@@ -551,7 +555,7 @@ static inline int __sock_sendmsg(struct
struct msghdr *msg, size_t size)
{
struct sock_iocb *si = kiocb_to_siocb(iocb);
sock_update_classid(sock->sk);
-@@ -563,7 +567,22 @@ static inline int __sock_sendmsg(struct
+@@ -564,7 +568,22 @@ static inline int __sock_sendmsg(struct
if (err)
return err;
}
int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
-@@ -681,6 +700,7 @@ static inline int __sock_recvmsg_nosec(s
+@@ -682,6 +701,7 @@ static inline int __sock_recvmsg_nosec(s
struct msghdr *msg, size_t size, int flags)
{
struct sock_iocb *si = kiocb_to_siocb(iocb);
sock_update_classid(sock->sk);
-@@ -690,7 +710,18 @@ static inline int __sock_recvmsg_nosec(s
+@@ -691,7 +711,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,
-@@ -1174,6 +1205,13 @@ int __sock_create(struct net *net, int f
+@@ -1175,6 +1206,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
-@@ -1309,6 +1347,7 @@ SYSCALL_DEFINE3(socket, int, family, int
+@@ -1310,6 +1348,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;
-@@ -1350,10 +1389,12 @@ SYSCALL_DEFINE4(socketpair, int, family,
+@@ -1351,10 +1390,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-2.6.37/net/sunrpc/auth.c linux-2.6.37-vs2.3.0.37-rc3/net/sunrpc/auth.c
---- linux-2.6.37/net/sunrpc/auth.c 2011-01-05 21:50:45.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/sunrpc/auth.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/sunrpc/auth.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/sunrpc/auth.c
+--- linux-2.6.38-rc8/net/sunrpc/auth.c 2011-03-10 17:09:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/sunrpc/auth.c 2011-01-29 02:01:07.000000000 +0100
@@ -14,6 +14,7 @@
#include <linux/hash.h>
#include <linux/sunrpc/clnt.h>
};
dprintk("RPC: %5u looking up %s cred\n",
-diff -NurpP --minimal linux-2.6.37/net/sunrpc/auth_unix.c linux-2.6.37-vs2.3.0.37-rc3/net/sunrpc/auth_unix.c
---- linux-2.6.37/net/sunrpc/auth_unix.c 2010-10-21 13:08:01.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/sunrpc/auth_unix.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/sunrpc/auth_unix.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/sunrpc/auth_unix.c
+--- linux-2.6.38-rc8/net/sunrpc/auth_unix.c 2010-10-21 13:08:01.000000000 +0200
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/sunrpc/auth_unix.c 2011-01-29 02:01:07.000000000 +0100
@@ -12,12 +12,14 @@
#include <linux/module.h>
#include <linux/sunrpc/clnt.h>
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-2.6.37/net/sunrpc/clnt.c linux-2.6.37-vs2.3.0.37-rc3/net/sunrpc/clnt.c
---- linux-2.6.37/net/sunrpc/clnt.c 2011-01-05 21:50:45.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/sunrpc/clnt.c 2011-01-05 22:30:44.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/sunrpc/clnt.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/sunrpc/clnt.c
+--- linux-2.6.38-rc8/net/sunrpc/clnt.c 2011-03-10 17:09:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/sunrpc/clnt.c 2011-01-29 02:01:07.000000000 +0100
@@ -33,6 +33,7 @@
#include <linux/utsname.h>
#include <linux/workqueue.h>
return clnt;
}
EXPORT_SYMBOL_GPL(rpc_create);
-diff -NurpP --minimal linux-2.6.37/net/unix/af_unix.c linux-2.6.37-vs2.3.0.37-rc3/net/unix/af_unix.c
---- linux-2.6.37/net/unix/af_unix.c 2011-01-05 21:50:46.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/net/unix/af_unix.c 2011-01-05 22:30:44.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/net/unix/af_unix.c linux-2.6.38-rc8-vs2.3.0.37-rc6/net/unix/af_unix.c
+--- linux-2.6.38-rc8/net/unix/af_unix.c 2011-03-10 17:09:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/net/unix/af_unix.c 2011-01-29 02:01:07.000000000 +0100
@@ -114,6 +114,8 @@
#include <linux/mount.h>
#include <net/checksum.h>
sk = next_unix_socket(&iter->i, sk);
return sk;
}
-diff -NurpP --minimal linux-2.6.37/scripts/checksyscalls.sh linux-2.6.37-vs2.3.0.37-rc3/scripts/checksyscalls.sh
---- linux-2.6.37/scripts/checksyscalls.sh 2010-10-21 13:08:01.000000000 +0200
-+++ linux-2.6.37-vs2.3.0.37-rc3/scripts/checksyscalls.sh 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/scripts/checksyscalls.sh linux-2.6.38-rc8-vs2.3.0.37-rc6/scripts/checksyscalls.sh
+--- linux-2.6.38-rc8/scripts/checksyscalls.sh 2011-03-10 17:09:31.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/scripts/checksyscalls.sh 2011-01-29 02:01:07.000000000 +0100
@@ -193,7 +193,6 @@ cat << EOF
#define __IGNORE_afs_syscall
#define __IGNORE_getpmsg
EOF
}
-diff -NurpP --minimal linux-2.6.37/security/commoncap.c linux-2.6.37-vs2.3.0.37-rc3/security/commoncap.c
---- linux-2.6.37/security/commoncap.c 2011-01-05 21:50:47.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/security/commoncap.c 2010-11-23 02:21:20.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/security/commoncap.c linux-2.6.38-rc8-vs2.3.0.37-rc6/security/commoncap.c
+--- linux-2.6.38-rc8/security/commoncap.c 2011-01-05 21:50:47.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/security/commoncap.c 2011-01-29 02:01:07.000000000 +0100
@@ -27,6 +27,7 @@
#include <linux/sched.h>
#include <linux/prctl.h>
return ret;
}
+
-diff -NurpP --minimal linux-2.6.37/security/selinux/hooks.c linux-2.6.37-vs2.3.0.37-rc3/security/selinux/hooks.c
---- linux-2.6.37/security/selinux/hooks.c 2011-01-05 21:50:47.000000000 +0100
-+++ linux-2.6.37-vs2.3.0.37-rc3/security/selinux/hooks.c 2010-11-23 02:09:41.000000000 +0100
+diff -NurpP --minimal linux-2.6.38-rc8/security/selinux/hooks.c linux-2.6.38-rc8-vs2.3.0.37-rc6/security/selinux/hooks.c
+--- linux-2.6.38-rc8/security/selinux/hooks.c 2011-03-10 17:09:32.000000000 +0100
++++ linux-2.6.38-rc8-vs2.3.0.37-rc6/security/selinux/hooks.c 2011-02-17 02:17:52.000000000 +0100
@@ -64,7 +64,6 @@
#include <linux/dccp.h>
#include <linux/quota.h>