[kernel] r8347 - in dists/trunk/linux-2.6/debian: . patches/bugfix/all/stable patches/bugfix/powerpc patches/features/all/vserver patches/series

Bastian Blank waldi at alioth.debian.org
Sat Mar 10 14:18:48 CET 2007


Author: waldi
Date: Sat Mar 10 13:18:48 2007
New Revision: 8347

Added:
   dists/trunk/linux-2.6/debian/patches/bugfix/all/stable/2.6.20.1   (contents, props changed)
   dists/trunk/linux-2.6/debian/patches/bugfix/all/stable/2.6.20.2   (contents, props changed)
   dists/trunk/linux-2.6/debian/patches/features/all/vserver/vs2.2.0-rc15.patch
      - copied, changed from r8291, dists/trunk/linux-2.6/debian/patches/features/all/vserver/vs2.2.0-pre3.patch
Removed:
   dists/trunk/linux-2.6/debian/patches/features/all/vserver/vs2.2.0-pre3.patch
Modified:
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/patches/bugfix/powerpc/drivers_macintosh-broken.patch
   dists/trunk/linux-2.6/debian/patches/features/all/vserver/gen-patch
   dists/trunk/linux-2.6/debian/patches/series/1~experimental.1
   dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra
Log:
* Add stable release 2.6.20.1.
* Add stable release 2.6.20.2.
* Update vserver patch to 2.2.0-rc15.

* debian/changelog: Update.
* debian/patches/bugfix/all/stable/2.6.20.1,
  debian/patches/bugfix/all/stable/2.6.20.2: Add
* debian/patches/bugfix/powerpc/drivers_macintosh-broken.patch: Fix.
* debian/patches/features/all/vserver/gen-patch: Update.
* debian/patches/features/all/vserver/vs2.2.0-pre3.patch: Remove.
* debian/patches/features/all/vserver/vs2.2.0-rc15.patch: Add.
* debian/patches/series/1~experimental.1,
  debian/patches/series/1~experimental.1-extra: Update.


Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	(original)
+++ dists/trunk/linux-2.6/debian/changelog	Sat Mar 10 13:18:48 2007
@@ -16,6 +16,115 @@
   * Remove legacy pty support. (closes: #338404)
   * Enable new scsi parts.
   * powerpc: Enable ibmvscsis.
+  * Add stable release 2.6.20.1:
+    - Linux 2.6.20.1
+    - [PATCH] Fix a free-wrong-pointer bug in nfs/acl server (CVE-2007-0772)
+  * Add stable release 2.6.20.2:
+    - Linux 2.6.20.2
+    - IPV6: Handle np->opt being NULL in ipv6_getsockopt_sticky() [CVE-2007-1000]
+    - x86-64: survive having no irq mapping for a vector
+    - Fix buffer overflow in Omnikey CardMan 4040 driver (CVE-2007-0005)
+    - TCP: Fix minisock tcp_create_openreq_child() typo.
+    - gfs2: fix locking mistake
+    - ATA: convert GSI to irq on ia64
+    - pktcdvd: Correctly set cmd_len field in pkt_generic_packet
+    - video/aty/mach64_ct.c: fix bogus delay loop
+    - revert "drivers/net/tulip/dmfe: support basic carrier detection"
+    - throttle_vm_writeout(): don't loop on GFP_NOFS and GFP_NOIO allocations
+    - fix section mismatch warning in lockdep
+    - ueagle-atm.c needs sched.h
+    - kvm: Fix asm constraint for lldt instruction
+    - lockdep: forward declare struct task_struct
+    - Char: specialix, isr have 2 params
+    - buffer: memorder fix
+    - kernel/time/clocksource.c needs struct task_struct on m68k
+    - m32r: build fix for processors without ISA_DSP_LEVEL2
+    - hugetlb: preserve hugetlb pte dirty state
+    - enable mouse button 2+3 emulation for x86 macs
+    - v9fs_vfs_mkdir(): fix a double free
+    - ufs: restore back support of openstep
+    - Fix MTRR compat ioctl
+    - kexec: Fix CONFIG_SMP=n compilation V2 (ia64)
+    - NLM: Fix double free in __nlm_async_call
+    - RPM: fix double free in portmapper code
+    - Revert "[PATCH] LOG2: Alter get_order() so that it can make use of ilog2() on a constant"
+    - Backport of psmouse suspend/shutdown cleanups
+    - USB: usbnet driver bugfix
+    - sched: fix SMT scheduler bug
+    - tty_io: fix race in master pty close/slave pty close path
+    - forcedeth: disable msix
+    - export blk_recount_segments
+    - Fix reference counting (memory leak) problem in __nfulnl_send() and callers related to packet queueing.
+    - Fix anycast procfs device leak
+    - Don't add anycast reference to device multiple times
+    - Fix TCP MD5 locking.
+    - Fix %100 cpu spinning on sparc64
+    - Fix skb data reallocation handling in IPSEC
+    - Fix xfrm_add_sa_expire() return value
+    - Fix interrupt probing on E450 sparc64 systems
+    - HID: fix possible double-free on error path in hid parser
+    - POWERPC: Fix performance monitor exception
+    - libata: add missing CONFIG_PM in LLDs
+    - libata: add missing PM callbacks
+    - bcm43xx: Fix assertion failures in interrupt handler
+    - mmc: Power quirk for ENE controllers
+    - UML - Fix 2.6.20 hang
+    - fix umask when noACL kernel meets extN tuned for ACLs
+    - sata_sil: ignore and clear spurious IRQs while executing commands by polling
+    - swsusp: Fix possible oops in userland interface
+    - Fix posix-cpu-timer breakage caused by stale p->last_ran value
+    - V4L: cx88-blackbird: allow usage of 376836 and 262144 sized firmware images
+    - V4L: fix cx25840 firmware loading
+    - DVB: digitv: open nxt6000 i2c_gate for TDED4 tuner handling
+    - DVB: cxusb: fix firmware patch for big endian systems
+    - V4L: pvrusb2: Handle larger cx2341x firmware images
+    - V4L: pvrusb2: Fix video corruption on stream start
+    - dvbdev: fix illegal re-usage of fileoperations struct
+    - md: Fix raid10 recovery problem.
+    - bcm43xx: fix for 4309
+    - i386: Fix broken CONFIG_COMPAT_VDSO on i386
+    - x86: Don't require the vDSO for handling a.out signals
+    - x86_64: Fix wrong gcc check in bitops.h
+    - sky2: transmit timeout deadlock
+    - sky2: dont flush good pause frames
+    - Fix oops in xfrm_audit_log()
+    - Prevent pseudo garbage in SYN's advertized window
+    - Fix IPX module unload
+    - Clear TCP segmentation offload state in ipt_REJECT
+    - Fix atmarp.h for userspace
+    - UHCI: fix port resume problem
+    - Fix recently introduced problem with shutting down a busy NFS server.
+    - Avoid using nfsd process pools on SMP machines.
+    - EHCI: turn off remote wakeup during shutdown
+    - IPV6: HASHTABLES: Use appropriate seed for caluculating ehash index.
+    - MTD: Fatal regression in drivers/mtd/redboot.c in 2.6.20
+    - Kconfig: FAULT_INJECTION can be selected only if LOCKDEP is enabled.
+    - USB HID: Fix USB vendor and product IDs endianness for USB HID devices
+    - Fix null pointer dereference in appledisplay driver
+    - ieee1394: fix host device registering when nodemgr disabled
+    - ieee1394: video1394: DMA fix
+    - Fix compile error for e500 core based processors
+    - md: Avoid possible BUG_ON in md bitmap handling.
+    - Fix allocation failure handling in multicast
+    - Fix TCP FIN handling
+    - Fix ATM initcall ordering.
+    - Fix various bugs with aligned reads in RAID5.
+    - hda-intel - Don't try to probe invalid codecs
+    - usbaudio - Fix Oops with unconventional sample rates
+    - usbaudio - Fix Oops with broken usb descriptors
+    - USB: fix concurrent buffer access in the hub driver
+    - Missing critical phys_to_virt in lib/swiotlb.c
+    - AGP: intel-agp bugfix
+    - bcm43xx: Fix for oops on ampdu status
+    - bcm43xx: Fix for oops on resume
+    - ide: fix drive side 80c cable check
+    - Keys: Fix key serial number collision handling
+    - knfsd: Fix a race in closing NFSd connections.
+    - pata_amd: fix an obvious bug in cable detection
+    - prism54: correct assignment of DOT1XENABLE in WE-19 codepaths
+    - rtc-pcf8563: detect polarity of century bit automatically
+    - x86_64: fix 2.6.18 regression - PTRACE_OLDSETOPTIONS should be accepted
+    - ocfs2: ocfs2_link() journal credits update
 
   [ Rod Whitby ]
   * arm/ixp4xx: Enable PATA_ARTOP for the nas100d and dsmg600.

Added: dists/trunk/linux-2.6/debian/patches/bugfix/all/stable/2.6.20.1
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/stable/2.6.20.1	Sat Mar 10 13:18:48 2007
@@ -0,0 +1,42 @@
+diff --git a/Makefile b/Makefile
+index 7e2750f..d26f3f5 100644
+diff --git a/fs/nfsd/nfs2acl.c b/fs/nfsd/nfs2acl.c
+index edde5dc..b617428 100644
+--- a/fs/nfsd/nfs2acl.c
++++ b/fs/nfsd/nfs2acl.c
+@@ -287,13 +287,20 @@ static int nfsaclsvc_release_getacl(struct svc_rqst *rqstp, __be32 *p,
+ 	return 1;
+ }
+ 
+-static int nfsaclsvc_release_fhandle(struct svc_rqst *rqstp, __be32 *p,
+-		struct nfsd_fhandle *resp)
++static int nfsaclsvc_release_attrstat(struct svc_rqst *rqstp, __be32 *p,
++		struct nfsd_attrstat *resp)
+ {
+ 	fh_put(&resp->fh);
+ 	return 1;
+ }
+ 
++static int nfsaclsvc_release_access(struct svc_rqst *rqstp, __be32 *p,
++               struct nfsd3_accessres *resp)
++{
++       fh_put(&resp->fh);
++       return 1;
++}
++
+ #define nfsaclsvc_decode_voidargs	NULL
+ #define nfsaclsvc_encode_voidres	NULL
+ #define nfsaclsvc_release_void		NULL
+@@ -322,9 +329,9 @@ struct nfsd3_voidargs { int dummy; };
+ static struct svc_procedure		nfsd_acl_procedures2[] = {
+   PROC(null,	void,		void,		void,	  RC_NOCACHE, ST),
+   PROC(getacl,	getacl,		getacl,		getacl,	  RC_NOCACHE, ST+1+2*(1+ACL)),
+-  PROC(setacl,	setacl,		attrstat,	fhandle,  RC_NOCACHE, ST+AT),
+-  PROC(getattr, fhandle,	attrstat,	fhandle,  RC_NOCACHE, ST+AT),
+-  PROC(access,	access,		access,		fhandle,  RC_NOCACHE, ST+AT+1),
++  PROC(setacl,	setacl,		attrstat,	attrstat, RC_NOCACHE, ST+AT),
++  PROC(getattr, fhandle,	attrstat,	attrstat, RC_NOCACHE, ST+AT),
++  PROC(access,	access,		access,		access,   RC_NOCACHE, ST+AT+1),
+ };
+ 
+ struct svc_version	nfsd_acl_version2 = {

Added: dists/trunk/linux-2.6/debian/patches/bugfix/all/stable/2.6.20.2
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/stable/2.6.20.2	Sat Mar 10 13:18:48 2007
@@ -0,0 +1,4774 @@
+diff --git a/Makefile b/Makefile
+index d26f3f5..d165e80 100644
+diff --git a/arch/i386/kernel/cpu/mtrr/if.c b/arch/i386/kernel/cpu/mtrr/if.c
+index 5ae1705..590d99e 100644
+--- a/arch/i386/kernel/cpu/mtrr/if.c
++++ b/arch/i386/kernel/cpu/mtrr/if.c
+@@ -158,8 +158,9 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
+ 	struct mtrr_sentry sentry;
+ 	struct mtrr_gentry gentry;
+ 	void __user *arg = (void __user *) __arg;
++	unsigned int compat_cmd = cmd;
+ 
+-	switch (cmd) {
++	switch (compat_cmd) {
+ 	case MTRRIOC_ADD_ENTRY:
+ 	case MTRRIOC_SET_ENTRY:
+ 	case MTRRIOC_DEL_ENTRY:
+@@ -177,14 +178,20 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
+ 			return -EFAULT;
+ 		break;
+ #ifdef CONFIG_COMPAT
+-	case MTRRIOC32_ADD_ENTRY:
+-	case MTRRIOC32_SET_ENTRY:
+-	case MTRRIOC32_DEL_ENTRY:
+-	case MTRRIOC32_KILL_ENTRY:
+-	case MTRRIOC32_ADD_PAGE_ENTRY:
+-	case MTRRIOC32_SET_PAGE_ENTRY:
+-	case MTRRIOC32_DEL_PAGE_ENTRY:
+-	case MTRRIOC32_KILL_PAGE_ENTRY: {
++#define MTRR_COMPAT_OP(op, type)\
++	case MTRRIOC32_##op:	\
++	cmd = MTRRIOC_##op;	\
++	goto compat_get_##type
++
++	MTRR_COMPAT_OP(ADD_ENTRY, sentry);
++	MTRR_COMPAT_OP(SET_ENTRY, sentry);
++	MTRR_COMPAT_OP(DEL_ENTRY, sentry);
++	MTRR_COMPAT_OP(KILL_ENTRY, sentry);
++	MTRR_COMPAT_OP(ADD_PAGE_ENTRY, sentry);
++	MTRR_COMPAT_OP(SET_PAGE_ENTRY, sentry);
++	MTRR_COMPAT_OP(DEL_PAGE_ENTRY, sentry);
++	MTRR_COMPAT_OP(KILL_PAGE_ENTRY, sentry);
++compat_get_sentry: {
+ 		struct mtrr_sentry32 __user *s32 = (struct mtrr_sentry32 __user *)__arg;
+ 		err = get_user(sentry.base, &s32->base);
+ 		err |= get_user(sentry.size, &s32->size);
+@@ -193,8 +200,9 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
+ 			return err;
+ 		break;
+ 	}
+-	case MTRRIOC32_GET_ENTRY:
+-	case MTRRIOC32_GET_PAGE_ENTRY: {
++	MTRR_COMPAT_OP(GET_ENTRY, gentry);
++	MTRR_COMPAT_OP(GET_PAGE_ENTRY, gentry);
++compat_get_gentry: {
+ 		struct mtrr_gentry32 __user *g32 = (struct mtrr_gentry32 __user *)__arg;
+ 		err = get_user(gentry.regnum, &g32->regnum);
+ 		err |= get_user(gentry.base, &g32->base);
+@@ -204,6 +212,7 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
+ 			return err;
+ 		break;
+ 	}
++#undef MTRR_COMPAT_OP
+ #endif
+ 	}
+ 
+@@ -287,7 +296,7 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
+ 	if (err)
+ 		return err;
+ 
+-	switch(cmd) {
++	switch(compat_cmd) {
+ 	case MTRRIOC_GET_ENTRY:
+ 	case MTRRIOC_GET_PAGE_ENTRY:
+ 		if (copy_to_user(arg, &gentry, sizeof gentry))
+diff --git a/arch/i386/kernel/signal.c b/arch/i386/kernel/signal.c
+index 65d7620..f654505 100644
+--- a/arch/i386/kernel/signal.c
++++ b/arch/i386/kernel/signal.c
+@@ -21,6 +21,7 @@
+ #include <linux/suspend.h>
+ #include <linux/ptrace.h>
+ #include <linux/elf.h>
++#include <linux/binfmts.h>
+ #include <asm/processor.h>
+ #include <asm/ucontext.h>
+ #include <asm/uaccess.h>
+@@ -349,7 +350,10 @@ static int setup_frame(int sig, struct k_sigaction *ka,
+ 			goto give_sigsegv;
+ 	}
+ 
+-	restorer = (void *)VDSO_SYM(&__kernel_sigreturn);
++	if (current->binfmt->hasvdso)
++		restorer = (void *)VDSO_SYM(&__kernel_sigreturn);
++	else
++		restorer = (void *)&frame->retcode;
+ 	if (ka->sa.sa_flags & SA_RESTORER)
+ 		restorer = ka->sa.sa_restorer;
+ 
+diff --git a/arch/i386/kernel/sysenter.c b/arch/i386/kernel/sysenter.c
+index 5da7442..666f70d 100644
+--- a/arch/i386/kernel/sysenter.c
++++ b/arch/i386/kernel/sysenter.c
+@@ -77,7 +77,7 @@ int __init sysenter_setup(void)
+ 	syscall_page = (void *)get_zeroed_page(GFP_ATOMIC);
+ 
+ #ifdef CONFIG_COMPAT_VDSO
+-	__set_fixmap(FIX_VDSO, __pa(syscall_page), PAGE_READONLY);
++	__set_fixmap(FIX_VDSO, __pa(syscall_page), PAGE_READONLY_EXEC);
+ 	printk("Compat vDSO mapped to %08lx.\n", __fix_to_virt(FIX_VDSO));
+ #endif
+ 
+diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
+index fcacfe2..c085199 100644
+--- a/arch/ia64/Kconfig
++++ b/arch/ia64/Kconfig
+@@ -11,6 +11,7 @@ menu "Processor type and features"
+ 
+ config IA64
+ 	bool
++	select ATA_NONSTANDARD if ATA
+ 	default y
+ 	help
+ 	  The Itanium Processor Family is Intel's 64-bit successor to
+diff --git a/arch/ia64/kernel/crash.c b/arch/ia64/kernel/crash.c
+index bc2f64d..2018e62 100644
+--- a/arch/ia64/kernel/crash.c
++++ b/arch/ia64/kernel/crash.c
+@@ -79,6 +79,7 @@ crash_save_this_cpu()
+ 	final_note(buf);
+ }
+ 
++#ifdef CONFIG_SMP
+ static int
+ kdump_wait_cpu_freeze(void)
+ {
+@@ -91,6 +92,7 @@ kdump_wait_cpu_freeze(void)
+ 	}
+ 	return 1;
+ }
++#endif
+ 
+ void
+ machine_crash_shutdown(struct pt_regs *pt)
+@@ -132,11 +134,12 @@ kdump_cpu_freeze(struct unw_frame_info *info, void *arg)
+ 	atomic_inc(&kdump_cpu_freezed);
+ 	kdump_status[cpuid] = 1;
+ 	mb();
+-	if (cpuid == 0) {
+-		for (;;)
+-			cpu_relax();
+-	} else
++#ifdef CONFIG_HOTPLUG_CPU
++	if (cpuid != 0)
+ 		ia64_jump_to_sal(&sal_boot_rendez_state[cpuid]);
++#endif
++	for (;;)
++		cpu_relax();
+ }
+ 
+ static int
+diff --git a/arch/ia64/kernel/machine_kexec.c b/arch/ia64/kernel/machine_kexec.c
+index e2ccc9f..7141795 100644
+--- a/arch/ia64/kernel/machine_kexec.c
++++ b/arch/ia64/kernel/machine_kexec.c
+@@ -70,12 +70,14 @@ void machine_kexec_cleanup(struct kimage *image)
+ 
+ void machine_shutdown(void)
+ {
++#ifdef CONFIG_HOTPLUG_CPU
+ 	int cpu;
+ 
+ 	for_each_online_cpu(cpu) {
+ 		if (cpu != smp_processor_id())
+ 			cpu_down(cpu);
+ 	}
++#endif
+ 	kexec_disable_iosapic();
+ }
+ 
+diff --git a/arch/m32r/kernel/process.c b/arch/m32r/kernel/process.c
+index 44cbe0c..a689e29 100644
+--- a/arch/m32r/kernel/process.c
++++ b/arch/m32r/kernel/process.c
+@@ -174,7 +174,7 @@ void show_regs(struct pt_regs * regs)
+ 	  regs->acc1h, regs->acc1l);
+ #elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R)
+ 	printk("ACCH[%08lx]:ACCL[%08lx]\n", \
+-	  regs->acch, regs->accl);
++	  regs->acc0h, regs->acc0l);
+ #else
+ #error unknown isa configuration
+ #endif
+diff --git a/arch/m32r/kernel/signal.c b/arch/m32r/kernel/signal.c
+index 092ea86..4b15605 100644
+--- a/arch/m32r/kernel/signal.c
++++ b/arch/m32r/kernel/signal.c
+@@ -109,19 +109,10 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,
+ 	COPY(r10);
+ 	COPY(r11);
+ 	COPY(r12);
+-#if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2)
+ 	COPY(acc0h);
+ 	COPY(acc0l);
+-	COPY(acc1h);
+-	COPY(acc1l);
+-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R)
+-	COPY(acch);
+-	COPY(accl);
+-	COPY(dummy_acc1h);
+-	COPY(dummy_acc1l);
+-#else
+-#error unknown isa configuration
+-#endif
++	COPY(acc1h);		/* ISA_DSP_LEVEL2 only */
++	COPY(acc1l);		/* ISA_DSP_LEVEL2 only */
+ 	COPY(psw);
+ 	COPY(bpc);
+ 	COPY(bbpsw);
+@@ -196,19 +187,10 @@ setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
+ 	COPY(r10);
+ 	COPY(r11);
+ 	COPY(r12);
+-#if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2)
+ 	COPY(acc0h);
+ 	COPY(acc0l);
+-	COPY(acc1h);
+-	COPY(acc1l);
+-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R)
+-	COPY(acch);
+-	COPY(accl);
+-	COPY(dummy_acc1h);
+-	COPY(dummy_acc1l);
+-#else
+-#error unknown isa configuration
+-#endif
++	COPY(acc1h);		/* ISA_DSP_LEVEL2 only */
++	COPY(acc1l);		/* ISA_DSP_LEVEL2 only */
+ 	COPY(psw);
+ 	COPY(bpc);
+ 	COPY(bbpsw);
+diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
+index 71b1fe5..97cedcd 100644
+--- a/arch/powerpc/kernel/head_64.S
++++ b/arch/powerpc/kernel/head_64.S
+@@ -613,7 +613,7 @@ system_call_pSeries:
+ /*** pSeries interrupt support ***/
+ 
+ 	/* moved from 0xf00 */
+-	MASKABLE_EXCEPTION_PSERIES(., performance_monitor)
++	STD_EXCEPTION_PSERIES(., performance_monitor)
+ 
+ /*
+  * An interrupt came in while soft-disabled; clear EE in SRR1,
+diff --git a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c
+index c8b65ca..6d9857c 100644
+--- a/arch/ppc/kernel/ppc_ksyms.c
++++ b/arch/ppc/kernel/ppc_ksyms.c
+@@ -270,7 +270,7 @@ EXPORT_SYMBOL(mmu_hash_lock); /* For MOL */
+ extern long *intercept_table;
+ EXPORT_SYMBOL(intercept_table);
+ #endif /* CONFIG_PPC_STD_MMU */
+-#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
++#ifdef CONFIG_PPC_DCR_NATIVE
+ EXPORT_SYMBOL(__mtdcr);
+ EXPORT_SYMBOL(__mfdcr);
+ #endif
+diff --git a/arch/sparc64/kernel/of_device.c b/arch/sparc64/kernel/of_device.c
+index b0f3e00..ad74e5e 100644
+--- a/arch/sparc64/kernel/of_device.c
++++ b/arch/sparc64/kernel/of_device.c
+@@ -708,7 +708,7 @@ static unsigned int __init pci_irq_swizzle(struct device_node *dp,
+ 					   unsigned int irq)
+ {
+ 	struct linux_prom_pci_registers *regs;
+-	unsigned int devfn, slot, ret;
++	unsigned int bus, devfn, slot, ret;
+ 
+ 	if (irq < 1 || irq > 4)
+ 		return irq;
+@@ -717,10 +717,46 @@ static unsigned int __init pci_irq_swizzle(struct device_node *dp,
+ 	if (!regs)
+ 		return irq;
+ 
++	bus = (regs->phys_hi >> 16) & 0xff;
+ 	devfn = (regs->phys_hi >> 8) & 0xff;
+ 	slot = (devfn >> 3) & 0x1f;
+ 
+-	ret = ((irq - 1 + (slot & 3)) & 3) + 1;
++	if (pp->irq_trans) {
++		/* Derived from Table 8-3, U2P User's Manual.  This branch
++		 * is handling a PCI controller that lacks a proper set of
++		 * interrupt-map and interrupt-map-mask properties.  The
++		 * Ultra-E450 is one example.
++		 *
++		 * The bit layout is BSSLL, where:
++		 * B: 0 on bus A, 1 on bus B
++		 * D: 2-bit slot number, derived from PCI device number as
++		 *    (dev - 1) for bus A, or (dev - 2) for bus B
++		 * L: 2-bit line number
++		 *
++		 * Actually, more "portable" way to calculate the funky
++		 * slot number is to subtract pbm->pci_first_slot from the
++		 * device number, and that's exactly what the pre-OF
++		 * sparc64 code did, but we're building this stuff generically
++		 * using the OBP tree, not in the PCI controller layer.
++		 */
++		if (bus & 0x80) {
++			/* PBM-A */
++			bus  = 0x00;
++			slot = (slot - 1) << 2;
++		} else {
++			/* PBM-B */
++			bus  = 0x10;
++			slot = (slot - 2) << 2;
++		}
++		irq -= 1;
++
++		ret = (bus | slot | irq);
++	} else {
++		/* Going through a PCI-PCI bridge that lacks a set of
++		 * interrupt-map and interrupt-map-mask properties.
++		 */
++		ret = ((irq - 1 + (slot & 3)) & 3) + 1;
++	}
+ 
+ 	return ret;
+ }
+diff --git a/arch/um/os-Linux/sigio.c b/arch/um/os-Linux/sigio.c
+index 925a652..b2e1fd8 100644
+--- a/arch/um/os-Linux/sigio.c
++++ b/arch/um/os-Linux/sigio.c
+@@ -97,20 +97,22 @@ static int write_sigio_thread(void *unused)
+ 
+ static int need_poll(struct pollfds *polls, int n)
+ {
+-	if(n <= polls->size){
+-		polls->used = n;
++	struct pollfd *new;
++
++	if(n <= polls->size)
+ 		return 0;
+-	}
+-	kfree(polls->poll);
+-	polls->poll = um_kmalloc_atomic(n * sizeof(struct pollfd));
+-	if(polls->poll == NULL){
++
++	new = um_kmalloc_atomic(n * sizeof(struct pollfd));
++	if(new == NULL){
+ 		printk("need_poll : failed to allocate new pollfds\n");
+-		polls->size = 0;
+-		polls->used = 0;
+ 		return -ENOMEM;
+ 	}
++
++	memcpy(new, polls->poll, polls->used * sizeof(struct pollfd));
++	kfree(polls->poll);
++
++	polls->poll = new;
+ 	polls->size = n;
+-	polls->used = n;
+ 	return 0;
+ }
+ 
+@@ -171,15 +173,15 @@ int add_sigio_fd(int fd)
+ 			goto out;
+ 	}
+ 
+-	n = current_poll.used + 1;
+-	err = need_poll(&next_poll, n);
++	n = current_poll.used;
++	err = need_poll(&next_poll, n + 1);
+ 	if(err)
+ 		goto out;
+ 
+-	for(i = 0; i < current_poll.used; i++)
+-		next_poll.poll[i] = current_poll.poll[i];
+-
+-	next_poll.poll[n - 1] = *p;
++	memcpy(next_poll.poll, current_poll.poll,
++	       current_poll.used * sizeof(struct pollfd));
++	next_poll.poll[n] = *p;
++	next_poll.used = n + 1;
+ 	update_thread();
+  out:
+ 	sigio_unlock();
+@@ -214,6 +216,7 @@ int ignore_sigio_fd(int fd)
+ 		if(p->fd != fd)
+ 			next_poll.poll[n++] = *p;
+ 	}
++	next_poll.used = current_poll.used - 1;
+ 
+ 	update_thread();
+  out:
+@@ -331,10 +334,9 @@ void maybe_sigio_broken(int fd, int read)
+ 
+ 	sigio_lock();
+ 	err = need_poll(&all_sigio_fds, all_sigio_fds.used + 1);
+-	if(err){
+-		printk("maybe_sigio_broken - failed to add pollfd\n");
++	if(err)
+ 		goto out;
+-	}
++
+ 	all_sigio_fds.poll[all_sigio_fds.used++] =
+ 		((struct pollfd) { .fd  	= fd,
+ 				   .events 	= read ? POLLIN : POLLOUT,
+diff --git a/arch/x86_64/ia32/ia32_signal.c b/arch/x86_64/ia32/ia32_signal.c
+index ff499ef..c7beadf 100644
+--- a/arch/x86_64/ia32/ia32_signal.c
++++ b/arch/x86_64/ia32/ia32_signal.c
+@@ -21,6 +21,7 @@
+ #include <linux/stddef.h>
+ #include <linux/personality.h>
+ #include <linux/compat.h>
++#include <linux/binfmts.h>
+ #include <asm/ucontext.h>
+ #include <asm/uaccess.h>
+ #include <asm/i387.h>
+@@ -449,7 +450,11 @@ int ia32_setup_frame(int sig, struct k_sigaction *ka,
+ 
+ 	/* Return stub is in 32bit vsyscall page */
+ 	{ 
+-		void __user *restorer = VSYSCALL32_SIGRETURN; 
++		void __user *restorer;
++		if (current->binfmt->hasvdso)
++			restorer = VSYSCALL32_SIGRETURN;
++		else
++			restorer = (void *)&frame->retcode;
+ 		if (ka->sa.sa_flags & SA_RESTORER)
+ 			restorer = ka->sa.sa_restorer;       
+ 		err |= __put_user(ptr_to_compat(restorer), &frame->pretcode);
+diff --git a/arch/x86_64/ia32/ptrace32.c b/arch/x86_64/ia32/ptrace32.c
+index 04566fe..4de3a54 100644
+--- a/arch/x86_64/ia32/ptrace32.c
++++ b/arch/x86_64/ia32/ptrace32.c
+@@ -243,6 +243,7 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
+ 	case PTRACE_SINGLESTEP:
+ 	case PTRACE_DETACH:
+ 	case PTRACE_SYSCALL:
++	case PTRACE_OLDSETOPTIONS:
+ 	case PTRACE_SETOPTIONS:
+ 	case PTRACE_SET_THREAD_AREA:
+ 	case PTRACE_GET_THREAD_AREA:
+diff --git a/arch/x86_64/kernel/irq.c b/arch/x86_64/kernel/irq.c
+index 0c06af6..3bc30d2 100644
+--- a/arch/x86_64/kernel/irq.c
++++ b/arch/x86_64/kernel/irq.c
+@@ -18,6 +18,7 @@
+ #include <asm/uaccess.h>
+ #include <asm/io_apic.h>
+ #include <asm/idle.h>
++#include <asm/smp.h>
+ 
+ atomic_t irq_err_count;
+ 
+@@ -120,9 +121,14 @@ asmlinkage unsigned int do_IRQ(struct pt_regs *regs)
+ 
+ 	if (likely(irq < NR_IRQS))
+ 		generic_handle_irq(irq);
+-	else if (printk_ratelimit())
+-		printk(KERN_EMERG "%s: %d.%d No irq handler for vector\n",
+-			__func__, smp_processor_id(), vector);
++	else {
++		if (!disable_apic)
++			ack_APIC_irq();
++
++		if (printk_ratelimit())
++			printk(KERN_EMERG "%s: %d.%d No irq handler for vector\n",
++				__func__, smp_processor_id(), vector);
++	}
+ 
+ 	irq_exit();
+ 
+diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c
+index fb67897..38c293b 100644
+--- a/block/ll_rw_blk.c
++++ b/block/ll_rw_blk.c
+@@ -1264,7 +1264,7 @@ new_hw_segment:
+ 	bio->bi_hw_segments = nr_hw_segs;
+ 	bio->bi_flags |= (1 << BIO_SEG_VALID);
+ }
+-
++EXPORT_SYMBOL(blk_recount_segments);
+ 
+ static int blk_phys_contig_segment(request_queue_t *q, struct bio *bio,
+ 				   struct bio *nxt)
+diff --git a/drivers/Makefile b/drivers/Makefile
+index 0dd96d1..f28dcb4 100644
+--- a/drivers/Makefile
++++ b/drivers/Makefile
+@@ -30,7 +30,7 @@ obj-$(CONFIG_PARPORT)		+= parport/
+ obj-y				+= base/ block/ misc/ mfd/ net/ media/
+ obj-$(CONFIG_NUBUS)		+= nubus/
+ obj-$(CONFIG_ATM)		+= atm/
+-obj-$(CONFIG_PPC_PMAC)		+= macintosh/
++obj-y				+= macintosh/
+ obj-$(CONFIG_IDE)		+= ide/
+ obj-$(CONFIG_FC4)		+= fc4/
+ obj-$(CONFIG_SCSI)		+= scsi/
+diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
+index 48616c6..dc2c082 100644
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -225,10 +225,12 @@ static void ahci_thaw(struct ata_port *ap);
+ static void ahci_error_handler(struct ata_port *ap);
+ static void ahci_vt8251_error_handler(struct ata_port *ap);
+ static void ahci_post_internal_cmd(struct ata_queued_cmd *qc);
++#ifdef CONFIG_PM
+ static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg);
+ static int ahci_port_resume(struct ata_port *ap);
+ static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
+ static int ahci_pci_device_resume(struct pci_dev *pdev);
++#endif
+ static void ahci_remove_one (struct pci_dev *pdev);
+ 
+ static struct scsi_host_template ahci_sht = {
+@@ -248,8 +250,10 @@ static struct scsi_host_template ahci_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_scsi_device_suspend,
+ 	.resume			= ata_scsi_device_resume,
++#endif
+ };
+ 
+ static const struct ata_port_operations ahci_ops = {
+@@ -276,8 +280,10 @@ static const struct ata_port_operations ahci_ops = {
+ 	.error_handler		= ahci_error_handler,
+ 	.post_internal_cmd	= ahci_post_internal_cmd,
+ 
++#ifdef CONFIG_PM
+ 	.port_suspend		= ahci_port_suspend,
+ 	.port_resume		= ahci_port_resume,
++#endif
+ 
+ 	.port_start		= ahci_port_start,
+ 	.port_stop		= ahci_port_stop,
+@@ -307,8 +313,10 @@ static const struct ata_port_operations ahci_vt8251_ops = {
+ 	.error_handler		= ahci_vt8251_error_handler,
+ 	.post_internal_cmd	= ahci_post_internal_cmd,
+ 
++#ifdef CONFIG_PM
+ 	.port_suspend		= ahci_port_suspend,
+ 	.port_resume		= ahci_port_resume,
++#endif
+ 
+ 	.port_start		= ahci_port_start,
+ 	.port_stop		= ahci_port_stop,
+@@ -441,8 +449,10 @@ static struct pci_driver ahci_pci_driver = {
+ 	.name			= DRV_NAME,
+ 	.id_table		= ahci_pci_tbl,
+ 	.probe			= ahci_init_one,
++#ifdef CONFIG_PM
+ 	.suspend		= ahci_pci_device_suspend,
+ 	.resume			= ahci_pci_device_resume,
++#endif
+ 	.remove			= ahci_remove_one,
+ };
+ 
+@@ -587,6 +597,7 @@ static void ahci_power_up(void __iomem *port_mmio, u32 cap)
+ 	writel(cmd | PORT_CMD_ICC_ACTIVE, port_mmio + PORT_CMD);
+ }
+ 
++#ifdef CONFIG_PM
+ static void ahci_power_down(void __iomem *port_mmio, u32 cap)
+ {
+ 	u32 cmd, scontrol;
+@@ -604,6 +615,7 @@ static void ahci_power_down(void __iomem *port_mmio, u32 cap)
+ 	cmd &= ~PORT_CMD_SPIN_UP;
+ 	writel(cmd, port_mmio + PORT_CMD);
+ }
++#endif
+ 
+ static void ahci_init_port(void __iomem *port_mmio, u32 cap,
+ 			   dma_addr_t cmd_slot_dma, dma_addr_t rx_fis_dma)
+@@ -1336,6 +1348,7 @@ static void ahci_post_internal_cmd(struct ata_queued_cmd *qc)
+ 	}
+ }
+ 
++#ifdef CONFIG_PM
+ static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg)
+ {
+ 	struct ahci_host_priv *hpriv = ap->host->private_data;
+@@ -1412,6 +1425,7 @@ static int ahci_pci_device_resume(struct pci_dev *pdev)
+ 
+ 	return 0;
+ }
++#endif
+ 
+ static int ahci_port_start(struct ata_port *ap)
+ {
+diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
+index 24af560..91ccc20 100644
+--- a/drivers/ata/ata_generic.c
++++ b/drivers/ata/ata_generic.c
+@@ -119,8 +119,10 @@ static struct scsi_host_template generic_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations generic_port_ops = {
+@@ -230,8 +232,10 @@ static struct pci_driver ata_generic_pci_driver = {
+ 	.id_table	= ata_generic,
+ 	.probe 		= ata_generic_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init ata_generic_init(void)
+diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
+index 47701b2..57c0db3 100644
+--- a/drivers/ata/ata_piix.c
++++ b/drivers/ata/ata_piix.c
+@@ -255,8 +255,10 @@ static struct pci_driver piix_pci_driver = {
+ 	.id_table		= piix_pci_tbl,
+ 	.probe			= piix_init_one,
+ 	.remove			= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_pci_device_suspend,
+ 	.resume			= ata_pci_device_resume,
++#endif
+ };
+ 
+ static struct scsi_host_template piix_sht = {
+@@ -275,8 +277,10 @@ static struct scsi_host_template piix_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static const struct ata_port_operations piix_pata_ops = {
+diff --git a/drivers/ata/pata_ali.c b/drivers/ata/pata_ali.c
+index c5d61d1..765c932 100644
+--- a/drivers/ata/pata_ali.c
++++ b/drivers/ata/pata_ali.c
+@@ -345,8 +345,10 @@ static struct scsi_host_template ali_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ /*
+@@ -667,11 +669,13 @@ static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
+ 	return ata_pci_init_one(pdev, port_info, 2);
+ }
+ 
++#ifdef CONFIG_PM
+ static int ali_reinit_one(struct pci_dev *pdev)
+ {
+ 	ali_init_chipset(pdev);
+ 	return ata_pci_device_resume(pdev);
+ }
++#endif
+ 
+ static const struct pci_device_id ali[] = {
+ 	{ PCI_VDEVICE(AL, PCI_DEVICE_ID_AL_M5228), },
+@@ -685,8 +689,10 @@ static struct pci_driver ali_pci_driver = {
+ 	.id_table	= ali,
+ 	.probe 		= ali_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ali_reinit_one,
++#endif
+ };
+ 
+ static int __init ali_init(void)
+diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c
+index a6b3300..f7c493b 100644
+--- a/drivers/ata/pata_amd.c
++++ b/drivers/ata/pata_amd.c
+@@ -128,7 +128,7 @@ static void timing_setup(struct ata_port *ap, struct ata_device *adev, int offse
+ 
+ static int amd_pre_reset(struct ata_port *ap)
+ {
+-	static const u32 bitmask[2] = {0x03, 0xC0};
++	static const u32 bitmask[2] = {0x03, 0x0C};
+ 	static const struct pci_bits amd_enable_bits[] = {
+ 		{ 0x40, 1, 0x02, 0x02 },
+ 		{ 0x40, 1, 0x01, 0x01 }
+@@ -247,7 +247,7 @@ static void amd133_set_dmamode(struct ata_port *ap, struct ata_device *adev)
+  */
+ 
+ static int nv_pre_reset(struct ata_port *ap) {
+-	static const u8 bitmask[2] = {0x03, 0xC0};
++	static const u8 bitmask[2] = {0x03, 0x0C};
+ 	static const struct pci_bits nv_enable_bits[] = {
+ 		{ 0x50, 1, 0x02, 0x02 },
+ 		{ 0x50, 1, 0x01, 0x01 }
+@@ -334,8 +334,10 @@ static struct scsi_host_template amd_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations amd33_port_ops = {
+@@ -663,6 +665,7 @@ static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
+ 	return ata_pci_init_one(pdev, port_info, 2);
+ }
+ 
++#ifdef CONFIG_PM
+ static int amd_reinit_one(struct pci_dev *pdev)
+ {
+ 	if (pdev->vendor == PCI_VENDOR_ID_AMD) {
+@@ -679,6 +682,7 @@ static int amd_reinit_one(struct pci_dev *pdev)
+ 	}
+ 	return ata_pci_device_resume(pdev);
+ }
++#endif
+ 
+ static const struct pci_device_id amd[] = {
+ 	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_COBRA_7401),		0 },
+@@ -708,8 +712,10 @@ static struct pci_driver amd_pci_driver = {
+ 	.id_table	= amd,
+ 	.probe 		= amd_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= amd_reinit_one,
++#endif
+ };
+ 
+ static int __init amd_init(void)
+diff --git a/drivers/ata/pata_atiixp.c b/drivers/ata/pata_atiixp.c
+index 504e1db..b50ebb6 100644
+--- a/drivers/ata/pata_atiixp.c
++++ b/drivers/ata/pata_atiixp.c
+@@ -224,8 +224,10 @@ static struct scsi_host_template atiixp_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations atiixp_port_ops = {
+@@ -290,8 +292,10 @@ static struct pci_driver atiixp_pci_driver = {
+ 	.id_table	= atiixp,
+ 	.probe 		= atiixp_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.resume		= ata_pci_device_resume,
+ 	.suspend	= ata_pci_device_suspend,
++#endif
+ };
+ 
+ static int __init atiixp_init(void)
+diff --git a/drivers/ata/pata_cmd64x.c b/drivers/ata/pata_cmd64x.c
+index 449162c..90ff580 100644
+--- a/drivers/ata/pata_cmd64x.c
++++ b/drivers/ata/pata_cmd64x.c
+@@ -285,8 +285,10 @@ static struct scsi_host_template cmd64x_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations cmd64x_port_ops = {
+@@ -479,6 +481,7 @@ static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
+ 	return ata_pci_init_one(pdev, port_info, 2);
+ }
+ 
++#ifdef CONFIG_PM
+ static int cmd64x_reinit_one(struct pci_dev *pdev)
+ {
+ 	u8 mrdmode;
+@@ -492,6 +495,7 @@ static int cmd64x_reinit_one(struct pci_dev *pdev)
+ #endif
+ 	return ata_pci_device_resume(pdev);
+ }
++#endif
+ 
+ static const struct pci_device_id cmd64x[] = {
+ 	{ PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_643), 0 },
+@@ -507,8 +511,10 @@ static struct pci_driver cmd64x_pci_driver = {
+ 	.id_table	= cmd64x,
+ 	.probe 		= cmd64x_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= cmd64x_reinit_one,
++#endif
+ };
+ 
+ static int __init cmd64x_init(void)
+diff --git a/drivers/ata/pata_cs5520.c b/drivers/ata/pata_cs5520.c
+index 9f165a8..383975c 100644
+--- a/drivers/ata/pata_cs5520.c
++++ b/drivers/ata/pata_cs5520.c
+@@ -167,8 +167,10 @@ static struct scsi_host_template cs5520_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations cs5520_port_ops = {
+@@ -298,6 +300,7 @@ static void __devexit cs5520_remove_one(struct pci_dev *pdev)
+ 	dev_set_drvdata(dev, NULL);
+ }
+ 
++#ifdef CONFIG_PM
+ /**
+  *	cs5520_reinit_one	-	device resume
+  *	@pdev: PCI device
+@@ -314,6 +317,8 @@ static int cs5520_reinit_one(struct pci_dev *pdev)
+ 		pci_write_config_byte(pdev, 0x60, pcicfg | 0x40);
+ 	return ata_pci_device_resume(pdev);
+ }
++#endif
++
+ /* For now keep DMA off. We can set it for all but A rev CS5510 once the
+    core ATA code can handle it */
+ 
+@@ -329,8 +334,10 @@ static struct pci_driver cs5520_pci_driver = {
+ 	.id_table	= pata_cs5520,
+ 	.probe 		= cs5520_init_one,
+ 	.remove		= cs5520_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= cs5520_reinit_one,
++#endif
+ };
+ 
+ static int __init cs5520_init(void)
+diff --git a/drivers/ata/pata_cs5530.c b/drivers/ata/pata_cs5530.c
+index b1ca207..fddef81 100644
+--- a/drivers/ata/pata_cs5530.c
++++ b/drivers/ata/pata_cs5530.c
+@@ -181,8 +181,10 @@ static struct scsi_host_template cs5530_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations cs5530_port_ops = {
+@@ -369,6 +371,7 @@ static int cs5530_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
+ 	return ata_pci_init_one(pdev, port_info, 2);
+ }
+ 
++#ifdef CONFIG_PM
+ static int cs5530_reinit_one(struct pci_dev *pdev)
+ {
+ 	/* If we fail on resume we are doomed */
+@@ -376,6 +379,7 @@ static int cs5530_reinit_one(struct pci_dev *pdev)
+ 		BUG();
+ 	return ata_pci_device_resume(pdev);
+ }
++#endif
+ 	
+ static const struct pci_device_id cs5530[] = {
+ 	{ PCI_VDEVICE(CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE), },
+@@ -388,8 +392,10 @@ static struct pci_driver cs5530_pci_driver = {
+ 	.id_table	= cs5530,
+ 	.probe 		= cs5530_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= cs5530_reinit_one,
++#endif
+ };
+ 
+ static int __init cs5530_init(void)
+diff --git a/drivers/ata/pata_cs5535.c b/drivers/ata/pata_cs5535.c
+index e3efec4..80d0ed1 100644
+--- a/drivers/ata/pata_cs5535.c
++++ b/drivers/ata/pata_cs5535.c
+@@ -185,8 +185,10 @@ static struct scsi_host_template cs5535_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations cs5535_port_ops = {
+@@ -270,8 +272,10 @@ static struct pci_driver cs5535_pci_driver = {
+ 	.id_table	= cs5535,
+ 	.probe 		= cs5535_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init cs5535_init(void)
+diff --git a/drivers/ata/pata_cypress.c b/drivers/ata/pata_cypress.c
+index e2a9569..0da1715 100644
+--- a/drivers/ata/pata_cypress.c
++++ b/drivers/ata/pata_cypress.c
+@@ -136,8 +136,10 @@ static struct scsi_host_template cy82c693_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations cy82c693_port_ops = {
+@@ -206,8 +208,10 @@ static struct pci_driver cy82c693_pci_driver = {
+ 	.id_table	= cy82c693,
+ 	.probe 		= cy82c693_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init cy82c693_init(void)
+diff --git a/drivers/ata/pata_efar.c b/drivers/ata/pata_efar.c
+index edf8a63..4d4575e 100644
+--- a/drivers/ata/pata_efar.c
++++ b/drivers/ata/pata_efar.c
+@@ -234,8 +234,10 @@ static struct scsi_host_template efar_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static const struct ata_port_operations efar_ops = {
+@@ -317,8 +319,10 @@ static struct pci_driver efar_pci_driver = {
+ 	.id_table		= efar_pci_tbl,
+ 	.probe			= efar_init_one,
+ 	.remove			= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_pci_device_suspend,
+ 	.resume			= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init efar_init(void)
+diff --git a/drivers/ata/pata_hpt366.c b/drivers/ata/pata_hpt366.c
+index 2663599..878696a 100644
+--- a/drivers/ata/pata_hpt366.c
++++ b/drivers/ata/pata_hpt366.c
+@@ -338,8 +338,10 @@ static struct scsi_host_template hpt36x_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ /*
+@@ -467,12 +469,13 @@ static int hpt36x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
+ 	return ata_pci_init_one(dev, port_info, 2);
+ }
+ 
++#ifdef CONFIG_PM
+ static int hpt36x_reinit_one(struct pci_dev *dev)
+ {
+ 	hpt36x_init_chipset(dev);
+ 	return ata_pci_device_resume(dev);
+ }
+-
++#endif
+ 
+ static const struct pci_device_id hpt36x[] = {
+ 	{ PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366), },
+@@ -484,8 +487,10 @@ static struct pci_driver hpt36x_pci_driver = {
+ 	.id_table	= hpt36x,
+ 	.probe 		= hpt36x_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= hpt36x_reinit_one,
++#endif
+ };
+ 
+ static int __init hpt36x_init(void)
+diff --git a/drivers/ata/pata_hpt3x3.c b/drivers/ata/pata_hpt3x3.c
+index 5f1d385..f99c77c 100644
+--- a/drivers/ata/pata_hpt3x3.c
++++ b/drivers/ata/pata_hpt3x3.c
+@@ -119,8 +119,10 @@ static struct scsi_host_template hpt3x3_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations hpt3x3_port_ops = {
+@@ -206,11 +208,13 @@ static int hpt3x3_init_one(struct pci_dev *dev, const struct pci_device_id *id)
+ 	return ata_pci_init_one(dev, port_info, 2);
+ }
+ 
++#ifdef CONFIG_PM
+ static int hpt3x3_reinit_one(struct pci_dev *dev)
+ {
+ 	hpt3x3_init_chipset(dev);
+ 	return ata_pci_device_resume(dev);
+ }
++#endif
+ 
+ static const struct pci_device_id hpt3x3[] = {
+ 	{ PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT343), },
+@@ -223,8 +227,10 @@ static struct pci_driver hpt3x3_pci_driver = {
+ 	.id_table	= hpt3x3,
+ 	.probe 		= hpt3x3_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= hpt3x3_reinit_one,
++#endif
+ };
+ 
+ static int __init hpt3x3_init(void)
+diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c
+index e8afd48..7958177 100644
+--- a/drivers/ata/pata_it821x.c
++++ b/drivers/ata/pata_it821x.c
+@@ -676,8 +676,10 @@ static struct scsi_host_template it821x_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations it821x_smart_port_ops = {
+@@ -810,6 +812,7 @@ static int it821x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
+ 	return ata_pci_init_one(pdev, port_info, 2);
+ }
+ 
++#ifdef CONFIG_PM
+ static int it821x_reinit_one(struct pci_dev *pdev)
+ {
+ 	/* Resume - turn raid back off if need be */
+@@ -817,6 +820,7 @@ static int it821x_reinit_one(struct pci_dev *pdev)
+ 		it821x_disable_raid(pdev);
+ 	return ata_pci_device_resume(pdev);
+ }
++#endif
+ 
+ static const struct pci_device_id it821x[] = {
+ 	{ PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8211), },
+@@ -830,8 +834,10 @@ static struct pci_driver it821x_pci_driver = {
+ 	.id_table	= it821x,
+ 	.probe 		= it821x_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= it821x_reinit_one,
++#endif
+ };
+ 
+ static int __init it821x_init(void)
+diff --git a/drivers/ata/pata_jmicron.c b/drivers/ata/pata_jmicron.c
+index d50264a..9e4558a 100644
+--- a/drivers/ata/pata_jmicron.c
++++ b/drivers/ata/pata_jmicron.c
+@@ -137,6 +137,10 @@ static struct scsi_host_template jmicron_sht = {
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	/* Use standard CHS mapping rules */
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
++	.suspend		= ata_scsi_device_suspend,
++	.resume			= ata_scsi_device_resume,
++#endif
+ };
+ 
+ static const struct ata_port_operations jmicron_ops = {
+@@ -218,6 +222,7 @@ static int jmicron_init_one (struct pci_dev *pdev, const struct pci_device_id *i
+ 	return ata_pci_init_one(pdev, port_info, 2);
+ }
+ 
++#ifdef CONFIG_PM
+ static int jmicron_reinit_one(struct pci_dev *pdev)
+ {
+ 	u32 reg;
+@@ -238,6 +243,7 @@ static int jmicron_reinit_one(struct pci_dev *pdev)
+ 	}
+ 	return ata_pci_device_resume(pdev);
+ }
++#endif
+ 
+ static const struct pci_device_id jmicron_pci_tbl[] = {
+ 	{ PCI_VDEVICE(JMICRON, PCI_DEVICE_ID_JMICRON_JMB361), 361},
+@@ -254,8 +260,10 @@ static struct pci_driver jmicron_pci_driver = {
+ 	.id_table		= jmicron_pci_tbl,
+ 	.probe			= jmicron_init_one,
+ 	.remove			= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_pci_device_suspend,
+ 	.resume			= jmicron_reinit_one,
++#endif
+ };
+ 
+ static int __init jmicron_init(void)
+diff --git a/drivers/ata/pata_marvell.c b/drivers/ata/pata_marvell.c
+index 1c810ea..3d76e06 100644
+--- a/drivers/ata/pata_marvell.c
++++ b/drivers/ata/pata_marvell.c
+@@ -103,8 +103,10 @@ static struct scsi_host_template marvell_sht = {
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	/* Use standard CHS mapping rules */
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static const struct ata_port_operations marvell_ops = {
+@@ -199,8 +201,10 @@ static struct pci_driver marvell_pci_driver = {
+ 	.id_table		= marvell_pci_tbl,
+ 	.probe			= marvell_init_one,
+ 	.remove			= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_pci_device_suspend,
+ 	.resume			= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init marvell_init(void)
+diff --git a/drivers/ata/pata_mpiix.c b/drivers/ata/pata_mpiix.c
+index 4ccca93..c707320 100644
+--- a/drivers/ata/pata_mpiix.c
++++ b/drivers/ata/pata_mpiix.c
+@@ -167,8 +167,10 @@ static struct scsi_host_template mpiix_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations mpiix_port_ops = {
+@@ -287,8 +289,10 @@ static struct pci_driver mpiix_pci_driver = {
+ 	.id_table	= mpiix,
+ 	.probe 		= mpiix_init_one,
+ 	.remove		= mpiix_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init mpiix_init(void)
+diff --git a/drivers/ata/pata_netcell.c b/drivers/ata/pata_netcell.c
+index cf7fe03..d0e7ac3 100644
+--- a/drivers/ata/pata_netcell.c
++++ b/drivers/ata/pata_netcell.c
+@@ -63,8 +63,10 @@ static struct scsi_host_template netcell_sht = {
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	/* Use standard CHS mapping rules */
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static const struct ata_port_operations netcell_ops = {
+@@ -153,8 +155,10 @@ static struct pci_driver netcell_pci_driver = {
+ 	.id_table		= netcell_pci_tbl,
+ 	.probe			= netcell_init_one,
+ 	.remove			= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_pci_device_suspend,
+ 	.resume			= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init netcell_init(void)
+diff --git a/drivers/ata/pata_ns87410.c b/drivers/ata/pata_ns87410.c
+index c3032eb..a4d4eb6 100644
+--- a/drivers/ata/pata_ns87410.c
++++ b/drivers/ata/pata_ns87410.c
+@@ -157,8 +157,10 @@ static struct scsi_host_template ns87410_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations ns87410_port_ops = {
+@@ -212,8 +214,10 @@ static struct pci_driver ns87410_pci_driver = {
+ 	.id_table	= ns87410,
+ 	.probe 		= ns87410_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init ns87410_init(void)
+diff --git a/drivers/ata/pata_oldpiix.c b/drivers/ata/pata_oldpiix.c
+index 10ac3cc..ad84c51 100644
+--- a/drivers/ata/pata_oldpiix.c
++++ b/drivers/ata/pata_oldpiix.c
+@@ -232,8 +232,10 @@ static struct scsi_host_template oldpiix_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static const struct ata_port_operations oldpiix_pata_ops = {
+@@ -315,8 +317,10 @@ static struct pci_driver oldpiix_pci_driver = {
+ 	.id_table		= oldpiix_pci_tbl,
+ 	.probe			= oldpiix_init_one,
+ 	.remove			= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_pci_device_suspend,
+ 	.resume			= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init oldpiix_init(void)
+diff --git a/drivers/ata/pata_opti.c b/drivers/ata/pata_opti.c
+index c2988b0..0a023b8 100644
+--- a/drivers/ata/pata_opti.c
++++ b/drivers/ata/pata_opti.c
+@@ -179,8 +179,10 @@ static struct scsi_host_template opti_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations opti_port_ops = {
+@@ -244,8 +246,10 @@ static struct pci_driver opti_pci_driver = {
+ 	.id_table	= opti,
+ 	.probe 		= opti_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init opti_init(void)
+diff --git a/drivers/ata/pata_optidma.c b/drivers/ata/pata_optidma.c
+index 80d111c..6797ffa 100644
+--- a/drivers/ata/pata_optidma.c
++++ b/drivers/ata/pata_optidma.c
+@@ -360,8 +360,10 @@ static struct scsi_host_template optidma_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations optidma_port_ops = {
+@@ -524,8 +526,10 @@ static struct pci_driver optidma_pci_driver = {
+ 	.id_table	= optidma,
+ 	.probe 		= optidma_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init optidma_init(void)
+diff --git a/drivers/ata/pata_pdc202xx_old.c b/drivers/ata/pata_pdc202xx_old.c
+index ad691b9..f18b67e 100644
+--- a/drivers/ata/pata_pdc202xx_old.c
++++ b/drivers/ata/pata_pdc202xx_old.c
+@@ -270,8 +270,10 @@ static struct scsi_host_template pdc202xx_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations pdc2024x_port_ops = {
+@@ -402,8 +404,10 @@ static struct pci_driver pdc202xx_pci_driver = {
+ 	.id_table	= pdc202xx,
+ 	.probe 		= pdc202xx_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init pdc202xx_init(void)
+diff --git a/drivers/ata/pata_radisys.c b/drivers/ata/pata_radisys.c
+index 065541d..45c5d50 100644
+--- a/drivers/ata/pata_radisys.c
++++ b/drivers/ata/pata_radisys.c
+@@ -228,8 +228,10 @@ static struct scsi_host_template radisys_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static const struct ata_port_operations radisys_pata_ops = {
+@@ -312,8 +314,10 @@ static struct pci_driver radisys_pci_driver = {
+ 	.id_table		= radisys_pci_tbl,
+ 	.probe			= radisys_init_one,
+ 	.remove			= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_pci_device_suspend,
+ 	.resume			= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init radisys_init(void)
+diff --git a/drivers/ata/pata_rz1000.c b/drivers/ata/pata_rz1000.c
+index cec0729..8fcddfb 100644
+--- a/drivers/ata/pata_rz1000.c
++++ b/drivers/ata/pata_rz1000.c
+@@ -93,8 +93,10 @@ static struct scsi_host_template rz1000_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations rz1000_port_ops = {
+@@ -177,6 +179,7 @@ static int rz1000_init_one (struct pci_dev *pdev, const struct pci_device_id *en
+ 	return -ENODEV;
+ }
+ 
++#ifdef CONFIG_PM
+ static int rz1000_reinit_one(struct pci_dev *pdev)
+ {
+ 	/* If this fails on resume (which is a "cant happen" case), we
+@@ -185,6 +188,7 @@ static int rz1000_reinit_one(struct pci_dev *pdev)
+ 		panic("rz1000 fifo");
+ 	return ata_pci_device_resume(pdev);
+ }
++#endif
+ 
+ static const struct pci_device_id pata_rz1000[] = {
+ 	{ PCI_VDEVICE(PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000), },
+@@ -198,8 +202,10 @@ static struct pci_driver rz1000_pci_driver = {
+ 	.id_table	= pata_rz1000,
+ 	.probe 		= rz1000_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= rz1000_reinit_one,
++#endif
+ };
+ 
+ static int __init rz1000_init(void)
+diff --git a/drivers/ata/pata_sc1200.c b/drivers/ata/pata_sc1200.c
+index a3b35bc..19328a8 100644
+--- a/drivers/ata/pata_sc1200.c
++++ b/drivers/ata/pata_sc1200.c
+@@ -194,8 +194,10 @@ static struct scsi_host_template sc1200_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations sc1200_port_ops = {
+@@ -266,8 +268,10 @@ static struct pci_driver sc1200_pci_driver = {
+ 	.id_table	= sc1200,
+ 	.probe 		= sc1200_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init sc1200_init(void)
+diff --git a/drivers/ata/pata_serverworks.c b/drivers/ata/pata_serverworks.c
+index f02b6a3..95f5202 100644
+--- a/drivers/ata/pata_serverworks.c
++++ b/drivers/ata/pata_serverworks.c
+@@ -326,8 +326,10 @@ static struct scsi_host_template serverworks_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations serverworks_osb4_port_ops = {
+@@ -555,6 +557,7 @@ static int serverworks_init_one(struct pci_dev *pdev, const struct pci_device_id
+ 	return ata_pci_init_one(pdev, port_info, ports);
+ }
+ 
++#ifdef CONFIG_PM
+ static int serverworks_reinit_one(struct pci_dev *pdev)
+ {
+ 	/* Force master latency timer to 64 PCI clocks */
+@@ -578,6 +581,7 @@ static int serverworks_reinit_one(struct pci_dev *pdev)
+ 	}
+ 	return ata_pci_device_resume(pdev);
+ }
++#endif
+ 
+ static const struct pci_device_id serverworks[] = {
+ 	{ PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE), 0},
+@@ -594,8 +598,10 @@ static struct pci_driver serverworks_pci_driver = {
+ 	.id_table	= serverworks,
+ 	.probe 		= serverworks_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= serverworks_reinit_one,
++#endif
+ };
+ 
+ static int __init serverworks_init(void)
+diff --git a/drivers/ata/pata_sil680.c b/drivers/ata/pata_sil680.c
+index e8dfd8f..653fe34 100644
+--- a/drivers/ata/pata_sil680.c
++++ b/drivers/ata/pata_sil680.c
+@@ -226,6 +226,10 @@ static struct scsi_host_template sil680_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
++	.suspend		= ata_scsi_device_suspend,
++	.resume			= ata_scsi_device_resume,
++#endif
+ };
+ 
+ static struct ata_port_operations sil680_port_ops = {
+@@ -367,11 +371,13 @@ static int sil680_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
+ 	return ata_pci_init_one(pdev, port_info, 2);
+ }
+ 
++#ifdef CONFIG_PM
+ static int sil680_reinit_one(struct pci_dev *pdev)
+ {
+ 	sil680_init_chip(pdev);
+ 	return ata_pci_device_resume(pdev);
+ }
++#endif
+ 
+ static const struct pci_device_id sil680[] = {
+ 	{ PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_680), },
+@@ -384,8 +390,10 @@ static struct pci_driver sil680_pci_driver = {
+ 	.id_table	= sil680,
+ 	.probe 		= sil680_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= sil680_reinit_one,
++#endif
+ };
+ 
+ static int __init sil680_init(void)
+diff --git a/drivers/ata/pata_sis.c b/drivers/ata/pata_sis.c
+index 916cedb..e1fdea6 100644
+--- a/drivers/ata/pata_sis.c
++++ b/drivers/ata/pata_sis.c
+@@ -546,8 +546,10 @@ static struct scsi_host_template sis_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static const struct ata_port_operations sis_133_ops = {
+@@ -1001,8 +1003,10 @@ static struct pci_driver sis_pci_driver = {
+ 	.id_table		= sis_pci_tbl,
+ 	.probe			= sis_init_one,
+ 	.remove			= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_pci_device_suspend,
+ 	.resume			= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init sis_init(void)
+diff --git a/drivers/ata/pata_triflex.c b/drivers/ata/pata_triflex.c
+index a142971..02c84a1 100644
+--- a/drivers/ata/pata_triflex.c
++++ b/drivers/ata/pata_triflex.c
+@@ -193,8 +193,10 @@ static struct scsi_host_template triflex_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations triflex_port_ops = {
+@@ -260,8 +262,10 @@ static struct pci_driver triflex_pci_driver = {
+ 	.id_table	= triflex,
+ 	.probe 		= triflex_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= ata_pci_device_resume,
++#endif
+ };
+ 
+ static int __init triflex_init(void)
+diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c
+index f0b6c3b..ee3b36a 100644
+--- a/drivers/ata/pata_via.c
++++ b/drivers/ata/pata_via.c
+@@ -305,8 +305,10 @@ static struct scsi_host_template via_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.resume			= ata_scsi_device_resume,
+ 	.suspend		= ata_scsi_device_suspend,
++#endif
+ };
+ 
+ static struct ata_port_operations via_port_ops = {
+@@ -560,6 +562,7 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
+ 	return ata_pci_init_one(pdev, port_info, 2);
+ }
+ 
++#ifdef CONFIG_PM
+ /**
+  *	via_reinit_one		-	reinit after resume
+  *	@pdev; PCI device
+@@ -592,6 +595,7 @@ static int via_reinit_one(struct pci_dev *pdev)
+ 	}
+ 	return ata_pci_device_resume(pdev);	
+ }
++#endif
+ 
+ static const struct pci_device_id via[] = {
+ 	{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C576_1), },
+@@ -607,8 +611,10 @@ static struct pci_driver via_pci_driver = {
+ 	.id_table	= via,
+ 	.probe 		= via_init_one,
+ 	.remove		= ata_pci_remove_one,
++#ifdef CONFIG_PM
+ 	.suspend	= ata_pci_device_suspend,
+ 	.resume		= via_reinit_one,
++#endif
+ };
+ 
+ static int __init via_init(void)
+diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c
+index 7808d03..a12d638 100644
+--- a/drivers/ata/sata_sil.c
++++ b/drivers/ata/sata_sil.c
+@@ -181,8 +181,10 @@ static struct scsi_host_template sil_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_scsi_device_suspend,
+ 	.resume			= ata_scsi_device_resume,
++#endif
+ };
+ 
+ static const struct ata_port_operations sil_ops = {
+@@ -383,9 +385,15 @@ static void sil_host_intr(struct ata_port *ap, u32 bmdma2)
+ 		goto freeze;
+ 	}
+ 
+-	if (unlikely(!qc || qc->tf.ctl & ATA_NIEN))
++	if (unlikely(!qc))
+ 		goto freeze;
+ 
++	if (unlikely(qc->tf.flags & ATA_TFLAG_POLLING)) {
++		/* this sometimes happens, just clear IRQ */
++		ata_chk_status(ap);
++		return;
++	}
++
+ 	/* Check whether we are expecting interrupt in this state */
+ 	switch (ap->hsm_task_state) {
+ 	case HSM_ST_FIRST:
+diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c
+index 5aa288d..c159bae 100644
+--- a/drivers/ata/sata_sil24.c
++++ b/drivers/ata/sata_sil24.c
+@@ -386,8 +386,10 @@ static struct scsi_host_template sil24_sht = {
+ 	.slave_configure	= ata_scsi_slave_config,
+ 	.slave_destroy		= ata_scsi_slave_destroy,
+ 	.bios_param		= ata_std_bios_param,
++#ifdef CONFIG_PM
+ 	.suspend		= ata_scsi_device_suspend,
+ 	.resume			= ata_scsi_device_resume,
++#endif
+ };
+ 
+ static const struct ata_port_operations sil24_ops = {
+diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
+index 6246219..dd38c30 100644
+--- a/drivers/block/pktcdvd.c
++++ b/drivers/block/pktcdvd.c
+@@ -777,7 +777,7 @@ static int pkt_generic_packet(struct pktcdvd_device *pd, struct packet_command *
+ 			goto out;
+ 	}
+ 
+-	rq->cmd_len = COMMAND_SIZE(rq->cmd[0]);
++	rq->cmd_len = COMMAND_SIZE(cgc->cmd[0]);
+ 	memcpy(rq->cmd, cgc->cmd, CDROM_PACKET_SIZE);
+ 	if (sizeof(rq->cmd) > CDROM_PACKET_SIZE)
+ 		memset(rq->cmd + CDROM_PACKET_SIZE, 0, sizeof(rq->cmd) - CDROM_PACKET_SIZE);
+diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
+index a3011de..84787ce 100644
+--- a/drivers/char/agp/intel-agp.c
++++ b/drivers/char/agp/intel-agp.c
+@@ -117,13 +117,15 @@ static int intel_i810_configure(void)
+ 
+ 	current_size = A_SIZE_FIX(agp_bridge->current_size);
+ 
+-	pci_read_config_dword(intel_i810_private.i810_dev, I810_MMADDR, &temp);
+-	temp &= 0xfff80000;
+-
+-	intel_i810_private.registers = ioremap(temp, 128 * 4096);
+ 	if (!intel_i810_private.registers) {
+-		printk(KERN_ERR PFX "Unable to remap memory.\n");
+-		return -ENOMEM;
++		pci_read_config_dword(intel_i810_private.i810_dev, I810_MMADDR, &temp);
++		temp &= 0xfff80000;
++
++		intel_i810_private.registers = ioremap(temp, 128 * 4096);
++		if (!intel_i810_private.registers) {
++			printk(KERN_ERR PFX "Unable to remap memory.\n");
++			return -ENOMEM;
++		}
+ 	}
+ 
+ 	if ((readl(intel_i810_private.registers+I810_DRAM_CTL)
+diff --git a/drivers/char/pcmcia/cm4040_cs.c b/drivers/char/pcmcia/cm4040_cs.c
+index 9b1ff7e..3a6d05b 100644
+--- a/drivers/char/pcmcia/cm4040_cs.c
++++ b/drivers/char/pcmcia/cm4040_cs.c
+@@ -273,6 +273,7 @@ static ssize_t cm4040_read(struct file *filp, char __user *buf,
+ 	DEBUGP(6, dev, "BytesToRead=%lu\n", bytes_to_read);
+ 
+ 	min_bytes_to_read = min(count, bytes_to_read + 5);
++	min_bytes_to_read = min_t(size_t, min_bytes_to_read, READ_WRITE_BUFFER_SIZE);
+ 
+ 	DEBUGP(6, dev, "Min=%lu\n", min_bytes_to_read);
+ 
+@@ -340,7 +341,7 @@ static ssize_t cm4040_write(struct file *filp, const char __user *buf,
+ 		return 0;
+ 	}
+ 
+-	if (count < 5) {
++	if ((count < 5) || (count > READ_WRITE_BUFFER_SIZE)) {
+ 		DEBUGP(2, dev, "<- cm4040_write buffersize=%Zd < 5\n", count);
+ 		return -EIO;
+ 	}
+diff --git a/drivers/char/specialix.c b/drivers/char/specialix.c
+index 20946f5..0b3044d 100644
+--- a/drivers/char/specialix.c
++++ b/drivers/char/specialix.c
+@@ -459,7 +459,7 @@ void missed_irq (unsigned long data)
+ 	if (irq) {
+ 		printk (KERN_INFO "Missed interrupt... Calling int from timer. \n");
+ 		sx_interrupt (((struct specialix_board *)data)->irq,
+-		              (void*)data, NULL);
++				(void*)data);
+ 	}
+ 	missed_irq_timer.expires = jiffies + sx_poll;
+ 	add_timer (&missed_irq_timer);
+diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
+index 47a6eac..2370908 100644
+--- a/drivers/char/tty_io.c
++++ b/drivers/char/tty_io.c
+@@ -1891,6 +1891,20 @@ static int init_dev(struct tty_driver *driver, int idx,
+ 	/* check whether we're reopening an existing tty */
+ 	if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
+ 		tty = devpts_get_tty(idx);
++		/*
++		 * If we don't have a tty here on a slave open, it's because
++		 * the master already started the close process and there's
++		 * no relation between devpts file and tty anymore.
++		 */
++		if (!tty && driver->subtype == PTY_TYPE_SLAVE) {
++			retval = -EIO;
++			goto end_init;
++		}
++		/*
++		 * It's safe from now on because init_dev() is called with
++		 * tty_mutex held and release_dev() won't change tty->count
++		 * or tty->flags without having to grab tty_mutex
++		 */
+ 		if (tty && driver->subtype == PTY_TYPE_MASTER)
+ 			tty = tty->link;
+ 	} else {
+diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
+index 49f18f5..5cb2500 100644
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -670,7 +670,6 @@ struct hid_device *hid_parse_report(__u8 *start, unsigned size)
+ 
+ 		if (item.format != HID_ITEM_FORMAT_SHORT) {
+ 			dbg("unexpected long global item");
+-			kfree(device->collection);
+ 			hid_free_device(device);
+ 			kfree(parser);
+ 			return NULL;
+@@ -679,7 +678,6 @@ struct hid_device *hid_parse_report(__u8 *start, unsigned size)
+ 		if (dispatch_type[item.type](parser, &item)) {
+ 			dbg("item %u %u %u %u parsing failed\n",
+ 				item.format, (unsigned)item.size, (unsigned)item.type, (unsigned)item.tag);
+-			kfree(device->collection);
+ 			hid_free_device(device);
+ 			kfree(parser);
+ 			return NULL;
+@@ -688,14 +686,12 @@ struct hid_device *hid_parse_report(__u8 *start, unsigned size)
+ 		if (start == end) {
+ 			if (parser->collection_stack_ptr) {
+ 				dbg("unbalanced collection at end of report description");
+-				kfree(device->collection);
+ 				hid_free_device(device);
+ 				kfree(parser);
+ 				return NULL;
+ 			}
+ 			if (parser->local.delimiter_depth) {
+ 				dbg("unbalanced delimiter at end of report description");
+-				kfree(device->collection);
+ 				hid_free_device(device);
+ 				kfree(parser);
+ 				return NULL;
+@@ -706,7 +702,6 @@ struct hid_device *hid_parse_report(__u8 *start, unsigned size)
+ 	}
+ 
+ 	dbg("item fetching failed at offset %d\n", (int)(end - start));
+-	kfree(device->collection);
+ 	hid_free_device(device);
+ 	kfree(parser);
+ 	return NULL;
+diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
+index badde63..6558055 100644
+--- a/drivers/ide/ide-iops.c
++++ b/drivers/ide/ide-iops.c
+@@ -607,6 +607,8 @@ u8 eighty_ninty_three (ide_drive_t *drive)
+ 	if(!(drive->id->hw_config & 0x4000))
+ 		return 0;
+ #endif /* CONFIG_IDEDMA_IVB */
++	if (!(drive->id->hw_config & 0x2000))
++		return 0;
+ 	return 1;
+ }
+ 
+diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c
+index 61307ca..e2e0771 100644
+--- a/drivers/ieee1394/nodemgr.c
++++ b/drivers/ieee1394/nodemgr.c
+@@ -274,7 +274,6 @@ static struct device_driver nodemgr_mid_layer_driver = {
+ struct device nodemgr_dev_template_host = {
+ 	.bus		= &ieee1394_bus_type,
+ 	.release	= nodemgr_release_host,
+-	.driver		= &nodemgr_mid_layer_driver,
+ };
+ 
+ 
+@@ -1889,22 +1888,31 @@ int init_ieee1394_nodemgr(void)
+ 
+ 	error = class_register(&nodemgr_ne_class);
+ 	if (error)
+-		return error;
+-
++		goto fail_ne;
+ 	error = class_register(&nodemgr_ud_class);
+-	if (error) {
+-		class_unregister(&nodemgr_ne_class);
+-		return error;
+-	}
++	if (error)
++		goto fail_ud;
+ 	error = driver_register(&nodemgr_mid_layer_driver);
++	if (error)
++		goto fail_ml;
++	/* This driver is not used if nodemgr is off (disable_nodemgr=1). */
++	nodemgr_dev_template_host.driver = &nodemgr_mid_layer_driver;
++
+ 	hpsb_register_highlevel(&nodemgr_highlevel);
+ 	return 0;
++
++fail_ml:
++	class_unregister(&nodemgr_ud_class);
++fail_ud:
++	class_unregister(&nodemgr_ne_class);
++fail_ne:
++	return error;
+ }
+ 
+ void cleanup_ieee1394_nodemgr(void)
+ {
+ 	hpsb_unregister_highlevel(&nodemgr_highlevel);
+-
++	driver_unregister(&nodemgr_mid_layer_driver);
+ 	class_unregister(&nodemgr_ud_class);
+ 	class_unregister(&nodemgr_ne_class);
+ }
+diff --git a/drivers/ieee1394/video1394.c b/drivers/ieee1394/video1394.c
+index 598b19f..f4d1ec0 100644
+--- a/drivers/ieee1394/video1394.c
++++ b/drivers/ieee1394/video1394.c
+@@ -489,6 +489,9 @@ static void wakeup_dma_ir_ctx(unsigned long l)
+ 			reset_ir_status(d, i);
+ 			d->buffer_status[d->buffer_prg_assignment[i]] = VIDEO1394_BUFFER_READY;
+ 			do_gettimeofday(&d->buffer_time[d->buffer_prg_assignment[i]]);
++			dma_region_sync_for_cpu(&d->dma,
++				d->buffer_prg_assignment[i] * d->buf_size,
++				d->buf_size);
+ 		}
+ 	}
+ 
+@@ -1096,6 +1099,8 @@ static long video1394_ioctl(struct file *file,
+ 			DBGMSG(ohci->host->id, "Starting iso transmit DMA ctx=%d",
+ 			       d->ctx);
+ 			put_timestamp(ohci, d, d->last_buffer);
++			dma_region_sync_for_device(&d->dma,
++				v.buffer * d->buf_size, d->buf_size);
+ 
+ 			/* Tell the controller where the first program is */
+ 			reg_write(ohci, d->cmdPtr,
+@@ -1111,6 +1116,9 @@ static long video1394_ioctl(struct file *file,
+ 				      "Waking up iso transmit dma ctx=%d",
+ 				      d->ctx);
+ 				put_timestamp(ohci, d, d->last_buffer);
++				dma_region_sync_for_device(&d->dma,
++					v.buffer * d->buf_size, d->buf_size);
++
+ 				reg_write(ohci, d->ctrlSet, 0x1000);
+ 			}
+ 		}
+diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
+index a0e4a03..9a6e4b6 100644
+--- a/drivers/input/mouse/psmouse-base.c
++++ b/drivers/input/mouse/psmouse-base.c
+@@ -987,8 +987,36 @@ static void psmouse_resync(struct work_struct *work)
+ static void psmouse_cleanup(struct serio *serio)
+ {
+ 	struct psmouse *psmouse = serio_get_drvdata(serio);
++	struct psmouse *parent = NULL;
++
++	mutex_lock(&psmouse_mutex);
++
++	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
++		parent = serio_get_drvdata(serio->parent);
++		psmouse_deactivate(parent);
++	}
++
++	psmouse_deactivate(psmouse);
++
++	if (psmouse->cleanup)
++		psmouse->cleanup(psmouse);
+ 
+ 	psmouse_reset(psmouse);
++
++/*
++ * Some boxes, such as HP nx7400, get terribly confused if mouse
++ * is not fully enabled before suspending/shutting down.
++ */
++	ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE);
++
++	if (parent) {
++		if (parent->pt_deactivate)
++			parent->pt_deactivate(parent);
++
++		psmouse_activate(parent);
++	}
++
++	mutex_unlock(&psmouse_mutex);
+ }
+ 
+ /*
+diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
+index 1b74cae..cf1de95 100644
+--- a/drivers/input/mouse/psmouse.h
++++ b/drivers/input/mouse/psmouse.h
+@@ -68,6 +68,7 @@ struct psmouse {
+ 
+ 	int (*reconnect)(struct psmouse *psmouse);
+ 	void (*disconnect)(struct psmouse *psmouse);
++	void (*cleanup)(struct psmouse *psmouse);
+ 	int (*poll)(struct psmouse *psmouse);
+ 
+ 	void (*pt_activate)(struct psmouse *psmouse);
+diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
+index 49ac696..f0f9413 100644
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -652,6 +652,7 @@ int synaptics_init(struct psmouse *psmouse)
+ 	psmouse->set_rate = synaptics_set_rate;
+ 	psmouse->disconnect = synaptics_disconnect;
+ 	psmouse->reconnect = synaptics_reconnect;
++	psmouse->cleanup = synaptics_reset;
+ 	psmouse->pktsize = 6;
+ 	/* Synaptics can usually stay in sync without extra help */
+ 	psmouse->resync_time = 0;
+diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h
+index 2db1ca4..4ccb343 100644
+--- a/drivers/kvm/kvm.h
++++ b/drivers/kvm/kvm.h
+@@ -558,7 +558,7 @@ static inline void load_gs(u16 sel)
+ #ifndef load_ldt
+ static inline void load_ldt(u16 sel)
+ {
+-	asm ("lldt %0" : : "g"(sel));
++	asm ("lldt %0" : : "rm"(sel));
+ }
+ #endif
+ 
+diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig
+index a9e747c..1a86387 100644
+--- a/drivers/macintosh/Kconfig
++++ b/drivers/macintosh/Kconfig
+@@ -1,6 +1,6 @@
+ 
+ menu "Macintosh device drivers"
+-	depends on PPC || MAC
++	depends on PPC || MAC || X86
+ 
+ config ADB
+ 	bool "Apple Desktop Bus (ADB) support"
+diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
+index 1110816..059704f 100644
+--- a/drivers/md/bitmap.c
++++ b/drivers/md/bitmap.c
+@@ -1160,6 +1160,22 @@ int bitmap_startwrite(struct bitmap *bitmap, sector_t offset, unsigned long sect
+ 			return 0;
+ 		}
+ 
++		if (unlikely((*bmc & COUNTER_MAX) == COUNTER_MAX)) {
++			DEFINE_WAIT(__wait);
++			/* note that it is safe to do the prepare_to_wait
++			 * after the test as long as we do it before dropping
++			 * the spinlock.
++			 */
++			prepare_to_wait(&bitmap->overflow_wait, &__wait,
++					TASK_UNINTERRUPTIBLE);
++			spin_unlock_irq(&bitmap->lock);
++			bitmap->mddev->queue
++				->unplug_fn(bitmap->mddev->queue);
++			schedule();
++			finish_wait(&bitmap->overflow_wait, &__wait);
++			continue;
++		}
++
+ 		switch(*bmc) {
+ 		case 0:
+ 			bitmap_file_set_bit(bitmap, offset);
+@@ -1169,7 +1185,7 @@ int bitmap_startwrite(struct bitmap *bitmap, sector_t offset, unsigned long sect
+ 		case 1:
+ 			*bmc = 2;
+ 		}
+-		BUG_ON((*bmc & COUNTER_MAX) == COUNTER_MAX);
++
+ 		(*bmc)++;
+ 
+ 		spin_unlock_irq(&bitmap->lock);
+@@ -1207,6 +1223,9 @@ void bitmap_endwrite(struct bitmap *bitmap, sector_t offset, unsigned long secto
+ 		if (!success && ! (*bmc & NEEDED_MASK))
+ 			*bmc |= NEEDED_MASK;
+ 
++		if ((*bmc & COUNTER_MAX) == COUNTER_MAX)
++			wake_up(&bitmap->overflow_wait);
++
+ 		(*bmc)--;
+ 		if (*bmc <= 2) {
+ 			set_page_attr(bitmap,
+@@ -1431,6 +1450,7 @@ int bitmap_create(mddev_t *mddev)
+ 	spin_lock_init(&bitmap->lock);
+ 	atomic_set(&bitmap->pending_writes, 0);
+ 	init_waitqueue_head(&bitmap->write_wait);
++	init_waitqueue_head(&bitmap->overflow_wait);
+ 
+ 	bitmap->mddev = mddev;
+ 
+diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
+index a9401c0..82249a6 100644
+--- a/drivers/md/raid10.c
++++ b/drivers/md/raid10.c
+@@ -429,7 +429,7 @@ static sector_t raid10_find_virt(conf_t *conf, sector_t sector, int dev)
+ 		if (dev < 0)
+ 			dev += conf->raid_disks;
+ 	} else {
+-		while (sector > conf->stride) {
++		while (sector >= conf->stride) {
+ 			sector -= conf->stride;
+ 			if (dev < conf->near_copies)
+ 				dev += conf->raid_disks - conf->near_copies;
+@@ -1801,6 +1801,7 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i
+ 						for (k=0; k<conf->copies; k++)
+ 							if (r10_bio->devs[k].devnum == i)
+ 								break;
++						BUG_ON(k == conf->copies);
+ 						bio = r10_bio->devs[1].bio;
+ 						bio->bi_next = biolist;
+ 						biolist = bio;
+@@ -2021,19 +2022,30 @@ static int run(mddev_t *mddev)
+ 	if (!conf->tmppage)
+ 		goto out_free_conf;
+ 
++	conf->mddev = mddev;
++	conf->raid_disks = mddev->raid_disks;
+ 	conf->near_copies = nc;
+ 	conf->far_copies = fc;
+ 	conf->copies = nc*fc;
+ 	conf->far_offset = fo;
+ 	conf->chunk_mask = (sector_t)(mddev->chunk_size>>9)-1;
+ 	conf->chunk_shift = ffz(~mddev->chunk_size) - 9;
++	size = mddev->size >> (conf->chunk_shift-1);
++	sector_div(size, fc);
++	size = size * conf->raid_disks;
++	sector_div(size, nc);
++	/* 'size' is now the number of chunks in the array */
++	/* calculate "used chunks per device" in 'stride' */
++	stride = size * conf->copies;
++	sector_div(stride, conf->raid_disks);
++	mddev->size = stride  << (conf->chunk_shift-1);
++
+ 	if (fo)
+-		conf->stride = 1 << conf->chunk_shift;
+-	else {
+-		stride = mddev->size >> (conf->chunk_shift-1);
++		stride = 1;
++	else
+ 		sector_div(stride, fc);
+-		conf->stride = stride << conf->chunk_shift;
+-	}
++	conf->stride = stride << conf->chunk_shift;
++
+ 	conf->r10bio_pool = mempool_create(NR_RAID10_BIOS, r10bio_pool_alloc,
+ 						r10bio_pool_free, conf);
+ 	if (!conf->r10bio_pool) {
+@@ -2063,8 +2075,6 @@ static int run(mddev_t *mddev)
+ 
+ 		disk->head_position = 0;
+ 	}
+-	conf->raid_disks = mddev->raid_disks;
+-	conf->mddev = mddev;
+ 	spin_lock_init(&conf->device_lock);
+ 	INIT_LIST_HEAD(&conf->retry_list);
+ 
+@@ -2106,16 +2116,8 @@ static int run(mddev_t *mddev)
+ 	/*
+ 	 * Ok, everything is just fine now
+ 	 */
+-	if (conf->far_offset) {
+-		size = mddev->size >> (conf->chunk_shift-1);
+-		size *= conf->raid_disks;
+-		size <<= conf->chunk_shift;
+-		sector_div(size, conf->far_copies);
+-	} else
+-		size = conf->stride * conf->raid_disks;
+-	sector_div(size, conf->near_copies);
+-	mddev->array_size = size/2;
+-	mddev->resync_max_sectors = size;
++	mddev->array_size = size << (conf->chunk_shift-1);
++	mddev->resync_max_sectors = size << conf->chunk_shift;
+ 
+ 	mddev->queue->unplug_fn = raid10_unplug;
+ 	mddev->queue->issue_flush_fn = raid10_issue_flush;
+diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
+index 467c169..11c3d7b 100644
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -2620,7 +2620,7 @@ static struct bio *remove_bio_from_retry(raid5_conf_t *conf)
+ 	}
+ 	bi = conf->retry_read_aligned_list;
+ 	if(bi) {
+-		conf->retry_read_aligned = bi->bi_next;
++		conf->retry_read_aligned_list = bi->bi_next;
+ 		bi->bi_next = NULL;
+ 		bi->bi_phys_segments = 1; /* biased count of active stripes */
+ 		bi->bi_hw_segments = 0; /* count of processed stripes */
+@@ -2669,6 +2669,27 @@ static int raid5_align_endio(struct bio *bi, unsigned int bytes, int error)
+ 	return 0;
+ }
+ 
++static int bio_fits_rdev(struct bio *bi)
++{
++	request_queue_t *q = bdev_get_queue(bi->bi_bdev);
++
++	if ((bi->bi_size>>9) > q->max_sectors)
++		return 0;
++	blk_recount_segments(q, bi);
++	if (bi->bi_phys_segments > q->max_phys_segments ||
++	    bi->bi_hw_segments > q->max_hw_segments)
++		return 0;
++
++	if (q->merge_bvec_fn)
++		/* it's too hard to apply the merge_bvec_fn at this stage,
++		 * just just give up
++		 */
++		return 0;
++
++	return 1;
++}
++
++
+ static int chunk_aligned_read(request_queue_t *q, struct bio * raid_bio)
+ {
+ 	mddev_t *mddev = q->queuedata;
+@@ -2715,6 +2736,13 @@ static int chunk_aligned_read(request_queue_t *q, struct bio * raid_bio)
+ 		align_bi->bi_flags &= ~(1 << BIO_SEG_VALID);
+ 		align_bi->bi_sector += rdev->data_offset;
+ 
++		if (!bio_fits_rdev(align_bi)) {
++			/* too big in some way */
++			bio_put(align_bi);
++			rdev_dec_pending(rdev, mddev);
++			return 0;
++		}
++
+ 		spin_lock_irq(&conf->device_lock);
+ 		wait_event_lock_irq(conf->wait_for_stripe,
+ 				    conf->quiesce == 0,
+@@ -3107,7 +3135,9 @@ static int  retry_aligned_read(raid5_conf_t *conf, struct bio *raid_bio)
+ 	last_sector = raid_bio->bi_sector + (raid_bio->bi_size>>9);
+ 
+ 	for (; logical_sector < last_sector;
+-	     logical_sector += STRIPE_SECTORS, scnt++) {
++	     logical_sector += STRIPE_SECTORS,
++		     sector += STRIPE_SECTORS,
++		     scnt++) {
+ 
+ 		if (scnt < raid_bio->bi_hw_segments)
+ 			/* already done this stripe */
+@@ -3123,7 +3153,13 @@ static int  retry_aligned_read(raid5_conf_t *conf, struct bio *raid_bio)
+ 		}
+ 
+ 		set_bit(R5_ReadError, &sh->dev[dd_idx].flags);
+-		add_stripe_bio(sh, raid_bio, dd_idx, 0);
++		if (!add_stripe_bio(sh, raid_bio, dd_idx, 0)) {
++			release_stripe(sh);
++			raid_bio->bi_hw_segments = scnt;
++			conf->retry_read_aligned = raid_bio;
++			return handled;
++		}
++
+ 		handle_stripe(sh, NULL);
+ 		release_stripe(sh);
+ 		handled++;
+diff --git a/drivers/media/dvb/dvb-core/dvbdev.c b/drivers/media/dvb/dvb-core/dvbdev.c
+index 40774fe..af35f30 100644
+--- a/drivers/media/dvb/dvb-core/dvbdev.c
++++ b/drivers/media/dvb/dvb-core/dvbdev.c
+@@ -200,6 +200,8 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
+ 			const struct dvb_device *template, void *priv, int type)
+ {
+ 	struct dvb_device *dvbdev;
++	struct file_operations *dvbdevfops;
++
+ 	int id;
+ 
+ 	if (mutex_lock_interruptible(&dvbdev_register_lock))
+@@ -219,12 +221,22 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
+ 		return -ENOMEM;
+ 	}
+ 
++	dvbdevfops = kzalloc(sizeof(struct file_operations), GFP_KERNEL);
++
++	if (!dvbdevfops) {
++		kfree (dvbdev);
++		mutex_unlock(&dvbdev_register_lock);
++		return -ENOMEM;
++	}
++
+ 	memcpy(dvbdev, template, sizeof(struct dvb_device));
+ 	dvbdev->type = type;
+ 	dvbdev->id = id;
+ 	dvbdev->adapter = adap;
+ 	dvbdev->priv = priv;
++	dvbdev->fops = dvbdevfops;
+ 
++	memcpy(dvbdev->fops, template->fops, sizeof(struct file_operations));
+ 	dvbdev->fops->owner = adap->module;
+ 
+ 	list_add_tail (&dvbdev->list_head, &adap->device_list);
+@@ -252,6 +264,7 @@ void dvb_unregister_device(struct dvb_device *dvbdev)
+ 					dvbdev->type, dvbdev->id)));
+ 
+ 	list_del (&dvbdev->list_head);
++	kfree (dvbdev->fops);
+ 	kfree (dvbdev);
+ }
+ EXPORT_SYMBOL(dvb_unregister_device);
+diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c
+index 15d12fc..127a94b 100644
+--- a/drivers/media/dvb/dvb-usb/cxusb.c
++++ b/drivers/media/dvb/dvb-usb/cxusb.c
+@@ -469,9 +469,9 @@ static int bluebird_patch_dvico_firmware_download(struct usb_device *udev,
+ 	    fw->data[BLUEBIRD_01_ID_OFFSET + 1] == USB_VID_DVICO >> 8) {
+ 
+ 		fw->data[BLUEBIRD_01_ID_OFFSET + 2] =
+-			udev->descriptor.idProduct + 1;
++			le16_to_cpu(udev->descriptor.idProduct) + 1;
+ 		fw->data[BLUEBIRD_01_ID_OFFSET + 3] =
+-			udev->descriptor.idProduct >> 8;
++			le16_to_cpu(udev->descriptor.idProduct) >> 8;
+ 
+ 		return usb_cypress_load_firmware(udev, fw, CYPRESS_FX2);
+ 	}
+diff --git a/drivers/media/dvb/dvb-usb/digitv.c b/drivers/media/dvb/dvb-usb/digitv.c
+index 4a198d4..b5acb11 100644
+--- a/drivers/media/dvb/dvb-usb/digitv.c
++++ b/drivers/media/dvb/dvb-usb/digitv.c
+@@ -119,6 +119,8 @@ static int digitv_nxt6000_tuner_set_params(struct dvb_frontend *fe, struct dvb_f
+ 	struct dvb_usb_adapter *adap = fe->dvb->priv;
+ 	u8 b[5];
+ 	dvb_usb_tuner_calc_regs(fe,fep,b, 5);
++	if (fe->ops.i2c_gate_ctrl)
++		fe->ops.i2c_gate_ctrl(fe, 1);
+ 	return digitv_ctrl_msg(adap->dev, USB_WRITE_TUNER, 0, &b[1], 4, NULL, 0);
+ }
+ 
+diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
+index 7bb7589..2f29ba4 100644
+--- a/drivers/media/video/cx25840/cx25840-core.c
++++ b/drivers/media/video/cx25840/cx25840-core.c
+@@ -907,13 +907,13 @@ static int cx25840_detect_client(struct i2c_adapter *adapter, int address,
+ 	state->vbi_line_offset = 8;
+ 	state->id = id;
+ 
++	i2c_attach_client(client);
++
+ 	if (state->is_cx25836)
+ 		cx25836_initialize(client);
+ 	else
+ 		cx25840_initialize(client, 1);
+ 
+-	i2c_attach_client(client);
+-
+ 	return 0;
+ }
+ 
+diff --git a/drivers/media/video/cx25840/cx25840-firmware.c b/drivers/media/video/cx25840/cx25840-firmware.c
+index 1958d40..0e86b9d 100644
+--- a/drivers/media/video/cx25840/cx25840-firmware.c
++++ b/drivers/media/video/cx25840/cx25840-firmware.c
+@@ -37,7 +37,7 @@
+  */
+ #define FWSEND 48
+ 
+-#define FWDEV(x) &((x)->adapter->dev)
++#define FWDEV(x) &((x)->dev)
+ 
+ static char *firmware = FWFILE;
+ 
+diff --git a/drivers/media/video/cx88/cx88-blackbird.c b/drivers/media/video/cx88/cx88-blackbird.c
+index 0cf0360..1c04516 100644
+--- a/drivers/media/video/cx88/cx88-blackbird.c
++++ b/drivers/media/video/cx88/cx88-blackbird.c
+@@ -53,7 +53,8 @@ MODULE_PARM_DESC(debug,"enable debug messages [blackbird]");
+ 
+ /* ------------------------------------------------------------------ */
+ 
+-#define BLACKBIRD_FIRM_IMAGE_SIZE 256*1024
++#define OLD_BLACKBIRD_FIRM_IMAGE_SIZE 262144
++#define     BLACKBIRD_FIRM_IMAGE_SIZE 376836
+ 
+ /* defines below are from ivtv-driver.h */
+ 
+@@ -401,7 +402,7 @@ static int blackbird_find_mailbox(struct cx8802_dev *dev)
+ 	u32 value;
+ 	int i;
+ 
+-	for (i = 0; i < BLACKBIRD_FIRM_IMAGE_SIZE; i++) {
++	for (i = 0; i < dev->fw_size; i++) {
+ 		memory_read(dev->core, i, &value);
+ 		if (value == signature[signaturecnt])
+ 			signaturecnt++;
+@@ -449,12 +450,15 @@ static int blackbird_load_firmware(struct cx8802_dev *dev)
+ 		return -1;
+ 	}
+ 
+-	if (firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) {
+-		dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d)\n",
+-			firmware->size, BLACKBIRD_FIRM_IMAGE_SIZE);
++	if ((firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) &&
++	    (firmware->size != OLD_BLACKBIRD_FIRM_IMAGE_SIZE)) {
++		dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d or %d)\n",
++			firmware->size, BLACKBIRD_FIRM_IMAGE_SIZE,
++			OLD_BLACKBIRD_FIRM_IMAGE_SIZE);
+ 		release_firmware(firmware);
+ 		return -1;
+ 	}
++	dev->fw_size = firmware->size;
+ 
+ 	if (0 != memcmp(firmware->data, magic, 8)) {
+ 		dprintk(0, "ERROR: Firmware magic mismatch, wrong file?\n");
+diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
+index a9575ad..e775b4b 100644
+--- a/drivers/media/video/cx88/cx88.h
++++ b/drivers/media/video/cx88/cx88.h
+@@ -459,6 +459,7 @@ struct cx8802_dev {
+ 	u32                        mailbox;
+ 	int                        width;
+ 	int                        height;
++	int                        fw_size;
+ 
+ 	/* for dvb only */
+ 	struct videobuf_dvb        dvb;
+diff --git a/drivers/media/video/pvrusb2/pvrusb2-encoder.c b/drivers/media/video/pvrusb2/pvrusb2-encoder.c
+index c94f97b..aec1a00 100644
+--- a/drivers/media/video/pvrusb2/pvrusb2-encoder.c
++++ b/drivers/media/video/pvrusb2/pvrusb2-encoder.c
+@@ -288,6 +288,44 @@ static int pvr2_encoder_vcmd(struct pvr2_hdw *hdw, int cmd,
+ 	return pvr2_encoder_cmd(hdw,cmd,args,0,data);
+ }
+ 
++
++/* This implements some extra setup for the encoder that seems to be
++   specific to the PVR USB2 hardware. */
++int pvr2_encoder_prep_config(struct pvr2_hdw *hdw)
++{
++	int ret = 0;
++	int encMisc3Arg = 0;
++
++	/* Mike Isely <isely at pobox.com> 22-Feb-2007 The windows driver
++	   sends the following list of ENC_MISC commands (for both
++	   24xxx and 29xxx devices).  Meanings are not entirely clear,
++	   however without the ENC_MISC(3,encMisc3Arg) command then we risk
++	   random perpetual video corruption whenever the video input
++	   breaks up for a moment (like when switching channels). */
++
++
++	/* This ENC_MISC(3,encMisc3Arg) command is critical - without
++	   it there will eventually be video corruption.  Also, the
++	   29xxx case is strange - the Windows driver is passing 1
++	   regardless of device type but if we have 1 for 29xxx device
++	   the video turns sluggish.  */
++	switch (hdw->hdw_type) {
++	case PVR2_HDW_TYPE_24XXX: encMisc3Arg = 1; break;
++	case PVR2_HDW_TYPE_29XXX: encMisc3Arg = 0; break;
++	default: break;
++	}
++	ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 3,
++				 encMisc3Arg,0,0);
++
++	ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 8,0,0,0);
++
++	ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 0,3,0,0);
++	ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4,15,0,0,0);
++
++	return ret;
++}
++
++
+ int pvr2_encoder_configure(struct pvr2_hdw *hdw)
+ {
+ 	int ret;
+@@ -302,6 +340,8 @@ int pvr2_encoder_configure(struct pvr2_hdw *hdw)
+ 
+ 	ret = 0;
+ 
++	ret |= pvr2_encoder_prep_config(hdw);
++
+ 	if (!ret) ret = pvr2_encoder_vcmd(
+ 		hdw,CX2341X_ENC_SET_NUM_VSYNC_LINES, 2,
+ 		0xf0, 0xf0);
+diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+index d200496..2fbd24c 100644
+--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
++++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+@@ -1041,7 +1041,7 @@ int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
+ {
+ 	const struct firmware *fw_entry = NULL;
+ 	void  *fw_ptr;
+-	unsigned int pipe, fw_len, fw_done;
++	unsigned int pipe, fw_len, fw_done, bcnt, icnt;
+ 	int actual_length;
+ 	int ret = 0;
+ 	int fwidx;
+@@ -1093,11 +1093,11 @@ int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
+ 
+ 	fw_len = fw_entry->size;
+ 
+-	if (fw_len % FIRMWARE_CHUNK_SIZE) {
++	if (fw_len % sizeof(u32)) {
+ 		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
+ 			   "size of %s firmware"
+-			   " must be a multiple of 8192B",
+-			   fw_files[fwidx]);
++			   " must be a multiple of %zu bytes",
++			   fw_files[fwidx],sizeof(u32));
+ 		release_firmware(fw_entry);
+ 		return -1;
+ 	}
+@@ -1112,18 +1112,21 @@ int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
+ 
+ 	pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
+ 
+-	for (fw_done = 0 ; (fw_done < fw_len) && !ret ;
+-	     fw_done += FIRMWARE_CHUNK_SIZE ) {
+-		int i;
+-		memcpy(fw_ptr, fw_entry->data + fw_done, FIRMWARE_CHUNK_SIZE);
+-		/* Usbsnoop log  shows that we must swap bytes... */
+-		for (i = 0; i < FIRMWARE_CHUNK_SIZE/4 ; i++)
+-			((u32 *)fw_ptr)[i] = ___swab32(((u32 *)fw_ptr)[i]);
+-
+-		ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,
+-				    FIRMWARE_CHUNK_SIZE,
++	fw_done = 0;
++	for (fw_done = 0; fw_done < fw_len;) {
++		bcnt = fw_len - fw_done;
++		if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
++		memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
++		/* Usbsnoop log shows that we must swap bytes... */
++		for (icnt = 0; icnt < bcnt/4 ; icnt++)
++			((u32 *)fw_ptr)[icnt] =
++				___swab32(((u32 *)fw_ptr)[icnt]);
++
++		ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
+ 				    &actual_length, HZ);
+-		ret |= (actual_length != FIRMWARE_CHUNK_SIZE);
++		ret |= (actual_length != bcnt);
++		if (ret) break;
++		fw_done += bcnt;
+ 	}
+ 
+ 	trace_firmware("upload of %s : %i / %i ",
+diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
+index c2d13d7..175a942 100644
+--- a/drivers/mmc/sdhci.c
++++ b/drivers/mmc/sdhci.c
+@@ -37,6 +37,7 @@ static unsigned int debug_quirks = 0;
+ #define SDHCI_QUIRK_FORCE_DMA				(1<<1)
+ /* Controller doesn't like some resets when there is no card inserted. */
+ #define SDHCI_QUIRK_NO_CARD_NO_RESET			(1<<2)
++#define SDHCI_QUIRK_SINGLE_POWER_WRITE			(1<<3)
+ 
+ static const struct pci_device_id pci_ids[] __devinitdata = {
+ 	{
+@@ -65,6 +66,14 @@ static const struct pci_device_id pci_ids[] __devinitdata = {
+ 		.driver_data	= SDHCI_QUIRK_FORCE_DMA,
+ 	},
+ 
++	{
++		.vendor		= PCI_VENDOR_ID_ENE,
++		.device		= PCI_DEVICE_ID_ENE_CB712_SD,
++		.subvendor	= PCI_ANY_ID,
++		.subdevice	= PCI_ANY_ID,
++		.driver_data	= SDHCI_QUIRK_SINGLE_POWER_WRITE,
++	},
++
+ 	{	/* Generic SD host controller */
+ 		PCI_DEVICE_CLASS((PCI_CLASS_SYSTEM_SDHCI << 8), 0xFFFF00)
+ 	},
+@@ -674,10 +683,17 @@ static void sdhci_set_power(struct sdhci_host *host, unsigned short power)
+ 	if (host->power == power)
+ 		return;
+ 
+-	writeb(0, host->ioaddr + SDHCI_POWER_CONTROL);
+-
+-	if (power == (unsigned short)-1)
++	if (power == (unsigned short)-1) {
++		writeb(0, host->ioaddr + SDHCI_POWER_CONTROL);
+ 		goto out;
++	}
++
++	/*
++	 * Spec says that we should clear the power reg before setting
++	 * a new value. Some controllers don't seem to like this though.
++	 */
++	if (!(host->chip->quirks & SDHCI_QUIRK_SINGLE_POWER_WRITE))
++		writeb(0, host->ioaddr + SDHCI_POWER_CONTROL);
+ 
+ 	pwr = SDHCI_POWER_ON;
+ 
+diff --git a/drivers/mtd/redboot.c b/drivers/mtd/redboot.c
+index 035cd9b..a61351f 100644
+--- a/drivers/mtd/redboot.c
++++ b/drivers/mtd/redboot.c
+@@ -94,8 +94,19 @@ static int parse_redboot_partitions(struct mtd_info *master,
+ 			 * (NOTE: this is 'size' not 'data_length'; size is
+ 			 * the full size of the entry.)
+ 			 */
+-			if (swab32(buf[i].size) == master->erasesize) {
++
++			/* RedBoot can combine the FIS directory and
++			   config partitions into a single eraseblock;
++			   we assume wrong-endian if either the swapped
++			   'size' matches the eraseblock size precisely,
++			   or if the swapped size actually fits in an
++			   eraseblock while the unswapped size doesn't. */
++			if (swab32(buf[i].size) == master->erasesize ||
++			    (buf[i].size > master->erasesize
++			     && swab32(buf[i].size) < master->erasesize)) {
+ 				int j;
++				/* Update numslots based on actual FIS directory size */
++				numslots = swab32(buf[i].size) / sizeof (struct fis_image_desc);
+ 				for (j = 0; j < numslots; ++j) {
+ 
+ 					/* A single 0xff denotes a deleted entry.
+@@ -120,11 +131,11 @@ static int parse_redboot_partitions(struct mtd_info *master,
+ 					swab32s(&buf[j].desc_cksum);
+ 					swab32s(&buf[j].file_cksum);
+ 				}
++			} else if (buf[i].size < master->erasesize) {
++				/* Update numslots based on actual FIS directory size */
++				numslots = buf[i].size / sizeof(struct fis_image_desc);
+ 			}
+ 			break;
+-		} else {
+-			/* re-calculate of real numslots */
+-			numslots = buf[i].size / sizeof(struct fis_image_desc);
+ 		}
+ 	}
+ 	if (i == numslots) {
+diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
+index 93f2b7a..952a6bd 100644
+--- a/drivers/net/forcedeth.c
++++ b/drivers/net/forcedeth.c
+@@ -825,7 +825,7 @@ enum {
+ 	NV_MSIX_INT_DISABLED,
+ 	NV_MSIX_INT_ENABLED
+ };
+-static int msix = NV_MSIX_INT_ENABLED;
++static int msix = NV_MSIX_INT_DISABLED;
+ 
+ /*
+  * DMA 64bit
+diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
+index 822dd0b..f44c397 100644
+--- a/drivers/net/sky2.c
++++ b/drivers/net/sky2.c
+@@ -1796,6 +1796,7 @@ out:
+ 
+ /* Transmit timeout is only called if we are running, carries is up
+  * and tx queue is full (stopped).
++ * Called with netif_tx_lock held.
+  */
+ static void sky2_tx_timeout(struct net_device *dev)
+ {
+@@ -1821,17 +1822,14 @@ static void sky2_tx_timeout(struct net_device *dev)
+ 		sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START);
+ 	} else if (report != sky2->tx_cons) {
+ 		printk(KERN_INFO PFX "status report lost?\n");
+-
+-		netif_tx_lock_bh(dev);
+ 		sky2_tx_complete(sky2, report);
+-		netif_tx_unlock_bh(dev);
+ 	} else {
+ 		printk(KERN_INFO PFX "hardware hung? flushing\n");
+ 
+ 		sky2_write32(hw, Q_ADDR(txq, Q_CSR), BMU_STOP);
+ 		sky2_write32(hw, Y2_QADDR(txq, PREF_UNIT_CTRL), PREF_UNIT_RST_SET);
+ 
+-		sky2_tx_clean(dev);
++		sky2_tx_complete(sky2, sky2->tx_prod);
+ 
+ 		sky2_qset(hw, txq);
+ 		sky2_prefetch_init(hw, txq, sky2->tx_le_map, TX_RING_SIZE - 1);
+diff --git a/drivers/net/sky2.h b/drivers/net/sky2.h
+index 6ed1d47..148aab2 100644
+--- a/drivers/net/sky2.h
++++ b/drivers/net/sky2.h
+@@ -1579,7 +1579,7 @@ enum {
+ 
+ 	GMR_FS_ANY_ERR	= GMR_FS_RX_FF_OV | GMR_FS_CRC_ERR |
+ 			  GMR_FS_FRAGMENT | GMR_FS_LONG_ERR |
+-		  	  GMR_FS_MII_ERR | GMR_FS_GOOD_FC | GMR_FS_BAD_FC |
++		  	  GMR_FS_MII_ERR | GMR_FS_BAD_FC |
+ 			  GMR_FS_UN_SIZE | GMR_FS_JABBER,
+ };
+ 
+diff --git a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c
+index 7f59a3d..4dd8a0b 100644
+--- a/drivers/net/tulip/dmfe.c
++++ b/drivers/net/tulip/dmfe.c
+@@ -187,7 +187,7 @@ struct rx_desc {
+ struct dmfe_board_info {
+ 	u32 chip_id;			/* Chip vendor/Device ID */
+ 	u32 chip_revision;		/* Chip revision */
+-	struct DEVICE *dev;		/* net device */
++	struct DEVICE *next_dev;	/* next device */
+ 	struct pci_dev *pdev;		/* PCI device */
+ 	spinlock_t lock;
+ 
+@@ -399,8 +399,6 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
+ 	/* Init system & device */
+ 	db = netdev_priv(dev);
+ 
+-	db->dev = dev;
+-
+ 	/* Allocate Tx/Rx descriptor memory */
+ 	db->desc_pool_ptr = pci_alloc_consistent(pdev, sizeof(struct tx_desc) * DESC_ALL_CNT + 0x20, &db->desc_pool_dma_ptr);
+ 	db->buf_pool_ptr = pci_alloc_consistent(pdev, TX_BUF_ALLOC * TX_DESC_CNT + 4, &db->buf_pool_dma_ptr);
+@@ -428,7 +426,6 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
+ 	dev->poll_controller = &poll_dmfe;
+ #endif
+ 	dev->ethtool_ops = &netdev_ethtool_ops;
+-	netif_carrier_off(db->dev);
+ 	spin_lock_init(&db->lock);
+ 
+ 	pci_read_config_dword(pdev, 0x50, &pci_pmr);
+@@ -1053,7 +1050,6 @@ static void netdev_get_drvinfo(struct net_device *dev,
+ 
+ static const struct ethtool_ops netdev_ethtool_ops = {
+ 	.get_drvinfo		= netdev_get_drvinfo,
+-	.get_link               = ethtool_op_get_link,
+ };
+ 
+ /*
+@@ -1148,7 +1144,6 @@ static void dmfe_timer(unsigned long data)
+ 		/* Link Failed */
+ 		DMFE_DBUG(0, "Link Failed", tmp_cr12);
+ 		db->link_failed = 1;
+-		netif_carrier_off(db->dev);
+ 
+ 		/* For Force 10/100M Half/Full mode: Enable Auto-Nego mode */
+ 		/* AUTO or force 1M Homerun/Longrun don't need */
+@@ -1171,8 +1166,6 @@ static void dmfe_timer(unsigned long data)
+ 			if ( (db->media_mode & DMFE_AUTO) &&
+ 				dmfe_sense_speed(db) )
+ 				db->link_failed = 1;
+-			else
+-				netif_carrier_on(db->dev);
+ 			dmfe_process_mode(db);
+ 			/* SHOW_MEDIA_TYPE(db->op_mode); */
+ 		}
+diff --git a/drivers/net/wireless/bcm43xx/bcm43xx.h b/drivers/net/wireless/bcm43xx/bcm43xx.h
+index 8286678..02ad9b1 100644
+--- a/drivers/net/wireless/bcm43xx/bcm43xx.h
++++ b/drivers/net/wireless/bcm43xx/bcm43xx.h
+@@ -21,7 +21,7 @@
+ #define PFX				KBUILD_MODNAME ": "
+ 
+ #define BCM43xx_SWITCH_CORE_MAX_RETRIES	50
+-#define BCM43xx_IRQWAIT_MAX_RETRIES	50
++#define BCM43xx_IRQWAIT_MAX_RETRIES	100
+ 
+ #define BCM43xx_IO_SIZE			8192
+ 
+diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+index 91b752e..629ba91 100644
+--- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c
++++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+@@ -1453,12 +1453,10 @@ static void handle_irq_transmit_status(struct bcm43xx_private *bcm)
+ 
+ 		bcm43xx_debugfs_log_txstat(bcm, &stat);
+ 
+-		if (stat.flags & BCM43xx_TXSTAT_FLAG_IGNORE)
++		if (stat.flags & BCM43xx_TXSTAT_FLAG_AMPDU)
++			continue;
++		if (stat.flags & BCM43xx_TXSTAT_FLAG_INTER)
+ 			continue;
+-		if (!(stat.flags & BCM43xx_TXSTAT_FLAG_ACK)) {
+-			//TODO: packet was not acked (was lost)
+-		}
+-		//TODO: There are more (unknown) flags to test. see bcm43xx_main.h
+ 
+ 		if (bcm43xx_using_pio(bcm))
+ 			bcm43xx_pio_handle_xmitstatus(bcm, &stat);
+@@ -1866,9 +1864,6 @@ static irqreturn_t bcm43xx_interrupt_handler(int irq, void *dev_id)
+ 
+ 	spin_lock(&bcm->irq_lock);
+ 
+-	assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED);
+-	assert(bcm->current_core->id == BCM43xx_COREID_80211);
+-
+ 	reason = bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON);
+ 	if (reason == 0xffffffff) {
+ 		/* irq not for us (shared irq) */
+@@ -1879,6 +1874,9 @@ static irqreturn_t bcm43xx_interrupt_handler(int irq, void *dev_id)
+ 	if (!reason)
+ 		goto out;
+ 
++	assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED);
++	assert(bcm->current_core->id == BCM43xx_COREID_80211);
++
+ 	bcm->dma_reason[0] = bcm43xx_read32(bcm, BCM43xx_MMIO_DMA0_REASON)
+ 			     & 0x0001DC00;
+ 	bcm->dma_reason[1] = bcm43xx_read32(bcm, BCM43xx_MMIO_DMA1_REASON)
+@@ -2738,8 +2736,9 @@ static int bcm43xx_probe_cores(struct bcm43xx_private *bcm)
+ 				 * dangling pins on the second core. Be careful
+ 				 * and ignore these cores here.
+ 				 */
+-				if (bcm->pci_dev->device != 0x4324) {
+-					dprintk(KERN_INFO PFX "Ignoring additional 802.11 core.\n");
++				if (1 /*bcm->pci_dev->device != 0x4324*/ ) {
++				/* TODO: A PHY */
++					dprintk(KERN_INFO PFX "Ignoring additional 802.11a core.\n");
+ 					continue;
+ 				}
+ 			}
+diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h b/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h
+index 2aed19e..9ecf2bf 100644
+--- a/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h
++++ b/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h
+@@ -137,14 +137,8 @@ struct bcm43xx_xmitstatus {
+ 	u16 unknown; //FIXME
+ };
+ 
+-#define BCM43xx_TXSTAT_FLAG_ACK		0x01
+-//TODO #define BCM43xx_TXSTAT_FLAG_???	0x02
+-//TODO #define BCM43xx_TXSTAT_FLAG_???	0x04
+-//TODO #define BCM43xx_TXSTAT_FLAG_???	0x08
+-//TODO #define BCM43xx_TXSTAT_FLAG_???	0x10
+-#define BCM43xx_TXSTAT_FLAG_IGNORE	0x20
+-//TODO #define BCM43xx_TXSTAT_FLAG_???	0x40
+-//TODO #define BCM43xx_TXSTAT_FLAG_???	0x80
++#define BCM43xx_TXSTAT_FLAG_AMPDU	0x10
++#define BCM43xx_TXSTAT_FLAG_INTER	0x20
+ 
+ u8 bcm43xx_plcp_get_ratecode_cck(const u8 bitrate);
+ u8 bcm43xx_plcp_get_ratecode_ofdm(const u8 bitrate);
+diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c
+index 838d510..a5396c1 100644
+--- a/drivers/net/wireless/prism54/isl_ioctl.c
++++ b/drivers/net/wireless/prism54/isl_ioctl.c
+@@ -1395,11 +1395,16 @@ static int prism54_set_auth(struct net_device *ndev,
+ 		break;
+ 
+ 	case IW_AUTH_RX_UNENCRYPTED_EAPOL:
+-		dot1x = param->value ? 1 : 0;
++		/* dot1x should be the opposite of RX_UNENCRYPTED_EAPOL;
++		 * turn off dot1x when  allowing recepit of unencrypted eapol
++		 * frames, turn on dot1x when we disallow receipt
++		 */
++		dot1x = param->value ? 0x00 : 0x01;
+ 		break;
+ 
+ 	case IW_AUTH_PRIVACY_INVOKED:
+ 		privinvoked = param->value ? 1 : 0;
++		break;
+ 
+ 	case IW_AUTH_DROP_UNENCRYPTED:
+ 		exunencrypt = param->value ? 1 : 0;
+@@ -1589,6 +1594,7 @@ static int prism54_set_encodeext(struct net_device *ndev,
+ 			}
+ 			key.type = DOT11_PRIV_TKIP;
+ 			key.length = KEY_SIZE_TKIP;
++			break;
+ 		default:
+ 			return -EINVAL;
+ 		}
+diff --git a/drivers/rtc/rtc-pcf8563.c b/drivers/rtc/rtc-pcf8563.c
+index 4b72b8e..038118b 100644
+--- a/drivers/rtc/rtc-pcf8563.c
++++ b/drivers/rtc/rtc-pcf8563.c
+@@ -53,6 +53,25 @@ I2C_CLIENT_INSMOD;
+ #define PCF8563_SC_LV		0x80 /* low voltage */
+ #define PCF8563_MO_C		0x80 /* century */
+ 
++struct pcf8563 {
++	struct i2c_client client;
++	/*
++	 * The meaning of MO_C bit varies by the chip type.
++	 * From PCF8563 datasheet: this bit is toggled when the years
++	 * register overflows from 99 to 00
++	 *   0 indicates the century is 20xx
++	 *   1 indicates the century is 19xx
++	 * From RTC8564 datasheet: this bit indicates change of
++	 * century. When the year digit data overflows from 99 to 00,
++	 * this bit is set. By presetting it to 0 while still in the
++	 * 20th century, it will be set in year 2000, ...
++	 * There seems no reliable way to know how the system use this
++	 * bit.  So let's do it heuristically, assuming we are live in
++	 * 1970...2069.
++	 */
++	int c_polarity;	/* 0: MO_C=1 means 19xx, otherwise MO_C=1 means 20xx */
++};
++
+ static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind);
+ static int pcf8563_detach(struct i2c_client *client);
+ 
+@@ -62,6 +81,7 @@ static int pcf8563_detach(struct i2c_client *client);
+  */
+ static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm)
+ {
++	struct pcf8563 *pcf8563 = container_of(client, struct pcf8563, client);
+ 	unsigned char buf[13] = { PCF8563_REG_ST1 };
+ 
+ 	struct i2c_msg msgs[] = {
+@@ -94,8 +114,12 @@ static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm)
+ 	tm->tm_mday = BCD2BIN(buf[PCF8563_REG_DM] & 0x3F);
+ 	tm->tm_wday = buf[PCF8563_REG_DW] & 0x07;
+ 	tm->tm_mon = BCD2BIN(buf[PCF8563_REG_MO] & 0x1F) - 1; /* rtc mn 1-12 */
+-	tm->tm_year = BCD2BIN(buf[PCF8563_REG_YR])
+-		+ (buf[PCF8563_REG_MO] & PCF8563_MO_C ? 0 : 100);
++	tm->tm_year = BCD2BIN(buf[PCF8563_REG_YR]);
++	if (tm->tm_year < 70)
++		tm->tm_year += 100;	/* assume we are in 1970...2069 */
++	/* detect the polarity heuristically. see note above. */
++	pcf8563->c_polarity = (buf[PCF8563_REG_MO] & PCF8563_MO_C) ?
++		(tm->tm_year >= 100) : (tm->tm_year < 100);
+ 
+ 	dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
+ 		"mday=%d, mon=%d, year=%d, wday=%d\n",
+@@ -114,6 +138,7 @@ static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm)
+ 
+ static int pcf8563_set_datetime(struct i2c_client *client, struct rtc_time *tm)
+ {
++	struct pcf8563 *pcf8563 = container_of(client, struct pcf8563, client);
+ 	int i, err;
+ 	unsigned char buf[9];
+ 
+@@ -135,7 +160,7 @@ static int pcf8563_set_datetime(struct i2c_client *client, struct rtc_time *tm)
+ 
+ 	/* year and century */
+ 	buf[PCF8563_REG_YR] = BIN2BCD(tm->tm_year % 100);
+-	if (tm->tm_year < 100)
++	if (pcf8563->c_polarity ? (tm->tm_year >= 100) : (tm->tm_year < 100))
+ 		buf[PCF8563_REG_MO] |= PCF8563_MO_C;
+ 
+ 	buf[PCF8563_REG_DW] = tm->tm_wday & 0x07;
+@@ -248,6 +273,7 @@ static struct i2c_driver pcf8563_driver = {
+ 
+ static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind)
+ {
++	struct pcf8563 *pcf8563;
+ 	struct i2c_client *client;
+ 	struct rtc_device *rtc;
+ 
+@@ -260,11 +286,12 @@ static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind)
+ 		goto exit;
+ 	}
+ 
+-	if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) {
++	if (!(pcf8563 = kzalloc(sizeof(struct pcf8563), GFP_KERNEL))) {
+ 		err = -ENOMEM;
+ 		goto exit;
+ 	}
+ 
++	client = &pcf8563->client;
+ 	client->addr = address;
+ 	client->driver = &pcf8563_driver;
+ 	client->adapter	= adapter;
+@@ -301,7 +328,7 @@ exit_detach:
+ 	i2c_detach_client(client);
+ 
+ exit_kfree:
+-	kfree(client);
++	kfree(pcf8563);
+ 
+ exit:
+ 	return err;
+@@ -309,6 +336,7 @@ exit:
+ 
+ static int pcf8563_detach(struct i2c_client *client)
+ {
++	struct pcf8563 *pcf8563 = container_of(client, struct pcf8563, client);
+ 	int err;
+ 	struct rtc_device *rtc = i2c_get_clientdata(client);
+ 
+@@ -318,7 +346,7 @@ static int pcf8563_detach(struct i2c_client *client)
+ 	if ((err = i2c_detach_client(client)))
+ 		return err;
+ 
+-	kfree(client);
++	kfree(pcf8563);
+ 
+ 	return 0;
+ }
+diff --git a/drivers/sbus/char/bbc_i2c.c b/drivers/sbus/char/bbc_i2c.c
+index 22631f8..8410587 100644
+--- a/drivers/sbus/char/bbc_i2c.c
++++ b/drivers/sbus/char/bbc_i2c.c
+@@ -187,19 +187,20 @@ static int wait_for_pin(struct bbc_i2c_bus *bp, u8 *status)
+ 	bp->waiting = 1;
+ 	add_wait_queue(&bp->wq, &wait);
+ 	while (limit-- > 0) {
+-		u8 val;
+-
+-		set_current_state(TASK_INTERRUPTIBLE);
+-		*status = val = readb(bp->i2c_control_regs + 0);
+-		if ((val & I2C_PCF_PIN) == 0) {
++		unsigned long val;
++
++		val = wait_event_interruptible_timeout(
++				bp->wq,
++				(((*status = readb(bp->i2c_control_regs + 0))
++				  & I2C_PCF_PIN) == 0),
++				msecs_to_jiffies(250));
++		if (val > 0) {
+ 			ret = 0;
+ 			break;
+ 		}
+-		msleep_interruptible(250);
+ 	}
+ 	remove_wait_queue(&bp->wq, &wait);
+ 	bp->waiting = 0;
+-	current->state = TASK_RUNNING;
+ 
+ 	return ret;
+ }
+@@ -340,7 +341,7 @@ static irqreturn_t bbc_i2c_interrupt(int irq, void *dev_id)
+ 	 */
+ 	if (bp->waiting &&
+ 	    !(readb(bp->i2c_control_regs + 0x0) & I2C_PCF_PIN))
+-		wake_up(&bp->wq);
++		wake_up_interruptible(&bp->wq);
+ 
+ 	return IRQ_HANDLED;
+ }
+diff --git a/drivers/usb/atm/ueagle-atm.c b/drivers/usb/atm/ueagle-atm.c
+index dae4ef1..4973e14 100644
+--- a/drivers/usb/atm/ueagle-atm.c
++++ b/drivers/usb/atm/ueagle-atm.c
+@@ -61,6 +61,7 @@
+ #include <linux/usb.h>
+ #include <linux/firmware.h>
+ #include <linux/ctype.h>
++#include <linux/sched.h>
+ #include <linux/kthread.h>
+ #include <linux/version.h>
+ #include <linux/mutex.h>
+diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
+index 1988224..8ddeed3 100644
+--- a/drivers/usb/core/hub.c
++++ b/drivers/usb/core/hub.c
+@@ -44,6 +44,7 @@ struct usb_hub {
+ 		struct usb_hub_status	hub;
+ 		struct usb_port_status	port;
+ 	}			*status;	/* buffer for status reports */
++	struct mutex		status_mutex;	/* for the status buffer */
+ 
+ 	int			error;		/* last reported error */
+ 	int			nerrors;	/* track consecutive errors */
+@@ -538,6 +539,7 @@ static int hub_hub_status(struct usb_hub *hub,
+ {
+ 	int ret;
+ 
++	mutex_lock(&hub->status_mutex);
+ 	ret = get_hub_status(hub->hdev, &hub->status->hub);
+ 	if (ret < 0)
+ 		dev_err (hub->intfdev,
+@@ -547,6 +549,7 @@ static int hub_hub_status(struct usb_hub *hub,
+ 		*change = le16_to_cpu(hub->status->hub.wHubChange); 
+ 		ret = 0;
+ 	}
++	mutex_unlock(&hub->status_mutex);
+ 	return ret;
+ }
+ 
+@@ -620,6 +623,7 @@ static int hub_configure(struct usb_hub *hub,
+ 		ret = -ENOMEM;
+ 		goto fail;
+ 	}
++	mutex_init(&hub->status_mutex);
+ 
+ 	hub->descriptor = kmalloc(sizeof(*hub->descriptor), GFP_KERNEL);
+ 	if (!hub->descriptor) {
+@@ -1418,6 +1422,7 @@ static int hub_port_status(struct usb_hub *hub, int port1,
+ {
+ 	int ret;
+ 
++	mutex_lock(&hub->status_mutex);
+ 	ret = get_port_status(hub->hdev, port1, &hub->status->port);
+ 	if (ret < 4) {
+ 		dev_err (hub->intfdev,
+@@ -1429,6 +1434,7 @@ static int hub_port_status(struct usb_hub *hub, int port1,
+ 		*change = le16_to_cpu(hub->status->port.wPortChange); 
+ 		ret = 0;
+ 	}
++	mutex_unlock(&hub->status_mutex);
+ 	return ret;
+ }
+ 
+diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
+index 025d333..6e9fdd6 100644
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -296,6 +296,18 @@ static void ehci_watchdog (unsigned long param)
+ 	spin_unlock_irqrestore (&ehci->lock, flags);
+ }
+ 
++/* On some systems, leaving remote wakeup enabled prevents system shutdown.
++ * The firmware seems to think that powering off is a wakeup event!
++ * This routine turns off remote wakeup and everything else, on all ports.
++ */
++static void ehci_turn_off_all_ports(struct ehci_hcd *ehci)
++{
++	int	port = HCS_N_PORTS(ehci->hcs_params);
++
++	while (port--)
++		writel(PORT_RWC_BITS, &ehci->regs->port_status[port]);
++}
++
+ /* ehci_shutdown kick in for silicon on any bus (not just pci, etc).
+  * This forcibly disables dma and IRQs, helping kexec and other cases
+  * where the next system software may expect clean state.
+@@ -307,9 +319,13 @@ ehci_shutdown (struct usb_hcd *hcd)
+ 
+ 	ehci = hcd_to_ehci (hcd);
+ 	(void) ehci_halt (ehci);
++	ehci_turn_off_all_ports(ehci);
+ 
+ 	/* make BIOS/etc use companion controller during reboot */
+ 	writel (0, &ehci->regs->configured_flag);
++
++	/* unblock posted writes */
++	readl(&ehci->regs->configured_flag);
+ }
+ 
+ static void ehci_port_power (struct ehci_hcd *ehci, int is_on)
+diff --git a/drivers/usb/host/uhci-hub.c b/drivers/usb/host/uhci-hub.c
+index bacc25c..8e4427a 100644
+--- a/drivers/usb/host/uhci-hub.c
++++ b/drivers/usb/host/uhci-hub.c
+@@ -33,6 +33,9 @@ static __u8 root_hub_hub_des[] =
+ /* status change bits:  nonzero writes will clear */
+ #define RWC_BITS	(USBPORTSC_OCC | USBPORTSC_PEC | USBPORTSC_CSC)
+ 
++/* suspend/resume bits: port suspended or port resuming */
++#define SUSPEND_BITS	(USBPORTSC_SUSP | USBPORTSC_RD)
++
+ /* A port that either is connected or has a changed-bit set will prevent
+  * us from AUTO_STOPPING.
+  */
+@@ -96,8 +99,8 @@ static void uhci_finish_suspend(struct uhci_hcd *uhci, int port,
+ 	int status;
+ 	int i;
+ 
+-	if (inw(port_addr) & (USBPORTSC_SUSP | USBPORTSC_RD)) {
+-		CLR_RH_PORTSTAT(USBPORTSC_SUSP | USBPORTSC_RD);
++	if (inw(port_addr) & SUSPEND_BITS) {
++		CLR_RH_PORTSTAT(SUSPEND_BITS);
+ 		if (test_bit(port, &uhci->resuming_ports))
+ 			set_bit(port, &uhci->port_c_suspend);
+ 
+@@ -107,7 +110,7 @@ static void uhci_finish_suspend(struct uhci_hcd *uhci, int port,
+ 		 * Experiments show that some controllers take longer, so
+ 		 * we'll poll for completion. */
+ 		for (i = 0; i < 10; ++i) {
+-			if (!(inw(port_addr) & USBPORTSC_RD))
++			if (!(inw(port_addr) & SUSPEND_BITS))
+ 				break;
+ 			udelay(1);
+ 		}
+@@ -289,7 +292,7 @@ static int uhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
+ 			wPortStatus |= USB_PORT_STAT_CONNECTION;
+ 		if (status & USBPORTSC_PE) {
+ 			wPortStatus |= USB_PORT_STAT_ENABLE;
+-			if (status & (USBPORTSC_SUSP | USBPORTSC_RD))
++			if (status & SUSPEND_BITS)
+ 				wPortStatus |= USB_PORT_STAT_SUSPEND;
+ 		}
+ 		if (status & USBPORTSC_OC)
+diff --git a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c
+index c6c9e72..dd9e546 100644
+--- a/drivers/usb/input/hid-core.c
++++ b/drivers/usb/input/hid-core.c
+@@ -1212,8 +1212,8 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
+ 			 le16_to_cpu(dev->descriptor.idProduct));
+ 
+ 	hid->bus = BUS_USB;
+-	hid->vendor = dev->descriptor.idVendor;
+-	hid->product = dev->descriptor.idProduct;
++	hid->vendor = le16_to_cpu(dev->descriptor.idVendor);
++	hid->product = le16_to_cpu(dev->descriptor.idProduct);
+ 
+ 	usb_make_path(dev, hid->phys, sizeof(hid->phys));
+ 	strlcat(hid->phys, "/input", sizeof(hid->phys));
+diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c
+index a7932a7..32f0e3a 100644
+--- a/drivers/usb/misc/appledisplay.c
++++ b/drivers/usb/misc/appledisplay.c
+@@ -281,8 +281,8 @@ static int appledisplay_probe(struct usb_interface *iface,
+ 	/* Register backlight device */
+ 	snprintf(bl_name, sizeof(bl_name), "appledisplay%d",
+ 		atomic_inc_return(&count_displays) - 1);
+-	pdata->bd = backlight_device_register(bl_name, NULL, NULL,
+-						&appledisplay_bl_data);
++	pdata->bd = backlight_device_register(bl_name, NULL,
++		pdata, &appledisplay_bl_data);
+ 	if (IS_ERR(pdata->bd)) {
+ 		err("appledisplay: Backlight registration failed");
+ 		goto error;
+diff --git a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c
+index 6e39e99..d2acc15 100644
+--- a/drivers/usb/net/usbnet.c
++++ b/drivers/usb/net/usbnet.c
+@@ -1182,6 +1182,9 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
+ 	// NOTE net->name still not usable ...
+ 	if (info->bind) {
+ 		status = info->bind (dev, udev);
++		if (status < 0)
++			goto out1;
++
+ 		// heuristic:  "usb%d" for links we know are two-host,
+ 		// else "eth%d" when there's reasonable doubt.  userspace
+ 		// can rename the link if it knows better.
+@@ -1208,12 +1211,12 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
+ 	if (status == 0 && dev->status)
+ 		status = init_status (dev, udev);
+ 	if (status < 0)
+-		goto out1;
++		goto out3;
+ 
+ 	if (!dev->rx_urb_size)
+ 		dev->rx_urb_size = dev->hard_mtu;
+ 	dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1);
+-	
++
+ 	SET_NETDEV_DEV(net, &udev->dev);
+ 	status = register_netdev (net);
+ 	if (status)
+diff --git a/drivers/video/aty/mach64_ct.c b/drivers/video/aty/mach64_ct.c
+index f3b487b..1fdcfdb 100644
+--- a/drivers/video/aty/mach64_ct.c
++++ b/drivers/video/aty/mach64_ct.c
+@@ -598,7 +598,6 @@ static void aty_resume_pll_ct(const struct fb_info *info,
+ 	struct atyfb_par *par = info->par;
+ 
+ 	if (par->mclk_per != par->xclk_per) {
+-		int i;
+ 		/*
+ 		* This disables the sclk, crashes the computer as reported:
+ 		* aty_st_pll_ct(SPLL_CNTL2, 3, info);
+@@ -614,7 +613,7 @@ static void aty_resume_pll_ct(const struct fb_info *info,
+ 		 * helps for Rage Mobilities that sometimes crash when
+ 		 * we switch to sclk. (Daniel Mantione, 13-05-2003)
+ 		 */
+-		for (i=0;i<=0x1ffff;i++);
++		udelay(500);
+ 	}
+ 
+ 	aty_st_pll_ct(PLL_REF_DIV, pll->ct.pll_ref_div, par);
+diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
+index 9109ba1..378767c 100644
+--- a/fs/9p/vfs_inode.c
++++ b/fs/9p/vfs_inode.c
+@@ -585,17 +585,14 @@ static int v9fs_vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
+ 	if (IS_ERR(inode)) {
+ 		err = PTR_ERR(inode);
+ 		inode = NULL;
+-		goto clean_up_fids;
++		v9fs_fid_destroy(vfid);
++		goto error;
+ 	}
+ 
+ 	dentry->d_op = &v9fs_dentry_operations;
+ 	d_instantiate(dentry, inode);
+ 	return 0;
+ 
+-clean_up_fids:
+-	if (vfid)
+-		v9fs_fid_destroy(vfid);
+-
+ clean_up_dfid:
+ 	v9fs_fid_clunk(v9ses, dfid);
+ 
+diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
+index 669dbe5..51db118 100644
+--- a/fs/binfmt_elf.c
++++ b/fs/binfmt_elf.c
+@@ -76,7 +76,8 @@ static struct linux_binfmt elf_format = {
+ 		.load_binary	= load_elf_binary,
+ 		.load_shlib	= load_elf_library,
+ 		.core_dump	= elf_core_dump,
+-		.min_coredump	= ELF_EXEC_PAGESIZE
++		.min_coredump	= ELF_EXEC_PAGESIZE,
++		.hasvdso	= 1
+ };
+ 
+ #define BAD_ADDR(x) ((unsigned long)(x) >= TASK_SIZE)
+diff --git a/fs/buffer.c b/fs/buffer.c
+index 1ad674f..05c5d02 100644
+--- a/fs/buffer.c
++++ b/fs/buffer.c
+@@ -78,6 +78,7 @@ EXPORT_SYMBOL(__lock_buffer);
+ 
+ void fastcall unlock_buffer(struct buffer_head *bh)
+ {
++	smp_mb__before_clear_bit();
+ 	clear_buffer_locked(bh);
+ 	smp_mb__after_clear_bit();
+ 	wake_up_bit(&bh->b_state, BH_Lock);
+diff --git a/fs/ext2/super.c b/fs/ext2/super.c
+index 6347c2d..daaa243 100644
+--- a/fs/ext2/super.c
++++ b/fs/ext2/super.c
+@@ -708,10 +708,14 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
+ 		set_opt(sbi->s_mount_opt, GRPID);
+ 	if (def_mount_opts & EXT2_DEFM_UID16)
+ 		set_opt(sbi->s_mount_opt, NO_UID32);
++#ifdef CONFIG_EXT2_FS_XATTR
+ 	if (def_mount_opts & EXT2_DEFM_XATTR_USER)
+ 		set_opt(sbi->s_mount_opt, XATTR_USER);
++#endif
++#ifdef CONFIG_EXT2_FS_POSIX_ACL
+ 	if (def_mount_opts & EXT2_DEFM_ACL)
+ 		set_opt(sbi->s_mount_opt, POSIX_ACL);
++#endif
+ 	
+ 	if (le16_to_cpu(sbi->s_es->s_errors) == EXT2_ERRORS_PANIC)
+ 		set_opt(sbi->s_mount_opt, ERRORS_PANIC);
+diff --git a/fs/ext3/super.c b/fs/ext3/super.c
+index b348867..1c0a51b 100644
+--- a/fs/ext3/super.c
++++ b/fs/ext3/super.c
+@@ -1459,10 +1459,14 @@ static int ext3_fill_super (struct super_block *sb, void *data, int silent)
+ 		set_opt(sbi->s_mount_opt, GRPID);
+ 	if (def_mount_opts & EXT3_DEFM_UID16)
+ 		set_opt(sbi->s_mount_opt, NO_UID32);
++#ifdef CONFIG_EXT3_FS_XATTR
+ 	if (def_mount_opts & EXT3_DEFM_XATTR_USER)
+ 		set_opt(sbi->s_mount_opt, XATTR_USER);
++#endif
++#ifdef CONFIG_EXT3_FS_POSIX_ACL
+ 	if (def_mount_opts & EXT3_DEFM_ACL)
+ 		set_opt(sbi->s_mount_opt, POSIX_ACL);
++#endif
+ 	if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_DATA)
+ 		sbi->s_mount_opt |= EXT3_MOUNT_JOURNAL_DATA;
+ 	else if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_ORDERED)
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index 486a641..fa1d1f3 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -1518,10 +1518,14 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)
+ 		set_opt(sbi->s_mount_opt, GRPID);
+ 	if (def_mount_opts & EXT4_DEFM_UID16)
+ 		set_opt(sbi->s_mount_opt, NO_UID32);
++#ifdef CONFIG_EXT4DEV_FS_XATTR
+ 	if (def_mount_opts & EXT4_DEFM_XATTR_USER)
+ 		set_opt(sbi->s_mount_opt, XATTR_USER);
++#endif
++#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
+ 	if (def_mount_opts & EXT4_DEFM_ACL)
+ 		set_opt(sbi->s_mount_opt, POSIX_ACL);
++#endif
+ 	if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA)
+ 		sbi->s_mount_opt |= EXT4_MOUNT_JOURNAL_DATA;
+ 	else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_ORDERED)
+diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
+index d0db881..c186857 100644
+--- a/fs/gfs2/quota.c
++++ b/fs/gfs2/quota.c
+@@ -279,7 +279,7 @@ static int bh_get(struct gfs2_quota_data *qd)
+ 		(bh->b_data + sizeof(struct gfs2_meta_header) +
+ 		 offset * sizeof(struct gfs2_quota_change));
+ 
+-	mutex_lock(&sdp->sd_quota_mutex);
++	mutex_unlock(&sdp->sd_quota_mutex);
+ 
+ 	return 0;
+ 
+diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
+index 4f4cd13..e6bd553 100644
+--- a/fs/hugetlbfs/inode.c
++++ b/fs/hugetlbfs/inode.c
+@@ -449,10 +449,13 @@ static int hugetlbfs_symlink(struct inode *dir,
+ }
+ 
+ /*
+- * For direct-IO reads into hugetlb pages
++ * mark the head page dirty
+  */
+ static int hugetlbfs_set_page_dirty(struct page *page)
+ {
++	struct page *head = (struct page *)page_private(page);
++
++	SetPageDirty(head);
+ 	return 0;
+ }
+ 
+diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c
+index 0b4acc1..a5c019e 100644
+--- a/fs/lockd/clntproc.c
++++ b/fs/lockd/clntproc.c
+@@ -361,7 +361,6 @@ static int __nlm_async_call(struct nlm_rqst *req, u32 proc, struct rpc_message *
+ {
+ 	struct nlm_host	*host = req->a_host;
+ 	struct rpc_clnt	*clnt;
+-	int status = -ENOLCK;
+ 
+ 	dprintk("lockd: call procedure %d on %s (async)\n",
+ 			(int)proc, host->h_name);
+@@ -373,12 +372,10 @@ static int __nlm_async_call(struct nlm_rqst *req, u32 proc, struct rpc_message *
+ 	msg->rpc_proc = &clnt->cl_procinfo[proc];
+ 
+         /* bootstrap and kick off the async RPC call */
+-        status = rpc_call_async(clnt, msg, RPC_TASK_ASYNC, tk_ops, req);
+-	if (status == 0)
+-		return 0;
++        return rpc_call_async(clnt, msg, RPC_TASK_ASYNC, tk_ops, req);
+ out_err:
+-	nlm_release_call(req);
+-	return status;
++	tk_ops->rpc_release(req);
++	return -ENOLCK;
+ }
+ 
+ int nlm_async_call(struct nlm_rqst *req, u32 proc, const struct rpc_call_ops *tk_ops)
+diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
+index c7db0a5..cf51f84 100644
+--- a/fs/lockd/svclock.c
++++ b/fs/lockd/svclock.c
+@@ -593,9 +593,7 @@ callback:
+ 
+ 	/* Call the client */
+ 	kref_get(&block->b_count);
+-	if (nlm_async_call(block->b_call, NLMPROC_GRANTED_MSG,
+-						&nlmsvc_grant_ops) < 0)
+-		nlmsvc_release_block(block);
++	nlm_async_call(block->b_call, NLMPROC_GRANTED_MSG, &nlmsvc_grant_ops);
+ }
+ 
+ /*
+diff --git a/fs/ocfs2/journal.h b/fs/ocfs2/journal.h
+index e121636..d026b4f 100644
+--- a/fs/ocfs2/journal.h
++++ b/fs/ocfs2/journal.h
+@@ -306,8 +306,8 @@ int                  ocfs2_journal_dirty_data(handle_t *handle,
+  * for the dinode, one for the new block. */
+ #define OCFS2_SIMPLE_DIR_EXTEND_CREDITS (2)
+ 
+-/* file update (nlink, etc) + dir entry block */
+-#define OCFS2_LINK_CREDITS  (OCFS2_INODE_UPDATE_CREDITS + 1)
++/* file update (nlink, etc) + directory mtime/ctime + dir entry block */
++#define OCFS2_LINK_CREDITS  (2*OCFS2_INODE_UPDATE_CREDITS + 1)
+ 
+ /* inode + dir inode (if we unlink a dir), + dir entry block + orphan
+  * dir inode link */
+diff --git a/fs/ufs/dir.c b/fs/ufs/dir.c
+index 433b6f6..a6c0ca9 100644
+--- a/fs/ufs/dir.c
++++ b/fs/ufs/dir.c
+@@ -106,12 +106,13 @@ static void ufs_check_page(struct page *page)
+ 	char *kaddr = page_address(page);
+ 	unsigned offs, rec_len;
+ 	unsigned limit = PAGE_CACHE_SIZE;
++	const unsigned chunk_mask = UFS_SB(sb)->s_uspi->s_dirblksize - 1;
+ 	struct ufs_dir_entry *p;
+ 	char *error;
+ 
+ 	if ((dir->i_size >> PAGE_CACHE_SHIFT) == page->index) {
+ 		limit = dir->i_size & ~PAGE_CACHE_MASK;
+-		if (limit & (UFS_SECTOR_SIZE - 1))
++		if (limit & chunk_mask)
+ 			goto Ebadsize;
+ 		if (!limit)
+ 			goto out;
+@@ -126,7 +127,7 @@ static void ufs_check_page(struct page *page)
+ 			goto Ealign;
+ 		if (rec_len < UFS_DIR_REC_LEN(ufs_get_de_namlen(sb, p)))
+ 			goto Enamelen;
+-		if (((offs + rec_len - 1) ^ offs) & ~(UFS_SECTOR_SIZE-1))
++		if (((offs + rec_len - 1) ^ offs) & ~chunk_mask)
+ 			goto Espan;
+ 		if (fs32_to_cpu(sb, p->d_ino) > (UFS_SB(sb)->s_uspi->s_ipg *
+ 						  UFS_SB(sb)->s_uspi->s_ncg))
+@@ -310,6 +311,7 @@ int ufs_add_link(struct dentry *dentry, struct inode *inode)
+ 	int namelen = dentry->d_name.len;
+ 	struct super_block *sb = dir->i_sb;
+ 	unsigned reclen = UFS_DIR_REC_LEN(namelen);
++	const unsigned int chunk_size = UFS_SB(sb)->s_uspi->s_dirblksize;
+ 	unsigned short rec_len, name_len;
+ 	struct page *page = NULL;
+ 	struct ufs_dir_entry *de;
+@@ -342,8 +344,8 @@ int ufs_add_link(struct dentry *dentry, struct inode *inode)
+ 			if ((char *)de == dir_end) {
+ 				/* We hit i_size */
+ 				name_len = 0;
+-				rec_len = UFS_SECTOR_SIZE;
+-				de->d_reclen = cpu_to_fs16(sb, UFS_SECTOR_SIZE);
++				rec_len = chunk_size;
++				de->d_reclen = cpu_to_fs16(sb, chunk_size);
+ 				de->d_ino = 0;
+ 				goto got_it;
+ 			}
+@@ -431,7 +433,7 @@ ufs_readdir(struct file *filp, void *dirent, filldir_t filldir)
+ 	unsigned int offset = pos & ~PAGE_CACHE_MASK;
+ 	unsigned long n = pos >> PAGE_CACHE_SHIFT;
+ 	unsigned long npages = ufs_dir_pages(inode);
+-	unsigned chunk_mask = ~(UFS_SECTOR_SIZE - 1);
++	unsigned chunk_mask = ~(UFS_SB(sb)->s_uspi->s_dirblksize - 1);
+ 	int need_revalidate = filp->f_version != inode->i_version;
+ 	unsigned flags = UFS_SB(sb)->s_flags;
+ 
+@@ -511,7 +513,7 @@ int ufs_delete_entry(struct inode *inode, struct ufs_dir_entry *dir,
+ 	struct super_block *sb = inode->i_sb;
+ 	struct address_space *mapping = page->mapping;
+ 	char *kaddr = page_address(page);
+-	unsigned from = ((char*)dir - kaddr) & ~(UFS_SECTOR_SIZE - 1);
++	unsigned from = ((char*)dir - kaddr) & ~(UFS_SB(sb)->s_uspi->s_dirblksize - 1);
+ 	unsigned to = ((char*)dir - kaddr) + fs16_to_cpu(sb, dir->d_reclen);
+ 	struct ufs_dir_entry *pde = NULL;
+ 	struct ufs_dir_entry *de = (struct ufs_dir_entry *) (kaddr + from);
+@@ -556,6 +558,7 @@ int ufs_make_empty(struct inode * inode, struct inode *dir)
+ 	struct super_block * sb = dir->i_sb;
+ 	struct address_space *mapping = inode->i_mapping;
+ 	struct page *page = grab_cache_page(mapping, 0);
++	const unsigned int chunk_size = UFS_SB(sb)->s_uspi->s_dirblksize;
+ 	struct ufs_dir_entry * de;
+ 	char *base;
+ 	int err;
+@@ -563,7 +566,7 @@ int ufs_make_empty(struct inode * inode, struct inode *dir)
+ 	if (!page)
+ 		return -ENOMEM;
+ 	kmap(page);
+-	err = mapping->a_ops->prepare_write(NULL, page, 0, UFS_SECTOR_SIZE);
++	err = mapping->a_ops->prepare_write(NULL, page, 0, chunk_size);
+ 	if (err) {
+ 		unlock_page(page);
+ 		goto fail;
+@@ -584,11 +587,11 @@ int ufs_make_empty(struct inode * inode, struct inode *dir)
+ 		((char *)de + fs16_to_cpu(sb, de->d_reclen));
+ 	de->d_ino = cpu_to_fs32(sb, dir->i_ino);
+ 	ufs_set_de_type(sb, de, dir->i_mode);
+-	de->d_reclen = cpu_to_fs16(sb, UFS_SECTOR_SIZE - UFS_DIR_REC_LEN(1));
++	de->d_reclen = cpu_to_fs16(sb, chunk_size - UFS_DIR_REC_LEN(1));
+ 	ufs_set_de_namlen(sb, de, 2);
+ 	strcpy (de->d_name, "..");
+ 
+-	err = ufs_commit_chunk(page, 0, UFS_SECTOR_SIZE);
++	err = ufs_commit_chunk(page, 0, chunk_size);
+ fail:
+ 	kunmap(page);
+ 	page_cache_release(page);
+diff --git a/fs/ufs/super.c b/fs/ufs/super.c
+index 8a8e938..209be95 100644
+--- a/fs/ufs/super.c
++++ b/fs/ufs/super.c
+@@ -649,7 +649,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
+ 		kmalloc (sizeof(struct ufs_sb_private_info), GFP_KERNEL);
+ 	if (!uspi)
+ 		goto failed;
+-
++	uspi->s_dirblksize = UFS_SECTOR_SIZE;
+ 	super_block_offset=UFS_SBLOCK;
+ 
+ 	/* Keep 2Gig file limit. Some UFS variants need to override 
+@@ -718,6 +718,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
+ 		break;
+ 	
+ 	case UFS_MOUNT_UFSTYPE_NEXTSTEP:
++		/*TODO: check may be we need set special dir block size?*/
+ 		UFSD("ufstype=nextstep\n");
+ 		uspi->s_fsize = block_size = 1024;
+ 		uspi->s_fmask = ~(1024 - 1);
+@@ -733,6 +734,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
+ 		break;
+ 	
+ 	case UFS_MOUNT_UFSTYPE_NEXTSTEP_CD:
++		/*TODO: check may be we need set special dir block size?*/
+ 		UFSD("ufstype=nextstep-cd\n");
+ 		uspi->s_fsize = block_size = 2048;
+ 		uspi->s_fmask = ~(2048 - 1);
+@@ -754,6 +756,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
+ 		uspi->s_fshift = 10;
+ 		uspi->s_sbsize = super_block_size = 2048;
+ 		uspi->s_sbbase = 0;
++		uspi->s_dirblksize = 1024;
+ 		flags |= UFS_DE_44BSD | UFS_UID_44BSD | UFS_ST_44BSD | UFS_CG_44BSD;
+ 		if (!(sb->s_flags & MS_RDONLY)) {
+ 			if (!silent)
+diff --git a/include/asm-generic/page.h b/include/asm-generic/page.h
+index b55052c..a96b5d9 100644
+--- a/include/asm-generic/page.h
++++ b/include/asm-generic/page.h
+@@ -4,51 +4,21 @@
+ #ifdef __KERNEL__
+ #ifndef __ASSEMBLY__
+ 
+-#include <linux/log2.h>
++#include <linux/compiler.h>
+ 
+-/*
+- * non-const pure 2^n version of get_order
+- * - the arch may override these in asm/bitops.h if they can be implemented
+- *   more efficiently than using the arch log2 routines
+- * - we use the non-const log2() instead if the arch has defined one suitable
+- */
+-#ifndef ARCH_HAS_GET_ORDER
+-static inline __attribute__((const))
+-int __get_order(unsigned long size, int page_shift)
++/* Pure 2^n version of get_order */
++static __inline__ __attribute_const__ int get_order(unsigned long size)
+ {
+-#if BITS_PER_LONG == 32 && defined(ARCH_HAS_ILOG2_U32)
+-	int order = __ilog2_u32(size) - page_shift;
+-	return order >= 0 ? order : 0;
+-#elif BITS_PER_LONG == 64 && defined(ARCH_HAS_ILOG2_U64)
+-	int order = __ilog2_u64(size) - page_shift;
+-	return order >= 0 ? order : 0;
+-#else
+ 	int order;
+ 
+-	size = (size - 1) >> (page_shift - 1);
++	size = (size - 1) >> (PAGE_SHIFT - 1);
+ 	order = -1;
+ 	do {
+ 		size >>= 1;
+ 		order++;
+ 	} while (size);
+ 	return order;
+-#endif
+ }
+-#endif
+-
+-/**
+- * get_order - calculate log2(pages) to hold a block of the specified size
+- * @n - size
+- *
+- * calculate allocation order based on the current page size
+- * - this can be used to initialise global variables from constant data
+- */
+-#define get_order(n)							\
+-(									\
+-	__builtin_constant_p(n) ?					\
+-	((n < (1UL << PAGE_SHIFT)) ? 0 : ilog2(n) - PAGE_SHIFT) :	\
+-	__get_order(n, PAGE_SHIFT)					\
+- )
+ 
+ #endif	/* __ASSEMBLY__ */
+ #endif	/* __KERNEL__ */
+diff --git a/include/asm-ia64/libata-portmap.h b/include/asm-ia64/libata-portmap.h
+new file mode 100644
+index 0000000..0e00c9a
+--- /dev/null
++++ b/include/asm-ia64/libata-portmap.h
+@@ -0,0 +1,12 @@
++#ifndef __ASM_IA64_LIBATA_PORTMAP_H
++#define __ASM_IA64_LIBATA_PORTMAP_H
++
++#define ATA_PRIMARY_CMD		0x1F0
++#define ATA_PRIMARY_CTL		0x3F6
++#define ATA_PRIMARY_IRQ(dev)	isa_irq_to_vector(14)
++
++#define ATA_SECONDARY_CMD	0x170
++#define ATA_SECONDARY_CTL	0x376
++#define ATA_SECONDARY_IRQ(dev)	isa_irq_to_vector(15)
++
++#endif
+diff --git a/include/asm-x86_64/bitops.h b/include/asm-x86_64/bitops.h
+index 8da9609..d4dbbe5 100644
+--- a/include/asm-x86_64/bitops.h
++++ b/include/asm-x86_64/bitops.h
+@@ -7,7 +7,7 @@
+ 
+ #include <asm/alternative.h>
+ 
+-#if __GNUC__ < 4 || __GNUC_MINOR__ < 1
++#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
+ /* Technically wrong, but this avoids compilation errors on some gcc
+    versions. */
+ #define ADDR "=m" (*(volatile long *) addr)
+diff --git a/include/linux/atmarp.h b/include/linux/atmarp.h
+index ee108f9..231f4bd 100644
+--- a/include/linux/atmarp.h
++++ b/include/linux/atmarp.h
+@@ -6,9 +6,7 @@
+ #ifndef _LINUX_ATMARP_H
+ #define _LINUX_ATMARP_H
+ 
+-#ifdef __KERNEL__
+ #include <linux/types.h>
+-#endif
+ #include <linux/atmapi.h>
+ #include <linux/atmioc.h>
+ 
+diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
+index c1e82c5..2d956cd 100644
+--- a/include/linux/binfmts.h
++++ b/include/linux/binfmts.h
+@@ -59,6 +59,7 @@ struct linux_binfmt {
+ 	int (*load_shlib)(struct file *);
+ 	int (*core_dump)(long signr, struct pt_regs * regs, struct file * file);
+ 	unsigned long min_coredump;	/* minimal dump size */
++	int hasvdso;
+ };
+ 
+ extern int register_binfmt(struct linux_binfmt *);
+diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
+index ea097dd..782abaf 100644
+--- a/include/linux/lockdep.h
++++ b/include/linux/lockdep.h
+@@ -8,6 +8,8 @@
+ #ifndef __LINUX_LOCKDEP_H
+ #define __LINUX_LOCKDEP_H
+ 
++struct task_struct;
++
+ #ifdef CONFIG_LOCKDEP
+ 
+ #include <linux/linkage.h>
+diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
+index 3d1d210..d37f46a 100644
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -1971,6 +1971,7 @@
+ #define PCI_DEVICE_ID_TOPIC_TP560	0x0000
+ 
+ #define PCI_VENDOR_ID_ENE		0x1524
++#define PCI_DEVICE_ID_ENE_CB712_SD	0x0550
+ #define PCI_DEVICE_ID_ENE_1211		0x1211
+ #define PCI_DEVICE_ID_ENE_1225		0x1225
+ #define PCI_DEVICE_ID_ENE_1410		0x1410
+diff --git a/include/linux/raid/bitmap.h b/include/linux/raid/bitmap.h
+index ebd42a3..6db9a4c 100644
+--- a/include/linux/raid/bitmap.h
++++ b/include/linux/raid/bitmap.h
+@@ -247,6 +247,7 @@ struct bitmap {
+ 
+ 	atomic_t pending_writes; /* pending writes to the bitmap file */
+ 	wait_queue_head_t write_wait;
++	wait_queue_head_t overflow_wait;
+ 
+ };
+ 
+diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
+index 98b21ad..523fb3a 100644
+--- a/include/linux/sunrpc/svcsock.h
++++ b/include/linux/sunrpc/svcsock.h
+@@ -63,7 +63,7 @@ struct svc_sock {
+  * Function prototypes.
+  */
+ int		svc_makesock(struct svc_serv *, int, unsigned short);
+-void		svc_delete_socket(struct svc_sock *);
++void		svc_force_close_socket(struct svc_sock *);
+ int		svc_recv(struct svc_rqst *, long);
+ int		svc_send(struct svc_rqst *);
+ void		svc_drop(struct svc_rqst *);
+diff --git a/include/linux/ufs_fs.h b/include/linux/ufs_fs.h
+index 28967ed..d3a4f99 100644
+--- a/include/linux/ufs_fs.h
++++ b/include/linux/ufs_fs.h
+@@ -789,6 +789,7 @@ struct ufs_sb_private_info {
+ 
+ 	__u32	s_maxsymlinklen;/* upper limit on fast symlinks' size */
+ 	__s32	fs_magic;       /* filesystem magic */
++	unsigned int s_dirblksize;
+ };
+ 
+ /*
+diff --git a/include/linux/writeback.h b/include/linux/writeback.h
+index fc35e6b..0c78f7f 100644
+--- a/include/linux/writeback.h
++++ b/include/linux/writeback.h
+@@ -84,7 +84,7 @@ static inline void wait_on_inode(struct inode *inode)
+ int wakeup_pdflush(long nr_pages);
+ void laptop_io_completion(void);
+ void laptop_sync_completion(void);
+-void throttle_vm_writeout(void);
++void throttle_vm_writeout(gfp_t gfp_mask);
+ 
+ /* These are exported to sysctl. */
+ extern int dirty_background_ratio;
+diff --git a/kernel/lockdep.c b/kernel/lockdep.c
+index 509efd4..33c9eeb 100644
+--- a/kernel/lockdep.c
++++ b/kernel/lockdep.c
+@@ -2577,7 +2577,7 @@ out_restore:
+ 	raw_local_irq_restore(flags);
+ }
+ 
+-void __init lockdep_init(void)
++void lockdep_init(void)
+ {
+ 	int i;
+ 
+diff --git a/kernel/power/user.c b/kernel/power/user.c
+index f7b7a78..38418cd 100644
+--- a/kernel/power/user.c
++++ b/kernel/power/user.c
+@@ -292,7 +292,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
+ 			break;
+ 		}
+ 
+-		if (pm_ops->prepare) {
++		if (pm_ops && pm_ops->prepare) {
+ 			error = pm_ops->prepare(PM_SUSPEND_MEM);
+ 			if (error)
+ 				goto OutS3;
+@@ -311,7 +311,7 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
+ 			device_resume();
+ 		}
+ 		resume_console();
+-		if (pm_ops->finish)
++		if (pm_ops && pm_ops->finish)
+ 			pm_ops->finish(PM_SUSPEND_MEM);
+ 
+  OutS3:
+@@ -322,20 +322,25 @@ static int snapshot_ioctl(struct inode *inode, struct file *filp,
+ 		switch (arg) {
+ 
+ 		case PMOPS_PREPARE:
+-			if (pm_ops->prepare) {
++			if (pm_ops && pm_ops->prepare)
+ 				error = pm_ops->prepare(PM_SUSPEND_DISK);
+-			}
++			else
++				error = -ENOSYS;
+ 			break;
+ 
+ 		case PMOPS_ENTER:
+ 			kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK);
+-			error = pm_ops->enter(PM_SUSPEND_DISK);
++			if (pm_ops && pm_ops->enter)
++				error = pm_ops->enter(PM_SUSPEND_DISK);
++			else
++				error = -ENOSYS;
+ 			break;
+ 
+ 		case PMOPS_FINISH:
+-			if (pm_ops && pm_ops->finish) {
++			if (pm_ops && pm_ops->finish)
+ 				pm_ops->finish(PM_SUSPEND_DISK);
+-			}
++			else
++				error = -ENOSYS;
+ 			break;
+ 
+ 		default:
+diff --git a/kernel/sched.c b/kernel/sched.c
+index cca93cc..62db30c 100644
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -3528,7 +3528,7 @@ need_resched_nonpreemptible:
+ 		}
+ 	}
+ 	next->sleep_type = SLEEP_NORMAL;
+-	if (dependent_sleeper(cpu, rq, next))
++	if (rq->nr_running == 1 && dependent_sleeper(cpu, rq, next))
+ 		next = rq->idle;
+ switch_tasks:
+ 	if (next == rq->idle)
+@@ -3547,7 +3547,7 @@ switch_tasks:
+ 
+ 	sched_info_switch(prev, next);
+ 	if (likely(prev != next)) {
+-		next->timestamp = now;
++		next->timestamp = next->last_ran = now;
+ 		rq->nr_switches++;
+ 		rq->curr = next;
+ 		++*switch_count;
+diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
+index 22504af..d9ef176 100644
+--- a/kernel/time/clocksource.c
++++ b/kernel/time/clocksource.c
+@@ -28,6 +28,7 @@
+ #include <linux/sysdev.h>
+ #include <linux/init.h>
+ #include <linux/module.h>
++#include <linux/sched.h> /* for spin_unlock_irq() using preempt_count() m68k */
+ 
+ /* XXX - Would like a better way for initializing curr_clocksource */
+ extern struct clocksource clocksource_jiffies;
+diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
+index 5c26818..330bff8 100644
+--- a/lib/Kconfig.debug
++++ b/lib/Kconfig.debug
+@@ -399,8 +399,8 @@ config LKDTM
+ 
+ config FAULT_INJECTION
+ 	bool "Fault-injection framework"
+-	depends on DEBUG_KERNEL
+-	depends on STACKTRACE
++	depends on DEBUG_KERNEL && STACKTRACE_SUPPORT
++	select STACKTRACE
+ 	select FRAME_POINTER
+ 	help
+ 	  Provide fault-injection framework.
+diff --git a/lib/swiotlb.c b/lib/swiotlb.c
+index 1062578..d6d57fb 100644
+--- a/lib/swiotlb.c
++++ b/lib/swiotlb.c
+@@ -750,7 +750,7 @@ swiotlb_sync_sg(struct device *hwdev, struct scatterlist *sg,
+ 
+ 	for (i = 0; i < nelems; i++, sg++)
+ 		if (sg->dma_address != SG_ENT_PHYS_ADDRESS(sg))
+-			sync_single(hwdev, (void *) sg->dma_address,
++			sync_single(hwdev, phys_to_virt(sg->dma_address),
+ 				    sg->dma_length, dir, target);
+ }
+ 
+diff --git a/mm/hugetlb.c b/mm/hugetlb.c
+index cb362f7..36db012 100644
+--- a/mm/hugetlb.c
++++ b/mm/hugetlb.c
+@@ -389,6 +389,8 @@ void __unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start,
+ 			continue;
+ 
+ 		page = pte_page(pte);
++		if (pte_dirty(pte))
++			set_page_dirty(page);
+ 		list_add(&page->lru, &page_list);
+ 	}
+ 	spin_unlock(&mm->page_table_lock);
+diff --git a/mm/page-writeback.c b/mm/page-writeback.c
+index be0efbd..17255ab 100644
+--- a/mm/page-writeback.c
++++ b/mm/page-writeback.c
+@@ -296,11 +296,21 @@ void balance_dirty_pages_ratelimited_nr(struct address_space *mapping,
+ }
+ EXPORT_SYMBOL(balance_dirty_pages_ratelimited_nr);
+ 
+-void throttle_vm_writeout(void)
++void throttle_vm_writeout(gfp_t gfp_mask)
+ {
+ 	long background_thresh;
+ 	long dirty_thresh;
+ 
++	if ((gfp_mask & (__GFP_FS|__GFP_IO)) != (__GFP_FS|__GFP_IO)) {
++		/*
++		 * The caller might hold locks which can prevent IO completion
++		 * or progress in the filesystem.  So we cannot just sit here
++		 * waiting for IO to complete.
++		 */
++		congestion_wait(WRITE, HZ/10);
++		return;
++	}
++
+         for ( ; ; ) {
+ 		get_dirty_limits(&background_thresh, &dirty_thresh, NULL);
+ 
+@@ -317,7 +327,6 @@ void throttle_vm_writeout(void)
+         }
+ }
+ 
+-
+ /*
+  * writeback at least _min_pages, and keep writing until the amount of dirty
+  * memory is less than the background threshold, or until we're all clean.
+diff --git a/mm/vmscan.c b/mm/vmscan.c
+index 7430df6..5b4528a 100644
+--- a/mm/vmscan.c
++++ b/mm/vmscan.c
+@@ -949,7 +949,7 @@ static unsigned long shrink_zone(int priority, struct zone *zone,
+ 		}
+ 	}
+ 
+-	throttle_vm_writeout();
++	throttle_vm_writeout(sc->gfp_mask);
+ 
+ 	atomic_dec(&zone->reclaim_in_progress);
+ 	return nr_reclaimed;
+diff --git a/net/atm/common.c b/net/atm/common.c
+index fbabff4..a2878e9 100644
+--- a/net/atm/common.c
++++ b/net/atm/common.c
+@@ -816,7 +816,8 @@ static void __exit atm_exit(void)
+ 	proto_unregister(&vcc_proto);
+ }
+ 
+-module_init(atm_init);
++subsys_initcall(atm_init);
++
+ module_exit(atm_exit);
+ 
+ MODULE_LICENSE("GPL");
+diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
+index 0017ccb..024ae56 100644
+--- a/net/ipv4/igmp.c
++++ b/net/ipv4/igmp.c
+@@ -455,6 +455,8 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,
+ 			skb = add_grhead(skb, pmc, type, &pgr);
+ 			first = 0;
+ 		}
++		if (!skb)
++			return NULL;
+ 		psrc = (__be32 *)skb_put(skb, sizeof(__be32));
+ 		*psrc = psf->sf_inaddr;
+ 		scount++; stotal++;
+diff --git a/net/ipv4/netfilter/ipt_REJECT.c b/net/ipv4/netfilter/ipt_REJECT.c
+index f0319e5..6714bd1 100644
+--- a/net/ipv4/netfilter/ipt_REJECT.c
++++ b/net/ipv4/netfilter/ipt_REJECT.c
+@@ -79,6 +79,10 @@ static void send_reset(struct sk_buff *oldskb, int hook)
+ 	nskb->mark = 0;
+ 	skb_init_secmark(nskb);
+ 
++	skb_shinfo(nskb)->gso_size = 0;
++	skb_shinfo(nskb)->gso_segs = 0;
++	skb_shinfo(nskb)->gso_type = 0;
++
+ 	tcph = (struct tcphdr *)((u_int32_t*)nskb->nh.iph + nskb->nh.iph->ihl);
+ 
+ 	/* Swap source and dest */
+diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
+index b67e0dd..ebe9d0d 100644
+--- a/net/ipv4/tcp.c
++++ b/net/ipv4/tcp.c
+@@ -2266,12 +2266,12 @@ void tcp_free_md5sig_pool(void)
+ {
+ 	struct tcp_md5sig_pool **pool = NULL;
+ 
+-	spin_lock(&tcp_md5sig_pool_lock);
++	spin_lock_bh(&tcp_md5sig_pool_lock);
+ 	if (--tcp_md5sig_users == 0) {
+ 		pool = tcp_md5sig_pool;
+ 		tcp_md5sig_pool = NULL;
+ 	}
+-	spin_unlock(&tcp_md5sig_pool_lock);
++	spin_unlock_bh(&tcp_md5sig_pool_lock);
+ 	if (pool)
+ 		__tcp_free_md5sig_pool(pool);
+ }
+@@ -2314,36 +2314,36 @@ struct tcp_md5sig_pool **tcp_alloc_md5sig_pool(void)
+ 	int alloc = 0;
+ 
+ retry:
+-	spin_lock(&tcp_md5sig_pool_lock);
++	spin_lock_bh(&tcp_md5sig_pool_lock);
+ 	pool = tcp_md5sig_pool;
+ 	if (tcp_md5sig_users++ == 0) {
+ 		alloc = 1;
+-		spin_unlock(&tcp_md5sig_pool_lock);
++		spin_unlock_bh(&tcp_md5sig_pool_lock);
+ 	} else if (!pool) {
+ 		tcp_md5sig_users--;
+-		spin_unlock(&tcp_md5sig_pool_lock);
++		spin_unlock_bh(&tcp_md5sig_pool_lock);
+ 		cpu_relax();
+ 		goto retry;
+ 	} else
+-		spin_unlock(&tcp_md5sig_pool_lock);
++		spin_unlock_bh(&tcp_md5sig_pool_lock);
+ 
+ 	if (alloc) {
+ 		/* we cannot hold spinlock here because this may sleep. */
+ 		struct tcp_md5sig_pool **p = __tcp_alloc_md5sig_pool();
+-		spin_lock(&tcp_md5sig_pool_lock);
++		spin_lock_bh(&tcp_md5sig_pool_lock);
+ 		if (!p) {
+ 			tcp_md5sig_users--;
+-			spin_unlock(&tcp_md5sig_pool_lock);
++			spin_unlock_bh(&tcp_md5sig_pool_lock);
+ 			return NULL;
+ 		}
+ 		pool = tcp_md5sig_pool;
+ 		if (pool) {
+ 			/* oops, it has already been assigned. */
+-			spin_unlock(&tcp_md5sig_pool_lock);
++			spin_unlock_bh(&tcp_md5sig_pool_lock);
+ 			__tcp_free_md5sig_pool(p);
+ 		} else {
+ 			tcp_md5sig_pool = pool = p;
+-			spin_unlock(&tcp_md5sig_pool_lock);
++			spin_unlock_bh(&tcp_md5sig_pool_lock);
+ 		}
+ 	}
+ 	return pool;
+@@ -2354,11 +2354,11 @@ EXPORT_SYMBOL(tcp_alloc_md5sig_pool);
+ struct tcp_md5sig_pool *__tcp_get_md5sig_pool(int cpu)
+ {
+ 	struct tcp_md5sig_pool **p;
+-	spin_lock(&tcp_md5sig_pool_lock);
++	spin_lock_bh(&tcp_md5sig_pool_lock);
+ 	p = tcp_md5sig_pool;
+ 	if (p)
+ 		tcp_md5sig_users++;
+-	spin_unlock(&tcp_md5sig_pool_lock);
++	spin_unlock_bh(&tcp_md5sig_pool_lock);
+ 	return (p ? *per_cpu_ptr(p, cpu) : NULL);
+ }
+ 
+diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
+index 4a3889d..aa54ad4 100644
+--- a/net/ipv4/tcp_minisocks.c
++++ b/net/ipv4/tcp_minisocks.c
+@@ -381,7 +381,7 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req,
+ 	if (newsk != NULL) {
+ 		const struct inet_request_sock *ireq = inet_rsk(req);
+ 		struct tcp_request_sock *treq = tcp_rsk(req);
+-		struct inet_connection_sock *newicsk = inet_csk(sk);
++		struct inet_connection_sock *newicsk = inet_csk(newsk);
+ 		struct tcp_sock *newtp;
+ 
+ 		/* Now setup tcp_sock */
+diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
+index 975f447..1951eaa 100644
+--- a/net/ipv4/tcp_output.c
++++ b/net/ipv4/tcp_output.c
+@@ -481,7 +481,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
+ 		/* RFC1323: The window in SYN & SYN/ACK segments
+ 		 * is never scaled.
+ 		 */
+-		th->window	= htons(tp->rcv_wnd);
++		th->window	= htons(min(tp->rcv_wnd, 65535U));
+ 	} else {
+ 		th->window	= htons(tcp_select_window(sk));
+ 	}
+@@ -965,7 +965,8 @@ static inline unsigned int tcp_cwnd_test(struct tcp_sock *tp, struct sk_buff *sk
+ 	u32 in_flight, cwnd;
+ 
+ 	/* Don't be strict about the congestion window for the final FIN.  */
+-	if (TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN)
++	if ((TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN) &&
++	    tcp_skb_pcount(skb) == 1)
+ 		return 1;
+ 
+ 	in_flight = tcp_packets_in_flight(tp);
+@@ -2159,7 +2160,7 @@ struct sk_buff * tcp_make_synack(struct sock *sk, struct dst_entry *dst,
+ 	}
+ 
+ 	/* RFC1323: The window in SYN & SYN/ACK segments is never scaled. */
+-	th->window = htons(req->rcv_wnd);
++	th->window = htons(min(req->rcv_wnd, 65535U));
+ 
+ 	TCP_SKB_CB(skb)->when = tcp_time_stamp;
+ 	tcp_syn_build_options((__be32 *)(th + 1), dst_metric(dst, RTAX_ADVMSS), ireq->tstamp_ok,
+diff --git a/net/ipv4/xfrm4_mode_tunnel.c b/net/ipv4/xfrm4_mode_tunnel.c
+index e23c21d..21ed667 100644
+--- a/net/ipv4/xfrm4_mode_tunnel.c
++++ b/net/ipv4/xfrm4_mode_tunnel.c
+@@ -84,6 +84,7 @@ static int xfrm4_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
+ 	    (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC)))
+ 		goto out;
+ 
++	iph = skb->nh.iph;
+ 	if (x->props.flags & XFRM_STATE_DECAP_DSCP)
+ 		ipv4_copy_dscp(iph, skb->h.ipiph);
+ 	if (!(x->props.flags & XFRM_STATE_NOECN))
+diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
+index e385469..58cb669 100644
+--- a/net/ipv6/addrconf.c
++++ b/net/ipv6/addrconf.c
+@@ -469,6 +469,8 @@ static void dev_forward_change(struct inet6_dev *idev)
+ 			ipv6_dev_mc_dec(dev, &addr);
+ 	}
+ 	for (ifa=idev->addr_list; ifa; ifa=ifa->if_next) {
++		if (ifa->flags&IFA_F_TENTATIVE)
++			continue;
+ 		if (idev->cnf.forwarding)
+ 			addrconf_join_anycast(ifa);
+ 		else
+diff --git a/net/ipv6/anycast.c b/net/ipv6/anycast.c
+index a960476..fe0c895 100644
+--- a/net/ipv6/anycast.c
++++ b/net/ipv6/anycast.c
+@@ -462,6 +462,7 @@ static inline struct ifacaddr6 *ac6_get_first(struct seq_file *seq)
+ 			break;
+ 		}
+ 		read_unlock_bh(&idev->lock);
++		in6_dev_put(idev);
+ 	}
+ 	return im;
+ }
+diff --git a/net/ipv6/inet6_hashtables.c b/net/ipv6/inet6_hashtables.c
+index b7e5bae..ba13f74 100644
+--- a/net/ipv6/inet6_hashtables.c
++++ b/net/ipv6/inet6_hashtables.c
+@@ -172,7 +172,7 @@ static int __inet6_check_established(struct inet_timewait_death_row *death_row,
+ 	const struct in6_addr *saddr = &np->daddr;
+ 	const int dif = sk->sk_bound_dev_if;
+ 	const __portpair ports = INET_COMBINED_PORTS(inet->dport, lport);
+-	const unsigned int hash = inet6_ehashfn(daddr, inet->num, saddr,
++	const unsigned int hash = inet6_ehashfn(daddr, lport, saddr,
+ 						inet->dport);
+ 	struct inet_ehash_bucket *head = inet_ehash_bucket(hinfo, hash);
+ 	struct sock *sk2;
+diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
+index 352690e..23db88e 100644
+--- a/net/ipv6/ipv6_sockglue.c
++++ b/net/ipv6/ipv6_sockglue.c
+@@ -796,11 +796,15 @@ int compat_ipv6_setsockopt(struct sock *sk, int level, int optname,
+ EXPORT_SYMBOL(compat_ipv6_setsockopt);
+ #endif
+ 
+-static int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_opt_hdr *hdr,
++static int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_txoptions *opt,
+ 				  char __user *optval, int len)
+ {
+-	if (!hdr)
++	struct ipv6_opt_hdr *hdr;
++
++	if (!opt || !opt->hopopt)
+ 		return 0;
++	hdr = opt->hopopt;
++
+ 	len = min_t(int, len, ipv6_optlen(hdr));
+ 	if (copy_to_user(optval, hdr, ipv6_optlen(hdr)))
+ 		return -EFAULT;
+@@ -941,7 +945,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
+ 	{
+ 
+ 		lock_sock(sk);
+-		len = ipv6_getsockopt_sticky(sk, np->opt->hopopt,
++		len = ipv6_getsockopt_sticky(sk, np->opt,
+ 					     optval, len);
+ 		release_sock(sk);
+ 		return put_user(len, optlen);
+diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
+index 882cde4..e3ec216 100644
+--- a/net/ipv6/mcast.c
++++ b/net/ipv6/mcast.c
+@@ -1582,6 +1582,8 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
+ 			skb = add_grhead(skb, pmc, type, &pgr);
+ 			first = 0;
+ 		}
++		if (!skb)
++			return NULL;
+ 		psrc = (struct in6_addr *)skb_put(skb, sizeof(*psrc));
+ 		*psrc = psf->sf_addr;
+ 		scount++; stotal++;
+diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c
+index 76c6615..89f283c 100644
+--- a/net/ipx/af_ipx.c
++++ b/net/ipx/af_ipx.c
+@@ -2035,19 +2035,27 @@ static void __exit ipx_proto_finito(void)
+ 
+ 	ipxitf_cleanup();
+ 
+-	unregister_snap_client(pSNAP_datalink);
+-	pSNAP_datalink = NULL;
++	if (pSNAP_datalink) {
++		unregister_snap_client(pSNAP_datalink);
++		pSNAP_datalink = NULL;
++	}
+ 
+-	unregister_8022_client(p8022_datalink);
+-	p8022_datalink = NULL;
++	if (p8022_datalink) {
++		unregister_8022_client(p8022_datalink);
++		p8022_datalink = NULL;
++	}
+ 
+ 	dev_remove_pack(&ipx_8023_packet_type);
+-	destroy_8023_client(p8023_datalink);
+-	p8023_datalink = NULL;
++	if (p8023_datalink) {
++		destroy_8023_client(p8023_datalink);
++		p8023_datalink = NULL;
++	}
+ 
+ 	dev_remove_pack(&ipx_dix_packet_type);
+-	destroy_EII_client(pEII_datalink);
+-	pEII_datalink = NULL;
++	if (pEII_datalink) {
++		destroy_EII_client(pEII_datalink);
++		pEII_datalink = NULL;
++	}
+ 
+ 	proto_unregister(&ipx_proto);
+ 	sock_unregister(ipx_family_ops.family);
+diff --git a/net/key/af_key.c b/net/key/af_key.c
+index 5dd5094..3b4a1f4 100644
+--- a/net/key/af_key.c
++++ b/net/key/af_key.c
+@@ -2297,16 +2297,17 @@ static int pfkey_spddelete(struct sock *sk, struct sk_buff *skb, struct sadb_msg
+ 				   &sel, tmp.security, 1);
+ 	security_xfrm_policy_free(&tmp);
+ 
+-	xfrm_audit_log(audit_get_loginuid(current->audit_context), 0,
+-		       AUDIT_MAC_IPSEC_DELSPD, (xp) ? 1 : 0, xp, NULL);
+-
+ 	if (xp == NULL)
+ 		return -ENOENT;
+ 
+-	err = 0;
++	err = security_xfrm_policy_delete(xp);
+ 
+-	if ((err = security_xfrm_policy_delete(xp)))
++	xfrm_audit_log(audit_get_loginuid(current->audit_context), 0,
++		       AUDIT_MAC_IPSEC_DELSPD, err ? 0 : 1, xp, NULL);
++
++	if (err)
+ 		goto out;
++
+ 	c.seq = hdr->sadb_msg_seq;
+ 	c.pid = hdr->sadb_msg_pid;
+ 	c.event = XFRM_MSG_DELPOLICY;
+diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
+index d1505dd..24c1d29 100644
+--- a/net/netfilter/nfnetlink_log.c
++++ b/net/netfilter/nfnetlink_log.c
+@@ -217,6 +217,11 @@ _instance_destroy2(struct nfulnl_instance *inst, int lock)
+ 
+ 	spin_lock_bh(&inst->lock);
+ 	if (inst->skb) {
++		/* timer "holds" one reference (we have one more) */
++		if (timer_pending(&inst->timer)) {
++			del_timer(&inst->timer);
++			instance_put(inst);
++		}
+ 		if (inst->qlen)
+ 			__nfulnl_send(inst);
+ 		if (inst->skb) {
+@@ -363,9 +368,6 @@ __nfulnl_send(struct nfulnl_instance *inst)
+ {
+ 	int status;
+ 
+-	if (timer_pending(&inst->timer))
+-		del_timer(&inst->timer);
+-
+ 	if (!inst->skb)
+ 		return 0;
+ 
+@@ -392,6 +394,8 @@ static void nfulnl_timer(unsigned long data)
+ 	UDEBUG("timer function called, flushing buffer\n");
+ 
+ 	spin_lock_bh(&inst->lock);
++	if (timer_pending(&inst->timer))	/* is it always true or false here? */
++		del_timer(&inst->timer);
+ 	__nfulnl_send(inst);
+ 	instance_put(inst);
+ 	spin_unlock_bh(&inst->lock);
+@@ -689,6 +693,11 @@ nfulnl_log_packet(unsigned int pf,
+ 		 * enough room in the skb left. flush to userspace. */
+ 		UDEBUG("flushing old skb\n");
+ 
++		/* timer "holds" one reference (we have another one) */
++		if (timer_pending(&inst->timer)) {
++			del_timer(&inst->timer);
++			instance_put(inst);
++		}
+ 		__nfulnl_send(inst);
+ 
+ 		if (!(inst->skb = nfulnl_alloc_skb(nlbufsiz, size))) {
+diff --git a/net/sunrpc/pmap_clnt.c b/net/sunrpc/pmap_clnt.c
+index 3946ec3..76e59e9 100644
+--- a/net/sunrpc/pmap_clnt.c
++++ b/net/sunrpc/pmap_clnt.c
+@@ -62,7 +62,10 @@ static inline void pmap_map_free(struct portmap_args *map)
+ 
+ static void pmap_map_release(void *data)
+ {
+-	pmap_map_free(data);
++	struct portmap_args *map = data;
++
++	xprt_put(map->pm_xprt);
++	pmap_map_free(map);
+ }
+ 
+ static const struct rpc_call_ops pmap_getport_ops = {
+@@ -133,7 +136,7 @@ void rpc_getport(struct rpc_task *task)
+ 	status = -EIO;
+ 	child = rpc_run_task(pmap_clnt, RPC_TASK_ASYNC, &pmap_getport_ops, map);
+ 	if (IS_ERR(child))
+-		goto bailout;
++		goto bailout_nofree;
+ 	rpc_put_task(child);
+ 
+ 	task->tk_xprt->stat.bind_count++;
+@@ -222,7 +225,6 @@ static void pmap_getport_done(struct rpc_task *child, void *data)
+ 			child->tk_pid, status, map->pm_port);
+ 
+ 	pmap_wake_portmap_waiters(xprt, status);
+-	xprt_put(xprt);
+ }
+ 
+ /**
+diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
+index 4c16112..baf27a9 100644
+--- a/net/sunrpc/svc.c
++++ b/net/sunrpc/svc.c
+@@ -79,7 +79,11 @@ svc_pool_map_choose_mode(void)
+ 		 * x86_64 kernel on Xeons.  In this case we
+ 		 * want to divide the pools on cpu boundaries.
+ 		 */
+-		return SVC_POOL_PERCPU;
++		/* actually, unless your IRQs round-robin nicely,
++		 * this turns out to be really bad, so just
++		 * go GLOBAL for now until a better fix can be developped
++		 */
++		return SVC_POOL_GLOBAL;
+ 	}
+ 
+ 	/* default: one global pool */
+@@ -367,6 +371,7 @@ void
+ svc_destroy(struct svc_serv *serv)
+ {
+ 	struct svc_sock	*svsk;
++	struct svc_sock *tmp;
+ 
+ 	dprintk("RPC: svc_destroy(%s, %d)\n",
+ 				serv->sv_program->pg_name,
+@@ -382,22 +387,18 @@ svc_destroy(struct svc_serv *serv)
+ 
+ 	del_timer_sync(&serv->sv_temptimer);
+ 
+-	while (!list_empty(&serv->sv_tempsocks)) {
+-		svsk = list_entry(serv->sv_tempsocks.next,
+-				  struct svc_sock,
+-				  sk_list);
+-		svc_delete_socket(svsk);
+-	}
++	list_for_each_entry_safe(svsk, tmp, &serv->sv_tempsocks, sk_list)
++		svc_force_close_socket(svsk);
++
+ 	if (serv->sv_shutdown)
+ 		serv->sv_shutdown(serv);
+ 
+-	while (!list_empty(&serv->sv_permsocks)) {
+-		svsk = list_entry(serv->sv_permsocks.next,
+-				  struct svc_sock,
+-				  sk_list);
+-		svc_delete_socket(svsk);
+-	}
+-	
++	list_for_each_entry_safe(svsk, tmp, &serv->sv_permsocks, sk_list)
++		svc_force_close_socket(svsk);
++
++	BUG_ON(!list_empty(&serv->sv_permsocks));
++	BUG_ON(!list_empty(&serv->sv_tempsocks));
++
+ 	cache_clean_deferred(serv);
+ 
+ 	/* Unregister service with the portmapper */
+diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
+index ff1f8bf..cd296a5 100644
+--- a/net/sunrpc/svcsock.c
++++ b/net/sunrpc/svcsock.c
+@@ -62,6 +62,12 @@
+  *		after a clear, the socket must be read/accepted
+  *		 if this succeeds, it must be set again.
+  *	SK_CLOSE can set at any time. It is never cleared.
++ *      sk_inuse contains a bias of '1' until SK_DEAD is set.
++ *             so when sk_inuse hits zero, we know the socket is dead
++ *             and no-one is using it.
++ *      SK_DEAD can only be set while SK_BUSY is held which ensures
++ *             no other thread will be using the socket or will try to
++ *	       set SK_DEAD.
+  *
+  */
+ 
+@@ -70,9 +76,11 @@
+ 
+ static struct svc_sock *svc_setup_socket(struct svc_serv *, struct socket *,
+ 					 int *errp, int pmap_reg);
++static void		svc_delete_socket(struct svc_sock *svsk);
+ static void		svc_udp_data_ready(struct sock *, int);
+ static int		svc_udp_recvfrom(struct svc_rqst *);
+ static int		svc_udp_sendto(struct svc_rqst *);
++static void		svc_close_socket(struct svc_sock *svsk);
+ 
+ static struct svc_deferred_req *svc_deferred_dequeue(struct svc_sock *svsk);
+ static int svc_deferred_recv(struct svc_rqst *rqstp);
+@@ -329,8 +337,9 @@ void svc_reserve(struct svc_rqst *rqstp, int space)
+ static inline void
+ svc_sock_put(struct svc_sock *svsk)
+ {
+-	if (atomic_dec_and_test(&svsk->sk_inuse) &&
+-			test_bit(SK_DEAD, &svsk->sk_flags)) {
++	if (atomic_dec_and_test(&svsk->sk_inuse)) {
++		BUG_ON(! test_bit(SK_DEAD, &svsk->sk_flags));
++
+ 		dprintk("svc: releasing dead socket\n");
+ 		if (svsk->sk_sock->file)
+ 			sockfd_put(svsk->sk_sock);
+@@ -520,7 +529,7 @@ svc_sock_names(char *buf, struct svc_serv *serv, char *toclose)
+ 
+ 	if (!serv)
+ 		return 0;
+-	spin_lock(&serv->sv_lock);
++	spin_lock_bh(&serv->sv_lock);
+ 	list_for_each_entry(svsk, &serv->sv_permsocks, sk_list) {
+ 		int onelen = one_sock_name(buf+len, svsk);
+ 		if (toclose && strcmp(toclose, buf+len) == 0)
+@@ -528,12 +537,12 @@ svc_sock_names(char *buf, struct svc_serv *serv, char *toclose)
+ 		else
+ 			len += onelen;
+ 	}
+-	spin_unlock(&serv->sv_lock);
++	spin_unlock_bh(&serv->sv_lock);
+ 	if (closesk)
+ 		/* Should unregister with portmap, but you cannot
+ 		 * unregister just one protocol...
+ 		 */
+-		svc_delete_socket(closesk);
++		svc_close_socket(closesk);
+ 	else if (toclose)
+ 		return -ENOENT;
+ 	return len;
+@@ -683,6 +692,11 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
+ 		return svc_deferred_recv(rqstp);
+ 	}
+ 
++	if (test_bit(SK_CLOSE, &svsk->sk_flags)) {
++		svc_delete_socket(svsk);
++		return 0;
++	}
++
+ 	clear_bit(SK_DATA, &svsk->sk_flags);
+ 	while ((skb = skb_recv_datagram(svsk->sk_sk, 0, 1, &err)) == NULL) {
+ 		if (err == -EAGAIN) {
+@@ -1176,7 +1190,8 @@ svc_tcp_sendto(struct svc_rqst *rqstp)
+ 		       rqstp->rq_sock->sk_server->sv_name,
+ 		       (sent<0)?"got error":"sent only",
+ 		       sent, xbufp->len);
+-		svc_delete_socket(rqstp->rq_sock);
++		set_bit(SK_CLOSE, &rqstp->rq_sock->sk_flags);
++		svc_sock_enqueue(rqstp->rq_sock);
+ 		sent = -EAGAIN;
+ 	}
+ 	return sent;
+@@ -1495,7 +1510,7 @@ svc_setup_socket(struct svc_serv *serv, struct socket *sock,
+ 	svsk->sk_odata = inet->sk_data_ready;
+ 	svsk->sk_owspace = inet->sk_write_space;
+ 	svsk->sk_server = serv;
+-	atomic_set(&svsk->sk_inuse, 0);
++	atomic_set(&svsk->sk_inuse, 1);
+ 	svsk->sk_lastrecv = get_seconds();
+ 	spin_lock_init(&svsk->sk_defer_lock);
+ 	INIT_LIST_HEAD(&svsk->sk_deferred);
+@@ -1618,7 +1633,7 @@ bummer:
+ /*
+  * Remove a dead socket
+  */
+-void
++static void
+ svc_delete_socket(struct svc_sock *svsk)
+ {
+ 	struct svc_serv	*serv;
+@@ -1644,19 +1659,42 @@ svc_delete_socket(struct svc_sock *svsk)
+ 	 * while still attached to a queue, the queue itself
+ 	 * is about to be destroyed (in svc_destroy).
+ 	 */
+-	if (!test_and_set_bit(SK_DEAD, &svsk->sk_flags))
++	if (!test_and_set_bit(SK_DEAD, &svsk->sk_flags)) {
++		BUG_ON(atomic_read(&svsk->sk_inuse)<2);
++		atomic_dec(&svsk->sk_inuse);
+ 		if (test_bit(SK_TEMP, &svsk->sk_flags))
+ 			serv->sv_tmpcnt--;
++	}
+ 
+-	/* This atomic_inc should be needed - svc_delete_socket
+-	 * should have the semantic of dropping a reference.
+-	 * But it doesn't yet....
+-	 */
+-	atomic_inc(&svsk->sk_inuse);
+ 	spin_unlock_bh(&serv->sv_lock);
++}
++
++static void svc_close_socket(struct svc_sock *svsk)
++{
++	set_bit(SK_CLOSE, &svsk->sk_flags);
++	if (test_and_set_bit(SK_BUSY, &svsk->sk_flags))
++		/* someone else will have to effect the close */
++		return;
++
++	atomic_inc(&svsk->sk_inuse);
++	svc_delete_socket(svsk);
++	clear_bit(SK_BUSY, &svsk->sk_flags);
+ 	svc_sock_put(svsk);
+ }
+ 
++void svc_force_close_socket(struct svc_sock *svsk)
++{
++	set_bit(SK_CLOSE, &svsk->sk_flags);
++	if (test_bit(SK_BUSY, &svsk->sk_flags)) {
++		/* Waiting to be processed, but no threads left,
++		 * So just remove it from the waiting list
++		 */
++		list_del_init(&svsk->sk_ready);
++		clear_bit(SK_BUSY, &svsk->sk_flags);
++	}
++	svc_close_socket(svsk);
++}
++
+ /*
+  * Make a socket for nfsd and lockd
+  */
+diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
+index b7e537f..9704e05 100644
+--- a/net/xfrm/xfrm_policy.c
++++ b/net/xfrm/xfrm_policy.c
+@@ -1997,9 +1997,14 @@ void xfrm_audit_log(uid_t auid, u32 sid, int type, int result,
+ 	if (audit_enabled == 0)
+ 		return;
+ 
++	BUG_ON((type == AUDIT_MAC_IPSEC_ADDSA ||
++		type == AUDIT_MAC_IPSEC_DELSA) && !x);
++	BUG_ON((type == AUDIT_MAC_IPSEC_ADDSPD ||
++		type == AUDIT_MAC_IPSEC_DELSPD) && !xp);
++
+ 	audit_buf = audit_log_start(current->audit_context, GFP_ATOMIC, type);
+ 	if (audit_buf == NULL)
+-	return;
++		return;
+ 
+ 	switch(type) {
+ 	case AUDIT_MAC_IPSEC_ADDSA:
+diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
+index 82f36d3..24d15f2 100644
+--- a/net/xfrm/xfrm_user.c
++++ b/net/xfrm/xfrm_user.c
+@@ -1273,10 +1273,6 @@ static int xfrm_get_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
+ 		xp = xfrm_policy_bysel_ctx(type, p->dir, &p->sel, tmp.security, delete);
+ 		security_xfrm_policy_free(&tmp);
+ 	}
+-	if (delete)
+-		xfrm_audit_log(NETLINK_CB(skb).loginuid, NETLINK_CB(skb).sid,
+-			       AUDIT_MAC_IPSEC_DELSPD, (xp) ? 1 : 0, xp, NULL);
+-
+ 	if (xp == NULL)
+ 		return -ENOENT;
+ 
+@@ -1292,8 +1288,14 @@ static int xfrm_get_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
+ 					      MSG_DONTWAIT);
+ 		}
+ 	} else {
+-		if ((err = security_xfrm_policy_delete(xp)) != 0)
++		err = security_xfrm_policy_delete(xp);
++
++		xfrm_audit_log(NETLINK_CB(skb).loginuid, NETLINK_CB(skb).sid,
++			       AUDIT_MAC_IPSEC_DELSPD, err ? 0 : 1, xp, NULL);
++
++		if (err != 0)
+ 			goto out;
++
+ 		c.data.byid = p->index;
+ 		c.event = nlh->nlmsg_type;
+ 		c.seq = nlh->nlmsg_seq;
+@@ -1555,14 +1557,13 @@ static int xfrm_add_sa_expire(struct sk_buff *skb, struct nlmsghdr *nlh,
+ 	struct xfrm_usersa_info *p = &ue->state;
+ 
+ 	x = xfrm_state_lookup(&p->id.daddr, p->id.spi, p->id.proto, p->family);
+-		err = -ENOENT;
+ 
++	err = -ENOENT;
+ 	if (x == NULL)
+ 		return err;
+ 
+-	err = -EINVAL;
+-
+ 	spin_lock_bh(&x->lock);
++	err = -EINVAL;
+ 	if (x->km.state != XFRM_STATE_VALID)
+ 		goto out;
+ 	km_state_expired(x, ue->hard, current->pid);
+@@ -1572,6 +1573,7 @@ static int xfrm_add_sa_expire(struct sk_buff *skb, struct nlmsghdr *nlh,
+ 		xfrm_audit_log(NETLINK_CB(skb).loginuid, NETLINK_CB(skb).sid,
+ 			       AUDIT_MAC_IPSEC_DELSA, 1, NULL, x);
+ 	}
++	err = 0;
+ out:
+ 	spin_unlock_bh(&x->lock);
+ 	xfrm_state_put(x);
+diff --git a/security/keys/key.c b/security/keys/key.c
+index ac9326c..700400d 100644
+--- a/security/keys/key.c
++++ b/security/keys/key.c
+@@ -188,6 +188,7 @@ static inline void key_alloc_serial(struct key *key)
+ 
+ 	spin_lock(&key_serial_lock);
+ 
++attempt_insertion:
+ 	parent = NULL;
+ 	p = &key_serial_tree.rb_node;
+ 
+@@ -202,39 +203,33 @@ static inline void key_alloc_serial(struct key *key)
+ 		else
+ 			goto serial_exists;
+ 	}
+-	goto insert_here;
++
++	/* we've found a suitable hole - arrange for this key to occupy it */
++	rb_link_node(&key->serial_node, parent, p);
++	rb_insert_color(&key->serial_node, &key_serial_tree);
++
++	spin_unlock(&key_serial_lock);
++	return;
+ 
+ 	/* we found a key with the proposed serial number - walk the tree from
+ 	 * that point looking for the next unused serial number */
+ serial_exists:
+ 	for (;;) {
+ 		key->serial++;
+-		if (key->serial < 2)
+-			key->serial = 2;
+-
+-		if (!rb_parent(parent))
+-			p = &key_serial_tree.rb_node;
+-		else if (rb_parent(parent)->rb_left == parent)
+-			p = &(rb_parent(parent)->rb_left);
+-		else
+-			p = &(rb_parent(parent)->rb_right);
++		if (key->serial < 3) {
++			key->serial = 3;
++			goto attempt_insertion;
++		}
+ 
+ 		parent = rb_next(parent);
+ 		if (!parent)
+-			break;
++			goto attempt_insertion;
+ 
+ 		xkey = rb_entry(parent, struct key, serial_node);
+ 		if (key->serial < xkey->serial)
+-			goto insert_here;
++			goto attempt_insertion;
+ 	}
+ 
+-	/* we've found a suitable hole - arrange for this key to occupy it */
+-insert_here:
+-	rb_link_node(&key->serial_node, parent, p);
+-	rb_insert_color(&key->serial_node, &key_serial_tree);
+-
+-	spin_unlock(&key_serial_lock);
+-
+ } /* end key_alloc_serial() */
+ 
+ /*****************************************************************************/
+diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
+index 1a7e821..77f8ec7 100644
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -199,7 +199,7 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
+ 
+ /* STATESTS int mask: SD2,SD1,SD0 */
+ #define STATESTS_INT_MASK	0x07
+-#define AZX_MAX_CODECS		4
++#define AZX_MAX_CODECS		3
+ 
+ /* SD_CTL bits */
+ #define SD_CTL_STREAM_RESET	0x01	/* stream reset bit */
+diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
+index 19bdcc7..1bd9af6 100644
+--- a/sound/usb/usbaudio.c
++++ b/sound/usb/usbaudio.c
+@@ -186,6 +186,7 @@ struct snd_usb_substream {
+ 	u64 formats;			/* format bitmasks (all or'ed) */
+ 	unsigned int num_formats;		/* number of supported audio formats (list) */
+ 	struct list_head fmt_list;	/* format list */
++	struct snd_pcm_hw_constraint_list rate_list;	/* limited rates */
+ 	spinlock_t lock;
+ 
+ 	struct snd_urb_ops ops;		/* callbacks (must be filled at init) */
+@@ -1810,28 +1811,33 @@ static int check_hw_params_convention(struct snd_usb_substream *subs)
+ static int snd_usb_pcm_check_knot(struct snd_pcm_runtime *runtime,
+ 				  struct snd_usb_substream *subs)
+ {
+-	struct list_head *p;
+-	struct snd_pcm_hw_constraint_list constraints_rates;
++	struct audioformat *fp;
++	int count = 0, needs_knot = 0;
+ 	int err;
+ 
+-	list_for_each(p, &subs->fmt_list) {
+-		struct audioformat *fp;
+-		fp = list_entry(p, struct audioformat, list);
+-
+-		if (!fp->needs_knot)
+-			continue;
+-
+-		constraints_rates.count = fp->nr_rates;
+-		constraints_rates.list = fp->rate_table;
+-		constraints_rates.mask = 0;
+-
+-		err = snd_pcm_hw_constraint_list(runtime, 0,
+-			SNDRV_PCM_HW_PARAM_RATE,
+-			&constraints_rates);
+-
+-		if (err < 0)
+-			return err;
++	list_for_each_entry(fp, &subs->fmt_list, list) {
++		if (fp->rates & SNDRV_PCM_RATE_CONTINUOUS)
++			return 0;
++		count += fp->nr_rates;
++		if (fp->needs_knot)
++			needs_knot = 1;
+ 	}
++	if (!needs_knot)
++		return 0;
++
++	subs->rate_list.count = count;
++	subs->rate_list.list = kmalloc(sizeof(int) * count, GFP_KERNEL);
++	subs->rate_list.mask = 0;
++	count = 0;
++	list_for_each_entry(fp, &subs->fmt_list, list) {
++		int i;
++		for (i = 0; i < fp->nr_rates; i++)
++			subs->rate_list.list[count++] = fp->rate_table[i];
++	}
++	err = snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
++					 &subs->rate_list);
++	if (err < 0)
++		return err;
+ 
+ 	return 0;
+ }
+@@ -2231,6 +2237,7 @@ static void free_substream(struct snd_usb_substream *subs)
+ 		kfree(fp->rate_table);
+ 		kfree(fp);
+ 	}
++	kfree(subs->rate_list.list);
+ }
+ 
+ 
+@@ -2456,6 +2463,7 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform
+ 		 * build the rate table and bitmap flags
+ 		 */
+ 		int r, idx, c;
++		unsigned int nonzero_rates = 0;
+ 		/* this table corresponds to the SNDRV_PCM_RATE_XXX bit */
+ 		static unsigned int conv_rates[] = {
+ 			5512, 8000, 11025, 16000, 22050, 32000, 44100, 48000,
+@@ -2478,6 +2486,7 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform
+ 			    fp->altsetting == 5 && fp->maxpacksize == 392)
+ 				rate = 96000;
+ 			fp->rate_table[r] = rate;
++			nonzero_rates |= rate;
+ 			if (rate < fp->rate_min)
+ 				fp->rate_min = rate;
+ 			else if (rate > fp->rate_max)
+@@ -2493,6 +2502,10 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform
+ 			if (!found)
+ 				fp->needs_knot = 1;
+ 		}
++		if (!nonzero_rates) {
++			hwc_debug("All rates were zero. Skipping format!\n");
++			return -1;
++		}
+ 		if (fp->needs_knot)
+ 			fp->rates |= SNDRV_PCM_RATE_KNOT;
+ 	} else {

Modified: dists/trunk/linux-2.6/debian/patches/bugfix/powerpc/drivers_macintosh-broken.patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/bugfix/powerpc/drivers_macintosh-broken.patch	(original)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/powerpc/drivers_macintosh-broken.patch	Sat Mar 10 13:18:48 2007
@@ -5,8 +5,8 @@
 @@ -1,6 +1,6 @@
  
  menu "Macintosh device drivers"
--	depends on PPC || MAC
-+	depends on PPC_MAC || PPC_CHRP || MAC
+-	depends on PPC || MAC || X86
++	depends on PPC_MAC || PPC_CHRP || MAC || X86
  
  config ADB
  	bool "Apple Desktop Bus (ADB) support"

Modified: dists/trunk/linux-2.6/debian/patches/features/all/vserver/gen-patch
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/vserver/gen-patch	(original)
+++ dists/trunk/linux-2.6/debian/patches/features/all/vserver/gen-patch	Sat Mar 10 13:18:48 2007
@@ -11,4 +11,4 @@
 
 file="$(dirname $0)/$version.patch"
 
-filterdiff -p 1 -x Makefile -x init/version.c "$patch" | grep -v "^diff" > "$file"
+filterdiff -p 1 -x Makefile "$patch" | grep -v "^diff" > "$file"

Copied: dists/trunk/linux-2.6/debian/patches/features/all/vserver/vs2.2.0-rc15.patch (from r8291, dists/trunk/linux-2.6/debian/patches/features/all/vserver/vs2.2.0-pre3.patch)
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/features/all/vserver/vs2.2.0-pre3.patch	(original)
+++ dists/trunk/linux-2.6/debian/patches/features/all/vserver/vs2.2.0-rc15.patch	Sat Mar 10 13:18:48 2007
@@ -1,5 +1,5 @@
---- linux-2.6.20/Documentation/vserver/debug.txt	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/Documentation/vserver/debug.txt	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/Documentation/vserver/debug.txt	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/Documentation/vserver/debug.txt	2007-02-06 03:05:21 +0100
 @@ -0,0 +1,154 @@
 +
 +debug_cvirt:
@@ -155,8 +155,8 @@
 + 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"
---- linux-2.6.20/arch/alpha/Kconfig	2007-02-06 02:59:58 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/alpha/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/alpha/Kconfig	2007-02-06 02:59:58 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/alpha/Kconfig	2007-02-06 03:05:21 +0100
 @@ -640,6 +640,8 @@ source "arch/alpha/oprofile/Kconfig"
  
  source "arch/alpha/Kconfig.debug"
@@ -166,8 +166,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/alpha/kernel/asm-offsets.c	2006-02-15 13:54:10 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/alpha/kernel/asm-offsets.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/alpha/kernel/asm-offsets.c	2006-02-15 13:54:10 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/alpha/kernel/asm-offsets.c	2007-02-06 03:05:21 +0100
 @@ -36,6 +36,7 @@ void foo(void)
  	DEFINE(PT_PTRACED, PT_PTRACED);
  	DEFINE(CLONE_VM, CLONE_VM);
@@ -176,8 +176,8 @@
  	DEFINE(SIGCHLD, SIGCHLD);
  	BLANK();
  
---- linux-2.6.20/arch/alpha/kernel/entry.S	2006-11-30 21:18:23 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/alpha/kernel/entry.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/alpha/kernel/entry.S	2006-11-30 21:18:23 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/alpha/kernel/entry.S	2007-02-06 03:05:21 +0100
 @@ -644,7 +644,7 @@ kernel_thread:
  	stq	$2, 152($sp)		/* HAE */
  
@@ -219,8 +219,8 @@
  	ret
  .end sys_getxpid
  
---- linux-2.6.20/arch/alpha/kernel/osf_sys.c	2007-02-06 02:59:58 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/alpha/kernel/osf_sys.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/alpha/kernel/osf_sys.c	2007-02-06 02:59:58 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/alpha/kernel/osf_sys.c	2007-02-06 03:05:21 +0100
 @@ -885,7 +885,7 @@ osf_gettimeofday(struct timeval32 __user
  {
  	if (tv) {
@@ -230,8 +230,8 @@
  		if (put_tv32(tv, &ktv))
  			return -EFAULT;
  	}
---- linux-2.6.20/arch/alpha/kernel/ptrace.c	2006-04-09 13:49:39 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/alpha/kernel/ptrace.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/alpha/kernel/ptrace.c	2006-04-09 13:49:39 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/alpha/kernel/ptrace.c	2007-02-06 03:05:21 +0100
 @@ -15,6 +15,7 @@
  #include <linux/slab.h>
  #include <linux/security.h>
@@ -252,8 +252,8 @@
  	if (request == PTRACE_ATTACH) {
  		ret = ptrace_attach(child);
  		goto out;
---- linux-2.6.20/arch/alpha/kernel/semaphore.c	2004-08-14 12:55:32 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/alpha/kernel/semaphore.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/alpha/kernel/semaphore.c	2004-08-14 12:55:32 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/alpha/kernel/semaphore.c	2007-02-06 03:05:21 +0100
 @@ -68,8 +68,8 @@ __down_failed(struct semaphore *sem)
  	DECLARE_WAITQUEUE(wait, tsk);
  
@@ -287,8 +287,8 @@
  #endif
  
  	tsk->state = TASK_INTERRUPTIBLE;
---- linux-2.6.20/arch/alpha/kernel/systbls.S	2006-11-30 21:18:23 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/alpha/kernel/systbls.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/alpha/kernel/systbls.S	2006-11-30 21:18:23 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/alpha/kernel/systbls.S	2007-02-06 03:05:21 +0100
 @@ -446,7 +446,7 @@ sys_call_table:
  	.quad sys_stat64			/* 425 */
  	.quad sys_lstat64
@@ -298,8 +298,8 @@
  	.quad sys_ni_syscall			/* sys_mbind */
  	.quad sys_ni_syscall			/* sys_get_mempolicy */
  	.quad sys_ni_syscall			/* sys_set_mempolicy */
---- linux-2.6.20/arch/alpha/kernel/traps.c	2006-09-20 16:57:57 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/alpha/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/alpha/kernel/traps.c	2006-09-20 16:57:57 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/alpha/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -182,7 +182,8 @@ die_if_kernel(char * str, struct pt_regs
  #ifdef CONFIG_SMP
  	printk("CPU %d ", hard_smp_processor_id());
@@ -310,8 +310,8 @@
  	dik_show_regs(regs, r9_15);
  	dik_show_trace((unsigned long *)(regs+1));
  	dik_show_code((unsigned int *)regs->pc);
---- linux-2.6.20/arch/alpha/mm/init.c	2006-11-30 21:18:23 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/alpha/mm/init.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/alpha/mm/init.c	2006-11-30 21:18:23 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/alpha/mm/init.c	2007-02-06 03:05:21 +0100
 @@ -20,6 +20,7 @@
  #include <linux/init.h>
  #include <linux/bootmem.h> /* max_low_pfn */
@@ -320,8 +320,8 @@
  
  #include <asm/system.h>
  #include <asm/uaccess.h>
---- linux-2.6.20/arch/arm/Kconfig	2007-02-06 02:59:58 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/arm/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/arm/Kconfig	2007-02-06 02:59:58 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/arm/Kconfig	2007-02-06 03:05:21 +0100
 @@ -970,6 +970,8 @@ source "arch/arm/oprofile/Kconfig"
  
  source "arch/arm/Kconfig.debug"
@@ -331,8 +331,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/arm/kernel/calls.S	2007-02-06 02:59:59 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/arm/kernel/calls.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/arm/kernel/calls.S	2007-02-06 02:59:59 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/arm/kernel/calls.S	2007-02-06 03:05:21 +0100
 @@ -322,7 +322,7 @@
  /* 310 */	CALL(sys_request_key)
  		CALL(sys_keyctl)
@@ -342,8 +342,8 @@
  		CALL(sys_ioprio_set)
  /* 315 */	CALL(sys_ioprio_get)
  		CALL(sys_inotify_init)
---- linux-2.6.20/arch/arm/kernel/process.c	2007-02-06 02:59:59 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/arm/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/arm/kernel/process.c	2007-02-06 02:59:59 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/arm/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -246,7 +246,8 @@ void __show_regs(struct pt_regs *regs)
  void show_regs(struct pt_regs * regs)
  {
@@ -364,8 +364,8 @@
  }
  EXPORT_SYMBOL(kernel_thread);
  
---- linux-2.6.20/arch/arm/kernel/traps.c	2007-02-06 02:59:59 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/arm/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/arm/kernel/traps.c	2007-02-06 02:59:59 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/arm/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -206,8 +206,8 @@ static void __die(const char *str, int e
  	printk("Internal error: %s: %x [#%d]\n", str, err, ++die_counter);
  	print_modules();
@@ -377,8 +377,8 @@
  
  	if (!user_mode(regs) || in_interrupt()) {
  		dump_mem("Stack: ", regs->ARM_sp,
---- linux-2.6.20/arch/arm26/Kconfig	2007-02-06 03:00:02 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/arm26/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/arm26/Kconfig	2007-02-06 03:00:02 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/arm26/Kconfig	2007-02-06 03:05:21 +0100
 @@ -242,6 +242,8 @@ source "drivers/usb/Kconfig"
  
  source "arch/arm26/Kconfig.debug"
@@ -388,8 +388,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/arm26/kernel/calls.S	2005-03-02 12:38:19 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/arm26/kernel/calls.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/arm26/kernel/calls.S	2005-03-02 12:38:19 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/arm26/kernel/calls.S	2007-02-06 03:05:21 +0100
 @@ -257,6 +257,11 @@ __syscall_start:
  		.long	sys_lremovexattr
  		.long	sys_fremovexattr
@@ -402,8 +402,8 @@
  __syscall_end:
  
  		.rept	NR_syscalls - (__syscall_end - __syscall_start) / 4
---- linux-2.6.20/arch/arm26/kernel/process.c	2006-09-20 16:57:57 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/arm26/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/arm26/kernel/process.c	2006-09-20 16:57:57 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/arm26/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -365,7 +365,8 @@ pid_t kernel_thread(int (*fn)(void *), v
          regs.ARM_r3 = (unsigned long)do_exit;
          regs.ARM_pc = (unsigned long)kernel_thread_helper | MODE_SVC26;
@@ -414,8 +414,8 @@
  }
  EXPORT_SYMBOL(kernel_thread);
  
---- linux-2.6.20/arch/arm26/kernel/traps.c	2006-09-20 16:57:57 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/arm26/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/arm26/kernel/traps.c	2006-09-20 16:57:57 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/arm26/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -185,8 +185,9 @@ NORET_TYPE void die(const char *str, str
  	printk("Internal error: %s: %x\n", str, err);
  	printk("CPU: %d\n", smp_processor_id());
@@ -428,8 +428,8 @@
  
  	if (!user_mode(regs) || in_interrupt()) {
  		__dump_stack(tsk, (unsigned long)(regs + 1));
---- linux-2.6.20/arch/cris/Kconfig	2007-02-06 03:00:02 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/cris/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/cris/Kconfig	2007-02-06 03:00:02 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/cris/Kconfig	2007-02-06 03:05:21 +0100
 @@ -193,6 +193,8 @@ source "drivers/usb/Kconfig"
  
  source "arch/cris/Kconfig.debug"
@@ -439,8 +439,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/cris/arch-v10/kernel/process.c	2006-09-20 16:57:57 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/cris/arch-v10/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/cris/arch-v10/kernel/process.c	2006-09-20 16:57:57 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/cris/arch-v10/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -103,7 +103,8 @@ int kernel_thread(int (*fn)(void *), voi
  	regs.dccr = 1 << I_DCCR_BITNR;
  
@@ -451,8 +451,8 @@
  }
  
  /* setup the child's kernel stack with a pt_regs and switch_stack on it.
---- linux-2.6.20/arch/cris/arch-v32/kernel/process.c	2006-09-20 16:57:57 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/cris/arch-v32/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/cris/arch-v32/kernel/process.c	2006-09-20 16:57:57 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/cris/arch-v32/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -120,7 +120,8 @@ kernel_thread(int (*fn)(void *), void * 
  	regs.ccs = 1 << (I_CCS_BITNR + CCS_SHIFT);
  
@@ -463,8 +463,8 @@
  }
  
  /*
---- linux-2.6.20/arch/cris/kernel/irq.c	2006-09-20 16:57:57 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/cris/kernel/irq.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/cris/kernel/irq.c	2006-09-20 16:57:57 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/cris/kernel/irq.c	2007-02-06 03:05:21 +0100
 @@ -92,6 +92,7 @@ skip:
  asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
  {
@@ -473,8 +473,8 @@
  	irq_enter();
  	sp = rdsp();
  	if (unlikely((sp & (PAGE_SIZE - 1)) < (PAGE_SIZE/8))) {
---- linux-2.6.20/arch/frv/kernel/kernel_thread.S	2005-03-02 12:38:20 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/frv/kernel/kernel_thread.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/frv/kernel/kernel_thread.S	2005-03-02 12:38:20 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/frv/kernel/kernel_thread.S	2007-02-06 03:05:21 +0100
 @@ -13,6 +13,8 @@
  #include <asm/unistd.h>
  
@@ -493,8 +493,8 @@
  	sethi.p		#0xe4e4,gr9		; second syscall arg	[newsp]
  	setlo		#0xe4e4,gr9
  	setlos.p	#0,gr10			; third syscall arg	[parent_tidptr]
---- linux-2.6.20/arch/h8300/Kconfig	2007-02-06 03:00:03 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/h8300/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/h8300/Kconfig	2007-02-06 03:00:03 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/h8300/Kconfig	2007-02-06 03:05:21 +0100
 @@ -207,6 +207,8 @@ source "fs/Kconfig"
  
  source "arch/h8300/Kconfig.debug"
@@ -504,8 +504,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/h8300/kernel/process.c	2006-09-20 16:57:58 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/h8300/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/h8300/kernel/process.c	2006-09-20 16:57:58 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/h8300/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -134,7 +134,7 @@ int kernel_thread(int (*fn)(void *), voi
  
  	fs = get_fs();
@@ -515,8 +515,8 @@
  	__asm__("mov.l sp,er3\n\t"
  		"sub.l er2,er2\n\t"
  		"mov.l %2,er1\n\t"
---- linux-2.6.20/arch/i386/Kconfig	2007-02-06 03:00:03 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/i386/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/i386/Kconfig	2007-02-06 03:00:03 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/i386/Kconfig	2007-02-06 03:05:21 +0100
 @@ -1214,6 +1214,8 @@ endmenu
  
  source "arch/i386/Kconfig.debug"
@@ -526,8 +526,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/i386/kernel/irq.c	2006-11-30 21:18:26 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/i386/kernel/irq.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/i386/kernel/irq.c	2006-11-30 21:18:26 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/i386/kernel/irq.c	2007-02-06 03:05:21 +0100
 @@ -84,7 +84,6 @@ fastcall unsigned int do_IRQ(struct pt_r
  		}
  	}
@@ -544,8 +544,8 @@
  	irq_exit();
  	set_irq_regs(old_regs);
  	return 1;
---- linux-2.6.20/arch/i386/kernel/process.c	2007-02-06 03:00:06 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/i386/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/i386/kernel/process.c	2007-02-06 03:00:06 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/i386/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -294,8 +294,10 @@ void show_regs(struct pt_regs * regs)
  	unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L;
  
@@ -569,8 +569,8 @@
  }
  EXPORT_SYMBOL(kernel_thread);
  
---- linux-2.6.20/arch/i386/kernel/syscall_table.S	2006-11-30 21:18:26 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/i386/kernel/syscall_table.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/i386/kernel/syscall_table.S	2006-11-30 21:18:26 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/i386/kernel/syscall_table.S	2007-02-06 03:05:21 +0100
 @@ -272,7 +272,7 @@ ENTRY(sys_call_table)
  	.long sys_tgkill	/* 270 */
  	.long sys_utimes
@@ -580,8 +580,8 @@
  	.long sys_mbind
  	.long sys_get_mempolicy
  	.long sys_set_mempolicy
---- linux-2.6.20/arch/i386/kernel/sysenter.c	2007-02-06 03:00:07 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/i386/kernel/sysenter.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/i386/kernel/sysenter.c	2007-02-06 03:00:07 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/i386/kernel/sysenter.c	2007-02-06 03:05:21 +0100
 @@ -17,6 +17,7 @@
  #include <linux/elf.h>
  #include <linux/mm.h>
@@ -599,8 +599,8 @@
  up_fail:
  	up_write(&mm->mmap_sem);
  	return ret;
---- linux-2.6.20/arch/i386/kernel/traps.c	2007-02-06 03:00:07 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/i386/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/i386/kernel/traps.c	2007-02-06 03:00:07 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/i386/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -56,6 +56,8 @@
  #include <asm/stacktrace.h>
  
@@ -642,8 +642,8 @@
  			/* Executive summary in case the oops scrolled away */
  			esp = (unsigned long) (&regs->esp);
  			savesegment(ss, ss);
---- linux-2.6.20/arch/ia64/Kconfig	2007-02-06 03:00:07 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ia64/Kconfig	2007-02-06 03:00:07 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/Kconfig	2007-02-06 03:05:21 +0100
 @@ -568,6 +568,8 @@ endmenu
  
  source "arch/ia64/Kconfig.debug"
@@ -653,8 +653,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/ia64/ia32/binfmt_elf32.c	2007-02-06 03:00:07 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/ia32/binfmt_elf32.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ia64/ia32/binfmt_elf32.c	2007-02-06 03:00:07 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/ia32/binfmt_elf32.c	2007-02-06 03:05:21 +0100
 @@ -238,7 +238,8 @@ ia32_setup_arg_pages (struct linux_binpr
  			kmem_cache_free(vm_area_cachep, mpnt);
  			return ret;
@@ -665,8 +665,8 @@
  	}
  
  	for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
---- linux-2.6.20/arch/ia64/ia32/ia32_entry.S	2006-06-18 04:51:55 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/ia32/ia32_entry.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ia64/ia32/ia32_entry.S	2006-06-18 04:51:55 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/ia32/ia32_entry.S	2007-02-06 03:05:21 +0100
 @@ -483,7 +483,7 @@ ia32_syscall_table:
   	data8 sys_tgkill	/* 270 */
   	data8 compat_sys_utimes
@@ -676,8 +676,8 @@
    	data8 sys_ni_syscall
   	data8 sys_ni_syscall	/* 275 */
    	data8 sys_ni_syscall
---- linux-2.6.20/arch/ia64/ia32/sys_ia32.c	2007-02-06 03:00:07 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/ia32/sys_ia32.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ia64/ia32/sys_ia32.c	2007-02-06 03:00:07 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/ia32/sys_ia32.c	2007-02-06 03:05:21 +0100
 @@ -1182,7 +1182,7 @@ sys32_gettimeofday (struct compat_timeva
  {
  	if (tv) {
@@ -687,8 +687,8 @@
  		if (put_tv32(tv, &ktv))
  			return -EFAULT;
  	}
---- linux-2.6.20/arch/ia64/kernel/asm-offsets.c	2006-09-20 16:57:58 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/kernel/asm-offsets.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ia64/kernel/asm-offsets.c	2006-09-20 16:57:58 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/kernel/asm-offsets.c	2007-02-06 03:05:21 +0100
 @@ -191,6 +191,7 @@ void foo(void)
      /* for assembly files which can't include sched.h: */
  	DEFINE(IA64_CLONE_VFORK, CLONE_VFORK);
@@ -697,8 +697,8 @@
  
  	BLANK();
  	DEFINE(IA64_CPUINFO_NSEC_PER_CYC_OFFSET,
---- linux-2.6.20/arch/ia64/kernel/entry.S	2007-02-06 03:00:07 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/kernel/entry.S	2007-02-06 03:07:01 +0100
+--- linux-2.6.20.1/arch/ia64/kernel/entry.S	2007-02-06 03:00:07 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/kernel/entry.S	2007-02-06 03:07:01 +0100
 @@ -1576,7 +1576,7 @@ sys_call_table:
  	data8 sys_mq_notify
  	data8 sys_mq_getsetattr
@@ -708,8 +708,8 @@
  	data8 sys_waitid			// 1270
  	data8 sys_add_key
  	data8 sys_request_key
---- linux-2.6.20/arch/ia64/kernel/perfmon.c	2007-02-06 03:00:07 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/kernel/perfmon.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ia64/kernel/perfmon.c	2007-02-06 03:00:07 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/kernel/perfmon.c	2007-02-06 03:05:21 +0100
 @@ -41,6 +41,7 @@
  #include <linux/capability.h>
  #include <linux/rcupdate.h>
@@ -727,8 +727,8 @@
  	vm_stat_account(vma->vm_mm, vma->vm_flags, vma->vm_file,
  							vma_pages(vma));
  	up_write(&task->mm->mmap_sem);
---- linux-2.6.20/arch/ia64/kernel/process.c	2007-02-06 03:00:07 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ia64/kernel/process.c	2007-02-06 03:00:07 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -105,7 +105,8 @@ show_regs (struct pt_regs *regs)
  	unsigned long ip = regs->cr_iip + ia64_psr(regs)->ri;
  
@@ -749,8 +749,8 @@
  }
  EXPORT_SYMBOL(kernel_thread);
  
---- linux-2.6.20/arch/ia64/kernel/ptrace.c	2006-09-20 16:57:58 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/kernel/ptrace.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ia64/kernel/ptrace.c	2006-09-20 16:57:58 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/kernel/ptrace.c	2007-02-06 03:05:21 +0100
 @@ -17,6 +17,7 @@
  #include <linux/security.h>
  #include <linux/audit.h>
@@ -769,8 +769,8 @@
  	ret = -EPERM;
  	if (pid == 1)		/* no messing around with init! */
  		goto out_tsk;
---- linux-2.6.20/arch/ia64/kernel/traps.c	2007-02-06 03:00:07 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/kernel/traps.c	2007-02-06 03:09:13 +0100
+--- linux-2.6.20.1/arch/ia64/kernel/traps.c	2007-02-06 03:00:07 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/kernel/traps.c	2007-02-06 03:09:13 +0100
 @@ -106,8 +106,9 @@ die (const char *str, struct pt_regs *re
  	put_cpu();
  
@@ -795,8 +795,8 @@
  			}
  		}
  	}
---- linux-2.6.20/arch/ia64/mm/fault.c	2006-11-30 21:18:27 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/mm/fault.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ia64/mm/fault.c	2006-11-30 21:18:27 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/mm/fault.c	2007-02-06 03:05:21 +0100
 @@ -10,6 +10,7 @@
  #include <linux/smp_lock.h>
  #include <linux/interrupt.h>
@@ -805,8 +805,8 @@
  
  #include <asm/pgtable.h>
  #include <asm/processor.h>
---- linux-2.6.20/arch/ia64/sn/kernel/xpc_main.c	2007-02-06 03:00:08 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ia64/sn/kernel/xpc_main.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ia64/sn/kernel/xpc_main.c	2007-02-06 03:00:08 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ia64/sn/kernel/xpc_main.c	2007-02-06 03:05:21 +0100
 @@ -108,6 +108,7 @@ static ctl_table xpc_sys_xpc_hb_dir[] = 
  		0644,
  		NULL,
@@ -831,8 +831,8 @@
  		&sysctl_intvec,
  		NULL,
  		&xpc_disengage_request_min_timelimit,
---- linux-2.6.20/arch/m32r/kernel/irq.c	2006-11-30 21:18:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/m32r/kernel/irq.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/m32r/kernel/irq.c	2006-11-30 21:18:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/m32r/kernel/irq.c	2007-02-06 03:05:21 +0100
 @@ -78,6 +78,7 @@ skip:
  asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs)
  {
@@ -841,8 +841,8 @@
  	old_regs = set_irq_regs(regs);
  	irq_enter();
  
---- linux-2.6.20/arch/m32r/kernel/process.c	2006-09-20 16:57:58 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/m32r/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/m32r/kernel/process.c	2006-09-20 16:57:58 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/m32r/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -211,8 +211,8 @@ int kernel_thread(int (*fn)(void *), voi
  	regs.psw = M32R_PSW_BIE;
  
@@ -854,8 +854,8 @@
  }
  
  /*
---- linux-2.6.20/arch/m32r/kernel/traps.c	2006-11-30 21:18:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/m32r/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/m32r/kernel/traps.c	2006-11-30 21:18:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/m32r/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -195,8 +195,9 @@ static void show_registers(struct pt_reg
  	} else {
  		printk("SPI: %08lx\n", sp);
@@ -868,8 +868,8 @@
  
  	/*
  	 * When in-kernel, we also print out the stack and code at the
---- linux-2.6.20/arch/m68k/Kconfig	2007-02-06 03:00:08 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/m68k/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/m68k/Kconfig	2007-02-06 03:00:08 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/m68k/Kconfig	2007-02-06 03:05:21 +0100
 @@ -662,6 +662,8 @@ source "fs/Kconfig"
  
  source "arch/m68k/Kconfig.debug"
@@ -879,8 +879,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/m68k/kernel/process.c	2006-11-30 21:18:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/m68k/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/m68k/kernel/process.c	2006-11-30 21:18:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/m68k/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -159,7 +159,8 @@ int kernel_thread(int (*fn)(void *), voi
  
  	{
@@ -891,8 +891,8 @@
  
  	retval = __NR_clone;
  	__asm__ __volatile__
---- linux-2.6.20/arch/m68k/kernel/ptrace.c	2006-09-20 16:57:58 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/m68k/kernel/ptrace.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/m68k/kernel/ptrace.c	2006-09-20 16:57:58 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/m68k/kernel/ptrace.c	2007-02-06 03:05:21 +0100
 @@ -19,6 +19,7 @@
  #include <linux/ptrace.h>
  #include <linux/user.h>
@@ -910,8 +910,8 @@
  
  	return ret;
  out_eio:
---- linux-2.6.20/arch/m68k/kernel/traps.c	2006-11-30 21:18:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/m68k/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/m68k/kernel/traps.c	2006-11-30 21:18:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/m68k/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -899,8 +899,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);
@@ -923,8 +923,8 @@
  	addr = (unsigned long)&fp->un;
  	printk("Frame format=%X ", regs->format);
  	switch (regs->format) {
---- linux-2.6.20/arch/m68knommu/Kconfig	2007-02-06 03:00:08 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/m68knommu/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/m68knommu/Kconfig	2007-02-06 03:00:08 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/m68knommu/Kconfig	2007-02-06 03:05:21 +0100
 @@ -671,6 +671,8 @@ source "fs/Kconfig"
  
  source "arch/m68knommu/Kconfig.debug"
@@ -934,8 +934,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/m68knommu/kernel/process.c	2007-02-06 03:00:08 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/m68knommu/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/m68knommu/kernel/process.c	2007-02-06 03:00:08 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/m68knommu/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -122,7 +122,7 @@ void show_regs(struct pt_regs * regs)
  int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
  {
@@ -945,8 +945,8 @@
  	mm_segment_t fs;
  
  	fs = get_fs();
---- linux-2.6.20/arch/m68knommu/kernel/traps.c	2007-02-06 03:00:08 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/m68knommu/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/m68knommu/kernel/traps.c	2007-02-06 03:00:08 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/m68knommu/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -80,8 +80,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);
@@ -959,8 +959,8 @@
  	show_stack(NULL, (unsigned long *)fp);
  	do_exit(SIGSEGV);
  }
---- linux-2.6.20/arch/mips/Kconfig	2007-02-06 03:00:08 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/mips/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/mips/Kconfig	2007-02-06 03:00:08 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/mips/Kconfig	2007-02-06 03:05:21 +0100
 @@ -2084,6 +2084,8 @@ source "arch/mips/oprofile/Kconfig"
  
  source "arch/mips/Kconfig.debug"
@@ -970,8 +970,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/mips/kernel/linux32.c	2007-02-06 03:00:11 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/mips/kernel/linux32.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/mips/kernel/linux32.c	2007-02-06 03:00:11 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/mips/kernel/linux32.c	2007-02-06 03:05:21 +0100
 @@ -300,7 +300,7 @@ sys32_gettimeofday(struct compat_timeval
  {
  	if (tv) {
@@ -981,8 +981,8 @@
  		if (put_tv32(tv, &ktv))
  			return -EFAULT;
  	}
---- linux-2.6.20/arch/mips/kernel/process.c	2006-11-30 21:18:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/mips/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/mips/kernel/process.c	2006-11-30 21:18:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/mips/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -271,7 +271,8 @@ long kernel_thread(int (*fn)(void *), vo
  #endif
  
@@ -993,8 +993,8 @@
  }
  
  /*
---- linux-2.6.20/arch/mips/kernel/ptrace.c	2006-11-30 21:18:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/mips/kernel/ptrace.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/mips/kernel/ptrace.c	2006-11-30 21:18:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/mips/kernel/ptrace.c	2007-02-06 03:05:21 +0100
 @@ -26,6 +26,7 @@
  #include <linux/user.h>
  #include <linux/security.h>
@@ -1013,8 +1013,8 @@
  	switch (request) {
  	/* when I and D space are separate, these will need to be fixed. */
  	case PTRACE_PEEKTEXT: /* read word at location addr. */
---- linux-2.6.20/arch/mips/kernel/scall32-o32.S	2007-02-06 03:00:11 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/mips/kernel/scall32-o32.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/mips/kernel/scall32-o32.S	2007-02-06 03:00:11 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/mips/kernel/scall32-o32.S	2007-02-06 03:05:21 +0100
 @@ -619,7 +619,7 @@ einval:	li	v0, -EINVAL
  	sys	sys_mq_timedreceive	5
  	sys	sys_mq_notify		2	/* 4275 */
@@ -1024,8 +1024,8 @@
  	sys	sys_waitid		5
  	sys	sys_ni_syscall		0	/* available, was setaltroot */
  	sys	sys_add_key		5	/* 4280 */
---- linux-2.6.20/arch/mips/kernel/scall64-64.S	2007-02-06 03:00:11 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/mips/kernel/scall64-64.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/mips/kernel/scall64-64.S	2007-02-06 03:00:11 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/mips/kernel/scall64-64.S	2007-02-06 03:05:21 +0100
 @@ -434,7 +434,7 @@ sys_call_table:
  	PTR	sys_mq_timedreceive
  	PTR	sys_mq_notify
@@ -1035,8 +1035,8 @@
  	PTR	sys_waitid
  	PTR	sys_ni_syscall			/* available, was setaltroot */
  	PTR	sys_add_key
---- linux-2.6.20/arch/mips/kernel/scall64-n32.S	2007-02-06 03:00:11 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/mips/kernel/scall64-n32.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/mips/kernel/scall64-n32.S	2007-02-06 03:00:11 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/mips/kernel/scall64-n32.S	2007-02-06 03:05:21 +0100
 @@ -360,7 +360,7 @@ EXPORT(sysn32_call_table)
  	PTR	compat_sys_mq_timedreceive
  	PTR	compat_sys_mq_notify
@@ -1046,8 +1046,8 @@
  	PTR	sysn32_waitid
  	PTR	sys_ni_syscall			/* available, was setaltroot */
  	PTR	sys_add_key
---- linux-2.6.20/arch/mips/kernel/scall64-o32.S	2007-02-06 03:00:11 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/mips/kernel/scall64-o32.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/mips/kernel/scall64-o32.S	2007-02-06 03:00:11 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/mips/kernel/scall64-o32.S	2007-02-06 03:05:21 +0100
 @@ -482,7 +482,7 @@ sys_call_table:
  	PTR	compat_sys_mq_timedreceive
  	PTR	compat_sys_mq_notify		/* 4275 */
@@ -1057,8 +1057,8 @@
  	PTR	sys32_waitid
  	PTR	sys_ni_syscall			/* available, was setaltroot */
  	PTR	sys_add_key			/* 4280 */
---- linux-2.6.20/arch/mips/kernel/traps.c	2007-02-06 03:00:11 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/mips/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/mips/kernel/traps.c	2007-02-06 03:00:11 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/mips/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -299,8 +299,9 @@ void show_registers(struct pt_regs *regs
  {
  	show_regs(regs);
@@ -1071,8 +1071,8 @@
  	show_stacktrace(current, regs);
  	show_code((unsigned int *) regs->cp0_epc);
  	printk("\n");
---- linux-2.6.20/arch/parisc/Kconfig	2007-02-06 03:00:12 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/parisc/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/parisc/Kconfig	2007-02-06 03:00:12 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/parisc/Kconfig	2007-02-06 03:05:21 +0100
 @@ -265,6 +265,8 @@ source "arch/parisc/oprofile/Kconfig"
  
  source "arch/parisc/Kconfig.debug"
@@ -1082,8 +1082,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/parisc/kernel/entry.S	2006-11-30 21:18:30 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/parisc/kernel/entry.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/parisc/kernel/entry.S	2006-11-30 21:18:30 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/parisc/kernel/entry.S	2007-02-06 03:05:21 +0100
 @@ -761,6 +761,7 @@ fault_vector_11:
  
  #define CLONE_VM 0x100	/* Must agree with <linux/sched.h> */
@@ -1092,8 +1092,8 @@
  
  	.export __kernel_thread, code
  	.import do_fork
---- linux-2.6.20/arch/parisc/kernel/process.c	2006-11-30 21:18:30 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/parisc/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/parisc/kernel/process.c	2006-11-30 21:18:30 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/parisc/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -173,7 +173,7 @@ pid_t kernel_thread(int (*fn)(void *), v
  	 *	  kernel_thread can become a #define.
  	 */
@@ -1103,8 +1103,8 @@
  }
  EXPORT_SYMBOL(kernel_thread);
  
---- linux-2.6.20/arch/parisc/kernel/sys_parisc32.c	2006-11-30 21:18:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/parisc/kernel/sys_parisc32.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/parisc/kernel/sys_parisc32.c	2006-11-30 21:18:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/parisc/kernel/sys_parisc32.c	2007-02-15 00:05:56 +0100
 @@ -204,11 +204,11 @@ static inline long get_ts32(struct times
  asmlinkage int
  sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
@@ -1123,12 +1123,12 @@
  
  	do {
  		seq = read_seqbegin(&xtime_lock);
-+		/* FIXME: requires vx virtualization */
++		/* TODO: requires vx virtualization */
  		val.uptime = jiffies / HZ;
  
  		val.loads[0] = avenrun[0] << (SI_LOAD_SHIFT - FSHIFT);
---- linux-2.6.20/arch/parisc/kernel/syscall_table.S	2006-11-30 21:18:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/parisc/kernel/syscall_table.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/parisc/kernel/syscall_table.S	2006-11-30 21:18:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/parisc/kernel/syscall_table.S	2007-02-06 03:05:21 +0100
 @@ -368,7 +368,7 @@
  	ENTRY_COMP(mbind)		/* 260 */
  	ENTRY_COMP(get_mempolicy)
@@ -1138,8 +1138,8 @@
  	ENTRY_SAME(add_key)
  	ENTRY_SAME(request_key)		/* 265 */
  	ENTRY_SAME(keyctl)
---- linux-2.6.20/arch/parisc/kernel/traps.c	2006-11-30 21:18:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/parisc/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/parisc/kernel/traps.c	2006-11-30 21:18:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/parisc/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -210,8 +210,9 @@ void die_if_kernel(char *str, struct pt_
  		if (err == 0)
  			return; /* STFU */
@@ -1163,8 +1163,8 @@
  	show_regs(regs);
  
  	if (in_interrupt())
---- linux-2.6.20/arch/parisc/mm/fault.c	2007-02-06 03:00:12 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/parisc/mm/fault.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/parisc/mm/fault.c	2007-02-06 03:00:12 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/parisc/mm/fault.c	2007-02-06 03:05:21 +0100
 @@ -213,8 +213,9 @@ bad_area:
  
  #ifdef PRINT_USER_FAULTS
@@ -1177,8 +1177,8 @@
  		if (vma) {
  			printk(KERN_DEBUG "vm_start = 0x%08lx, vm_end = 0x%08lx\n",
  					vma->vm_start, vma->vm_end);
---- linux-2.6.20/arch/powerpc/Kconfig	2007-02-06 03:00:12 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/powerpc/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/powerpc/Kconfig	2007-02-06 03:00:12 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/powerpc/Kconfig	2007-02-06 03:05:21 +0100
 @@ -1193,6 +1193,8 @@ endmenu
  
  source "arch/powerpc/Kconfig.debug"
@@ -1188,8 +1188,8 @@
  source "security/Kconfig"
  
  config KEYS_COMPAT
---- linux-2.6.20/arch/powerpc/kernel/asm-offsets.c	2007-02-06 03:00:12 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/powerpc/kernel/asm-offsets.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/powerpc/kernel/asm-offsets.c	2007-02-06 03:00:12 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/powerpc/kernel/asm-offsets.c	2007-02-06 03:05:21 +0100
 @@ -244,6 +244,7 @@ int main(void)
  
  	DEFINE(CLONE_VM, CLONE_VM);
@@ -1198,8 +1198,8 @@
  
  #ifndef CONFIG_PPC64
  	DEFINE(MM_PGD, offsetof(struct mm_struct, pgd));
---- linux-2.6.20/arch/powerpc/kernel/irq.c	2007-02-06 03:00:12 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/powerpc/kernel/irq.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/powerpc/kernel/irq.c	2007-02-06 03:00:12 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/powerpc/kernel/irq.c	2007-02-06 03:05:21 +0100
 @@ -53,6 +53,7 @@
  #include <linux/mutex.h>
  #include <linux/bootmem.h>
@@ -1208,8 +1208,8 @@
  
  #include <asm/uaccess.h>
  #include <asm/system.h>
---- linux-2.6.20/arch/powerpc/kernel/misc_32.S	2006-11-30 21:18:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/powerpc/kernel/misc_32.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/powerpc/kernel/misc_32.S	2006-11-30 21:18:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/powerpc/kernel/misc_32.S	2007-02-06 03:05:21 +0100
 @@ -749,7 +749,7 @@ _GLOBAL(kernel_thread)
  	mr	r30,r3		/* function */
  	mr	r31,r4		/* argument */
@@ -1219,8 +1219,8 @@
  	li	r4,0		/* new sp (unused) */
  	li	r0,__NR_clone
  	sc
---- linux-2.6.20/arch/powerpc/kernel/misc_64.S	2006-11-30 21:18:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/powerpc/kernel/misc_64.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/powerpc/kernel/misc_64.S	2006-11-30 21:18:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/powerpc/kernel/misc_64.S	2007-02-06 03:05:21 +0100
 @@ -394,7 +394,7 @@ _GLOBAL(kernel_thread)
  	mr	r29,r3
  	mr	r30,r4
@@ -1230,8 +1230,8 @@
  	li	r4,0		/* new sp (unused) */
  	li	r0,__NR_clone
  	sc
---- linux-2.6.20/arch/powerpc/kernel/process.c	2006-11-30 21:18:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/powerpc/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/powerpc/kernel/process.c	2006-11-30 21:18:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/powerpc/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -425,8 +425,9 @@ void show_regs(struct pt_regs * regs)
  	trap = TRAP(regs);
  	if (trap == 0x300 || trap == 0x600)
@@ -1244,8 +1244,8 @@
  
  #ifdef CONFIG_SMP
  	printk(" CPU: %d", smp_processor_id());
---- linux-2.6.20/arch/powerpc/kernel/sys_ppc32.c	2007-02-06 03:00:13 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/powerpc/kernel/sys_ppc32.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/powerpc/kernel/sys_ppc32.c	2007-02-06 03:00:13 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/powerpc/kernel/sys_ppc32.c	2007-02-06 03:05:21 +0100
 @@ -276,7 +276,7 @@ asmlinkage long compat_sys_gettimeofday(
  {
  	if (tv) {
@@ -1255,8 +1255,8 @@
  		if (put_tv32(tv, &ktv))
  			return -EFAULT;
  	}
---- linux-2.6.20/arch/powerpc/kernel/traps.c	2007-02-06 03:00:13 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/powerpc/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/powerpc/kernel/traps.c	2007-02-06 03:00:13 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/powerpc/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -844,8 +844,9 @@ void nonrecoverable_exception(struct pt_
  
  void trace_syscall(struct pt_regs *regs)
@@ -1269,8 +1269,8 @@
  	       regs->ccr&0x10000000?"Error=":"", regs->gpr[3], print_tainted());
  }
  
---- linux-2.6.20/arch/powerpc/kernel/vdso.c	2007-02-06 03:00:13 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/powerpc/kernel/vdso.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/powerpc/kernel/vdso.c	2007-02-06 03:00:13 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/powerpc/kernel/vdso.c	2007-02-06 03:05:21 +0100
 @@ -22,6 +22,7 @@
  #include <linux/elf.h>
  #include <linux/security.h>
@@ -1288,8 +1288,8 @@
  	up_write(&mm->mmap_sem);
  	return 0;
  
---- linux-2.6.20/arch/ppc/Kconfig	2007-02-06 03:00:16 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ppc/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ppc/Kconfig	2007-02-06 03:00:16 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ppc/Kconfig	2007-02-06 03:05:21 +0100
 @@ -1445,6 +1445,8 @@ source "arch/powerpc/oprofile/Kconfig"
  
  source "arch/ppc/Kconfig.debug"
@@ -1299,8 +1299,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/ppc/kernel/asm-offsets.c	2006-09-20 16:58:01 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ppc/kernel/asm-offsets.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ppc/kernel/asm-offsets.c	2006-09-20 16:58:01 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ppc/kernel/asm-offsets.c	2007-02-06 03:05:21 +0100
 @@ -121,6 +121,7 @@ main(void)
  	DEFINE(TRAP, STACK_FRAME_OVERHEAD+offsetof(struct pt_regs, trap));
  	DEFINE(CLONE_VM, CLONE_VM);
@@ -1309,8 +1309,8 @@
  	DEFINE(MM_PGD, offsetof(struct mm_struct, pgd));
  
  	/* About the CPU features table */
---- linux-2.6.20/arch/ppc/kernel/misc.S	2006-11-30 21:18:32 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ppc/kernel/misc.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ppc/kernel/misc.S	2006-11-30 21:18:32 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ppc/kernel/misc.S	2007-02-06 03:05:21 +0100
 @@ -848,7 +848,7 @@ _GLOBAL(kernel_thread)
  	mr	r30,r3		/* function */
  	mr	r31,r4		/* argument */
@@ -1320,8 +1320,8 @@
  	li	r4,0		/* new sp (unused) */
  	li	r0,__NR_clone
  	sc
---- linux-2.6.20/arch/ppc/kernel/traps.c	2007-02-06 03:00:16 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/ppc/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/ppc/kernel/traps.c	2007-02-06 03:00:16 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/ppc/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -696,8 +696,9 @@ void nonrecoverable_exception(struct pt_
  
  void trace_syscall(struct pt_regs *regs)
@@ -1334,8 +1334,8 @@
  	       regs->ccr&0x10000000?"Error=":"", regs->gpr[3], print_tainted());
  }
  
---- linux-2.6.20/arch/s390/Kconfig	2007-02-06 03:00:17 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/s390/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/s390/Kconfig	2007-02-06 03:00:17 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/s390/Kconfig	2007-02-06 03:05:21 +0100
 @@ -522,6 +522,8 @@ endmenu
  
  source "arch/s390/Kconfig.debug"
@@ -1345,8 +1345,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/s390/kernel/compat_linux.c	2006-11-30 21:18:32 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/s390/kernel/compat_linux.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/s390/kernel/compat_linux.c	2006-11-30 21:18:32 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/s390/kernel/compat_linux.c	2007-02-06 03:05:21 +0100
 @@ -600,7 +600,7 @@ asmlinkage long sys32_gettimeofday(struc
  {
  	if (tv) {
@@ -1356,8 +1356,8 @@
  		if (put_tv32(tv, &ktv))
  			return -EFAULT;
  	}
---- linux-2.6.20/arch/s390/kernel/process.c	2006-11-30 21:18:32 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/s390/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/s390/kernel/process.c	2006-11-30 21:18:32 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/s390/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -165,9 +165,9 @@ void show_regs(struct pt_regs *regs)
  	struct task_struct *tsk = current;
  
@@ -1380,8 +1380,8 @@
  		       0, &regs, 0, NULL, NULL);
  }
  
---- linux-2.6.20/arch/s390/kernel/ptrace.c	2006-06-18 04:52:33 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/s390/kernel/ptrace.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/s390/kernel/ptrace.c	2006-06-18 04:52:33 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/s390/kernel/ptrace.c	2007-02-06 03:05:21 +0100
 @@ -33,6 +33,7 @@
  #include <linux/security.h>
  #include <linux/audit.h>
@@ -1404,8 +1404,8 @@
  	put_task_struct(child);
  out:
  	unlock_kernel();
---- linux-2.6.20/arch/s390/kernel/syscalls.S	2006-11-30 21:18:32 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/s390/kernel/syscalls.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/s390/kernel/syscalls.S	2006-11-30 21:18:32 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/s390/kernel/syscalls.S	2007-02-06 03:05:21 +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)
@@ -1415,8 +1415,8 @@
  SYSCALL(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)
---- linux-2.6.20/arch/sh/Kconfig	2007-02-06 03:00:17 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sh/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sh/Kconfig	2007-02-06 03:00:17 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sh/Kconfig	2007-02-06 03:05:21 +0100
 @@ -709,6 +709,8 @@ source "arch/sh/oprofile/Kconfig"
  
  source "arch/sh/Kconfig.debug"
@@ -1426,8 +1426,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/sh/kernel/irq.c	2007-02-06 03:00:17 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sh/kernel/irq.c	2007-02-06 03:09:33 +0100
+--- linux-2.6.20.1/arch/sh/kernel/irq.c	2007-02-06 03:00:17 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sh/kernel/irq.c	2007-02-06 03:09:33 +0100
 @@ -13,6 +13,7 @@
  #include <linux/seq_file.h>
  #include <linux/io.h>
@@ -1436,8 +1436,8 @@
  #include <asm/processor.h>
  #include <asm/uaccess.h>
  #include <asm/thread_info.h>
---- linux-2.6.20/arch/sh/kernel/kgdb_stub.c	2006-11-30 21:18:34 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sh/kernel/kgdb_stub.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sh/kernel/kgdb_stub.c	2006-11-30 21:18:34 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sh/kernel/kgdb_stub.c	2007-02-06 03:05:21 +0100
 @@ -389,7 +389,7 @@ static struct task_struct *get_thread(in
  	if (pid == PID_MAX) pid = 0;
  
@@ -1447,8 +1447,8 @@
  
  	if (thread)
  		return thread;
---- linux-2.6.20/arch/sh/kernel/process.c	2007-02-06 03:00:17 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sh/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sh/kernel/process.c	2007-02-06 03:00:17 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sh/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -104,7 +104,8 @@ void machine_power_off(void)
  void show_regs(struct pt_regs * regs)
  {
@@ -1469,8 +1469,8 @@
  }
  
  /*
---- linux-2.6.20/arch/sh/kernel/vsyscall/vsyscall.c	2007-02-06 03:00:17 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sh/kernel/vsyscall/vsyscall.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sh/kernel/vsyscall/vsyscall.c	2007-02-06 03:00:17 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sh/kernel/vsyscall/vsyscall.c	2007-02-06 03:05:21 +0100
 @@ -17,6 +17,7 @@
  #include <linux/gfp.h>
  #include <linux/module.h>
@@ -1488,8 +1488,8 @@
  up_fail:
  	up_write(&mm->mmap_sem);
  	return ret;
---- linux-2.6.20/arch/sh64/kernel/process.c	2006-11-30 21:18:35 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sh64/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sh64/kernel/process.c	2006-11-30 21:18:35 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sh64/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -400,8 +400,8 @@ int kernel_thread(int (*fn)(void *), voi
  	regs.pc = (unsigned long)kernel_thread_helper;
  	regs.sr = (1 << 30);
@@ -1501,8 +1501,8 @@
  }
  
  /*
---- linux-2.6.20/arch/sh64/mm/fault.c	2007-02-06 03:00:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sh64/mm/fault.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sh64/mm/fault.c	2007-02-06 03:00:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sh64/mm/fault.c	2007-02-06 03:05:21 +0100
 @@ -82,7 +82,7 @@ static inline void print_vma(struct vm_a
  
  static inline void print_task(struct task_struct *tsk)
@@ -1512,8 +1512,8 @@
  }
  
  static pte_t *lookup_pte(struct mm_struct *mm, unsigned long address)
---- linux-2.6.20/arch/sparc/Kconfig	2007-02-06 03:00:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc/Kconfig	2007-02-06 03:00:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc/Kconfig	2007-02-06 03:05:21 +0100
 @@ -306,6 +306,8 @@ endmenu
  
  source "arch/sparc/Kconfig.debug"
@@ -1523,8 +1523,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/sparc/kernel/process.c	2007-02-06 03:00:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc/kernel/process.c	2007-02-06 03:00:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -706,7 +706,8 @@ pid_t kernel_thread(int (*fn)(void *), v
  			     /* Notreached by child. */
  			     "1: mov %%o0, %0\n\t" :
@@ -1535,8 +1535,8 @@
  			     "i" (__NR_exit),  "r" (fn), "r" (arg) :
  			     "g1", "g2", "g3", "o0", "o1", "memory", "cc");
  	return retval;
---- linux-2.6.20/arch/sparc/kernel/ptrace.c	2007-02-06 03:00:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc/kernel/ptrace.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc/kernel/ptrace.c	2007-02-06 03:00:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc/kernel/ptrace.c	2007-02-06 03:05:21 +0100
 @@ -19,6 +19,7 @@
  #include <linux/smp_lock.h>
  #include <linux/security.h>
@@ -1556,8 +1556,8 @@
  
  	if ((current->personality == PER_SUNOS && request == PTRACE_SUNATTACH)
  	    || (current->personality != PER_SUNOS && request == PTRACE_ATTACH)) {
---- linux-2.6.20/arch/sparc/kernel/systbls.S	2006-11-30 21:18:35 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc/kernel/systbls.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc/kernel/systbls.S	2006-11-30 21:18:35 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc/kernel/systbls.S	2007-02-06 03:05:21 +0100
 @@ -71,7 +71,7 @@ sys_call_table:
  /*250*/	.long sparc_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
@@ -1567,8 +1567,8 @@
  /*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
---- linux-2.6.20/arch/sparc/kernel/traps.c	2006-09-20 16:58:06 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc/kernel/traps.c	2006-09-20 16:58:06 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -99,7 +99,8 @@ void die_if_kernel(char *str, struct pt_
  "              /_| \\__/ |_\\\n"
  "                 \\__U_/\n");
@@ -1579,8 +1579,8 @@
  	show_regs(regs);
  
  	__SAVE; __SAVE; __SAVE; __SAVE;
---- linux-2.6.20/arch/sparc64/Kconfig	2007-02-06 03:00:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc64/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc64/Kconfig	2007-02-06 03:00:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc64/Kconfig	2007-02-06 03:05:21 +0100
 @@ -447,6 +447,8 @@ endmenu
  
  source "arch/sparc64/Kconfig.debug"
@@ -1590,8 +1590,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/sparc64/kernel/binfmt_aout32.c	2007-02-06 03:00:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc64/kernel/binfmt_aout32.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc64/kernel/binfmt_aout32.c	2007-02-06 03:00:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc64/kernel/binfmt_aout32.c	2007-02-06 03:05:21 +0100
 @@ -27,6 +27,7 @@
  #include <linux/binfmts.h>
  #include <linux/personality.h>
@@ -1600,8 +1600,8 @@
  
  #include <asm/system.h>
  #include <asm/uaccess.h>
---- linux-2.6.20/arch/sparc64/kernel/process.c	2006-09-20 16:58:06 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc64/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc64/kernel/process.c	2006-09-20 16:58:06 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc64/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -696,7 +696,8 @@ pid_t kernel_thread(int (*fn)(void *), v
  			     /* Notreached by child. */
  			     "1:" :
@@ -1612,8 +1612,8 @@
  			     "i" (__NR_exit),  "r" (fn), "r" (arg) :
  			     "g1", "g2", "g3", "o0", "o1", "memory", "cc");
  	return retval;
---- linux-2.6.20/arch/sparc64/kernel/ptrace.c	2007-02-06 03:00:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc64/kernel/ptrace.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc64/kernel/ptrace.c	2007-02-06 03:00:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc64/kernel/ptrace.c	2007-02-06 03:05:21 +0100
 @@ -22,6 +22,7 @@
  #include <linux/seccomp.h>
  #include <linux/audit.h>
@@ -1633,8 +1633,8 @@
  
  	if ((current->personality == PER_SUNOS && request == PTRACE_SUNATTACH)
  	    || (current->personality != PER_SUNOS && request == PTRACE_ATTACH)) {
---- linux-2.6.20/arch/sparc64/kernel/sys_sparc32.c	2006-11-30 21:18:35 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc64/kernel/sys_sparc32.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc64/kernel/sys_sparc32.c	2006-11-30 21:18:35 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc64/kernel/sys_sparc32.c	2007-02-06 03:05:21 +0100
 @@ -793,7 +793,7 @@ asmlinkage long sys32_gettimeofday(struc
  {
  	if (tv) {
@@ -1644,8 +1644,8 @@
  		if (put_tv32(tv, &ktv))
  			return -EFAULT;
  	}
---- linux-2.6.20/arch/sparc64/kernel/systbls.S	2006-11-30 21:18:35 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc64/kernel/systbls.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc64/kernel/systbls.S	2006-11-30 21:18:35 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc64/kernel/systbls.S	2007-02-06 03:05:21 +0100
 @@ -72,7 +72,7 @@ sys_call_table32:
  /*250*/	.word sys32_mremap, sys32_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
@@ -1664,8 +1664,8 @@
  /*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
---- linux-2.6.20/arch/sparc64/kernel/traps.c	2007-02-06 03:00:20 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc64/kernel/traps.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc64/kernel/traps.c	2007-02-06 03:00:20 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc64/kernel/traps.c	2007-02-06 03:05:21 +0100
 @@ -2233,7 +2233,8 @@ void die_if_kernel(char *str, struct pt_
  "              /_| \\__/ |_\\\n"
  "                 \\__U_/\n");
@@ -1676,8 +1676,8 @@
  	notify_die(DIE_OOPS, str, regs, 0, 255, SIGSEGV);
  	__asm__ __volatile__("flushw");
  	__show_regs(regs);
---- linux-2.6.20/arch/sparc64/solaris/fs.c	2007-02-06 03:00:21 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/sparc64/solaris/fs.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/sparc64/solaris/fs.c	2007-02-06 03:00:21 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/sparc64/solaris/fs.c	2007-02-06 03:05:21 +0100
 @@ -368,7 +368,7 @@ static int report_statvfs(struct vfsmoun
  		int j = strlen (p);
  		
@@ -1696,8 +1696,8 @@
  		if (mnt->mnt_flags & MNT_NOSUID) i |= 2;
  		if (!sysv_valid_dev(inode->i_sb->s_dev))
  			return -EOVERFLOW;
---- linux-2.6.20/arch/um/Kconfig	2007-02-06 03:00:21 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/um/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/um/Kconfig	2007-02-06 03:00:21 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/um/Kconfig	2007-02-06 03:05:21 +0100
 @@ -311,6 +311,8 @@ source "drivers/connector/Kconfig"
  
  source "fs/Kconfig"
@@ -1707,8 +1707,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/um/kernel/irq.c	2006-11-30 21:18:36 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/um/kernel/irq.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/um/kernel/irq.c	2006-11-30 21:18:36 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/um/kernel/irq.c	2007-02-06 03:05:21 +0100
 @@ -357,6 +357,7 @@ void forward_interrupts(int pid)
  unsigned int do_IRQ(int irq, union uml_pt_regs *regs)
  {
@@ -1717,8 +1717,8 @@
  	irq_enter();
  	__do_IRQ(irq);
  	irq_exit();
---- linux-2.6.20/arch/um/kernel/syscall.c	2006-11-30 21:18:36 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/um/kernel/syscall.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/um/kernel/syscall.c	2006-11-30 21:18:36 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/um/kernel/syscall.c	2007-02-06 03:05:21 +0100
 @@ -15,6 +15,7 @@
  #include "linux/unistd.h"
  #include "linux/slab.h"
@@ -1735,8 +1735,8 @@
  
  	if (!name)
  		return -EFAULT;
---- linux-2.6.20/arch/v850/Kconfig	2007-02-06 03:00:21 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/v850/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/v850/Kconfig	2007-02-06 03:00:21 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/v850/Kconfig	2007-02-06 03:05:21 +0100
 @@ -334,6 +334,8 @@ source "drivers/usb/Kconfig"
  
  source "arch/v850/Kconfig.debug"
@@ -1746,8 +1746,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/v850/kernel/process.c	2006-09-20 16:58:06 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/v850/kernel/process.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/v850/kernel/process.c	2006-09-20 16:58:06 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/v850/kernel/process.c	2007-02-06 03:05:21 +0100
 @@ -83,7 +83,7 @@ int kernel_thread (int (*fn)(void *), vo
  	/* Clone this thread.  Note that we don't pass the clone syscall's
  	   second argument -- it's ignored for calls from kernel mode (the
@@ -1757,8 +1757,8 @@
  	syscall = __NR_clone;
  	asm volatile ("trap " SYSCALL_SHORT_TRAP
  		      : "=r" (ret), "=r" (syscall)
---- linux-2.6.20/arch/v850/kernel/ptrace.c	2006-04-09 13:49:44 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/arch/v850/kernel/ptrace.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/v850/kernel/ptrace.c	2006-04-09 13:49:44 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/v850/kernel/ptrace.c	2007-02-06 03:05:21 +0100
 @@ -24,6 +24,7 @@
  #include <linux/smp_lock.h>
  #include <linux/ptrace.h>
@@ -1777,8 +1777,8 @@
  	switch (request) {
  		unsigned long val, copied;
  
---- linux-2.6.20/arch/x86_64/Kconfig	2007-02-06 03:00:21 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/x86_64/Kconfig	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/x86_64/Kconfig	2007-02-06 03:00:21 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/x86_64/Kconfig	2007-02-06 03:05:21 +0100
 @@ -735,6 +735,8 @@ endmenu
  
  source "arch/x86_64/Kconfig.debug"
@@ -1788,8 +1788,8 @@
  source "security/Kconfig"
  
  source "crypto/Kconfig"
---- linux-2.6.20/arch/x86_64/ia32/ia32_aout.c	2007-02-06 03:00:21 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/x86_64/ia32/ia32_aout.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/x86_64/ia32/ia32_aout.c	2007-02-06 03:00:21 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/x86_64/ia32/ia32_aout.c	2007-02-06 03:05:21 +0100
 @@ -25,6 +25,7 @@
  #include <linux/binfmts.h>
  #include <linux/personality.h>
@@ -1798,8 +1798,8 @@
  
  #include <asm/system.h>
  #include <asm/uaccess.h>
---- linux-2.6.20/arch/x86_64/ia32/ia32_binfmt.c	2007-02-06 03:00:21 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/x86_64/ia32/ia32_binfmt.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/x86_64/ia32/ia32_binfmt.c	2007-02-06 03:00:21 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/x86_64/ia32/ia32_binfmt.c	2007-02-06 03:05:21 +0100
 @@ -324,7 +324,8 @@ int ia32_setup_arg_pages(struct linux_bi
  			kmem_cache_free(vm_area_cachep, mpnt);
  			return ret;
@@ -1810,8 +1810,8 @@
  	} 
  
  	for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
---- linux-2.6.20/arch/x86_64/ia32/ia32entry.S	2006-11-30 21:18:37 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/x86_64/ia32/ia32entry.S	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/x86_64/ia32/ia32entry.S	2006-11-30 21:18:37 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/x86_64/ia32/ia32entry.S	2007-02-06 03:05:21 +0100
 @@ -672,7 +672,7 @@ ia32_sys_call_table:
  	.quad sys_tgkill		/* 270 */
  	.quad compat_sys_utimes
@@ -1821,8 +1821,8 @@
  	.quad sys_mbind
  	.quad compat_sys_get_mempolicy	/* 275 */
  	.quad sys_set_mempolicy
---- linux-2.6.20/arch/x86_64/ia32/sys_ia32.c	2006-11-30 21:18:37 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/x86_64/ia32/sys_ia32.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/x86_64/ia32/sys_ia32.c	2006-11-30 21:18:37 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/x86_64/ia32/sys_ia32.c	2007-02-06 03:05:21 +0100
 @@ -454,7 +454,7 @@ sys32_gettimeofday(struct compat_timeval
  {
  	if (tv) {
@@ -1832,8 +1832,8 @@
  		if (put_tv32(tv, &ktv))
  			return -EFAULT;
  	}
---- linux-2.6.20/arch/x86_64/ia32/syscall32.c	2007-02-06 03:00:21 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/x86_64/ia32/syscall32.c	2007-02-06 03:05:21 +0100
+--- linux-2.6.20.1/arch/x86_64/ia32/syscall32.c	2007-02-06 03:00:21 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/x86_64/ia32/syscall32.c	2007-02-06 03:05:21 +0100
 @@ -10,6 +10,7 @@
  #include <linux/init.h>
  #include <linux/stringify.h>
@@ -1851,18 +1851,8 @@
  	up_write(&mm->mmap_sem);
  	return 0;
  }
---- linux-2.6.20/arch/x86_64/kernel/irq.c	2007-02-06 03:00:21 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/x86_64/kernel/irq.c	2007-02-06 03:05:21 +0100
-@@ -123,7 +123,6 @@ asmlinkage unsigned int do_IRQ(struct pt
- 	else if (printk_ratelimit())
- 		printk(KERN_EMERG "%s: %d.%d No irq handler for vector\n",
- 			__func__, smp_processor_id(), vector);
--
- 	irq_exit();
- 
- 	set_irq_regs(old_regs);
---- linux-2.6.20/arch/x86_64/kernel/process.c	2007-02-06 03:00:22 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/x86_64/kernel/process.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/arch/x86_64/kernel/process.c	2007-02-06 03:00:22 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/x86_64/kernel/process.c	2007-02-06 03:05:22 +0100
 @@ -54,7 +54,8 @@
  
  asmlinkage extern void ret_from_fork(void);
@@ -1884,8 +1874,8 @@
  		init_utsname()->release,
  		(int)strcspn(init_utsname()->version, " "),
  		init_utsname()->version);
---- linux-2.6.20/arch/x86_64/kernel/traps.c	2007-02-06 03:00:22 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/x86_64/kernel/traps.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/arch/x86_64/kernel/traps.c	2007-02-06 03:00:22 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/x86_64/kernel/traps.c	2007-02-06 03:05:22 +0100
 @@ -430,8 +430,9 @@ void show_registers(struct pt_regs *regs
  
  	printk("CPU %d ", cpu);
@@ -1920,8 +1910,8 @@
  			       regs->rip, regs->rsp, error_code); 
  
  		force_sig(SIGSEGV, tsk);
---- linux-2.6.20/arch/x86_64/mm/fault.c	2007-02-06 03:00:22 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/arch/x86_64/mm/fault.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/arch/x86_64/mm/fault.c	2007-02-06 03:00:22 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/arch/x86_64/mm/fault.c	2007-02-06 03:05:22 +0100
 @@ -514,10 +514,10 @@ bad_area_nosemaphore:
  
  		if (exception_trace && unhandled_signal(tsk, SIGSEGV)) {
@@ -1936,8 +1926,8 @@
  		}
         
  		tsk->thread.cr2 = address;
---- linux-2.6.20/block/cfq-iosched.c	2007-02-06 03:00:22 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/block/cfq-iosched.c	2007-02-06 03:11:09 +0100
+--- linux-2.6.20.1/block/cfq-iosched.c	2007-02-06 03:00:22 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/block/cfq-iosched.c	2007-02-06 03:11:09 +0100
 @@ -221,6 +221,8 @@ static int cfq_queue_empty(request_queue
  
  static inline pid_t cfq_queue_pid(struct task_struct *task, int rw, int is_sync)
@@ -1947,8 +1937,8 @@
  	/*
  	 * Use the per-process queue, for read requests and syncronous writes
  	 */
---- linux-2.6.20/drivers/block/Kconfig	2007-02-06 03:00:26 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/block/Kconfig	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/block/Kconfig	2007-02-06 03:00:26 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/block/Kconfig	2007-02-06 03:05:22 +0100
 @@ -311,6 +311,13 @@ config BLK_DEV_CRYPTOLOOP
  	  instead, which can be configured to be on-disk compatible with the
  	  cryptoloop device.
@@ -1963,16 +1953,16 @@
  config BLK_DEV_NBD
  	tristate "Network block device support"
  	depends on NET
---- linux-2.6.20/drivers/block/Makefile	2007-02-06 03:00:26 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/block/Makefile	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/block/Makefile	2007-02-06 03:00:26 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/block/Makefile	2007-02-06 03:05:22 +0100
 @@ -28,4 +28,5 @@ obj-$(CONFIG_BLK_DEV_CRYPTOLOOP) += cryp
  obj-$(CONFIG_VIODASD)		+= viodasd.o
  obj-$(CONFIG_BLK_DEV_SX8)	+= sx8.o
  obj-$(CONFIG_BLK_DEV_UB)	+= ub.o
 +obj-$(CONFIG_BLK_DEV_VROOT)	+= vroot.o
  
---- linux-2.6.20/drivers/block/loop.c	2007-02-06 03:00:26 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/block/loop.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/block/loop.c	2007-02-06 03:00:26 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/block/loop.c	2007-02-15 00:06:27 +0100
 @@ -74,6 +74,7 @@
  #include <linux/highmem.h>
  #include <linux/gfp.h>
@@ -2012,14 +2002,14 @@
  {
  	struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
  
-+	if (!vx_check(lo->lo_xid, VS_WATCH_P|VS_IDENT))
++	if (!vx_check(lo->lo_xid, VS_IDENT|VS_HOSTID))
 +		return -EACCES;
 +
  	mutex_lock(&lo->lo_ctl_mutex);
  	lo->lo_refcnt++;
  	mutex_unlock(&lo->lo_ctl_mutex);
---- linux-2.6.20/drivers/block/vroot.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/block/vroot.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/block/vroot.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/block/vroot.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,281 @@
 +/*
 + *  linux/drivers/block/vroot.c
@@ -2302,8 +2292,8 @@
 +
 +#endif
 +
---- linux-2.6.20/drivers/char/random.c	2007-02-06 03:00:33 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/char/random.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/char/random.c	2007-02-06 03:00:33 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/char/random.c	2007-02-06 03:05:22 +0100
 @@ -1178,7 +1178,7 @@ static char sysctl_bootid[16];
  static int proc_do_uuid(ctl_table *table, int write, struct file *filp,
  			void __user *buffer, size_t *lenp, loff_t *ppos)
@@ -2313,8 +2303,8 @@
  	unsigned char buf[64], tmp_uuid[16], *uuid;
  
  	uuid = table->data;
---- linux-2.6.20/drivers/char/sysrq.c	2007-02-06 03:00:34 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/char/sysrq.c	2007-02-06 03:12:21 +0100
+--- linux-2.6.20.1/drivers/char/sysrq.c	2007-02-06 03:00:34 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/char/sysrq.c	2007-02-06 03:12:21 +0100
 @@ -36,6 +36,7 @@
  #include <linux/workqueue.h>
  #include <linux/kexec.h>
@@ -2367,8 +2357,8 @@
  	else
  		retval = -1;
  	return retval;
---- linux-2.6.20/drivers/char/tty_io.c	2007-02-06 03:00:34 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/char/tty_io.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/char/tty_io.c	2007-02-06 03:00:34 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/char/tty_io.c	2007-02-06 03:05:22 +0100
 @@ -103,6 +103,7 @@
  #include <linux/selection.h>
  
@@ -2404,8 +2394,8 @@
  	if (pgrp < 0)
  		return -EINVAL;
  	if (session_of_pgrp(pgrp) != process_session(current))
---- linux-2.6.20/drivers/infiniband/core/uverbs_mem.c	2007-02-06 03:00:37 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/infiniband/core/uverbs_mem.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/infiniband/core/uverbs_mem.c	2007-02-06 03:00:37 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/infiniband/core/uverbs_mem.c	2007-02-06 03:05:22 +0100
 @@ -36,6 +36,7 @@
  
  #include <linux/mm.h>
@@ -2443,8 +2433,8 @@
  	up_write(&work->mm->mmap_sem);
  	mmput(work->mm);
  	kfree(work);
---- linux-2.6.20/drivers/infiniband/hw/ipath/ipath_user_pages.c	2007-02-06 03:00:37 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/infiniband/hw/ipath/ipath_user_pages.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/infiniband/hw/ipath/ipath_user_pages.c	2007-02-06 03:00:37 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/infiniband/hw/ipath/ipath_user_pages.c	2007-02-06 03:05:22 +0100
 @@ -33,6 +33,7 @@
  
  #include <linux/mm.h>
@@ -2490,8 +2480,8 @@
  	up_write(&work->mm->mmap_sem);
  	mmput(work->mm);
  	kfree(work);
---- linux-2.6.20/drivers/md/dm-ioctl.c	2007-02-06 03:00:41 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/md/dm-ioctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/md/dm-ioctl.c	2007-02-06 03:00:41 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/md/dm-ioctl.c	2007-02-06 03:05:22 +0100
 @@ -15,6 +15,7 @@
  #include <linux/slab.h>
  #include <linux/dm-ioctl.h>
@@ -2573,8 +2563,8 @@
  		return -EACCES;
  
  	if (_IOC_TYPE(command) != DM_IOCTL)
---- linux-2.6.20/drivers/md/dm.c	2007-02-06 03:00:41 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/md/dm.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/md/dm.c	2007-02-06 03:00:41 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/md/dm.c	2007-02-15 00:06:27 +0100
 @@ -21,6 +21,7 @@
  #include <linux/hdreg.h>
  #include <linux/blktrace_api.h>
@@ -2609,7 +2599,7 @@
 +		goto out;
 +
 +	ret = -EACCES;
-+	if (!vx_check(md->xid, VS_IDENT))
++	if (!vx_check(md->xid, VS_IDENT|VS_HOSTID))
  		goto out;
 -	}
  
@@ -2648,8 +2638,8 @@
  
  	md->queue = blk_alloc_queue(GFP_KERNEL);
  	if (!md->queue)
---- linux-2.6.20/drivers/md/dm.h	2007-02-06 03:00:41 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/drivers/md/dm.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/drivers/md/dm.h	2007-02-06 03:00:41 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/drivers/md/dm.h	2007-02-06 03:05:22 +0100
 @@ -91,6 +91,8 @@ void dm_put_target_type(struct target_ty
  int dm_target_iterate(void (*iter_func)(struct target_type *tt,
  					void *param), void *param);
@@ -2659,8 +2649,8 @@
  /*-----------------------------------------------------------------
   * Useful inlines.
   *---------------------------------------------------------------*/
---- linux-2.6.20/fs/attr.c	2006-04-09 13:49:53 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/fs/attr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/attr.c	2006-04-09 13:49:53 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/attr.c	2007-02-06 03:05:22 +0100
 @@ -15,6 +15,9 @@
  #include <linux/fcntl.h>
  #include <linux/quotaops.h>
@@ -2721,8 +2711,8 @@
  				error = DQUOT_TRANSFER(inode, attr) ? -EDQUOT : 0;
  			if (!error)
  				error = inode_setattr(inode, attr);
---- linux-2.6.20/fs/binfmt_aout.c	2007-02-06 03:01:16 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/binfmt_aout.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/binfmt_aout.c	2007-02-06 03:01:16 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/binfmt_aout.c	2007-02-06 03:05:22 +0100
 @@ -24,6 +24,7 @@
  #include <linux/binfmts.h>
  #include <linux/personality.h>
@@ -2731,8 +2721,8 @@
  
  #include <asm/system.h>
  #include <asm/uaccess.h>
---- linux-2.6.20/fs/binfmt_elf.c	2007-02-06 03:01:16 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/binfmt_elf.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/binfmt_elf.c	2007-02-06 03:01:16 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/binfmt_elf.c	2007-02-06 03:05:22 +0100
 @@ -39,6 +39,7 @@
  #include <linux/syscalls.h>
  #include <linux/random.h>
@@ -2741,8 +2731,8 @@
  #include <asm/uaccess.h>
  #include <asm/param.h>
  #include <asm/page.h>
---- linux-2.6.20/fs/binfmt_flat.c	2007-02-06 03:01:16 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/binfmt_flat.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/binfmt_flat.c	2007-02-06 03:01:16 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/binfmt_flat.c	2007-02-06 03:05:22 +0100
 @@ -36,6 +36,7 @@
  #include <linux/init.h>
  #include <linux/flat.h>
@@ -2751,8 +2741,8 @@
  
  #include <asm/byteorder.h>
  #include <asm/system.h>
---- linux-2.6.20/fs/binfmt_som.c	2006-11-30 21:19:19 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/binfmt_som.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/binfmt_som.c	2006-11-30 21:19:19 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/binfmt_som.c	2007-02-06 03:05:22 +0100
 @@ -28,6 +28,7 @@
  #include <linux/shm.h>
  #include <linux/personality.h>
@@ -2761,8 +2751,8 @@
  
  #include <asm/a.out.h>
  #include <asm/uaccess.h>
---- linux-2.6.20/fs/dcache.c	2007-02-06 03:01:17 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/dcache.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/dcache.c	2007-02-06 03:01:17 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/dcache.c	2007-02-06 03:05:22 +0100
 @@ -32,6 +32,7 @@
  #include <linux/seqlock.h>
  #include <linux/swap.h>
@@ -2822,8 +2812,8 @@
  			found = dentry;
  		}
  		spin_unlock(&dentry->d_lock);
---- linux-2.6.20/fs/devpts/inode.c	2006-11-30 21:19:19 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/devpts/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/devpts/inode.c	2006-11-30 21:19:19 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/devpts/inode.c	2007-02-06 03:05:22 +0100
 @@ -19,8 +19,22 @@
  #include <linux/tty.h>
  #include <linux/devpts_fs.h>
@@ -2896,8 +2886,8 @@
  	inode->i_private = tty;
  
  	dentry = get_node(number);
---- linux-2.6.20/fs/ecryptfs/inode.c	2007-02-06 03:01:17 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ecryptfs/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ecryptfs/inode.c	2007-02-06 03:01:17 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ecryptfs/inode.c	2007-02-06 03:05:22 +0100
 @@ -415,7 +415,7 @@ static int ecryptfs_link(struct dentry *
  	dget(lower_new_dentry);
  	lower_dir_dentry = lock_parent(lower_new_dentry);
@@ -2952,8 +2942,8 @@
  	if (rc || !lower_dentry->d_inode)
  		goto out;
  	rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb, 0);
---- linux-2.6.20/fs/exec.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/exec.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/exec.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/exec.c	2007-02-06 03:05:22 +0100
 @@ -50,6 +50,7 @@
  #include <linux/tsacct_kern.h>
  #include <linux/cn_proc.h>
@@ -2981,8 +2971,8 @@
  				rc = snprintf(out_ptr, out_end - out_ptr,
  					      "%lu", tv.tv_sec);
  				if (rc > out_end - out_ptr)
---- linux-2.6.20/fs/ext2/balloc.c	2006-09-20 16:58:34 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext2/balloc.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext2/balloc.c	2006-09-20 16:58:34 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext2/balloc.c	2007-02-06 03:05:22 +0100
 @@ -16,6 +16,8 @@
  #include <linux/sched.h>
  #include <linux/buffer_head.h>
@@ -3036,8 +3026,8 @@
  	release_blocks(sb, es_alloc);
  out_dquot:
  	DQUOT_FREE_BLOCK(inode, dq_alloc);
---- linux-2.6.20/fs/ext2/ext2.h	2006-11-30 21:19:19 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext2/ext2.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext2/ext2.h	2006-11-30 21:19:19 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext2/ext2.h	2007-02-06 03:05:22 +0100
 @@ -166,6 +166,7 @@ extern const struct file_operations ext2
  extern const struct address_space_operations ext2_aops;
  extern const struct address_space_operations ext2_aops_xip;
@@ -3046,8 +3036,8 @@
  
  /* namei.c */
  extern struct inode_operations ext2_dir_inode_operations;
---- linux-2.6.20/fs/ext2/file.c	2006-11-30 21:19:19 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext2/file.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext2/file.c	2006-11-30 21:19:19 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext2/file.c	2007-02-06 03:05:22 +0100
 @@ -54,6 +54,7 @@ const struct file_operations ext2_file_o
  	.release	= ext2_release_file,
  	.fsync		= ext2_sync_file,
@@ -3062,8 +3052,8 @@
  	.permission	= ext2_permission,
 +	.sync_flags	= ext2_sync_flags,
  };
---- linux-2.6.20/fs/ext2/ialloc.c	2006-11-30 21:19:19 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext2/ialloc.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext2/ialloc.c	2006-11-30 21:19:19 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext2/ialloc.c	2007-02-06 03:05:22 +0100
 @@ -17,6 +17,8 @@
  #include <linux/backing-dev.h>
  #include <linux/buffer_head.h>
@@ -3119,8 +3109,8 @@
  	make_bad_inode(inode);
  	iput(inode);
  	return ERR_PTR(err);
---- linux-2.6.20/fs/ext2/inode.c	2006-11-30 21:19:19 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext2/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext2/inode.c	2006-11-30 21:19:19 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext2/inode.c	2007-02-06 03:05:22 +0100
 @@ -31,6 +31,7 @@
  #include <linux/writeback.h>
  #include <linux/buffer_head.h>
@@ -3252,8 +3242,8 @@
  		error = DQUOT_TRANSFER(inode, iattr) ? -EDQUOT : 0;
  		if (error)
  			return error;
---- linux-2.6.20/fs/ext2/ioctl.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext2/ioctl.c	2007-02-06 03:13:14 +0100
+--- linux-2.6.20.1/fs/ext2/ioctl.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext2/ioctl.c	2007-02-06 03:13:14 +0100
 @@ -13,6 +13,7 @@
  #include <linux/sched.h>
  #include <linux/compat.h>
@@ -3293,8 +3283,8 @@
  			return -EROFS;
  		if (get_user(inode->i_generation, (int __user *) arg))
  			return -EFAULT;	
---- linux-2.6.20/fs/ext2/namei.c	2006-11-30 21:19:19 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext2/namei.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext2/namei.c	2006-11-30 21:19:19 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext2/namei.c	2007-02-06 03:05:22 +0100
 @@ -31,6 +31,7 @@
   */
  
@@ -3325,8 +3315,8 @@
  	.permission	= ext2_permission,
 +	.sync_flags	= ext2_sync_flags,
  };
---- linux-2.6.20/fs/ext2/super.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext2/super.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext2/super.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext2/super.c	2007-02-06 03:05:22 +0100
 @@ -324,7 +324,7 @@ enum {
  	Opt_err_ro, Opt_nouid32, Opt_nocheck, Opt_debug,
  	Opt_oldalloc, Opt_orlov, Opt_nobh, Opt_user_xattr, Opt_nouser_xattr,
@@ -3391,8 +3381,8 @@
  	sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
  		((sbi->s_mount_opt & EXT2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
  
---- linux-2.6.20/fs/ext2/symlink.c	2005-08-29 22:25:30 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext2/symlink.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext2/symlink.c	2005-08-29 22:25:30 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext2/symlink.c	2007-02-06 03:05:22 +0100
 @@ -38,6 +38,7 @@ struct inode_operations ext2_symlink_ino
  	.listxattr	= ext2_listxattr,
  	.removexattr	= generic_removexattr,
@@ -3407,8 +3397,8 @@
  #endif
 +	.sync_flags	= ext2_sync_flags,
  };
---- linux-2.6.20/fs/ext2/xattr.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext2/xattr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext2/xattr.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext2/xattr.c	2007-02-06 03:05:22 +0100
 @@ -60,6 +60,7 @@
  #include <linux/mbcache.h>
  #include <linux/quotaops.h>
@@ -3446,8 +3436,8 @@
  		DQUOT_FREE_BLOCK(inode, 1);
  	}
  	EXT2_I(inode)->i_file_acl = 0;
---- linux-2.6.20/fs/ext3/balloc.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext3/balloc.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext3/balloc.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext3/balloc.c	2007-02-06 03:05:22 +0100
 @@ -19,6 +19,8 @@
  #include <linux/ext3_jbd.h>
  #include <linux/quotaops.h>
@@ -3547,8 +3537,8 @@
  	if (fatal) {
  		*errp = fatal;
  		ext3_std_error(sb, fatal);
---- linux-2.6.20/fs/ext3/file.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext3/file.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext3/file.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext3/file.c	2007-02-06 03:05:22 +0100
 @@ -121,6 +121,7 @@ const struct file_operations ext3_file_o
  	.release	= ext3_release_file,
  	.fsync		= ext3_sync_file,
@@ -3564,8 +3554,8 @@
 +	.sync_flags	= ext3_sync_flags,
  };
  
---- linux-2.6.20/fs/ext3/ialloc.c	2006-11-30 21:19:19 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext3/ialloc.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext3/ialloc.c	2006-11-30 21:19:19 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext3/ialloc.c	2007-02-06 03:05:22 +0100
 @@ -23,6 +23,8 @@
  #include <linux/buffer_head.h>
  #include <linux/random.h>
@@ -3623,8 +3613,8 @@
  	inode->i_flags |= S_NOQUOTA;
  	inode->i_nlink = 0;
  	iput(inode);
---- linux-2.6.20/fs/ext3/inode.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext3/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext3/inode.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext3/inode.c	2007-02-06 03:05:22 +0100
 @@ -37,6 +37,7 @@
  #include <linux/mpage.h>
  #include <linux/uio.h>
@@ -3809,8 +3799,8 @@
  		error = ext3_mark_inode_dirty(handle, inode);
  		ext3_journal_stop(handle);
  	}
---- linux-2.6.20/fs/ext3/ioctl.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext3/ioctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext3/ioctl.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext3/ioctl.c	2007-02-06 03:05:22 +0100
 @@ -8,6 +8,7 @@
   */
  
@@ -3927,8 +3917,8 @@
  
  	default:
  		return -ENOTTY;
---- linux-2.6.20/fs/ext3/namei.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext3/namei.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext3/namei.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext3/namei.c	2007-02-06 03:05:22 +0100
 @@ -37,6 +37,7 @@
  #include <linux/buffer_head.h>
  #include <linux/bio.h>
@@ -3959,8 +3949,8 @@
  	.permission	= ext3_permission,
 +	.sync_flags	= ext3_sync_flags,
  };
---- linux-2.6.20/fs/ext3/super.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext3/super.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext3/super.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext3/super.c	2007-02-06 03:05:22 +0100
 @@ -677,7 +677,7 @@ enum {
  	Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
  	Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota,
@@ -4025,8 +4015,8 @@
  
  	sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
  		((sbi->s_mount_opt & EXT3_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
---- linux-2.6.20/fs/ext3/symlink.c	2005-08-29 22:25:30 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext3/symlink.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext3/symlink.c	2005-08-29 22:25:30 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext3/symlink.c	2007-02-06 03:05:22 +0100
 @@ -40,6 +40,7 @@ struct inode_operations ext3_symlink_ino
  	.listxattr	= ext3_listxattr,
  	.removexattr	= generic_removexattr,
@@ -4041,8 +4031,8 @@
  #endif
 +	.sync_flags	= ext3_sync_flags,
  };
---- linux-2.6.20/fs/ext3/xattr.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext3/xattr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext3/xattr.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext3/xattr.c	2007-02-06 03:05:22 +0100
 @@ -58,6 +58,7 @@
  #include <linux/mbcache.h>
  #include <linux/quotaops.h>
@@ -4084,8 +4074,8 @@
  	goto cleanup;
  
  bad_block:
---- linux-2.6.20/fs/ext4/balloc.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext4/balloc.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext4/balloc.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext4/balloc.c	2007-02-06 03:05:22 +0100
 @@ -19,6 +19,8 @@
  #include <linux/ext4_jbd2.h>
  #include <linux/quotaops.h>
@@ -4184,8 +4174,8 @@
  	if (fatal) {
  		*errp = fatal;
  		ext4_std_error(sb, fatal);
---- linux-2.6.20/fs/ext4/file.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext4/file.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext4/file.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext4/file.c	2007-02-06 03:05:22 +0100
 @@ -121,6 +121,7 @@ const struct file_operations ext4_file_o
  	.release	= ext4_release_file,
  	.fsync		= ext4_sync_file,
@@ -4201,8 +4191,8 @@
 +	.sync_flags	= ext4_sync_flags,
  };
  
---- linux-2.6.20/fs/ext4/ialloc.c	2006-11-30 21:19:20 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext4/ialloc.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext4/ialloc.c	2006-11-30 21:19:20 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext4/ialloc.c	2007-02-06 03:05:22 +0100
 @@ -24,6 +24,8 @@
  #include <linux/random.h>
  #include <linux/bitops.h>
@@ -4260,8 +4250,8 @@
  	inode->i_flags |= S_NOQUOTA;
  	inode->i_nlink = 0;
  	iput(inode);
---- linux-2.6.20/fs/ext4/inode.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext4/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext4/inode.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext4/inode.c	2007-02-06 03:05:22 +0100
 @@ -37,6 +37,7 @@
  #include <linux/mpage.h>
  #include <linux/uio.h>
@@ -4446,8 +4436,8 @@
  		error = ext4_mark_inode_dirty(handle, inode);
  		ext4_journal_stop(handle);
  	}
---- linux-2.6.20/fs/ext4/ioctl.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext4/ioctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext4/ioctl.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext4/ioctl.c	2007-02-06 03:05:22 +0100
 @@ -8,6 +8,7 @@
   */
  
@@ -4565,8 +4555,8 @@
  	default:
  		return -ENOTTY;
  	}
---- linux-2.6.20/fs/ext4/namei.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext4/namei.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext4/namei.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext4/namei.c	2007-02-06 03:05:22 +0100
 @@ -37,6 +37,7 @@
  #include <linux/buffer_head.h>
  #include <linux/bio.h>
@@ -4597,8 +4587,8 @@
  	.permission	= ext4_permission,
 +	.sync_flags	= ext4_sync_flags,
  };
---- linux-2.6.20/fs/ext4/super.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext4/super.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext4/super.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext4/super.c	2007-02-06 03:05:22 +0100
 @@ -728,7 +728,7 @@ enum {
  	Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
  	Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota,
@@ -4663,8 +4653,8 @@
  
  	sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
  		((sbi->s_mount_opt & EXT4_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
---- linux-2.6.20/fs/ext4/symlink.c	2006-11-30 21:19:20 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext4/symlink.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext4/symlink.c	2006-11-30 21:19:20 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext4/symlink.c	2007-02-06 03:05:22 +0100
 @@ -40,6 +40,7 @@ struct inode_operations ext4_symlink_ino
  	.listxattr	= ext4_listxattr,
  	.removexattr	= generic_removexattr,
@@ -4679,8 +4669,8 @@
  #endif
 +	.sync_flags	= ext4_sync_flags,
  };
---- linux-2.6.20/fs/ext4/xattr.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ext4/xattr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ext4/xattr.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ext4/xattr.c	2007-02-06 03:05:22 +0100
 @@ -58,6 +58,7 @@
  #include <linux/mbcache.h>
  #include <linux/quotaops.h>
@@ -4722,8 +4712,8 @@
  	goto cleanup;
  
  bad_block:
---- linux-2.6.20/fs/fcntl.c	2007-02-06 03:01:18 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/fcntl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/fcntl.c	2007-02-06 03:01:18 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/fcntl.c	2007-02-06 03:05:22 +0100
 @@ -18,6 +18,7 @@
  #include <linux/ptrace.h>
  #include <linux/signal.h>
@@ -4759,8 +4749,8 @@
  	err = newfd;
  out:
  	return err;
---- linux-2.6.20/fs/file_table.c	2007-02-06 03:01:19 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/file_table.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/file_table.c	2007-02-06 03:01:19 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/file_table.c	2007-02-06 03:05:22 +0100
 @@ -21,6 +21,8 @@
  #include <linux/fsnotify.h>
  #include <linux/sysctl.h>
@@ -4797,8 +4787,8 @@
  		file_kill(file);
  		file_free(file);
  	}
---- linux-2.6.20/fs/hfsplus/ioctl.c	2006-11-30 21:19:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/hfsplus/ioctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/hfsplus/ioctl.c	2006-11-30 21:19:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/hfsplus/ioctl.c	2007-02-06 03:05:22 +0100
 @@ -16,6 +16,7 @@
  #include <linux/fs.h>
  #include <linux/sched.h>
@@ -4817,8 +4807,8 @@
  			return -EROFS;
  
  		if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
---- linux-2.6.20/fs/inode.c	2007-02-06 03:01:22 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/inode.c	2007-02-06 03:01:22 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/inode.c	2007-02-06 03:05:22 +0100
 @@ -115,6 +115,9 @@ static struct inode *alloc_inode(struct 
  		struct address_space * const mapping = &inode->i_data;
  
@@ -4838,8 +4828,8 @@
  /**
   * clear_inode - clear an inode
   * @inode: inode to clear
---- linux-2.6.20/fs/ioctl.c	2007-02-06 03:01:22 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ioctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ioctl.c	2007-02-06 03:01:22 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ioctl.c	2007-02-06 03:05:22 +0100
 @@ -12,10 +12,19 @@
  #include <linux/fs.h>
  #include <linux/security.h>
@@ -4909,8 +4899,8 @@
  		default:
  			if (S_ISREG(filp->f_path.dentry->d_inode->i_mode))
  				error = file_ioctl(filp, cmd, arg);
---- linux-2.6.20/fs/ioprio.c	2006-11-30 21:19:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ioprio.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ioprio.c	2006-11-30 21:19:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ioprio.c	2007-02-06 03:05:22 +0100
 @@ -25,6 +25,7 @@
  #include <linux/capability.h>
  #include <linux/syscalls.h>
@@ -4937,8 +4927,8 @@
  
  			if (!user)
  				break;
---- linux-2.6.20/fs/jfs/acl.c	2006-11-30 21:19:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/acl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/acl.c	2006-11-30 21:19:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/acl.c	2007-02-06 03:05:22 +0100
 @@ -232,7 +232,8 @@ int jfs_setattr(struct dentry *dentry, s
  		return rc;
  
@@ -4949,8 +4939,8 @@
  		if (DQUOT_TRANSFER(inode, iattr))
  			return -EDQUOT;
  	}
---- linux-2.6.20/fs/jfs/file.c	2006-11-30 21:19:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/file.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/file.c	2006-11-30 21:19:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/file.c	2007-02-06 03:05:22 +0100
 @@ -98,6 +98,7 @@ struct inode_operations jfs_file_inode_o
  	.setattr	= jfs_setattr,
  	.permission	= jfs_permission,
@@ -4967,8 +4957,8 @@
  	.splice_read	= generic_file_splice_read,
  	.splice_write	= generic_file_splice_write,
  	.fsync		= jfs_fsync,
---- linux-2.6.20/fs/jfs/inode.c	2006-11-30 21:19:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/inode.c	2006-11-30 21:19:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/inode.c	2007-02-06 03:05:22 +0100
 @@ -22,6 +22,7 @@
  #include <linux/buffer_head.h>
  #include <linux/pagemap.h>
@@ -4985,8 +4975,8 @@
  	}
  
  	clear_inode(inode);
---- linux-2.6.20/fs/jfs/ioctl.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/ioctl.c	2007-02-06 03:13:33 +0100
+--- linux-2.6.20.1/fs/jfs/ioctl.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/ioctl.c	2007-02-06 03:13:33 +0100
 @@ -10,6 +10,7 @@
  #include <linux/capability.h>
  #include <linux/time.h>
@@ -5016,8 +5006,8 @@
  			if (!capable(CAP_LINUX_IMMUTABLE))
  				return -EPERM;
  		}
---- linux-2.6.20/fs/jfs/jfs_dinode.h	2006-11-30 21:19:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/jfs_dinode.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/jfs_dinode.h	2006-11-30 21:19:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/jfs_dinode.h	2007-02-06 03:05:22 +0100
 @@ -162,9 +162,12 @@ struct dinode {
  #define JFS_APPEND_FL		0x01000000 /* writes to file may only append */
  #define JFS_IMMUTABLE_FL	0x02000000 /* Immutable file */
@@ -5033,8 +5023,8 @@
  
  /* These are identical to EXT[23]_IOC_GETFLAGS/SETFLAGS */
  #define JFS_IOC_GETFLAGS	_IOR('f', 1, long)
---- linux-2.6.20/fs/jfs/jfs_dtree.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/jfs_dtree.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/jfs_dtree.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/jfs_dtree.c	2007-02-06 03:05:22 +0100
 @@ -102,6 +102,7 @@
  
  #include <linux/fs.h>
@@ -5146,8 +5136,8 @@
  				/* Free quota allocation */
  				DQUOT_FREE_BLOCK(ip, xlen);
  
---- linux-2.6.20/fs/jfs/jfs_extent.c	2006-11-30 21:19:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/jfs_extent.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/jfs_extent.c	2006-11-30 21:19:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/jfs_extent.c	2007-02-06 03:05:22 +0100
 @@ -18,6 +18,7 @@
  
  #include <linux/fs.h>
@@ -5209,8 +5199,8 @@
  			DQUOT_FREE_BLOCK(ip, nxlen);
  			goto exit;
  		}
---- linux-2.6.20/fs/jfs/jfs_filsys.h	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/jfs_filsys.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/jfs_filsys.h	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/jfs_filsys.h	2007-02-06 03:05:22 +0100
 @@ -264,6 +264,7 @@
  #define JFS_NAME_MAX	255
  #define JFS_PATH_MAX	BPSIZE
@@ -5219,8 +5209,8 @@
  
  /*
   *	file system state (superblock state)
---- linux-2.6.20/fs/jfs/jfs_imap.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/jfs_imap.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/jfs_imap.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/jfs_imap.c	2007-02-06 03:05:22 +0100
 @@ -45,6 +45,7 @@
  #include <linux/buffer_head.h>
  #include <linux/pagemap.h>
@@ -5280,8 +5270,8 @@
  	/*
  	 * mode2 is only needed for storing the higher order bits.
  	 * Trust i_mode for the lower order ones
---- linux-2.6.20/fs/jfs/jfs_inode.c	2006-11-30 21:19:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/jfs_inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/jfs_inode.c	2006-11-30 21:19:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/jfs_inode.c	2007-02-06 03:05:22 +0100
 @@ -18,6 +18,8 @@
  
  #include <linux/fs.h>
@@ -5361,8 +5351,8 @@
  		DQUOT_DROP(inode);
  		inode->i_flags |= S_NOQUOTA;
  		inode->i_nlink = 0;
---- linux-2.6.20/fs/jfs/jfs_inode.h	2006-11-30 21:19:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/jfs_inode.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/jfs_inode.h	2006-11-30 21:19:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/jfs_inode.h	2007-02-06 03:05:22 +0100
 @@ -31,6 +31,7 @@ extern void jfs_truncate(struct inode *)
  extern void jfs_truncate_nolock(struct inode *, loff_t);
  extern void jfs_free_zero_link(struct inode *);
@@ -5371,8 +5361,8 @@
  extern void jfs_set_inode_flags(struct inode *);
  extern int jfs_get_block(struct inode *, sector_t, struct buffer_head *, int);
  
---- linux-2.6.20/fs/jfs/jfs_xtree.c	2006-11-30 21:19:26 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/jfs_xtree.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/jfs_xtree.c	2006-11-30 21:19:26 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/jfs_xtree.c	2007-02-06 03:05:22 +0100
 @@ -21,6 +21,7 @@
  
  #include <linux/fs.h>
@@ -5456,8 +5446,8 @@
  	/* update quota allocation to reflect freed blocks */
  	DQUOT_FREE_BLOCK(ip, nfreed);
  
---- linux-2.6.20/fs/jfs/namei.c	2006-11-30 21:19:26 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/namei.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/namei.c	2006-11-30 21:19:26 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/namei.c	2007-02-06 03:05:22 +0100
 @@ -20,6 +20,7 @@
  #include <linux/fs.h>
  #include <linux/ctype.h>
@@ -5482,8 +5472,8 @@
  };
  
  const struct file_operations jfs_dir_operations = {
---- linux-2.6.20/fs/jfs/super.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/super.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/super.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/super.c	2007-02-06 03:05:22 +0100
 @@ -194,7 +194,8 @@ static void jfs_put_super(struct super_b
  enum {
  	Opt_integrity, Opt_nointegrity, Opt_iocharset, Opt_resize,
@@ -5550,8 +5540,8 @@
  
  	if (newLVSize) {
  		printk(KERN_ERR "resize option for remount only\n");
---- linux-2.6.20/fs/jfs/xattr.c	2006-11-30 21:19:26 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/jfs/xattr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/jfs/xattr.c	2006-11-30 21:19:26 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/jfs/xattr.c	2007-02-06 03:05:22 +0100
 @@ -23,6 +23,7 @@
  #include <linux/posix_acl_xattr.h>
  #include <linux/quotaops.h>
@@ -5629,8 +5619,8 @@
  
  	inode->i_ctime = CURRENT_TIME;
  
---- linux-2.6.20/fs/libfs.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/libfs.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/libfs.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/libfs.c	2007-02-06 03:05:22 +0100
 @@ -124,7 +124,8 @@ static inline unsigned char dt_type(stru
   * both impossible due to the lock on directory.
   */
@@ -5677,8 +5667,8 @@
  EXPORT_SYMBOL(generic_read_dir);
  EXPORT_SYMBOL(get_sb_pseudo);
  EXPORT_SYMBOL(simple_commit_write);
---- linux-2.6.20/fs/locks.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/locks.c	2007-02-06 03:25:47 +0100
+--- linux-2.6.20.1/fs/locks.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/locks.c	2007-02-25 17:48:19 +0100
 @@ -125,6 +125,8 @@
  #include <linux/syscalls.h>
  #include <linux/time.h>
@@ -5753,15 +5743,23 @@
  	error = lease_init(filp, type, fl);
  	if (error) {
  		locks_free_lock(fl);
-@@ -790,6 +808,7 @@ find_conflict:
- 	if (request->fl_flags & FL_ACCESS)
+@@ -773,6 +791,7 @@ static int flock_lock_file(struct file *
+ 	if (found)
+ 		cond_resched();
+ 
++	new_fl->fl_xid = -1;
+ find_conflict:
+ 	for_each_lock(inode, before) {
+ 		struct file_lock *fl = *before;
+@@ -791,6 +810,7 @@ find_conflict:
  		goto out;
  	locks_copy_lock(new_fl, request);
-+	vx_locks_inc(new_fl);
  	locks_insert_lock(&inode->i_flock, new_fl);
++	vx_locks_inc(new_fl);
  	new_fl = NULL;
  	error = 0;
-@@ -801,7 +820,8 @@ out:
+ 
+@@ -801,7 +821,8 @@ out:
  	return error;
  }
  
@@ -5771,7 +5769,7 @@
  {
  	struct file_lock *fl;
  	struct file_lock *new_fl = NULL;
-@@ -811,6 +831,8 @@ static int __posix_lock_file_conf(struct
+@@ -811,6 +832,8 @@ static int __posix_lock_file_conf(struct
  	struct file_lock **before;
  	int error, added = 0;
  
@@ -5780,7 +5778,7 @@
  	/*
  	 * We may need two file_lock structures for this operation,
  	 * so we get them in advance to avoid races.
-@@ -821,7 +843,11 @@ static int __posix_lock_file_conf(struct
+@@ -821,7 +844,11 @@ static int __posix_lock_file_conf(struct
  	    (request->fl_type != F_UNLCK ||
  	     request->fl_start != 0 || request->fl_end != OFFSET_MAX)) {
  		new_fl = locks_alloc_lock();
@@ -5792,7 +5790,7 @@
  	}
  
  	lock_kernel();
-@@ -1018,7 +1044,8 @@ static int __posix_lock_file_conf(struct
+@@ -1018,7 +1045,8 @@ static int __posix_lock_file_conf(struct
   */
  int posix_lock_file(struct file *filp, struct file_lock *fl)
  {
@@ -5802,7 +5800,7 @@
  }
  EXPORT_SYMBOL(posix_lock_file);
  
-@@ -1033,7 +1060,8 @@ EXPORT_SYMBOL(posix_lock_file);
+@@ -1033,7 +1061,8 @@ EXPORT_SYMBOL(posix_lock_file);
  int posix_lock_file_conf(struct file *filp, struct file_lock *fl,
  			struct file_lock *conflock)
  {
@@ -5812,7 +5810,7 @@
  }
  EXPORT_SYMBOL(posix_lock_file_conf);
  
-@@ -1123,7 +1151,7 @@ int locks_mandatory_area(int read_write,
+@@ -1123,7 +1152,7 @@ int locks_mandatory_area(int read_write,
  	fl.fl_end = offset + count - 1;
  
  	for (;;) {
@@ -5821,7 +5819,17 @@
  		if (error != -EAGAIN)
  			break;
  		if (!(fl.fl_flags & FL_SLEEP))
-@@ -1685,6 +1713,11 @@ int fcntl_setlk(unsigned int fd, struct 
+@@ -1427,8 +1456,8 @@ static int __setlease(struct file *filp,
+ 		goto out;
+ 
+ 	locks_copy_lock(fl, lease);
+-
+ 	locks_insert_lock(before, fl);
++	vx_locks_inc(fl);
+ 
+ 	*flp = fl;
+ 	error = 0;
+@@ -1685,6 +1714,11 @@ int fcntl_setlk(unsigned int fd, struct 
  	if (file_lock == NULL)
  		return -ENOLCK;
  
@@ -5833,7 +5841,7 @@
  	/*
  	 * This might block, so we do it before checking the inode.
  	 */
-@@ -1828,6 +1861,11 @@ int fcntl_setlk64(unsigned int fd, struc
+@@ -1828,6 +1862,11 @@ int fcntl_setlk64(unsigned int fd, struc
  	if (file_lock == NULL)
  		return -ENOLCK;
  
@@ -5845,7 +5853,7 @@
  	/*
  	 * This might block, so we do it before checking the inode.
  	 */
-@@ -2123,6 +2161,10 @@ int get_locks_status(char *buffer, char 
+@@ -2123,6 +2162,10 @@ int get_locks_status(char *buffer, char 
  	list_for_each(tmp, &file_lock_list) {
  		struct list_head *btmp;
  		struct file_lock *fl = list_entry(tmp, struct file_lock, fl_link);
@@ -5856,8 +5864,8 @@
  		lock_get_status(q, fl, ++i, "");
  		move_lock_status(&q, &pos, offset);
  
---- linux-2.6.20/fs/namei.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/namei.c	2007-02-08 07:31:50 +0100
+--- linux-2.6.20.1/fs/namei.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/namei.c	2007-02-15 00:05:56 +0100
 @@ -32,6 +32,11 @@
  #include <linux/file.h>
  #include <linux/fcntl.h>
@@ -5942,7 +5950,7 @@
  		    nd->mnt == fs->rootmnt) {
                          read_unlock(&fs->lock);
 -			break;
-+			/* FIXME: for sane '/' avoid follow_mount() */
++			/* for sane '/' avoid follow_mount() */
 +			return;
  		}
                  read_unlock(&fs->lock);
@@ -6379,8 +6387,8 @@
  /* get the link contents into pagecache */
  static char *page_getlink(struct dentry * dentry, struct page **ppage)
  {
---- linux-2.6.20/fs/namespace.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/namespace.c	2007-02-06 05:58:26 +0100
+--- linux-2.6.20.1/fs/namespace.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/namespace.c	2007-02-06 05:58:26 +0100
 @@ -25,6 +25,11 @@
  #include <linux/security.h>
  #include <linux/mount.h>
@@ -6714,8 +6722,8 @@
 +	atomic_dec(&vs_global_mnt_ns);
  	kfree(ns);
  }
---- linux-2.6.20/fs/nfs/client.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfs/client.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfs/client.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfs/client.c	2007-02-06 03:05:22 +0100
 @@ -520,6 +520,9 @@ static int nfs_init_server_rpcclient(str
  	if (server->flags & NFS4_MOUNT_INTR)
  		server->client->cl_intr = 1;
@@ -6737,8 +6745,8 @@
  	server->maxfilesize = fsinfo->maxfilesize;
  
  	/* We're airborne Set socket buffersize */
---- linux-2.6.20/fs/nfs/dir.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfs/dir.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfs/dir.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfs/dir.c	2007-02-06 03:05:22 +0100
 @@ -33,6 +33,7 @@
  #include <linux/pagevec.h>
  #include <linux/namei.h>
@@ -6765,8 +6773,8 @@
  		return 0;
  	return 1;
  }
---- linux-2.6.20/fs/nfs/inode.c	2007-02-06 03:01:24 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfs/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfs/inode.c	2007-02-06 03:01:24 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfs/inode.c	2007-02-06 03:05:22 +0100
 @@ -37,6 +37,7 @@
  #include <linux/vfs.h>
  #include <linux/inet.h>
@@ -6861,8 +6869,8 @@
  
  	if (fattr->valid & (NFS_ATTR_FATTR_V3 | NFS_ATTR_FATTR_V4)) {
  		/*
---- linux-2.6.20/fs/nfs/nfs3xdr.c	2006-11-30 21:19:26 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfs/nfs3xdr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfs/nfs3xdr.c	2006-11-30 21:19:26 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfs/nfs3xdr.c	2007-02-06 03:05:22 +0100
 @@ -22,6 +22,7 @@
  #include <linux/nfs3.h>
  #include <linux/nfs_fs.h>
@@ -6952,8 +6960,8 @@
  	if (args->type == NF3CHR || args->type == NF3BLK) {
  		*p++ = htonl(MAJOR(args->rdev));
  		*p++ = htonl(MINOR(args->rdev));
---- linux-2.6.20/fs/nfs/nfsroot.c	2007-02-06 03:01:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfs/nfsroot.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfs/nfsroot.c	2007-02-06 03:01:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfs/nfsroot.c	2007-02-06 03:05:22 +0100
 @@ -118,12 +118,12 @@ static int mount_port __initdata = 0;		/
  enum {
  	/* Options that take integer arguments */
@@ -7001,8 +7009,8 @@
  			default:
  				printk(KERN_WARNING "Root-NFS: unknown "
  					"option: %s\n", p);
---- linux-2.6.20/fs/nfs/super.c	2006-11-30 21:19:26 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfs/super.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfs/super.c	2006-11-30 21:19:26 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfs/super.c	2007-02-06 03:05:22 +0100
 @@ -44,6 +44,7 @@
  #include <linux/vfs.h>
  #include <linux/inet.h>
@@ -7019,8 +7027,8 @@
  		{ 0, NULL, NULL }
  	};
  	const struct proc_nfs_info *nfs_infop;
---- linux-2.6.20/fs/nfsd/auth.c	2006-06-18 04:54:42 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfsd/auth.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfsd/auth.c	2006-06-18 04:54:42 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfsd/auth.c	2007-02-06 03:05:22 +0100
 @@ -9,6 +9,7 @@
  #include <linux/sunrpc/svc.h>
  #include <linux/sunrpc/svcauth.h>
@@ -7055,8 +7063,8 @@
  		cap_t(current->cap_effective) &= ~CAP_NFSD_MASK;
  	} else {
  		cap_t(current->cap_effective) |= (CAP_NFSD_MASK &
---- linux-2.6.20/fs/nfsd/nfs3xdr.c	2007-02-06 03:01:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfsd/nfs3xdr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfsd/nfs3xdr.c	2007-02-06 03:01:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfsd/nfs3xdr.c	2007-02-06 03:05:22 +0100
 @@ -21,6 +21,7 @@
  #include <linux/sunrpc/svc.h>
  #include <linux/nfsd/nfsd.h>
@@ -7105,8 +7113,8 @@
  	if (S_ISLNK(stat->mode) && stat->size > NFS3_MAXPATHLEN) {
  		p = xdr_encode_hyper(p, (u64) NFS3_MAXPATHLEN);
  	} else {
---- linux-2.6.20/fs/nfsd/nfs4recover.c	2007-02-06 03:01:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfsd/nfs4recover.c	2007-02-06 03:14:20 +0100
+--- linux-2.6.20.1/fs/nfsd/nfs4recover.c	2007-02-06 03:01:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfsd/nfs4recover.c	2007-02-06 03:14:20 +0100
 @@ -156,7 +156,7 @@ nfsd4_create_clid_dir(struct nfs4_client
  		dprintk("NFSD: nfsd4_create_clid_dir: DIRECTORY EXISTS\n");
  		goto out_put;
@@ -7134,8 +7142,8 @@
  	mutex_unlock(&dir->d_inode->i_mutex);
  	return status;
  }
---- linux-2.6.20/fs/nfsd/nfs4xdr.c	2007-02-06 03:01:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfsd/nfs4xdr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfsd/nfs4xdr.c	2007-02-06 03:01:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfsd/nfs4xdr.c	2007-02-06 03:05:22 +0100
 @@ -57,6 +57,7 @@
  #include <linux/nfsd_idmap.h>
  #include <linux/nfs4.h>
@@ -7165,8 +7173,8 @@
  		if (status == nfserr_resource)
  			goto out_resource;
  		if (status)
---- linux-2.6.20/fs/nfsd/nfsxdr.c	2007-02-06 03:01:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfsd/nfsxdr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfsd/nfsxdr.c	2007-02-06 03:01:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfsd/nfsxdr.c	2007-02-06 03:05:22 +0100
 @@ -15,6 +15,7 @@
  #include <linux/nfsd/nfsd.h>
  #include <linux/nfsd/xdr.h>
@@ -7215,8 +7223,8 @@
  
  	if (S_ISLNK(type) && stat->size > NFS_MAXPATHLEN) {
  		*p++ = htonl(NFS_MAXPATHLEN);
---- linux-2.6.20/fs/nfsd/vfs.c	2007-02-06 03:01:25 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/nfsd/vfs.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/nfsd/vfs.c	2007-02-06 03:01:25 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/nfsd/vfs.c	2007-02-06 03:05:22 +0100
 @@ -1183,13 +1183,13 @@ nfsd_create(struct svc_rqst *rqstp, stru
  		host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL);
  		break;
@@ -7280,8 +7288,8 @@
  				return nfserr_rofs;
  			if (/* (acc & MAY_WRITE) && */ IS_IMMUTABLE(inode))
  				return nfserr_perm;
---- linux-2.6.20/fs/ocfs2/dlm/dlmfs.c	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/dlm/dlmfs.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ocfs2/dlm/dlmfs.c	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/dlm/dlmfs.c	2007-02-06 03:05:22 +0100
 @@ -44,6 +44,7 @@
  #include <linux/string.h>
  #include <linux/smp_lock.h>
@@ -7306,8 +7314,8 @@
  	inode->i_blocks = 0;
  	inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info;
  	inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
---- linux-2.6.20/fs/ocfs2/dlmglue.c	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/dlmglue.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ocfs2/dlmglue.c	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/dlmglue.c	2007-02-06 03:05:22 +0100
 @@ -1339,6 +1339,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);
@@ -7324,8 +7332,8 @@
  	inode->i_mode    = be16_to_cpu(lvb->lvb_imode);
  	inode->i_nlink   = be16_to_cpu(lvb->lvb_inlink);
  	ocfs2_unpack_timespec(&inode->i_atime,
---- linux-2.6.20/fs/ocfs2/dlmglue.h	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/dlmglue.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ocfs2/dlmglue.h	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/dlmglue.h	2007-02-06 03:05:22 +0100
 @@ -34,7 +34,7 @@
  struct ocfs2_meta_lvb {
  	__u8         lvb_version;
@@ -7335,8 +7343,8 @@
  	__be32       lvb_iclusters;
  	__be32       lvb_iuid;
  	__be32       lvb_igid;
---- linux-2.6.20/fs/ocfs2/file.c	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/file.c	2007-02-06 03:20:23 +0100
+--- linux-2.6.20.1/fs/ocfs2/file.c	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/file.c	2007-02-06 03:20:23 +0100
 @@ -858,13 +858,15 @@ int ocfs2_setattr(struct dentry *dentry,
  		mlog(0, "uid change: %d\n", attr->ia_uid);
  	if (attr->ia_valid & ATTR_GID)
@@ -7362,8 +7370,8 @@
  	.permission	= ocfs2_permission,
  };
  
---- linux-2.6.20/fs/ocfs2/inode.c	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ocfs2/inode.c	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/inode.c	2007-02-06 03:05:22 +0100
 @@ -29,6 +29,7 @@
  #include <linux/highmem.h>
  #include <linux/pagemap.h>
@@ -7484,8 +7492,8 @@
  	inode->i_mode = le16_to_cpu(fe->i_mode);
  	if (S_ISLNK(inode->i_mode) && le32_to_cpu(fe->i_clusters) == 0)
  		inode->i_blocks = 0;
---- linux-2.6.20/fs/ocfs2/inode.h	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/inode.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ocfs2/inode.h	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/inode.h	2007-02-06 03:05:22 +0100
 @@ -143,5 +143,6 @@ int ocfs2_aio_read(struct file *file, st
  int ocfs2_aio_write(struct file *file, struct kiocb *req, struct iocb *iocb);
  
@@ -7493,8 +7501,8 @@
 +int ocfs2_sync_flags(struct inode *inode);
  
  #endif /* OCFS2_INODE_H */
---- linux-2.6.20/fs/ocfs2/ioctl.c	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/ioctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ocfs2/ioctl.c	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/ioctl.c	2007-02-06 03:05:22 +0100
 @@ -38,7 +38,7 @@ static int ocfs2_get_inode_attr(struct i
  	return status;
  }
@@ -7504,8 +7512,8 @@
  				unsigned mask)
  {
  	struct ocfs2_inode_info *ocfs2_inode = OCFS2_I(inode);
---- linux-2.6.20/fs/ocfs2/ioctl.h	2006-11-30 21:19:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/ioctl.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ocfs2/ioctl.h	2006-11-30 21:19:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/ioctl.h	2007-02-06 03:05:22 +0100
 @@ -10,6 +10,9 @@
  #ifndef OCFS2_IOCTL_H
  #define OCFS2_IOCTL_H
@@ -7516,8 +7524,8 @@
  int ocfs2_ioctl(struct inode * inode, struct file * filp,
  	unsigned int cmd, unsigned long arg);
  
---- linux-2.6.20/fs/ocfs2/namei.c	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/namei.c	2007-02-06 03:21:17 +0100
+--- linux-2.6.20.1/fs/ocfs2/namei.c	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/namei.c	2007-02-06 03:21:17 +0100
 @@ -40,6 +40,7 @@
  #include <linux/types.h>
  #include <linux/slab.h>
@@ -7566,8 +7574,8 @@
 +	.sync_flags     = ocfs2_sync_flags,
  	.permission	= ocfs2_permission,
  };
---- linux-2.6.20/fs/ocfs2/ocfs2.h	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/ocfs2.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ocfs2/ocfs2.h	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/ocfs2.h	2007-02-06 03:05:22 +0100
 @@ -175,6 +175,7 @@ enum ocfs2_mount_options
  	OCFS2_MOUNT_NOINTR  = 1 << 2,   /* Don't catch signals */
  	OCFS2_MOUNT_ERRORS_PANIC = 1 << 3, /* Panic on errors */
@@ -7576,8 +7584,8 @@
  };
  
  #define OCFS2_OSB_SOFT_RO	0x0001
---- linux-2.6.20/fs/ocfs2/ocfs2_fs.h	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/ocfs2_fs.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/ocfs2/ocfs2_fs.h	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/ocfs2_fs.h	2007-02-06 03:05:22 +0100
 @@ -151,8 +151,12 @@
  #define OCFS2_NOATIME_FL	(0x00000080)	/* do not update atime */
  #define OCFS2_DIRSYNC_FL	(0x00010000)	/* dirsync behaviour (directories only) */
@@ -7591,8 +7599,8 @@
  
  /*
   * ioctl commands
---- linux-2.6.20/fs/ocfs2/super.c	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/ocfs2/super.c	2007-02-06 03:23:25 +0100
+--- linux-2.6.20.1/fs/ocfs2/super.c	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/ocfs2/super.c	2007-02-06 03:23:25 +0100
 @@ -140,6 +140,7 @@ enum {
  	Opt_data_ordered,
  	Opt_data_writeback,
@@ -7658,8 +7666,8 @@
  		default:
  			mlog(ML_ERROR,
  			     "Unrecognized mount option \"%s\" "
---- linux-2.6.20/fs/open.c	2007-02-06 03:01:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/open.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/open.c	2007-02-06 03:01:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/open.c	2007-02-06 03:05:22 +0100
 @@ -27,22 +27,31 @@
  #include <linux/syscalls.h>
  #include <linux/rcupdate.h>
@@ -7833,8 +7841,8 @@
  }
  
  void fastcall put_unused_fd(unsigned int fd)
---- linux-2.6.20/fs/proc/array.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/proc/array.c	2007-02-06 03:15:47 +0100
+--- linux-2.6.20.1/fs/proc/array.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/proc/array.c	2007-02-06 03:15:47 +0100
 @@ -75,6 +75,8 @@
  #include <linux/cpuset.h>
  #include <linux/rcupdate.h>
@@ -8019,8 +8027,8 @@
  		tcomm,
  		state,
  		ppid,
---- linux-2.6.20/fs/proc/base.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/proc/base.c	2007-02-06 03:16:36 +0100
+--- linux-2.6.20.1/fs/proc/base.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/proc/base.c	2007-02-26 19:47:43 +0100
 @@ -73,6 +73,9 @@
  #include <linux/poll.h>
  #include <linux/nsproxy.h>
@@ -8054,7 +8062,7 @@
  		if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
  		    task_dumpable(task)) {
  			inode->i_uid = task->euid;
-@@ -1097,11 +1108,11 @@ static int pid_revalidate(struct dentry 
+@@ -1097,11 +1108,12 @@ static int pid_revalidate(struct dentry 
  		}
  		inode->i_mode &= ~(S_ISUID | S_ISGID);
  		security_task_to_inode(task, inode);
@@ -8062,17 +8070,19 @@
  		put_task_struct(task);
 -		return 1;
  	}
- 	d_drop(dentry);
+-	d_drop(dentry);
 -	return 0;
++	if (!ret)
++		d_drop(dentry);
 +	return ret;
  }
  
  static int pid_delete_dentry(struct dentry * dentry)
-@@ -1467,6 +1478,13 @@ static struct dentry *proc_pident_lookup
+@@ -1467,6 +1479,13 @@ static struct dentry *proc_pident_lookup
  	if (!task)
  		goto out_no_task;
  
-+	/* FIXME: maybe we can come up with a generic approach? */
++	/* TODO: maybe we can come up with a generic approach? */
 +	if (task_vx_flags(task, VXF_HIDE_VINFO, 0) &&
 +		(dentry->d_name.len == 5) &&
 +		(!memcmp(dentry->d_name.name, "vinfo", 5) ||
@@ -8082,7 +8092,7 @@
  	/*
  	 * Yes, it does not scale. And it should not. Don't add
  	 * new entries into /proc/<tgid>/ without very good reasons.
-@@ -1671,14 +1689,14 @@ static int proc_self_readlink(struct den
+@@ -1671,14 +1690,14 @@ static int proc_self_readlink(struct den
  			      int buflen)
  {
  	char tmp[PROC_NUMBUF];
@@ -8099,7 +8109,7 @@
  	return ERR_PTR(vfs_follow_link(nd,tmp));
  }
  
-@@ -1772,7 +1790,7 @@ out_iput:
+@@ -1772,7 +1791,7 @@ out_iput:
  static struct dentry *proc_base_lookup(struct inode *dir, struct dentry *dentry)
  {
  	struct dentry *error;
@@ -8108,7 +8118,7 @@
  	struct pid_entry *p, *last;
  
  	error = ERR_PTR(-ENOENT);
-@@ -1833,6 +1851,9 @@ static int proc_pid_io_accounting(struct
+@@ -1833,6 +1852,9 @@ static int proc_pid_io_accounting(struct
  static struct file_operations proc_task_operations;
  static struct inode_operations proc_task_inode_operations;
  
@@ -8118,7 +8128,7 @@
  static struct pid_entry tgid_base_stuff[] = {
  	DIR("task",       S_IRUGO|S_IXUGO, task),
  	DIR("fd",         S_IRUSR|S_IXUSR, fd),
-@@ -1870,6 +1891,8 @@ static struct pid_entry tgid_base_stuff[
+@@ -1870,6 +1892,8 @@ static struct pid_entry tgid_base_stuff[
  #ifdef CONFIG_CPUSETS
  	REG("cpuset",     S_IRUGO, cpuset),
  #endif
@@ -8127,7 +8137,7 @@
  	INF("oom_score",  S_IRUGO, oom_score),
  	REG("oom_adj",    S_IRUGO|S_IWUSR, oom_adjust),
  #ifdef CONFIG_AUDITSYSCALL
-@@ -2018,7 +2041,7 @@ struct dentry *proc_pid_lookup(struct in
+@@ -2018,7 +2042,7 @@ struct dentry *proc_pid_lookup(struct in
  		goto out;
  
  	rcu_read_lock();
@@ -8136,7 +8146,7 @@
  	if (task)
  		get_task_struct(task);
  	rcu_read_unlock();
-@@ -2082,7 +2105,7 @@ static int proc_pid_fill_cache(struct fi
+@@ -2082,7 +2106,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;
@@ -8145,7 +8155,7 @@
  	struct task_struct *task;
  	int tgid;
  
-@@ -2101,7 +2124,10 @@ int proc_pid_readdir(struct file * filp,
+@@ -2101,7 +2125,10 @@ int proc_pid_readdir(struct file * filp,
  	     put_task_struct(task), task = next_tgid(tgid + 1)) {
  		tgid = task->pid;
  		filp->f_pos = tgid + TGID_OFFSET;
@@ -8157,7 +8167,7 @@
  			put_task_struct(task);
  			goto out;
  		}
-@@ -2225,9 +2251,11 @@ static struct dentry *proc_task_lookup(s
+@@ -2225,9 +2252,11 @@ static struct dentry *proc_task_lookup(s
  	tid = name_to_int(dentry);
  	if (tid == ~0U)
  		goto out;
@@ -8170,7 +8180,7 @@
  	if (task)
  		get_task_struct(task);
  	rcu_read_unlock();
-@@ -2372,7 +2400,10 @@ static int proc_task_readdir(struct file
+@@ -2372,7 +2401,10 @@ static int proc_task_readdir(struct file
  	for (task = first_tid(leader, tid, pos - 2);
  	     task;
  	     task = next_tid(task), pos++) {
@@ -8182,8 +8192,8 @@
  		if (proc_task_fill_cache(filp, dirent, filldir, task, tid) < 0) {
  			/* returning this tgid failed, save it as the first
  			 * pid for the next readir call */
---- linux-2.6.20/fs/proc/generic.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/proc/generic.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/proc/generic.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/proc/generic.c	2007-02-06 03:05:22 +0100
 @@ -20,6 +20,7 @@
  #include <linux/namei.h>
  #include <linux/bitops.h>
@@ -8243,8 +8253,8 @@
  		} else {
  			kfree(ent);
  			ent = NULL;
---- linux-2.6.20/fs/proc/inode.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/proc/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/proc/inode.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/proc/inode.c	2007-02-06 03:05:22 +0100
 @@ -168,6 +168,8 @@ struct inode *proc_get_inode(struct supe
  			inode->i_uid = de->uid;
  			inode->i_gid = de->gid;
@@ -8254,8 +8264,8 @@
  		if (de->size)
  			inode->i_size = de->size;
  		if (de->nlink)
---- linux-2.6.20/fs/proc/internal.h	2006-11-30 21:19:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/proc/internal.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/proc/internal.h	2006-11-30 21:19:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/proc/internal.h	2007-02-06 03:05:22 +0100
 @@ -10,6 +10,7 @@
   */
  
@@ -8282,8 +8292,8 @@
  static inline int proc_fd(struct inode *inode)
  {
  	return PROC_I(inode)->fd;
---- linux-2.6.20/fs/proc/proc_misc.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/proc/proc_misc.c	2007-02-06 03:19:18 +0100
+--- linux-2.6.20.1/fs/proc/proc_misc.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/proc/proc_misc.c	2007-02-06 03:19:18 +0100
 @@ -54,6 +54,8 @@
  #include <asm/div64.h>
  #include "internal.h"
@@ -8350,8 +8360,8 @@
  		cached = 0;
  
  	get_vmalloc_info(&vmi);
---- linux-2.6.20/fs/proc/root.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/proc/root.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/proc/root.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/proc/root.c	2007-02-06 03:05:22 +0100
 @@ -26,6 +26,9 @@ struct proc_dir_entry *proc_net, *proc_n
  #ifdef CONFIG_SYSCTL
  struct proc_dir_entry *proc_sys_root;
@@ -8370,8 +8380,8 @@
  }
  
  static int proc_root_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat
---- linux-2.6.20/fs/quota.c	2006-11-30 21:19:28 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/quota.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/quota.c	2006-11-30 21:19:28 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/quota.c	2007-02-06 03:05:22 +0100
 @@ -17,6 +17,7 @@
  #include <linux/buffer_head.h>
  #include <linux/capability.h>
@@ -8454,8 +8464,8 @@
  /*
   * This is the system call interface. This communicates with
   * the user-level programs. Currently this only supports diskquota
---- linux-2.6.20/fs/read_write.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/read_write.c	2007-02-06 03:38:37 +0100
+--- linux-2.6.20.1/fs/read_write.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/read_write.c	2007-02-06 03:38:37 +0100
 @@ -701,12 +701,77 @@ sys_writev(unsigned long fd, const struc
  	return ret;
  }
@@ -8606,8 +8616,8 @@
  fput_out:
  	fput_light(out_file, fput_needed_out);
  fput_in:
---- linux-2.6.20/fs/reiserfs/bitmap.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/reiserfs/bitmap.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/reiserfs/bitmap.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/reiserfs/bitmap.c	2007-02-06 03:05:22 +0100
 @@ -13,6 +13,7 @@
  #include <linux/reiserfs_fs_sb.h>
  #include <linux/reiserfs_fs_i.h>
@@ -8700,8 +8710,8 @@
  	}
  
  	return CARRY_ON;
---- linux-2.6.20/fs/reiserfs/file.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/reiserfs/file.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/reiserfs/file.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/reiserfs/file.c	2007-02-06 03:05:22 +0100
 @@ -1550,6 +1550,7 @@ const struct file_operations reiserfs_fi
  	.release = reiserfs_file_release,
  	.fsync = reiserfs_sync_file,
@@ -8716,8 +8726,8 @@
  	.permission = reiserfs_permission,
 +	.sync_flags = reiserfs_sync_flags,
  };
---- linux-2.6.20/fs/reiserfs/inode.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/reiserfs/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/reiserfs/inode.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/reiserfs/inode.c	2007-02-06 03:05:22 +0100
 @@ -16,6 +16,8 @@
  #include <linux/mpage.h>
  #include <linux/writeback.h>
@@ -8901,8 +8911,8 @@
  				mark_inode_dirty(inode);
  				error =
  				    journal_end(&th, inode->i_sb, jbegin_count);
---- linux-2.6.20/fs/reiserfs/ioctl.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/reiserfs/ioctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/reiserfs/ioctl.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/reiserfs/ioctl.c	2007-02-06 03:05:22 +0100
 @@ -4,6 +4,7 @@
  
  #include <linux/capability.h>
@@ -8973,8 +8983,8 @@
  			return -EROFS;
  		if (get_user(inode->i_generation, (int __user *)arg))
  			return -EFAULT;
---- linux-2.6.20/fs/reiserfs/namei.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/reiserfs/namei.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/reiserfs/namei.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/reiserfs/namei.c	2007-02-06 03:05:22 +0100
 @@ -18,6 +18,7 @@
  #include <linux/reiserfs_xattr.h>
  #include <linux/smp_lock.h>
@@ -9022,8 +9032,8 @@
 +	.sync_flags = reiserfs_sync_flags,
  
  };
---- linux-2.6.20/fs/reiserfs/stree.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/reiserfs/stree.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/reiserfs/stree.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/reiserfs/stree.c	2007-02-06 03:05:22 +0100
 @@ -56,6 +56,7 @@
  #include <linux/smp_lock.h>
  #include <linux/buffer_head.h>
@@ -9099,8 +9109,8 @@
 +	}
  	return retval;
  }
---- linux-2.6.20/fs/reiserfs/super.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/reiserfs/super.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/reiserfs/super.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/reiserfs/super.c	2007-02-06 03:05:22 +0100
 @@ -885,6 +885,14 @@ static int reiserfs_parse_options(struct
  		{"user_xattr",.setmask = 1 << REISERFS_UNSUPPORTED_OPT},
  		{"nouser_xattr",.clrmask = 1 << REISERFS_UNSUPPORTED_OPT},
@@ -9140,8 +9150,8 @@
  	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,
---- linux-2.6.20/fs/reiserfs/xattr.c	2007-02-06 03:01:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/reiserfs/xattr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/reiserfs/xattr.c	2007-02-06 03:01:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/reiserfs/xattr.c	2007-02-06 03:05:22 +0100
 @@ -35,6 +35,7 @@
  #include <linux/namei.h>
  #include <linux/errno.h>
@@ -9159,8 +9169,8 @@
  		reiserfs_write_unlock_xattrs(inode->i_sb);
  		dput(root);
  	} else {
---- linux-2.6.20/fs/stat.c	2007-02-06 03:01:30 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/stat.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/stat.c	2007-02-06 03:01:30 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/stat.c	2007-02-06 03:05:22 +0100
 @@ -27,6 +27,7 @@ void generic_fillattr(struct inode *inod
  	stat->nlink = inode->i_nlink;
  	stat->uid = inode->i_uid;
@@ -9169,8 +9179,8 @@
  	stat->rdev = inode->i_rdev;
  	stat->atime = inode->i_atime;
  	stat->mtime = inode->i_mtime;
---- linux-2.6.20/fs/super.c	2007-02-06 03:01:30 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/super.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/super.c	2007-02-06 03:01:30 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/super.c	2007-02-06 03:05:22 +0100
 @@ -37,6 +37,9 @@
  #include <linux/idr.h>
  #include <linux/kobject.h>
@@ -9223,8 +9233,8 @@
  	put_filesystem(type);
  	return mnt;
  }
---- linux-2.6.20/fs/sysfs/mount.c	2007-02-06 03:01:30 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/sysfs/mount.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/sysfs/mount.c	2007-02-06 03:01:30 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/sysfs/mount.c	2007-02-06 03:05:22 +0100
 @@ -11,8 +11,6 @@
  
  #include "sysfs.h"
@@ -9243,8 +9253,8 @@
  	sb->s_op = &sysfs_ops;
  	sb->s_time_gran = 1;
  	sysfs_sb = sb;
---- linux-2.6.20/fs/utimes.c	2007-02-06 03:01:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/utimes.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/utimes.c	2007-02-06 03:01:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/utimes.c	2007-02-06 03:05:22 +0100
 @@ -4,6 +4,8 @@
  #include <linux/namei.h>
  #include <linux/sched.h>
@@ -9281,8 +9291,8 @@
  
  	/* Don't worry, the checks are done in inode_change_ok() */
  	newattrs.ia_valid = ATTR_CTIME | ATTR_MTIME | ATTR_ATIME;
---- linux-2.6.20/fs/xattr.c	2007-02-06 03:01:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xattr.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xattr.c	2007-02-06 03:01:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xattr.c	2007-02-06 03:05:22 +0100
 @@ -18,6 +18,7 @@
  #include <linux/module.h>
  #include <linux/fsnotify.h>
@@ -9383,8 +9393,8 @@
  	fput(f);
  	return error;
  }
---- linux-2.6.20/fs/xfs/linux-2.6/xfs_file.c	2007-02-06 03:01:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/linux-2.6/xfs_file.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/linux-2.6/xfs_file.c	2007-02-06 03:01:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/linux-2.6/xfs_file.c	2007-02-06 03:05:22 +0100
 @@ -453,6 +453,7 @@ const struct file_operations xfs_file_op
  	.aio_read	= xfs_file_aio_read,
  	.aio_write	= xfs_file_aio_write,
@@ -9401,8 +9411,8 @@
  	.splice_read	= xfs_file_splice_read_invis,
  	.splice_write	= xfs_file_splice_write_invis,
  	.unlocked_ioctl	= xfs_file_ioctl_invis,
---- linux-2.6.20/fs/xfs/linux-2.6/xfs_ioctl.c	2007-02-06 03:01:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/linux-2.6/xfs_ioctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/linux-2.6/xfs_ioctl.c	2007-02-06 03:01:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/linux-2.6/xfs_ioctl.c	2007-02-06 03:05:22 +0100
 @@ -1100,6 +1100,8 @@ xfs_ioc_fsgeometry(
  #define LINUX_XFLAG_APPEND	0x00000020 /* writes to file may only append */
  #define LINUX_XFLAG_NODUMP	0x00000040 /* do not dump file */
@@ -9423,8 +9433,8 @@
  	if (di_flags & XFS_DIFLAG_APPEND)
  		flags |= LINUX_XFLAG_APPEND;
  	if (di_flags & XFS_DIFLAG_SYNC)
---- linux-2.6.20/fs/xfs/linux-2.6/xfs_iops.c	2006-11-30 21:19:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/linux-2.6/xfs_iops.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/linux-2.6/xfs_iops.c	2006-11-30 21:19:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/linux-2.6/xfs_iops.c	2007-02-06 03:05:22 +0100
 @@ -53,6 +53,7 @@
  #include <linux/xattr.h>
  #include <linux/namei.h>
@@ -9528,8 +9538,8 @@
  	.removexattr		= xfs_vn_removexattr,
 +	.sync_flags		= xfs_vn_sync_flags,
  };
---- linux-2.6.20/fs/xfs/linux-2.6/xfs_linux.h	2006-11-30 21:19:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/linux-2.6/xfs_linux.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/linux-2.6/xfs_linux.h	2006-11-30 21:19:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/linux-2.6/xfs_linux.h	2007-02-06 03:05:22 +0100
 @@ -139,6 +139,7 @@ BUFFER_FNS(PrivateStart, unwritten);
  #define current_pid()		(current->pid)
  #define current_fsuid(cred)	(current->fsuid)
@@ -9538,8 +9548,8 @@
  #define current_test_flags(f)	(current->flags & (f))
  #define current_set_flags_nested(sp, f)		\
  		(*(sp) = current->flags, current->flags |= (f))
---- linux-2.6.20/fs/xfs/linux-2.6/xfs_super.c	2007-02-06 03:01:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/linux-2.6/xfs_super.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/linux-2.6/xfs_super.c	2007-02-06 03:01:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/linux-2.6/xfs_super.c	2007-02-06 03:05:22 +0100
 @@ -159,6 +159,7 @@ xfs_revalidate_inode(
  	inode->i_nlink	= ip->i_d.di_nlink;
  	inode->i_uid	= ip->i_d.di_uid;
@@ -9576,8 +9586,8 @@
  	if (!error)
  		error = bhv_vfs_mntupdate(vfsp, flags, args);
  	kmem_free(args, sizeof(*args));
---- linux-2.6.20/fs/xfs/linux-2.6/xfs_sysctl.c	2006-09-20 16:58:39 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/linux-2.6/xfs_sysctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/linux-2.6/xfs_sysctl.c	2006-09-20 16:58:39 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/linux-2.6/xfs_sysctl.c	2007-02-06 03:05:22 +0100
 @@ -57,79 +57,79 @@ xfs_stats_clear_proc_handler(
  STATIC ctl_table xfs_table[] = {
  	{XFS_RESTRICT_CHOWN, "restrict_chown", &xfs_params.restrict_chown.val,
@@ -9673,8 +9683,8 @@
  	&xfs_params.stats_clear.min, &xfs_params.stats_clear.max},
  #endif /* CONFIG_PROC_FS */
  
---- linux-2.6.20/fs/xfs/linux-2.6/xfs_vnode.c	2006-11-30 21:19:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/linux-2.6/xfs_vnode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/linux-2.6/xfs_vnode.c	2006-11-30 21:19:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/linux-2.6/xfs_vnode.c	2007-02-06 03:05:22 +0100
 @@ -119,6 +119,7 @@ vn_revalidate_core(
  	inode->i_nlink	    = vap->va_nlink;
  	inode->i_uid	    = vap->va_uid;
@@ -9698,8 +9708,8 @@
  	if (vap->va_xflags & XFS_XFLAG_APPEND)
  		inode->i_flags |= S_APPEND;
  	else
---- linux-2.6.20/fs/xfs/linux-2.6/xfs_vnode.h	2006-11-30 21:19:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/linux-2.6/xfs_vnode.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/linux-2.6/xfs_vnode.h	2006-11-30 21:19:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/linux-2.6/xfs_vnode.h	2007-02-06 03:05:22 +0100
 @@ -350,6 +350,7 @@ typedef struct bhv_vattr {
  	xfs_nlink_t	va_nlink;	/* number of references to file */
  	uid_t		va_uid;		/* owner user id */
@@ -9725,8 +9735,8 @@
  
  #define XFS_AT_STAT	(XFS_AT_TYPE|XFS_AT_MODE|XFS_AT_UID|XFS_AT_GID|\
  		XFS_AT_FSID|XFS_AT_NODEID|XFS_AT_NLINK|XFS_AT_SIZE|\
---- linux-2.6.20/fs/xfs/quota/xfs_qm_syscalls.c	2006-09-20 16:58:40 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/quota/xfs_qm_syscalls.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/quota/xfs_qm_syscalls.c	2006-09-20 16:58:40 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/quota/xfs_qm_syscalls.c	2007-02-06 03:05:22 +0100
 @@ -17,6 +17,7 @@
   */
  
@@ -9771,8 +9781,8 @@
  		return XFS_ERROR(EPERM);
  
  	if ((newlim->d_fieldmask &
---- linux-2.6.20/fs/xfs/xfs_clnt.h	2006-06-18 04:54:50 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/xfs_clnt.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/xfs_clnt.h	2006-06-18 04:54:50 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/xfs_clnt.h	2007-02-06 03:05:22 +0100
 @@ -99,5 +99,7 @@ struct xfs_mount_args {
   */
  #define XFSMNT2_COMPAT_IOSIZE	0x00000001	/* don't report large preferred
@@ -9781,8 +9791,8 @@
 +
  
  #endif	/* __XFS_CLNT_H__ */
---- linux-2.6.20/fs/xfs/xfs_dinode.h	2006-09-20 16:58:40 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/xfs_dinode.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/xfs_dinode.h	2006-09-20 16:58:40 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/xfs_dinode.h	2007-02-06 03:05:22 +0100
 @@ -53,7 +53,8 @@ typedef struct xfs_dinode_core
  	__uint32_t	di_gid;		/* owner's group id */
  	__uint32_t	di_nlink;	/* number of links to file */
@@ -9820,8 +9830,8 @@
 +	 XFS_DIFLAG_IUNLINK)
  
  #endif	/* __XFS_DINODE_H__ */
---- linux-2.6.20/fs/xfs/xfs_fs.h	2006-11-30 21:19:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/xfs_fs.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/xfs_fs.h	2006-11-30 21:19:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/xfs_fs.h	2007-02-06 03:05:22 +0100
 @@ -66,6 +66,8 @@ struct fsxattr {
  #define XFS_XFLAG_EXTSIZE	0x00000800	/* extent size allocator hint */
  #define XFS_XFLAG_EXTSZINHERIT	0x00001000	/* inherit inode extent size */
@@ -9841,8 +9851,8 @@
  	__u32		bs_dmevmask;	/* DMIG event mask		*/
  	__u16		bs_dmstate;	/* DMIG state info		*/
  	__u16		bs_aextents;	/* attribute number of extents	*/
---- linux-2.6.20/fs/xfs/xfs_inode.c	2006-11-30 21:19:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/xfs_inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/xfs_inode.c	2006-11-30 21:19:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/xfs_inode.c	2007-02-06 03:05:22 +0100
 @@ -50,6 +50,7 @@
  #include "xfs_mac.h"
  #include "xfs_acl.h"
@@ -9908,8 +9918,8 @@
  	ip->i_d.di_projid = prid;
  	memset(&(ip->i_d.di_pad[0]), 0, sizeof(ip->i_d.di_pad));
  
---- linux-2.6.20/fs/xfs/xfs_itable.c	2006-11-30 21:19:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/xfs_itable.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/xfs_itable.c	2006-11-30 21:19:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/xfs_itable.c	2007-02-06 03:05:22 +0100
 @@ -89,6 +89,7 @@ xfs_bulkstat_one_iget(
  	buf->bs_mode = dic->di_mode;
  	buf->bs_uid = dic->di_uid;
@@ -9926,8 +9936,8 @@
  	buf->bs_size = INT_GET(dic->di_size, ARCH_CONVERT);
  	buf->bs_atime.tv_sec = INT_GET(dic->di_atime.t_sec, ARCH_CONVERT);
  	buf->bs_atime.tv_nsec = INT_GET(dic->di_atime.t_nsec, ARCH_CONVERT);
---- linux-2.6.20/fs/xfs/xfs_mount.h	2006-11-30 21:19:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/xfs_mount.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/xfs_mount.h	2006-11-30 21:19:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/xfs_mount.h	2007-02-06 03:05:22 +0100
 @@ -460,6 +460,7 @@ typedef struct xfs_mount {
  #define XFS_MOUNT_NO_PERCPU_SB	(1ULL << 23)	/* don't use per-cpu superblock
  						   counters */
@@ -9936,8 +9946,8 @@
  
  /*
   * Default minimum read and write sizes.
---- linux-2.6.20/fs/xfs/xfs_vfsops.c	2006-11-30 21:19:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/xfs_vfsops.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/xfs_vfsops.c	2006-11-30 21:19:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/xfs_vfsops.c	2007-02-06 03:05:22 +0100
 @@ -300,6 +300,8 @@ xfs_start_flags(
  
  	if (ap->flags2 & XFSMNT2_COMPAT_IOSIZE)
@@ -9986,8 +9996,8 @@
  		} else if (!strcmp(this_char, "osyncisdsync")) {
  			/* no-op, this is now the default */
  			cmn_err(CE_WARN,
---- linux-2.6.20/fs/xfs/xfs_vnodeops.c	2006-11-30 21:19:29 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/fs/xfs/xfs_vnodeops.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/fs/xfs/xfs_vnodeops.c	2006-11-30 21:19:29 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/fs/xfs/xfs_vnodeops.c	2007-02-15 00:05:56 +0100
 @@ -160,6 +160,7 @@ xfs_getattr(
  	vap->va_mode = ip->i_d.di_mode;
  	vap->va_uid = ip->i_d.di_uid;
@@ -10008,7 +10018,7 @@
  	    (mask & (XFS_AT_UID|XFS_AT_GID|XFS_AT_PROJID))) {
  		uint	qflags = 0;
  
-+		/* FIXME: handle tagging? */
++		/* TODO: handle tagging? */
  		if ((mask & XFS_AT_UID) && XFS_IS_UQUOTA_ON(mp)) {
  			uid = vap->va_uid;
  			qflags |= XFS_QMOPT_UQUOTA;
@@ -10016,7 +10026,7 @@
  	if (mask &
  	    (XFS_AT_MODE|XFS_AT_XFLAGS|XFS_AT_EXTSIZE|XFS_AT_UID|
  	     XFS_AT_GID|XFS_AT_PROJID)) {
-+		/* FIXME: handle tagging? */
++		/* TODO: handle tagging? */
 +
  		/*
  		 * CAP_FOWNER overrides the following restrictions:
@@ -10049,7 +10059,7 @@
  		if ((XFS_IS_UQUOTA_ON(mp) && iuid != uid) ||
  		    (XFS_IS_PQUOTA_ON(mp) && iprojid != projid) ||
  		    (XFS_IS_GQUOTA_ON(mp) && igid != gid)) {
-+			/* FIXME: handle tagging? */
++			/* TODO: handle tagging? */
  			ASSERT(tp);
  			code = XFS_QM_DQVOPCHOWNRESV(mp, tp, ip, udqp, gdqp,
  						capable(CAP_FOWNER) ?
@@ -10083,8 +10093,8 @@
  			if (vap->va_xflags & XFS_XFLAG_APPEND)
  				di_flags |= XFS_DIFLAG_APPEND;
  			if (vap->va_xflags & XFS_XFLAG_SYNC)
---- linux-2.6.20/include/asm-arm/tlb.h	2006-06-18 04:54:58 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-arm/tlb.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-arm/tlb.h	2006-06-18 04:54:58 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-arm/tlb.h	2007-02-06 03:05:22 +0100
 @@ -28,6 +28,7 @@
  #else /* !CONFIG_MMU */
  
@@ -10093,8 +10103,8 @@
  
  /*
   * TLB handling.  This allows us to remove pages from the page
---- linux-2.6.20/include/asm-arm26/tlb.h	2006-01-03 17:30:02 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-arm26/tlb.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-arm26/tlb.h	2006-01-03 17:30:02 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-arm26/tlb.h	2007-02-06 03:05:22 +0100
 @@ -3,6 +3,7 @@
  
  #include <asm/pgalloc.h>
@@ -10103,8 +10113,8 @@
  
  /*
   * TLB handling.  This allows us to remove pages from the page
---- linux-2.6.20/include/asm-arm26/unistd.h	2007-02-06 03:01:35 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-arm26/unistd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-arm26/unistd.h	2007-02-06 03:01:35 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-arm26/unistd.h	2007-02-06 03:05:22 +0100
 @@ -302,6 +302,8 @@
  #define __NR_mq_getsetattr		(__NR_SYSCALL_BASE+279)
  #define __NR_waitid			(__NR_SYSCALL_BASE+280)
@@ -10114,8 +10124,8 @@
  /*
   * The following SWIs are ARM private. FIXME - make appropriate for arm26
   */
---- linux-2.6.20/include/asm-generic/tlb.h	2006-11-30 21:19:31 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-generic/tlb.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-generic/tlb.h	2006-11-30 21:19:31 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-generic/tlb.h	2007-02-06 03:05:22 +0100
 @@ -14,6 +14,7 @@
  #define _ASM_GENERIC__TLB_H
  
@@ -10124,8 +10134,8 @@
  #include <asm/pgalloc.h>
  #include <asm/tlbflush.h>
  
---- linux-2.6.20/include/asm-i386/elf.h	2007-02-06 03:01:37 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-i386/elf.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-i386/elf.h	2007-02-06 03:01:37 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-i386/elf.h	2007-02-06 03:05:22 +0100
 @@ -75,7 +75,7 @@ typedef struct user_fxsr_struct elf_fpxr
     the loader.  We need to make sure that it is out of the way of the program
     that it will "exec", and that there is sufficient room for the brk.  */
@@ -10135,8 +10145,8 @@
  
  /* regs is struct pt_regs, pr_reg is elf_gregset_t (which is
     now struct_user_regs, they are different) */
---- linux-2.6.20/include/asm-ia64/tlb.h	2006-09-20 16:58:40 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-ia64/tlb.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-ia64/tlb.h	2006-09-20 16:58:40 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-ia64/tlb.h	2007-02-06 03:05:22 +0100
 @@ -40,6 +40,7 @@
  #include <linux/mm.h>
  #include <linux/pagemap.h>
@@ -10145,8 +10155,8 @@
  
  #include <asm/pgalloc.h>
  #include <asm/processor.h>
---- linux-2.6.20/include/asm-powerpc/systbl.h	2006-11-30 21:19:33 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-powerpc/systbl.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-powerpc/systbl.h	2006-11-30 21:19:33 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-powerpc/systbl.h	2007-02-06 03:05:22 +0100
 @@ -260,7 +260,7 @@ COMPAT_SYS_SPU(fstatfs64)
  SYSX(sys_ni_syscall, ppc_fadvise64_64, ppc_fadvise64_64)
  PPC_SYS_SPU(rtas)
@@ -10156,8 +10166,8 @@
  COMPAT_SYS(migrate_pages)
  COMPAT_SYS(mbind)
  COMPAT_SYS(get_mempolicy)
---- linux-2.6.20/include/asm-powerpc/unistd.h	2007-02-06 03:01:44 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-powerpc/unistd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-powerpc/unistd.h	2007-02-06 03:01:44 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-powerpc/unistd.h	2007-02-06 03:05:22 +0100
 @@ -275,7 +275,7 @@
  #endif
  #define __NR_rtas		255
@@ -10167,8 +10177,8 @@
  #define __NR_migrate_pages	258
  #define __NR_mbind		259
  #define __NR_get_mempolicy	260
---- linux-2.6.20/include/asm-s390/unistd.h	2007-02-06 03:01:45 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-s390/unistd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-s390/unistd.h	2007-02-06 03:01:45 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-s390/unistd.h	2007-02-06 03:05:22 +0100
 @@ -202,7 +202,7 @@
  #define __NR_clock_gettime	(__NR_timer_create+6)
  #define __NR_clock_getres	(__NR_timer_create+7)
@@ -10178,8 +10188,8 @@
  #define __NR_statfs64		265
  #define __NR_fstatfs64		266
  #define __NR_remap_file_pages	267
---- linux-2.6.20/include/asm-sparc/unistd.h	2007-02-06 03:01:49 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-sparc/unistd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-sparc/unistd.h	2007-02-06 03:01:49 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-sparc/unistd.h	2007-02-06 03:05:22 +0100
 @@ -283,7 +283,7 @@
  #define __NR_timer_getoverrun	264
  #define __NR_timer_delete	265
@@ -10189,8 +10199,8 @@
  #define __NR_io_setup		268
  #define __NR_io_destroy		269
  #define __NR_io_submit		270
---- linux-2.6.20/include/asm-sparc64/tlb.h	2006-09-20 16:58:43 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-sparc64/tlb.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-sparc64/tlb.h	2006-09-20 16:58:43 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-sparc64/tlb.h	2007-02-06 03:05:22 +0100
 @@ -2,6 +2,7 @@
  #define _SPARC64_TLB_H
  
@@ -10199,8 +10209,8 @@
  #include <asm/pgalloc.h>
  #include <asm/tlbflush.h>
  #include <asm/mmu_context.h>
---- linux-2.6.20/include/asm-sparc64/unistd.h	2007-02-06 03:01:49 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-sparc64/unistd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-sparc64/unistd.h	2007-02-06 03:01:49 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-sparc64/unistd.h	2007-02-06 03:05:22 +0100
 @@ -285,7 +285,7 @@
  #define __NR_timer_getoverrun	264
  #define __NR_timer_delete	265
@@ -10210,8 +10220,8 @@
  #define __NR_io_setup		268
  #define __NR_io_destroy		269
  #define __NR_io_submit		270
---- linux-2.6.20/include/asm-x86_64/unistd.h	2007-02-06 03:01:50 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/asm-x86_64/unistd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/asm-x86_64/unistd.h	2007-02-06 03:01:50 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/asm-x86_64/unistd.h	2007-02-06 03:05:22 +0100
 @@ -532,7 +532,7 @@ __SYSCALL(__NR_tgkill, sys_tgkill)
  #define __NR_utimes		235
  __SYSCALL(__NR_utimes, sys_utimes)
@@ -10221,8 +10231,8 @@
  #define __NR_mbind 		237
  __SYSCALL(__NR_mbind, sys_mbind)
  #define __NR_set_mempolicy 	238
---- linux-2.6.20/include/linux/Kbuild	2007-02-06 03:01:50 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/Kbuild	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/Kbuild	2007-02-06 03:01:50 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/Kbuild	2007-02-06 03:05:22 +0100
 @@ -339,3 +339,6 @@ unifdef-y += wireless.h
  unifdef-y += xfrm.h
  
@@ -10230,8 +10240,8 @@
 +
 +header-y += vserver/
 +
---- linux-2.6.20/include/linux/capability.h	2006-06-18 04:55:15 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/capability.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/capability.h	2006-06-18 04:55:15 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/capability.h	2007-02-06 03:05:22 +0100
 @@ -235,6 +235,7 @@ typedef __u32 kernel_cap_t;
     arbitrary SCSI commands */
  /* Allow setting encryption key on loopback filesystem */
@@ -10252,8 +10262,8 @@
  #ifdef __KERNEL__
  /* 
   * Bounding set
---- linux-2.6.20/include/linux/devpts_fs.h	2004-08-14 12:55:59 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/devpts_fs.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/devpts_fs.h	2004-08-14 12:55:59 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/devpts_fs.h	2007-02-06 03:05:22 +0100
 @@ -30,5 +30,7 @@ static inline void devpts_pty_kill(int n
  
  #endif
@@ -10262,8 +10272,8 @@
 +
  
  #endif /* _LINUX_DEVPTS_FS_H */
---- linux-2.6.20/include/linux/ext2_fs.h	2006-11-30 21:19:37 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/ext2_fs.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/ext2_fs.h	2006-11-30 21:19:37 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/ext2_fs.h	2007-02-06 03:05:22 +0100
 @@ -188,6 +188,8 @@ 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) */
@@ -10302,8 +10312,8 @@
  
  
  #define clear_opt(o, opt)		o &= ~EXT2_MOUNT_##opt
---- linux-2.6.20/include/linux/ext3_fs.h	2006-11-30 21:19:37 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/ext3_fs.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/ext3_fs.h	2006-11-30 21:19:37 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/ext3_fs.h	2007-02-06 03:05:22 +0100
 @@ -177,10 +177,20 @@ struct ext3_group_desc
  #define EXT3_NOTAIL_FL			0x00008000 /* file tail should not be merged */
  #define EXT3_DIRSYNC_FL			0x00010000 /* dirsync behaviour (directories only) */
@@ -10358,8 +10368,8 @@
  
  extern void ext3_read_inode (struct inode *);
  extern int  ext3_write_inode (struct inode *, int);
---- linux-2.6.20/include/linux/ext4_fs.h	2006-11-30 21:19:37 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/ext4_fs.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/ext4_fs.h	2006-11-30 21:19:37 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/ext4_fs.h	2007-02-06 03:05:22 +0100
 @@ -189,11 +189,21 @@ struct ext4_group_desc
  #define EXT4_NOTAIL_FL			0x00008000 /* file tail should not be merged */
  #define EXT4_DIRSYNC_FL			0x00010000 /* dirsync behaviour (directories only) */
@@ -10417,8 +10427,8 @@
  
  extern void ext4_read_inode (struct inode *);
  extern int  ext4_write_inode (struct inode *, int);
---- linux-2.6.20/include/linux/fs.h	2007-02-06 03:01:50 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/fs.h	2007-02-06 03:39:12 +0100
+--- linux-2.6.20.1/include/linux/fs.h	2007-02-06 03:01:50 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/fs.h	2007-02-06 03:39:12 +0100
 @@ -121,6 +121,8 @@ extern int dir_notify_enable;
  #define MS_SLAVE	(1<<19)	/* change to slave */
  #define MS_SHARED	(1<<20)	/* change to shared */
@@ -10594,8 +10604,8 @@
  extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *);
  extern int simple_statfs(struct dentry *, struct kstatfs *);
  extern int simple_link(struct dentry *, struct inode *, struct dentry *);
---- linux-2.6.20/include/linux/init_task.h	2007-02-06 03:01:51 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/init_task.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/init_task.h	2007-02-06 03:01:51 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/init_task.h	2007-02-06 03:05:22 +0100
 @@ -141,6 +141,10 @@ extern struct group_info init_groups;
  	.pi_lock	= SPIN_LOCK_UNLOCKED,				\
  	INIT_TRACE_IRQFLAGS						\
@@ -10607,8 +10617,8 @@
  }
  
  
---- linux-2.6.20/include/linux/ipc.h	2006-11-30 21:19:38 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/ipc.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/ipc.h	2006-11-30 21:19:38 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/ipc.h	2007-02-06 03:05:22 +0100
 @@ -63,6 +63,7 @@ struct kern_ipc_perm
  	key_t		key;
  	uid_t		uid;
@@ -10617,8 +10627,8 @@
  	uid_t		cuid;
  	gid_t		cgid;
  	mode_t		mode; 
---- linux-2.6.20/include/linux/loop.h	2006-11-30 21:19:38 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/loop.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/loop.h	2006-11-30 21:19:38 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/loop.h	2007-02-06 03:05:22 +0100
 @@ -45,6 +45,7 @@ struct loop_device {
  	struct loop_func_table *lo_encryption;
  	__u32           lo_init[2];
@@ -10627,8 +10637,8 @@
  	int		(*ioctl)(struct loop_device *, int cmd, 
  				 unsigned long arg); 
  
---- linux-2.6.20/include/linux/major.h	2006-06-18 04:55:19 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/major.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/major.h	2006-06-18 04:55:19 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/major.h	2007-02-06 03:05:22 +0100
 @@ -15,6 +15,7 @@
  #define HD_MAJOR		IDE0_MAJOR
  #define PTY_SLAVE_MAJOR		3
@@ -10637,8 +10647,8 @@
  #define TTYAUX_MAJOR		5
  #define LP_MAJOR		6
  #define VCS_MAJOR		7
---- linux-2.6.20/include/linux/mount.h	2007-02-06 03:01:51 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/mount.h	2007-02-06 03:41:22 +0100
+--- linux-2.6.20.1/include/linux/mount.h	2007-02-06 03:01:51 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/mount.h	2007-02-06 03:41:22 +0100
 @@ -28,12 +28,16 @@ struct mnt_namespace;
  #define MNT_NOATIME	0x08
  #define MNT_NODIRATIME	0x10
@@ -10664,8 +10674,8 @@
  };
  
  static inline struct vfsmount *mntget(struct vfsmount *mnt)
---- linux-2.6.20/include/linux/net.h	2007-02-06 03:01:51 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/net.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/net.h	2007-02-06 03:01:51 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/net.h	2007-02-06 03:05:22 +0100
 @@ -63,6 +63,7 @@ typedef enum {
  #define SOCK_NOSPACE		2
  #define SOCK_PASSCRED		3
@@ -10674,8 +10684,8 @@
  
  #ifndef ARCH_HAS_SOCKET_TYPES
  /**
---- linux-2.6.20/include/linux/nfs_mount.h	2005-08-29 22:25:42 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/nfs_mount.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/nfs_mount.h	2005-08-29 22:25:42 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/nfs_mount.h	2007-02-06 03:05:22 +0100
 @@ -61,6 +61,7 @@ struct nfs_mount_data {
  #define NFS_MOUNT_NOACL		0x0800	/* 4 */
  #define NFS_MOUNT_STRICTLOCK	0x1000	/* reserved for NFSv4 */
@@ -10684,8 +10694,8 @@
  #define NFS_MOUNT_FLAGMASK	0xFFFF
  
  #endif
---- linux-2.6.20/include/linux/nsproxy.h	2007-02-06 03:01:51 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/nsproxy.h	2007-02-06 05:43:36 +0100
+--- linux-2.6.20.1/include/linux/nsproxy.h	2007-02-06 03:01:51 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/nsproxy.h	2007-02-06 05:43:36 +0100
 @@ -36,6 +36,11 @@ int copy_namespaces(int flags, struct ta
  void get_task_namespaces(struct task_struct *tsk);
  void free_nsproxy(struct nsproxy *ns);
@@ -10698,8 +10708,8 @@
  static inline void put_nsproxy(struct nsproxy *ns)
  {
  	if (atomic_dec_and_test(&ns->count)) {
---- linux-2.6.20/include/linux/percpu.h	2006-11-30 21:19:39 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/percpu.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/percpu.h	2006-11-30 21:19:39 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/percpu.h	2007-02-06 03:05:22 +0100
 @@ -11,7 +11,7 @@
  
  /* Enough to cover all DEFINE_PER_CPUs in kernel, including modules. */
@@ -10709,8 +10719,8 @@
  #endif
  
  /*
---- linux-2.6.20/include/linux/pid.h	2007-02-06 03:01:51 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/pid.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/pid.h	2007-02-06 03:01:51 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/pid.h	2007-02-24 21:13:02 +0100
 @@ -8,7 +8,8 @@ enum pid_type
  	PIDTYPE_PID,
  	PIDTYPE_PGID,
@@ -10721,8 +10731,35 @@
  };
  
  /*
---- linux-2.6.20/include/linux/proc_fs.h	2006-11-30 21:19:39 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/proc_fs.h	2007-02-06 05:02:33 +0100
+@@ -106,13 +107,15 @@ static inline pid_t pid_nr(struct pid *p
+ }
+ 
+ 
++
+ #define do_each_task_pid(who, type, task)				\
+ 	do {								\
+ 		struct hlist_node *pos___;				\
+ 		struct pid *pid___ = find_pid(who);			\
+ 		if (pid___ != NULL)					\
+ 			hlist_for_each_entry_rcu((task), pos___,	\
+-				&pid___->tasks[type], pids[type].node) {
++				&pid___->tasks[type], pids[type].node)	\
++			if (vx_check((task)->xid, VS_ADMIN_P|VS_IDENT)) {
+ 
+ #define while_each_task_pid(who, type, task)				\
+ 			}						\
+@@ -124,7 +127,8 @@ static inline pid_t pid_nr(struct pid *p
+ 		struct hlist_node *pos___;				\
+ 		if (pid != NULL)					\
+ 			hlist_for_each_entry_rcu((task), pos___,	\
+-				&pid->tasks[type], pids[type].node) {
++				&pid->tasks[type], pids[type].node)	\
++			if (vx_check((task)->xid, VS_ADMIN_P|VS_IDENT)) {
+ 
+ #define while_each_pid_task(pid, type, task)				\
+ 			}						\
+--- linux-2.6.20.1/include/linux/proc_fs.h	2006-11-30 21:19:39 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/proc_fs.h	2007-02-06 05:02:33 +0100
 @@ -54,6 +54,7 @@ struct proc_dir_entry {
  	nlink_t nlink;
  	uid_t uid;
@@ -10752,8 +10789,8 @@
  	int fd;
  	union proc_op op;
  	struct proc_dir_entry *pde;
---- linux-2.6.20/include/linux/reiserfs_fs.h	2007-02-06 03:01:52 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/reiserfs_fs.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/reiserfs_fs.h	2007-02-06 03:01:52 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/reiserfs_fs.h	2007-02-06 03:05:22 +0100
 @@ -821,6 +821,10 @@ struct stat_data_v1 {
  #define REISERFS_COMPR_FL     FS_COMPR_FL
  #define REISERFS_NOTAIL_FL    FS_NOTAIL_FL
@@ -10788,8 +10825,8 @@
  
  /* namei.c */
  void set_de_name_and_namelen(struct reiserfs_dir_entry *de);
---- linux-2.6.20/include/linux/reiserfs_fs_sb.h	2007-02-06 03:01:52 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/reiserfs_fs_sb.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/reiserfs_fs_sb.h	2007-02-06 03:01:52 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/reiserfs_fs_sb.h	2007-02-06 03:05:22 +0100
 @@ -457,6 +457,7 @@ enum reiserfs_mount_options {
  	REISERFS_POSIXACL,
  	REISERFS_BARRIER_NONE,
@@ -10798,8 +10835,8 @@
  
  	/* Actions on error */
  	REISERFS_ERROR_PANIC,
---- linux-2.6.20/include/linux/sched.h	2007-02-06 03:01:52 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/sched.h	2007-02-06 03:42:34 +0100
+--- linux-2.6.20.1/include/linux/sched.h	2007-02-06 03:01:52 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/sched.h	2007-02-06 03:42:34 +0100
 @@ -26,6 +26,7 @@
  #define CLONE_STOPPED		0x02000000	/* Start in stopped state */
  #define CLONE_NEWUTS		0x04000000	/* New utsname group? */
@@ -10938,8 +10975,8 @@
  static inline struct user_struct *get_uid(struct user_struct *u)
  {
  	atomic_inc(&u->__count);
---- linux-2.6.20/include/linux/shmem_fs.h	2006-11-30 21:19:39 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/shmem_fs.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/shmem_fs.h	2006-11-30 21:19:39 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/shmem_fs.h	2007-02-06 03:05:22 +0100
 @@ -8,6 +8,9 @@
  
  #define SHMEM_NR_DIRECT 16
@@ -10950,8 +10987,8 @@
  struct shmem_inode_info {
  	spinlock_t		lock;
  	unsigned long		flags;
---- linux-2.6.20/include/linux/stat.h	2006-11-30 21:19:40 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/stat.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/stat.h	2006-11-30 21:19:40 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/stat.h	2007-02-06 03:05:22 +0100
 @@ -63,6 +63,7 @@ struct kstat {
  	unsigned int	nlink;
  	uid_t		uid;
@@ -10960,8 +10997,8 @@
  	dev_t		rdev;
  	loff_t		size;
  	struct timespec  atime;
---- linux-2.6.20/include/linux/sunrpc/auth.h	2006-11-30 21:19:40 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/sunrpc/auth.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/sunrpc/auth.h	2006-11-30 21:19:40 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/sunrpc/auth.h	2007-02-06 03:05:22 +0100
 @@ -24,6 +24,7 @@
  struct auth_cred {
  	uid_t	uid;
@@ -10970,8 +11007,8 @@
  	struct group_info *group_info;
  };
  
---- linux-2.6.20/include/linux/sunrpc/clnt.h	2007-02-06 03:01:52 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/sunrpc/clnt.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/sunrpc/clnt.h	2007-02-06 03:01:52 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/sunrpc/clnt.h	2007-02-06 03:05:22 +0100
 @@ -42,7 +42,8 @@ struct rpc_clnt {
  				cl_intr     : 1,/* interruptible */
  				cl_autobind : 1,/* use getport() */
@@ -10982,8 +11019,8 @@
  
  	struct rpc_rtt *	cl_rtt;		/* RTO estimator data */
  
---- linux-2.6.20/include/linux/syscalls.h	2006-11-30 21:19:40 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/syscalls.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/syscalls.h	2006-11-30 21:19:40 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/syscalls.h	2007-02-06 03:05:22 +0100
 @@ -294,6 +294,8 @@ asmlinkage long sys_symlink(const char _
  asmlinkage long sys_unlink(const char __user *pathname);
  asmlinkage long sys_rename(const char __user *oldname,
@@ -10993,8 +11030,8 @@
  asmlinkage long sys_chmod(const char __user *filename, mode_t mode);
  asmlinkage long sys_fchmod(unsigned int fd, mode_t mode);
  
---- linux-2.6.20/include/linux/sysctl.h	2007-02-06 03:01:52 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/sysctl.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/sysctl.h	2007-02-06 03:01:52 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/sysctl.h	2007-02-06 03:05:22 +0100
 @@ -101,6 +101,7 @@ enum
  	KERN_CAP_BSET=14,	/* int: capability bounding set */
  	KERN_PANIC=15,		/* int: panic timeout */
@@ -11021,8 +11058,8 @@
  	ctl_handler *strategy;		/* Callback function for all r/w */
  	struct proc_dir_entry *de;	/* /proc control block */
  	void *extra1;
---- linux-2.6.20/include/linux/sysfs.h	2007-02-06 03:01:52 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/sysfs.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/sysfs.h	2007-02-06 03:01:52 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/sysfs.h	2007-02-06 03:05:22 +0100
 @@ -13,6 +13,8 @@
  #include <linux/compiler.h>
  #include <asm/atomic.h>
@@ -11032,8 +11069,8 @@
  struct kobject;
  struct module;
  
---- linux-2.6.20/include/linux/time.h	2006-09-20 16:58:44 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/time.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/time.h	2006-09-20 16:58:44 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/time.h	2007-02-06 03:05:22 +0100
 @@ -174,6 +174,9 @@ static inline void timespec_add_ns(struc
  	}
  	a->tv_nsec = ns;
@@ -11044,8 +11081,8 @@
  #endif /* __KERNEL__ */
  
  #define NFDBITS			__NFDBITS
---- linux-2.6.20/include/linux/types.h	2007-02-06 03:01:52 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/types.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/types.h	2007-02-06 03:01:52 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/types.h	2007-02-06 03:05:22 +0100
 @@ -39,6 +39,9 @@ typedef __kernel_uid32_t	uid_t;
  typedef __kernel_gid32_t	gid_t;
  typedef __kernel_uid16_t        uid16_t;
@@ -11056,8 +11093,8 @@
  
  #ifdef CONFIG_UID16
  /* This is defined by include/asm-{arch}/posix_types.h */
---- linux-2.6.20/include/linux/vroot.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vroot.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vroot.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vroot.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,51 @@
 +
 +/*
@@ -11110,8 +11147,8 @@
 +#define VROOT_CLR_DEV		0x5601
 +
 +#endif /* _LINUX_VROOT_H */
---- linux-2.6.20/include/linux/vs_base.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_base.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_base.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_base.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,9 @@
 +#ifndef _VS_BASE_H
 +#define _VS_BASE_H
@@ -11122,8 +11159,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_context.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_context.h	2007-02-06 04:58:45 +0100
+--- linux-2.6.20.1/include/linux/vs_context.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_context.h	2007-02-06 04:58:45 +0100
 @@ -0,0 +1,220 @@
 +#ifndef _VS_CONTEXT_H
 +#define _VS_CONTEXT_H
@@ -11345,8 +11382,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_cowbl.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_cowbl.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_cowbl.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_cowbl.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,44 @@
 +#ifndef _VS_COWBL_H
 +#define _VS_COWBL_H
@@ -11392,8 +11429,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_cvirt.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_cvirt.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_cvirt.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_cvirt.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,49 @@
 +#ifndef _VS_CVIRT_H
 +#define _VS_CVIRT_H
@@ -11444,8 +11481,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_dlimit.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_dlimit.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_dlimit.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_dlimit.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,214 @@
 +#ifndef _VS_DLIMIT_H
 +#define _VS_DLIMIT_H
@@ -11661,8 +11698,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_limit.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_limit.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_limit.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_limit.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,140 @@
 +#ifndef _VS_LIMIT_H
 +#define _VS_LIMIT_H
@@ -11804,8 +11841,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_memory.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_memory.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_memory.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_memory.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,159 @@
 +#ifndef _VS_MEMORY_H
 +#define _VS_MEMORY_H
@@ -11966,8 +12003,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_network.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_network.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_network.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_network.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,183 @@
 +#ifndef _NX_VS_NETWORK_H
 +#define _NX_VS_NETWORK_H
@@ -12152,8 +12189,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_pid.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_pid.h	2007-02-06 05:47:37 +0100
+--- linux-2.6.20.1/include/linux/vs_pid.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_pid.h	2007-02-06 05:47:37 +0100
 @@ -0,0 +1,133 @@
 +#ifndef _VS_PID_H
 +#define _VS_PID_H
@@ -12288,8 +12325,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_sched.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_sched.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_sched.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_sched.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,110 @@
 +#ifndef _VS_SCHED_H
 +#define _VS_SCHED_H
@@ -12401,8 +12438,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_socket.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_socket.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_socket.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_socket.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,67 @@
 +#ifndef _VS_SOCKET_H
 +#define _VS_SOCKET_H
@@ -12471,8 +12508,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_tag.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_tag.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_tag.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_tag.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,44 @@
 +#ifndef _VS_TAG_H
 +#define _VS_TAG_H
@@ -12518,8 +12555,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vs_time.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vs_time.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vs_time.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vs_time.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,19 @@
 +#ifndef _VS_TIME_H
 +#define _VS_TIME_H
@@ -12540,8 +12577,8 @@
 +#else
 +#warning duplicate inclusion
 +#endif
---- linux-2.6.20/include/linux/vserver/Kbuild	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/Kbuild	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/Kbuild	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/Kbuild	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,9 @@
 +
 +unifdef-y += context_cmd.h network_cmd.h space_cmd.h \
@@ -12552,8 +12589,8 @@
 +
 +unifdef-y += legacy.h
 +
---- linux-2.6.20/include/linux/vserver/base.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/base.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/base.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/base.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,237 @@
 +#ifndef _VX_BASE_H
 +#define _VX_BASE_H
@@ -12792,8 +12829,8 @@
 +#define nx_info_state(v,m)	(__nx_state(v) & (m))
 +
 +#endif
---- linux-2.6.20/include/linux/vserver/cacct.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/cacct.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/cacct.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/cacct.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,15 @@
 +#ifndef _VX_CACCT_H
 +#define _VX_CACCT_H
@@ -12810,8 +12847,8 @@
 +};
 +
 +#endif	/* _VX_CACCT_H */
---- linux-2.6.20/include/linux/vserver/cacct_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/cacct_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/cacct_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/cacct_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,23 @@
 +#ifndef _VX_CACCT_CMD_H
 +#define _VX_CACCT_CMD_H
@@ -12836,8 +12873,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_CACCT_CMD_H */
---- linux-2.6.20/include/linux/vserver/cacct_def.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/cacct_def.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/cacct_def.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/cacct_def.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,43 @@
 +#ifndef _VX_CACCT_DEF_H
 +#define _VX_CACCT_DEF_H
@@ -12882,8 +12919,8 @@
 +#endif
 +
 +#endif	/* _VX_CACCT_DEF_H */
---- linux-2.6.20/include/linux/vserver/cacct_int.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/cacct_int.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/cacct_int.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/cacct_int.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,21 @@
 +#ifndef _VX_CACCT_INT_H
 +#define _VX_CACCT_INT_H
@@ -12906,8 +12943,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_CACCT_INT_H */
---- linux-2.6.20/include/linux/vserver/context.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/context.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/context.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/context.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,172 @@
 +#ifndef _VX_CONTEXT_H
 +#define _VX_CONTEXT_H
@@ -13081,8 +13118,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_CONTEXT_H */
---- linux-2.6.20/include/linux/vserver/context_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/context_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/context_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/context_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,123 @@
 +#ifndef _VX_CONTEXT_CMD_H
 +#define _VX_CONTEXT_CMD_H
@@ -13207,8 +13244,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_CONTEXT_CMD_H */
---- linux-2.6.20/include/linux/vserver/cvirt.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/cvirt.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/cvirt.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/cvirt.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,20 @@
 +#ifndef _VX_CVIRT_H
 +#define _VX_CVIRT_H
@@ -13230,8 +13267,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_CVIRT_H */
---- linux-2.6.20/include/linux/vserver/cvirt_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/cvirt_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/cvirt_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/cvirt_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,53 @@
 +#ifndef _VX_CVIRT_CMD_H
 +#define _VX_CVIRT_CMD_H
@@ -13286,8 +13323,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_CVIRT_CMD_H */
---- linux-2.6.20/include/linux/vserver/cvirt_def.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/cvirt_def.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/cvirt_def.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/cvirt_def.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,82 @@
 +#ifndef _VX_CVIRT_DEF_H
 +#define _VX_CVIRT_DEF_H
@@ -13371,8 +13408,8 @@
 +#endif
 +
 +#endif	/* _VX_CVIRT_DEF_H */
---- linux-2.6.20/include/linux/vserver/debug.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/debug.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/debug.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/debug.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,112 @@
 +#ifndef _VX_DEBUG_H
 +#define _VX_DEBUG_H
@@ -13486,8 +13523,8 @@
 +
 +
 +#endif /* _VX_DEBUG_H */
---- linux-2.6.20/include/linux/vserver/debug_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/debug_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/debug_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/debug_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,58 @@
 +#ifndef _VX_DEBUG_CMD_H
 +#define _VX_DEBUG_CMD_H
@@ -13547,8 +13584,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_DEBUG_CMD_H */
---- linux-2.6.20/include/linux/vserver/dlimit.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/dlimit.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/dlimit.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/dlimit.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,53 @@
 +#ifndef _VX_DLIMIT_H
 +#define _VX_DLIMIT_H
@@ -13603,8 +13640,8 @@
 +#else	/* _VX_DLIMIT_H */
 +#warning duplicate inclusion
 +#endif	/* _VX_DLIMIT_H */
---- linux-2.6.20/include/linux/vserver/dlimit_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/dlimit_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/dlimit_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/dlimit_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,74 @@
 +#ifndef _VX_DLIMIT_CMD_H
 +#define _VX_DLIMIT_CMD_H
@@ -13680,8 +13717,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_DLIMIT_CMD_H */
---- linux-2.6.20/include/linux/vserver/global.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/global.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/global.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/global.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,18 @@
 +#ifndef _VX_GLOBAL_H
 +#define _VX_GLOBAL_H
@@ -13701,8 +13738,8 @@
 +
 +
 +#endif /* _VX_GLOBAL_H */
---- linux-2.6.20/include/linux/vserver/history.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/history.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/history.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/history.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,197 @@
 +#ifndef _VX_HISTORY_H
 +#define _VX_HISTORY_H
@@ -13901,8 +13938,8 @@
 +#endif /* CONFIG_VSERVER_HISTORY */
 +
 +#endif /* _VX_HISTORY_H */
---- linux-2.6.20/include/linux/vserver/inode.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/inode.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/inode.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/inode.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,38 @@
 +#ifndef _VX_INODE_H
 +#define _VX_INODE_H
@@ -13942,8 +13979,8 @@
 +#else	/* _VX_INODE_H */
 +#warning duplicate inclusion
 +#endif	/* _VX_INODE_H */
---- linux-2.6.20/include/linux/vserver/inode_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/inode_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/inode_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/inode_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,61 @@
 +#ifndef _VX_INODE_CMD_H
 +#define _VX_INODE_CMD_H
@@ -14006,8 +14043,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_INODE_CMD_H */
---- linux-2.6.20/include/linux/vserver/legacy.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/legacy.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/legacy.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/legacy.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,49 @@
 +#ifndef _VX_LEGACY_H
 +#define _VX_LEGACY_H
@@ -14058,8 +14095,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_LEGACY_H */
---- linux-2.6.20/include/linux/vserver/limit.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/limit.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/limit.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/limit.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,68 @@
 +#ifndef _VX_LIMIT_H
 +#define _VX_LIMIT_H
@@ -14129,8 +14166,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_LIMIT_H */
---- linux-2.6.20/include/linux/vserver/limit_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/limit_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/limit_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/limit_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,69 @@
 +#ifndef _VX_LIMIT_CMD_H
 +#define _VX_LIMIT_CMD_H
@@ -14201,8 +14238,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_LIMIT_CMD_H */
---- linux-2.6.20/include/linux/vserver/limit_def.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/limit_def.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/limit_def.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/limit_def.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,47 @@
 +#ifndef _VX_LIMIT_DEF_H
 +#define _VX_LIMIT_DEF_H
@@ -14251,8 +14288,8 @@
 +#endif
 +
 +#endif	/* _VX_LIMIT_DEF_H */
---- linux-2.6.20/include/linux/vserver/limit_int.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/limit_int.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/limit_int.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/limit_int.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,198 @@
 +#ifndef _VX_LIMIT_INT_H
 +#define _VX_LIMIT_INT_H
@@ -14452,8 +14489,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_LIMIT_INT_H */
---- linux-2.6.20/include/linux/vserver/monitor.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/monitor.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/monitor.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/monitor.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,95 @@
 +#ifndef _VX_MONITOR_H
 +#define _VX_MONITOR_H
@@ -14550,8 +14587,8 @@
 +
 +
 +#endif /* _VX_MONITOR_H */
---- linux-2.6.20/include/linux/vserver/network.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/network.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/network.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/network.h	2007-02-15 00:05:40 +0100
 @@ -0,0 +1,142 @@
 +#ifndef _VX_NETWORK_H
 +#define _VX_NETWORK_H
@@ -14682,10 +14719,10 @@
 +struct sock;
 +
 +#ifdef CONFIG_INET
-+int nx_addr_conflict(struct nx_info *, uint32_t, struct sock *);
++int nx_addr_conflict(struct nx_info *, uint32_t, const struct sock *);
 +#else /* CONFIG_INET */
 +static inline
-+int nx_addr_conflict(struct nx_info *n, uint32_t a, struct sock *s)
++int nx_addr_conflict(struct nx_info *n, uint32_t a, const struct sock *s)
 +{
 +	return 1;
 +}
@@ -14695,8 +14732,8 @@
 +#else	/* _VX_NETWORK_H */
 +#warning duplicate inclusion
 +#endif	/* _VX_NETWORK_H */
---- linux-2.6.20/include/linux/vserver/network_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/network_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/network_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/network_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,89 @@
 +#ifndef _VX_NETWORK_CMD_H
 +#define _VX_NETWORK_CMD_H
@@ -14787,8 +14824,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_CONTEXT_CMD_H */
---- linux-2.6.20/include/linux/vserver/sched.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/sched.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/sched.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/sched.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,26 @@
 +#ifndef _VX_SCHED_H
 +#define _VX_SCHED_H
@@ -14816,8 +14853,8 @@
 +#else	/* _VX_SCHED_H */
 +#warning duplicate inclusion
 +#endif	/* _VX_SCHED_H */
---- linux-2.6.20/include/linux/vserver/sched_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/sched_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/sched_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/sched_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,108 @@
 +#ifndef _VX_SCHED_CMD_H
 +#define _VX_SCHED_CMD_H
@@ -14927,8 +14964,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_SCHED_CMD_H */
---- linux-2.6.20/include/linux/vserver/sched_def.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/sched_def.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/sched_def.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/sched_def.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,68 @@
 +#ifndef _VX_SCHED_DEF_H
 +#define _VX_SCHED_DEF_H
@@ -14998,8 +15035,8 @@
 +#endif
 +
 +#endif	/* _VX_SCHED_DEF_H */
---- linux-2.6.20/include/linux/vserver/signal.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/signal.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/signal.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/signal.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,14 @@
 +#ifndef _VX_SIGNAL_H
 +#define _VX_SIGNAL_H
@@ -15015,8 +15052,8 @@
 +#else	/* _VX_SIGNAL_H */
 +#warning duplicate inclusion
 +#endif	/* _VX_SIGNAL_H */
---- linux-2.6.20/include/linux/vserver/signal_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/signal_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/signal_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/signal_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,43 @@
 +#ifndef _VX_SIGNAL_CMD_H
 +#define _VX_SIGNAL_CMD_H
@@ -15061,8 +15098,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_SIGNAL_CMD_H */
---- linux-2.6.20/include/linux/vserver/space.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/space.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/space.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/space.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,13 @@
 +#ifndef _VX_SPACE_H
 +#define _VX_SPACE_H
@@ -15077,8 +15114,8 @@
 +#else	/* _VX_SPACE_H */
 +#warning duplicate inclusion
 +#endif	/* _VX_SPACE_H */
---- linux-2.6.20/include/linux/vserver/space_cmd.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/space_cmd.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/space_cmd.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/space_cmd.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,26 @@
 +#ifndef _VX_SPACE_CMD_H
 +#define _VX_SPACE_CMD_H
@@ -15106,8 +15143,8 @@
 +
 +#endif	/* __KERNEL__ */
 +#endif	/* _VX_SPACE_CMD_H */
---- linux-2.6.20/include/linux/vserver/switch.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/switch.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/switch.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/switch.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,95 @@
 +#ifndef _VX_SWITCH_H
 +#define _VX_SWITCH_H
@@ -15204,8 +15241,8 @@
 +#endif	/* __KERNEL__ */
 +
 +#endif	/* _VX_SWITCH_H */
---- linux-2.6.20/include/linux/vserver/tag.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/linux/vserver/tag.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/linux/vserver/tag.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/linux/vserver/tag.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,153 @@
 +#ifndef _DX_TAG_H
 +#define _DX_TAG_H
@@ -15360,8 +15397,8 @@
 +#endif
 +
 +#endif /* _DX_TAG_H */
---- linux-2.6.20/include/net/af_unix.h	2006-09-20 16:58:44 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/include/net/af_unix.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/net/af_unix.h	2006-09-20 16:58:44 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/include/net/af_unix.h	2007-02-06 03:05:22 +0100
 @@ -4,6 +4,7 @@
  #include <linux/socket.h>
  #include <linux/un.h>
@@ -15412,8 +15449,8 @@
  }
  
  #define forall_unix_sockets(i, s) \
---- linux-2.6.20/include/net/inet_hashtables.h	2007-02-06 03:01:52 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/net/inet_hashtables.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/net/inet_hashtables.h	2007-02-06 03:01:52 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/net/inet_hashtables.h	2007-02-06 03:05:22 +0100
 @@ -271,6 +271,26 @@ static inline int inet_iif(const struct 
  	return ((struct rtable *)skb->dst)->rt_iif;
  }
@@ -15441,8 +15478,8 @@
  extern struct sock *__inet_lookup_listener(struct inet_hashinfo *hashinfo,
  					   const __be32 daddr,
  					   const unsigned short hnum,
---- linux-2.6.20/include/net/inet_sock.h	2006-11-30 21:19:40 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/net/inet_sock.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/net/inet_sock.h	2006-11-30 21:19:40 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/net/inet_sock.h	2007-02-06 03:05:22 +0100
 @@ -112,6 +112,7 @@ struct inet_sock {
  	/* Socket demultiplex comparisons on incoming packets. */
  	__be32			daddr;
@@ -15451,8 +15488,8 @@
  	__be16			dport;
  	__u16			num;
  	__be32			saddr;
---- linux-2.6.20/include/net/inet_timewait_sock.h	2007-02-06 03:01:52 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/net/inet_timewait_sock.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/net/inet_timewait_sock.h	2007-02-06 03:01:52 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/net/inet_timewait_sock.h	2007-02-06 03:05:22 +0100
 @@ -115,6 +115,10 @@ struct inet_timewait_sock {
  #define tw_refcnt		__tw_common.skc_refcnt
  #define tw_hash			__tw_common.skc_hash
@@ -15464,8 +15501,8 @@
  	volatile unsigned char	tw_substate;
  	/* 3 bits hole, try to pack */
  	unsigned char		tw_rcv_wscale;
---- linux-2.6.20/include/net/route.h	2006-11-30 21:19:40 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/net/route.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/net/route.h	2006-11-30 21:19:40 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/net/route.h	2007-02-06 03:05:22 +0100
 @@ -27,12 +27,16 @@
  #include <net/dst.h>
  #include <net/inetpeer.h>
@@ -15572,8 +15609,8 @@
  		err = __ip_route_output_key(rp, &fl);
  		if (err)
  			return err;
---- linux-2.6.20/include/net/sock.h	2007-02-06 03:01:53 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/include/net/sock.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/include/net/sock.h	2007-02-06 03:01:53 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/include/net/sock.h	2007-02-06 03:05:22 +0100
 @@ -119,6 +119,10 @@ struct sock_common {
  	atomic_t		skc_refcnt;
  	unsigned int		skc_hash;
@@ -15596,8 +15633,8 @@
  	unsigned char		sk_shutdown : 2,
  				sk_no_check : 2,
  				sk_userlocks : 4;
---- linux-2.6.20/init/Makefile	2006-09-20 16:58:44 +0200
-+++ linux-2.6.20-vs2.2.0-pre3/init/Makefile	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/init/Makefile	2006-09-20 16:58:44 +0200
++++ linux-2.6.20.1-vs2.2.0-rc15/init/Makefile	2007-02-06 03:05:22 +0100
 @@ -15,6 +15,7 @@ clean-files := ../include/linux/compile.
  
  # dependencies on generated files need to be listed explicitly
@@ -15606,8 +15643,8 @@
  $(obj)/version.o: include/linux/compile.h
  
  # compile.h changes depending on hostname, generation number, etc,
---- linux-2.6.20/ipc/mqueue.c	2007-02-06 03:01:55 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/ipc/mqueue.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/ipc/mqueue.c	2007-02-06 03:01:55 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/ipc/mqueue.c	2007-02-06 03:05:22 +0100
 @@ -29,6 +29,8 @@
  #include <linux/audit.h>
  #include <linux/signal.h>
@@ -15663,8 +15700,8 @@
  out_err:
  	dput(dentry);
  
---- linux-2.6.20/ipc/msg.c	2007-02-06 03:01:55 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/ipc/msg.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/ipc/msg.c	2007-02-06 03:01:55 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/ipc/msg.c	2007-02-06 03:05:22 +0100
 @@ -36,6 +36,7 @@
  #include <linux/seq_file.h>
  #include <linux/mutex.h>
@@ -15691,8 +15728,8 @@
  	return seq_printf(s,
  			"%10d %10d  %4o  %10lu %10lu %5u %5u %5u %5u %5u %5u %10lu %10lu %10lu\n",
  			msq->q_perm.key,
---- linux-2.6.20/ipc/sem.c	2007-02-06 03:01:55 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/ipc/sem.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/ipc/sem.c	2007-02-06 03:01:55 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/ipc/sem.c	2007-02-06 03:05:22 +0100
 @@ -83,6 +83,8 @@
  #include <linux/seq_file.h>
  #include <linux/mutex.h>
@@ -15740,8 +15777,8 @@
  	return seq_printf(s,
  			  "%10d %10d  %4o %10lu %5u %5u %5u %5u %10lu %10lu\n",
  			  sma->sem_perm.key,
---- linux-2.6.20/ipc/shm.c	2007-02-06 03:01:55 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/ipc/shm.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/ipc/shm.c	2007-02-06 03:01:55 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/ipc/shm.c	2007-02-06 03:05:22 +0100
 @@ -37,6 +37,8 @@
  #include <linux/seq_file.h>
  #include <linux/mutex.h>
@@ -15807,8 +15844,8 @@
  	if (sizeof(size_t) <= sizeof(int))
  		format = SMALL_STRING;
  	else
---- linux-2.6.20/ipc/util.c	2007-02-06 03:01:55 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/ipc/util.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/ipc/util.c	2007-02-06 03:01:55 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/ipc/util.c	2007-02-06 03:05:22 +0100
 @@ -33,6 +33,8 @@
  #include <linux/proc_fs.h>
  #include <linux/audit.h>
@@ -15855,8 +15892,8 @@
  	requested_mode = (flag >> 6) | (flag >> 3) | flag;
  	granted_mode = ipcp->mode;
  	if (current->euid == ipcp->cuid || current->euid == ipcp->uid)
---- linux-2.6.20/kernel/Makefile	2007-02-06 03:01:55 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/Makefile	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/Makefile	2007-02-06 03:01:55 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/Makefile	2007-02-06 03:05:22 +0100
 @@ -10,6 +10,8 @@ obj-y     = sched.o fork.o exec_domain.o
  	    kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
  	    hrtimer.o rwsem.o latency.o nsproxy.o srcu.o
@@ -15866,8 +15903,8 @@
  obj-$(CONFIG_STACKTRACE) += stacktrace.o
  obj-y += time/
  obj-$(CONFIG_DEBUG_MUTEXES) += mutex-debug.o
---- linux-2.6.20/kernel/capability.c	2006-11-30 21:19:43 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/capability.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/capability.c	2006-11-30 21:19:43 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/capability.c	2007-02-06 03:05:22 +0100
 @@ -12,6 +12,7 @@
  #include <linux/module.h>
  #include <linux/security.h>
@@ -15889,8 +15926,8 @@
  	return __capable(current, cap);
  }
  EXPORT_SYMBOL(capable);
---- linux-2.6.20/kernel/compat.c	2006-11-30 21:19:43 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/compat.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/compat.c	2006-11-30 21:19:43 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/compat.c	2007-02-06 03:05:22 +0100
 @@ -846,7 +846,7 @@ asmlinkage long compat_sys_time(compat_t
  	compat_time_t i;
  	struct timeval tv;
@@ -15909,8 +15946,8 @@
  	return 0;
  }
  
---- linux-2.6.20/kernel/exit.c	2007-02-06 03:01:55 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/exit.c	2007-02-08 12:39:30 +0100
+--- linux-2.6.20.1/kernel/exit.c	2007-02-06 03:01:55 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/exit.c	2007-02-24 21:13:02 +0100
 @@ -42,6 +42,11 @@
  #include <linux/audit.h> /* for audit_free() */
  #include <linux/resource.h>
@@ -15943,7 +15980,7 @@
  		kmem_cache_free(fs_cachep, fs);
  	}
  }
-@@ -586,6 +594,11 @@ static void exit_mm(struct task_struct *
+@@ -586,6 +594,14 @@ static void exit_mm(struct task_struct *
  static inline void
  choose_new_parent(struct task_struct *p, struct task_struct *reaper)
  {
@@ -15952,10 +15989,13 @@
 +		"rogue reaper: %p[%d,#%u] <> %p[%d,#%u]",
 +		p, p->pid, p->xid, reaper, reaper->pid, reaper->xid);
 +
++	if (p == reaper)
++		reaper = vx_child_reaper(p);
++
  	/*
  	 * Make sure we're not reparenting to ourselves and that
  	 * the parent is not a zombie.
-@@ -677,7 +690,8 @@ forget_original_parent(struct task_struc
+@@ -677,7 +693,8 @@ forget_original_parent(struct task_struc
  	do {
  		reaper = next_thread(reaper);
  		if (reaper == father) {
@@ -15965,16 +16005,7 @@
  			break;
  		}
  	} while (reaper->exit_state);
-@@ -701,7 +715,7 @@ forget_original_parent(struct task_struc
- 
- 		if (father == p->real_parent) {
- 			/* reparent with a reaper, real father it's us */
--			choose_new_parent(p, reaper);
-+			choose_new_parent(p, vx_child_reaper(p));
- 			reparent_thread(p, father, 0);
- 		} else {
- 			/* reparent ptraced task to its real parent */
-@@ -939,7 +953,11 @@ fastcall NORET_TYPE void do_exit(long co
+@@ -939,7 +956,11 @@ fastcall NORET_TYPE void do_exit(long co
  	tsk->exit_code = code;
  	proc_exit_connector(tsk);
  	exit_task_namespaces(tsk);
@@ -15986,7 +16017,7 @@
  #ifdef CONFIG_NUMA
  	mpol_free(tsk->mempolicy);
  	tsk->mempolicy = NULL;
-@@ -963,6 +981,10 @@ fastcall NORET_TYPE void do_exit(long co
+@@ -963,6 +984,10 @@ fastcall NORET_TYPE void do_exit(long co
  	if (tsk->splice_pipe)
  		__free_pipe_info(tsk->splice_pipe);
  
@@ -15997,8 +16028,8 @@
  	preempt_disable();
  	/* causes final put_task_struct in finish_task_switch(). */
  	tsk->state = TASK_DEAD;
---- linux-2.6.20/kernel/fork.c	2007-02-06 03:01:55 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/fork.c	2007-02-06 05:16:52 +0100
+--- linux-2.6.20.1/kernel/fork.c	2007-02-06 03:01:55 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/fork.c	2007-02-15 00:05:56 +0100
 @@ -49,6 +49,11 @@
  #include <linux/delayacct.h>
  #include <linux/taskstats_kern.h>
@@ -16091,7 +16122,7 @@
  		struct file *f = *old_fds++;
  		if (f) {
  			get_file(f);
-+			/* FIXME: sum it first for check and performance */
++			/* TODO: sum it first for check and performance */
 +			vx_openfd_inc(open_files - i);
  		} else {
  			/*
@@ -16182,8 +16213,8 @@
  	nr = pid->nr;
  	if (unlikely(current->ptrace)) {
  		trace = fork_traceflag (clone_flags);
---- linux-2.6.20/kernel/kthread.c	2007-02-06 03:01:55 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/kthread.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/kthread.c	2007-02-06 03:01:55 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/kthread.c	2007-02-06 03:05:22 +0100
 @@ -126,7 +126,7 @@ static void keventd_create_kthread(struc
  	} else {
  		wait_for_completion(&create->started);
@@ -16193,8 +16224,8 @@
  		read_unlock(&tasklist_lock);
  	}
  	complete(&create->done);
---- linux-2.6.20/kernel/nsproxy.c	2007-02-06 03:01:55 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/nsproxy.c	2007-02-06 05:43:29 +0100
+--- linux-2.6.20.1/kernel/nsproxy.c	2007-02-06 03:01:55 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/nsproxy.c	2007-02-06 05:43:29 +0100
 @@ -20,14 +20,10 @@
  #include <linux/mnt_namespace.h>
  #include <linux/utsname.h>
@@ -16234,8 +16265,8 @@
 +	atomic_dec(&vs_global_nsproxy);
  	kfree(ns);
  }
---- linux-2.6.20/kernel/pid.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/pid.c	2007-02-06 03:48:51 +0100
+--- linux-2.6.20.1/kernel/pid.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/pid.c	2007-02-24 21:13:02 +0100
 @@ -27,6 +27,7 @@
  #include <linux/bootmem.h>
  #include <linux/hash.h>
@@ -16244,19 +16275,37 @@
  
  #define pid_hashfn(nr) hash_long((unsigned long)nr, pidhash_shift)
  static struct hlist_head *pid_hash;
-@@ -304,6 +305,10 @@ struct task_struct * fastcall pid_task(s
+@@ -290,6 +291,9 @@ void fastcall transfer_pid(struct task_s
+ struct task_struct * fastcall pid_task(struct pid *pid, enum pid_type type)
+ {
+ 	struct task_struct *result = NULL;
++
++	if (type == PIDTYPE_REALPID)
++		type = PIDTYPE_PID;
+ 	if (pid) {
+ 		struct hlist_node *first;
+ 		first = rcu_dereference(pid->tasks[type].first);
+@@ -304,7 +308,17 @@ struct task_struct * fastcall pid_task(s
   */
  struct task_struct *find_task_by_pid_type(int type, int nr)
  {
+-	return pid_task(find_pid(nr), type);
++	struct task_struct *task;
++
 +	if (type == PIDTYPE_PID)
 +		nr = vx_rmap_pid(nr);
-+	else if (type == PIDTYPE_REALPID)
-+		type = PIDTYPE_PID;
- 	return pid_task(find_pid(nr), type);
++
++	task = pid_task(find_pid(nr), type);
++	if (task && (type != PIDTYPE_REALPID) &&
++		/* maybe VS_WATCH_P in the future? */
++		!vx_check(task->xid, VS_WATCH|VS_IDENT))
++		return NULL;
++	return task;
  }
  
---- linux-2.6.20/kernel/posix-timers.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/posix-timers.c	2007-02-06 03:05:22 +0100
+ EXPORT_SYMBOL(find_task_by_pid_type);
+--- linux-2.6.20.1/kernel/posix-timers.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/posix-timers.c	2007-02-06 03:05:22 +0100
 @@ -48,6 +48,7 @@
  #include <linux/wait.h>
  #include <linux/workqueue.h>
@@ -16315,8 +16364,8 @@
  		 rtn->tgid != current->tgid ||
  		 (event->sigev_notify & ~SIGEV_THREAD_ID) != SIGEV_SIGNAL))
  		return NULL;
---- linux-2.6.20/kernel/printk.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/printk.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/printk.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/printk.c	2007-02-06 03:05:22 +0100
 @@ -32,6 +32,7 @@
  #include <linux/bootmem.h>
  #include <linux/syscalls.h>
@@ -16380,8 +16429,8 @@
  		count = len;
  		if (count > log_buf_len)
  			count = log_buf_len;
---- linux-2.6.20/kernel/ptrace.c	2006-11-30 21:19:44 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/ptrace.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/ptrace.c	2006-11-30 21:19:44 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/ptrace.c	2007-02-06 03:05:22 +0100
 @@ -18,6 +18,7 @@
  #include <linux/ptrace.h>
  #include <linux/security.h>
@@ -16413,8 +16462,8 @@
  	if (request == PTRACE_ATTACH) {
  		ret = ptrace_attach(child);
  		goto out_put_task_struct;
---- linux-2.6.20/kernel/sched.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/sched.c	2007-02-06 05:05:39 +0100
+--- linux-2.6.20.1/kernel/sched.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/sched.c	2007-02-06 05:05:39 +0100
 @@ -55,6 +55,8 @@
  #include <asm/tlb.h>
  
@@ -16755,8 +16804,8 @@
  			__activate_task(p, task_rq(p));
  			resched_task(rq->curr);
  		}
---- linux-2.6.20/kernel/sched_hard.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/sched_hard.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/sched_hard.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/sched_hard.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,324 @@
 +
 +#ifdef CONFIG_VSERVER_IDLELIMIT
@@ -17082,8 +17131,8 @@
 +
 +#endif /* CONFIG_VSERVER_HARDCPU */
 +
---- linux-2.6.20/kernel/sched_mon.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/sched_mon.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/sched_mon.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/sched_mon.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,200 @@
 +
 +#include <linux/vserver/monitor.h>
@@ -17285,8 +17334,8 @@
 +
 +#endif /* CONFIG_VSERVER_MONITOR */
 +
---- linux-2.6.20/kernel/signal.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/signal.c	2007-02-06 03:55:21 +0100
+--- linux-2.6.20.1/kernel/signal.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/signal.c	2007-02-06 03:55:21 +0100
 @@ -26,6 +26,7 @@
  #include <linux/freezer.h>
  #include <linux/pid_namespace.h>
@@ -17363,8 +17412,8 @@
  		if (sig_kernel_stop(signr)) {
  			/*
  			 * The default action is to stop all threads in
---- linux-2.6.20/kernel/softirq.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/softirq.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/softirq.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/softirq.c	2007-02-06 03:05:22 +0100
 @@ -17,6 +17,7 @@
  #include <linux/kthread.h>
  #include <linux/rcupdate.h>
@@ -17373,8 +17422,8 @@
  
  #include <asm/irq.h>
  /*
---- linux-2.6.20/kernel/sys.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/sys.c	2007-02-06 03:58:00 +0100
+--- linux-2.6.20.1/kernel/sys.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/sys.c	2007-02-06 03:58:00 +0100
 @@ -10,6 +10,7 @@
  #include <linux/mman.h>
  #include <linux/smp_lock.h>
@@ -17543,8 +17592,8 @@
  		return -EPERM;
  	if (resource == RLIMIT_NOFILE && new_rlim.rlim_max > NR_OPEN)
  		return -EPERM;
---- linux-2.6.20/kernel/sysctl.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/sysctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/sysctl.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/sysctl.c	2007-02-06 03:05:22 +0100
 @@ -87,6 +87,7 @@ static int ngroups_max = NGROUPS_MAX;
  #ifdef CONFIG_KMOD
  extern char modprobe_path[];
@@ -17569,8 +17618,8 @@
  #ifdef CONFIG_CHR_DEV_SG
  	{
  		.ctl_name	= KERN_SG_BIG_BUFF,
---- linux-2.6.20/kernel/time.c	2006-11-30 21:19:44 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/time.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/time.c	2006-11-30 21:19:44 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/time.c	2007-02-06 03:05:22 +0100
 @@ -61,7 +61,7 @@ asmlinkage long sys_time(time_t __user *
  	time_t i;
  	struct timeval tv;
@@ -17616,8 +17665,8 @@
  	tv->tv_sec = x.tv_sec;
  	tv->tv_nsec = x.tv_usec * NSEC_PER_USEC;
  }
---- linux-2.6.20/kernel/timer.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/timer.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/timer.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/timer.c	2007-02-06 03:05:22 +0100
 @@ -34,6 +34,10 @@
  #include <linux/cpu.h>
  #include <linux/syscalls.h>
@@ -17685,8 +17734,8 @@
  		val.uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0);
  
  		val.loads[0] = avenrun[0] << (SI_LOAD_SHIFT - FSHIFT);
---- linux-2.6.20/kernel/user.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/user.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/user.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/user.c	2007-02-06 03:05:22 +0100
 @@ -23,8 +23,8 @@
  #define UIDHASH_BITS (CONFIG_BASE_SMALL ? 3 : 8)
  #define UIDHASH_SZ		(1 << UIDHASH_BITS)
@@ -17775,8 +17824,8 @@
  	spin_unlock_irq(&uidhash_lock);
  
  	return 0;
---- linux-2.6.20/kernel/utsname.c	2006-11-30 21:19:44 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/utsname.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/utsname.c	2006-11-30 21:19:44 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/utsname.c	2007-02-06 03:05:22 +0100
 @@ -13,6 +13,7 @@
  #include <linux/uts.h>
  #include <linux/utsname.h>
@@ -17800,9 +17849,9 @@
 +	atomic_dec(&vs_global_uts_ns);
  	kfree(ns);
  }
---- linux-2.6.20/kernel/vserver/Kconfig	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/Kconfig	2007-02-08 07:31:50 +0100
-@@ -0,0 +1,270 @@
+--- linux-2.6.20.1/kernel/vserver/Kconfig	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/Kconfig	2007-02-24 21:13:02 +0100
+@@ -0,0 +1,271 @@
 +#
 +# Linux VServer configuration
 +#
@@ -17826,9 +17875,10 @@
 +	  This shows a special legacy version to very old tools
 +	  which do not handle the current version correctly.
 +
-+	  This will probably disable some features of newer tools
-+	  so better avoid it, unless you really, really need it
-+	  for backwards compatibility.
++	  Warning: recent tools are not able to utilize the
++	  newer APIs when this is enabled, so some features will
++	  not be available. Better avoid it, unless you really,
++	  really need it for backwards compatibility.
 +
 +config	VSERVER_DYNAMIC_IDS
 +	bool	"Enable dynamic context IDs"
@@ -18073,8 +18123,8 @@
 +	depends on EXPERIMENTAL && !VSERVER_LEGACYNET
 +	default y
 +
---- linux-2.6.20/kernel/vserver/Makefile	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/Makefile	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/Makefile	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/Makefile	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,17 @@
 +#
 +# Makefile for the Linux vserver routines.
@@ -18093,8 +18143,8 @@
 +vserver-$(CONFIG_VSERVER_HISTORY) += history.o
 +vserver-$(CONFIG_VSERVER_MONITOR) += monitor.o
 +
---- linux-2.6.20/kernel/vserver/cacct.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/cacct.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/cacct.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/cacct.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,44 @@
 +/*
 + *  linux/kernel/vserver/cacct.c
@@ -18140,8 +18190,8 @@
 +	return 0;
 +}
 +
---- linux-2.6.20/kernel/vserver/cacct_init.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/cacct_init.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/cacct_init.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/cacct_init.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,25 @@
 +
 +
@@ -18168,8 +18218,8 @@
 +	return;
 +}
 +
---- linux-2.6.20/kernel/vserver/cacct_proc.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/cacct_proc.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/cacct_proc.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/cacct_proc.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,58 @@
 +#ifndef _VX_CACCT_PROC_H
 +#define _VX_CACCT_PROC_H
@@ -18229,8 +18279,8 @@
 +}
 +
 +#endif	/* _VX_CACCT_PROC_H */
---- linux-2.6.20/kernel/vserver/context.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/context.c	2007-02-08 12:43:13 +0100
+--- linux-2.6.20.1/kernel/vserver/context.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/context.c	2007-02-08 12:43:13 +0100
 @@ -0,0 +1,1099 @@
 +/*
 + *  linux/kernel/vserver/context.c
@@ -19331,8 +19381,8 @@
 +
 +EXPORT_SYMBOL_GPL(free_vx_info);
 +
---- linux-2.6.20/kernel/vserver/cvirt.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/cvirt.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/cvirt.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/cvirt.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,305 @@
 +/*
 + *  linux/kernel/vserver/cvirt.c
@@ -19639,8 +19689,8 @@
 +
 +#endif
 +
---- linux-2.6.20/kernel/vserver/cvirt_init.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/cvirt_init.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/cvirt_init.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/cvirt_init.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,71 @@
 +
 +
@@ -19713,8 +19763,8 @@
 +	return;
 +}
 +
---- linux-2.6.20/kernel/vserver/cvirt_proc.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/cvirt_proc.h	2007-02-06 05:55:13 +0100
+--- linux-2.6.20.1/kernel/vserver/cvirt_proc.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/cvirt_proc.h	2007-02-06 05:55:13 +0100
 @@ -0,0 +1,138 @@
 +#ifndef _VX_CVIRT_PROC_H
 +#define _VX_CVIRT_PROC_H
@@ -19854,8 +19904,8 @@
 +}
 +
 +#endif	/* _VX_CVIRT_PROC_H */
---- linux-2.6.20/kernel/vserver/debug.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/debug.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/debug.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/debug.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,35 @@
 +/*
 + *  kernel/vserver/debug.c
@@ -19892,8 +19942,8 @@
 +
 +EXPORT_SYMBOL_GPL(dump_vx_info);
 +
---- linux-2.6.20/kernel/vserver/dlimit.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/dlimit.c	2007-02-06 05:55:23 +0100
+--- linux-2.6.20.1/kernel/vserver/dlimit.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/dlimit.c	2007-02-06 05:55:23 +0100
 @@ -0,0 +1,527 @@
 +/*
 + *  linux/kernel/vserver/dlimit.c
@@ -20422,8 +20472,8 @@
 +EXPORT_SYMBOL_GPL(locate_dl_info);
 +EXPORT_SYMBOL_GPL(rcu_free_dl_info);
 +
---- linux-2.6.20/kernel/vserver/helper.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/helper.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/helper.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/helper.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,208 @@
 +/*
 + *  linux/kernel/vserver/helper.c
@@ -20633,8 +20683,8 @@
 +	return do_vshelper(vshelper_path, argv, envp, 1);
 +}
 +
---- linux-2.6.20/kernel/vserver/history.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/history.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/history.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/history.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,264 @@
 +/*
 + *  kernel/vserver/history.c
@@ -20900,8 +20950,8 @@
 +
 +#endif	/* CONFIG_COMPAT */
 +
---- linux-2.6.20/kernel/vserver/init.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/init.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/init.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/init.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,47 @@
 +/*
 + *  linux/kernel/init.c
@@ -20950,8 +21000,8 @@
 +module_init(init_vserver);
 +module_exit(exit_vserver);
 +
---- linux-2.6.20/kernel/vserver/inode.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/inode.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/inode.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/inode.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,369 @@
 +/*
 + *  linux/kernel/vserver/inode.c
@@ -21322,9 +21372,9 @@
 +
 +#endif	/* CONFIG_PROPAGATE */
 +
---- linux-2.6.20/kernel/vserver/legacy.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/legacy.c	2007-02-08 07:31:50 +0100
-@@ -0,0 +1,116 @@
+--- linux-2.6.20.1/kernel/vserver/legacy.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/legacy.c	2007-02-15 00:06:46 +0100
+@@ -0,0 +1,114 @@
 +/*
 + *  linux/kernel/vserver/legacy.c
 + *
@@ -21424,10 +21474,8 @@
 +		new_vxi->vx_flags |= vc_data.flags;
 +		if (vc_data.flags & VX_INFO_INIT)
 +			vx_set_initpid(new_vxi, current->tgid);
-+		/* FIXME: nsproxy
 +		if (vc_data.flags & VX_INFO_NAMESPACE)
-+			vx_set_namespace(new_vxi,
-+				current->namespace, current->fs); */
++			vx_set_space(new_vxi, CLONE_NEWNS|CLONE_FS);
 +		if (vc_data.flags & VX_INFO_NPROC)
 +			__rlim_set(&new_vxi->limit, RLIMIT_NPROC,
 +				current->signal->rlim[RLIMIT_NPROC].rlim_max);
@@ -21441,8 +21489,8 @@
 +	return ret;
 +}
 +
---- linux-2.6.20/kernel/vserver/legacynet.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/legacynet.c	2007-02-06 05:54:33 +0100
+--- linux-2.6.20.1/kernel/vserver/legacynet.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/legacynet.c	2007-02-06 05:54:33 +0100
 @@ -0,0 +1,84 @@
 +
 +/*
@@ -21528,8 +21576,8 @@
 +}
 +
 +
---- linux-2.6.20/kernel/vserver/limit.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/limit.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/limit.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/limit.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,319 @@
 +/*
 + *  linux/kernel/vserver/limit.c
@@ -21850,8 +21898,8 @@
 +	return points;
 +}
 +
---- linux-2.6.20/kernel/vserver/limit_init.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/limit_init.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/limit_init.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/limit_init.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,33 @@
 +
 +
@@ -21886,8 +21934,8 @@
 +#endif
 +}
 +
---- linux-2.6.20/kernel/vserver/limit_proc.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/limit_proc.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/limit_proc.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/limit_proc.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,58 @@
 +#ifndef _VX_LIMIT_PROC_H
 +#define _VX_LIMIT_PROC_H
@@ -21947,8 +21995,8 @@
 +#endif	/* _VX_LIMIT_PROC_H */
 +
 +
---- linux-2.6.20/kernel/vserver/monitor.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/monitor.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/monitor.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/monitor.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,142 @@
 +/*
 + *  kernel/vserver/monitor.c
@@ -22092,8 +22140,8 @@
 +
 +#endif	/* CONFIG_COMPAT */
 +
---- linux-2.6.20/kernel/vserver/network.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/network.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/network.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/network.c	2007-02-15 00:05:40 +0100
 @@ -0,0 +1,770 @@
 +/*
 + *  linux/kernel/vserver/network.c
@@ -22575,7 +22623,7 @@
 + *	sk:	the socket to check against
 + *	addr:	the address in question (must be != 0)
 + */
-+static inline int __addr_in_socket(struct sock *sk, uint32_t addr)
++static inline int __addr_in_socket(const struct sock *sk, uint32_t addr)
 +{
 +	struct nx_info *nxi = sk->sk_nx_info;
 +	uint32_t saddr = inet_rcv_saddr(sk);
@@ -22598,7 +22646,7 @@
 +}
 +
 +
-+int nx_addr_conflict(struct nx_info *nxi, uint32_t addr, struct sock *sk)
++int nx_addr_conflict(struct nx_info *nxi, uint32_t addr, const struct sock *sk)
 +{
 +	vxdprintk(VXD_CBIT(net, 2),
 +		"nx_addr_conflict(%p,%p) %d.%d,%d.%d",
@@ -22865,9 +22913,9 @@
 +EXPORT_SYMBOL_GPL(free_nx_info);
 +EXPORT_SYMBOL_GPL(unhash_nx_info);
 +
---- linux-2.6.20/kernel/vserver/proc.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/proc.c	2007-02-06 03:05:22 +0100
-@@ -0,0 +1,1012 @@
+--- linux-2.6.20.1/kernel/vserver/proc.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/proc.c	2007-02-24 21:13:02 +0100
+@@ -0,0 +1,1041 @@
 +/*
 + *  linux/kernel/vserver/proc.c
 + *
@@ -23073,8 +23121,12 @@
 +	length = sprintf(buffer,
 +		"UseCnt:\t%d\n"
 +		"Tasks:\t%d\n"
++		"Flags:\t%016llx\n"
++		"NCaps:\t%016llx\n"
 +		,atomic_read(&nxi->nx_usecnt)
 +		,atomic_read(&nxi->nx_tasks)
++		,(unsigned long long)nxi->nx_flags
++		,(unsigned long long)nxi->nx_ncaps
 +		);
 +	return length;
 +}
@@ -23717,6 +23769,15 @@
 +	return 0;
 +}
 +
++static int proc_virtual_getattr(struct vfsmount *mnt,
++	struct dentry *dentry, struct kstat *stat)
++{
++	struct inode *inode = dentry->d_inode;
++
++	generic_fillattr(inode, stat);
++	stat->nlink = 2 + atomic_read(&vx_global_cactive);
++	return 0;
++}
 +
 +static struct file_operations proc_virtual_dir_operations = {
 +	.read =		generic_read_dir,
@@ -23724,6 +23785,7 @@
 +};
 +
 +static struct inode_operations proc_virtual_dir_inode_operations = {
++	.getattr =	proc_virtual_getattr,
 +	.lookup =	proc_virtual_lookup,
 +};
 +
@@ -23790,6 +23852,15 @@
 +	return 0;
 +}
 +
++static int proc_virtnet_getattr(struct vfsmount *mnt,
++	struct dentry *dentry, struct kstat *stat)
++{
++	struct inode *inode = dentry->d_inode;
++
++	generic_fillattr(inode, stat);
++	stat->nlink = 2 + atomic_read(&nx_global_cactive);
++	return 0;
++}
 +
 +static struct file_operations proc_virtnet_dir_operations = {
 +	.read =		generic_read_dir,
@@ -23797,6 +23868,7 @@
 +};
 +
 +static struct inode_operations proc_virtnet_dir_inode_operations = {
++	.getattr = 	proc_virtnet_getattr,
 +	.lookup =	proc_virtnet_lookup,
 +};
 +
@@ -23865,6 +23937,11 @@
 +	if (!nxi)
 +		goto out;
 +
++	buffer += sprintf (buffer,"NCaps:\t%016llx\n"
++		,(unsigned long long)nxi->nx_ncaps);
++	buffer += sprintf (buffer,"NFlags:\t%016llx\n"
++		,(unsigned long long)nxi->nx_flags);
++
 +	for (i=0; i<nxi->nbipv4; i++){
 +		buffer += sprintf (buffer,
 +			"V4Root[%d]:\t%d.%d.%d.%d/%d.%d.%d.%d\n", i
@@ -23880,9 +23957,9 @@
 +	return buffer - orig;
 +}
 +
---- linux-2.6.20/kernel/vserver/sched.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/sched.c	2007-02-06 03:05:22 +0100
-@@ -0,0 +1,443 @@
+--- linux-2.6.20.1/kernel/vserver/sched.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/sched.c	2007-02-24 21:13:02 +0100
+@@ -0,0 +1,451 @@
 +/*
 + *  linux/kernel/vserver/sched.c
 + *
@@ -24099,7 +24176,7 @@
 +{
 +	unsigned int set_mask = data->mask;
 +	unsigned int update_mask;
-+	int i;
++	int i, cpu;
 +
 +	/* Sanity check data values */
 +	if (data->tokens_max <= 0)
@@ -24116,6 +24193,11 @@
 +
 +	spin_lock(&vxi->sched.tokens_lock);
 +
++	/* sync up on delayed updates */
++	for_each_cpu_mask(cpu, vxi->sched.update)
++		vx_update_sched_param(&vxi->sched,
++			&vx_per_cpu(vxi, sched_pc, cpu));
++
 +	if (set_mask & VXSM_FILL_RATE)
 +		vxi->sched.fill_rate[0] = data->fill_rate[0];
 +	if (set_mask & VXSM_FILL_RATE2)
@@ -24148,17 +24230,20 @@
 +	vxi->sched.update_mask = update_mask;
 +#ifdef	CONFIG_SMP
 +	rmb();
-+	if (set_mask & VXSM_CPU_ID)
++	if (set_mask & VXSM_CPU_ID) {
 +		vxi->sched.update = cpumask_of_cpu(data->cpu_id);
++		cpus_and(vxi->sched.update, cpu_online_map,
++			vxi->sched.update);
++	}
 +	else
-+		vxi->sched.update = CPU_MASK_ALL;
++		vxi->sched.update = cpu_online_map;
++
 +	/* forced reload? */
 +	if (set_mask & VXSM_FORCE) {
-+		int cpu;
-+
-+		for_each_possible_cpu(cpu)
++		for_each_cpu_mask(cpu, vxi->sched.update)
 +			vx_update_sched_param(&vxi->sched,
 +				&vx_per_cpu(vxi, sched_pc, cpu));
++		vxi->sched.update = CPU_MASK_NONE;
 +	}
 +#else
 +	/* on UP we update immediately */
@@ -24326,8 +24411,8 @@
 +	return 0;
 +}
 +
---- linux-2.6.20/kernel/vserver/sched_init.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/sched_init.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/sched_init.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/sched_init.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,50 @@
 +
 +static inline void vx_info_init_sched(struct _vx_sched *sched)
@@ -24379,8 +24464,8 @@
 +{
 +	return;
 +}
---- linux-2.6.20/kernel/vserver/sched_proc.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/sched_proc.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/sched_proc.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/sched_proc.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,62 @@
 +#ifndef _VX_SCHED_PROC_H
 +#define _VX_SCHED_PROC_H
@@ -24444,8 +24529,8 @@
 +}
 +
 +#endif	/* _VX_SCHED_PROC_H */
---- linux-2.6.20/kernel/vserver/signal.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/signal.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/signal.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/signal.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,134 @@
 +/*
 + *  linux/kernel/vserver/signal.c
@@ -24581,8 +24666,8 @@
 +	return ret;
 +}
 +
---- linux-2.6.20/kernel/vserver/space.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/space.c	2007-02-08 07:31:50 +0100
+--- linux-2.6.20.1/kernel/vserver/space.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/space.c	2007-02-08 07:31:50 +0100
 @@ -0,0 +1,279 @@
 +/*
 + *  linux/kernel/vserver/space.c
@@ -24863,8 +24948,8 @@
 +	return 0;
 +}
 +
---- linux-2.6.20/kernel/vserver/switch.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/switch.c	2007-02-08 07:31:50 +0100
+--- linux-2.6.20.1/kernel/vserver/switch.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/switch.c	2007-02-08 07:31:50 +0100
 @@ -0,0 +1,527 @@
 +/*
 + *  linux/kernel/vserver/switch.c
@@ -25393,8 +25478,8 @@
 +}
 +
 +#endif	/* CONFIG_COMPAT */
---- linux-2.6.20/kernel/vserver/sysctl.c	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/sysctl.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/sysctl.c	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/sysctl.c	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,242 @@
 +/*
 + *  kernel/vserver/sysctl.c
@@ -25638,8 +25723,8 @@
 +EXPORT_SYMBOL_GPL(vx_debug_cvirt);
 +EXPORT_SYMBOL_GPL(vx_debug_misc);
 +
---- linux-2.6.20/kernel/vserver/vci_config.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/kernel/vserver/vci_config.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/kernel/vserver/vci_config.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/kernel/vserver/vci_config.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,92 @@
 +
 +/*  interface version */
@@ -25733,8 +25818,8 @@
 +	0;
 +}
 +
---- linux-2.6.20/mm/filemap.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/filemap.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/filemap.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/filemap.c	2007-02-06 03:05:22 +0100
 @@ -1234,6 +1234,31 @@ int file_send_actor(read_descriptor_t * 
  	return written;
  }
@@ -26000,8 +26085,8 @@
  ssize_t generic_file_aio_write_nolock(struct kiocb *iocb,
  		const struct iovec *iov, unsigned long nr_segs, loff_t pos)
  {
---- linux-2.6.20/mm/filemap_xip.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/filemap_xip.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/filemap_xip.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/filemap_xip.c	2007-02-06 03:05:22 +0100
 @@ -13,6 +13,7 @@
  #include <linux/module.h>
  #include <linux/uio.h>
@@ -26010,8 +26095,8 @@
  #include <asm/tlbflush.h>
  #include "filemap.h"
  
---- linux-2.6.20/mm/fremap.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/fremap.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/fremap.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/fremap.c	2007-02-06 03:05:22 +0100
 @@ -15,6 +15,7 @@
  #include <linux/rmap.h>
  #include <linux/module.h>
@@ -26029,8 +26114,8 @@
  
  	if (pte_none(*pte) || !zap_pte(mm, vma, addr, pte))
  		inc_mm_counter(mm, file_rss);
---- linux-2.6.20/mm/hugetlb.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/hugetlb.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/hugetlb.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/hugetlb.c	2007-02-06 03:05:22 +0100
 @@ -19,6 +19,7 @@
  #include <asm/pgtable.h>
  
@@ -26039,8 +26124,8 @@
  #include "internal.h"
  
  const unsigned long hugetlb_zero = 0, hugetlb_infinity = ~0UL;
---- linux-2.6.20/mm/memory.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/memory.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/memory.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/memory.c	2007-02-06 03:05:22 +0100
 @@ -498,6 +498,9 @@ static int copy_pte_range(struct mm_stru
  	int progress = 0;
  	int rss[2];
@@ -26117,8 +26202,8 @@
  }
  
  /*
---- linux-2.6.20/mm/mlock.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/mlock.c	2007-02-06 03:59:47 +0100
+--- linux-2.6.20.1/mm/mlock.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/mlock.c	2007-02-06 03:59:47 +0100
 @@ -10,6 +10,7 @@
  #include <linux/mm.h>
  #include <linux/mempolicy.h>
@@ -26175,8 +26260,8 @@
  	if (!(flags & MCL_CURRENT) || (current->mm->total_vm <= lock_limit) ||
  	    capable(CAP_IPC_LOCK))
  		ret = do_mlockall(flags);
---- linux-2.6.20/mm/mmap.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/mmap.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/mmap.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/mmap.c	2007-02-06 03:05:22 +0100
 @@ -1141,10 +1141,10 @@ munmap_back:
  		kmem_cache_free(vm_area_cachep, vma);
  	}
@@ -26275,8 +26360,8 @@
 +		return 0;
  	return 1;
  }
---- linux-2.6.20/mm/mremap.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/mremap.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/mremap.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/mremap.c	2007-02-06 03:05:22 +0100
 @@ -18,6 +18,7 @@
  #include <linux/highmem.h>
  #include <linux/security.h>
@@ -26326,8 +26411,8 @@
  				make_pages_present(addr + old_len,
  						   addr + new_len);
  			}
---- linux-2.6.20/mm/nommu.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/nommu.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/nommu.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/nommu.c	2007-02-06 03:05:22 +0100
 @@ -921,7 +921,7 @@ unsigned long do_mmap_pgoff(struct file 
  	realalloc += kobjsize(vma);
  	askedalloc += sizeof(*vma);
@@ -26355,8 +26440,8 @@
  
  		while ((tmp = mm->context.vmlist)) {
  			mm->context.vmlist = tmp->next;
---- linux-2.6.20/mm/oom_kill.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/oom_kill.c	2007-02-06 04:02:11 +0100
+--- linux-2.6.20.1/mm/oom_kill.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/oom_kill.c	2007-02-06 04:02:11 +0100
 @@ -24,6 +24,7 @@
  #include <linux/cpuset.h>
  #include <linux/module.h>
@@ -26410,8 +26495,8 @@
  
  	/* Try to kill a child first */
  	list_for_each(tsk, &p->children) {
---- linux-2.6.20/mm/page_alloc.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/page_alloc.c	2007-02-06 04:02:34 +0100
+--- linux-2.6.20.1/mm/page_alloc.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/page_alloc.c	2007-02-06 04:02:34 +0100
 @@ -41,6 +41,8 @@
  #include <linux/pfn.h>
  #include <linux/backing-dev.h>
@@ -26441,8 +26526,8 @@
  }
  #endif
  
---- linux-2.6.20/mm/rmap.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/rmap.c	2007-02-06 04:02:52 +0100
+--- linux-2.6.20.1/mm/rmap.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/rmap.c	2007-02-06 04:02:52 +0100
 @@ -48,6 +48,7 @@
  #include <linux/rcupdate.h>
  #include <linux/module.h>
@@ -26451,8 +26536,8 @@
  
  #include <asm/tlbflush.h>
  
---- linux-2.6.20/mm/shmem.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/shmem.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/shmem.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/shmem.c	2007-02-06 03:05:22 +0100
 @@ -55,7 +55,6 @@
  #include <asm/pgtable.h>
  
@@ -26479,8 +26564,8 @@
  	sb->s_op = &shmem_ops;
  	sb->s_time_gran = 1;
  #ifdef CONFIG_TMPFS_POSIX_ACL
---- linux-2.6.20/mm/slab.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/slab.c	2007-02-06 04:04:40 +0100
+--- linux-2.6.20.1/mm/slab.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/slab.c	2007-02-06 04:04:40 +0100
 @@ -502,6 +502,8 @@ struct kmem_cache {
  #define STATS_INC_FREEMISS(x)	do { } while (0)
  #endif
@@ -26515,8 +26600,8 @@
  
  	if (cache_free_alien(cachep, objp))
  		return;
---- linux-2.6.20/mm/slab_vs.h	1970-01-01 01:00:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/slab_vs.h	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/slab_vs.h	1970-01-01 01:00:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/slab_vs.h	2007-02-06 03:05:22 +0100
 @@ -0,0 +1,27 @@
 +
 +#include <linux/vserver/context.h>
@@ -26545,8 +26630,8 @@
 +	atomic_sub(cachep->buffer_size, &current->vx_info->cacct.slab[what]);
 +}
 +
---- linux-2.6.20/mm/swapfile.c	2007-02-06 03:01:56 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/mm/swapfile.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/mm/swapfile.c	2007-02-06 03:01:56 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/mm/swapfile.c	2007-02-06 03:05:22 +0100
 @@ -31,6 +31,8 @@
  #include <asm/pgtable.h>
  #include <asm/tlbflush.h>
@@ -26565,8 +26650,8 @@
  }
  
  /*
---- linux-2.6.20/net/core/dev.c	2007-02-06 03:01:57 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/core/dev.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/core/dev.c	2007-02-06 03:01:57 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/core/dev.c	2007-02-06 03:05:22 +0100
 @@ -116,6 +116,8 @@
  #include <linux/dmaengine.h>
  #include <linux/err.h>
@@ -26597,8 +26682,8 @@
  	if (dev->get_stats) {
  		struct net_device_stats *stats = dev->get_stats(dev);
  
---- linux-2.6.20/net/core/rtnetlink.c	2007-02-06 03:01:57 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/core/rtnetlink.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/core/rtnetlink.c	2007-02-06 03:01:57 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/core/rtnetlink.c	2007-02-06 03:05:22 +0100
 @@ -36,6 +36,7 @@
  #include <linux/security.h>
  #include <linux/mutex.h>
@@ -26617,8 +26702,8 @@
  		if (rtnl_fill_ifinfo(skb, dev, NULL, 0, RTM_NEWLINK,
  				     NETLINK_CB(cb->skb).pid,
  				     cb->nlh->nlmsg_seq, 0, NLM_F_MULTI) <= 0)
---- linux-2.6.20/net/core/sock.c	2007-02-06 03:01:57 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/core/sock.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/core/sock.c	2007-02-06 03:01:57 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/core/sock.c	2007-02-06 03:05:22 +0100
 @@ -125,6 +125,9 @@
  #include <linux/ipsec.h>
  
@@ -26684,8 +26769,8 @@
  	atomic_set(&sk->sk_refcnt, 1);
  }
  
---- linux-2.6.20/net/ipv4/af_inet.c	2007-02-06 03:01:57 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/af_inet.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/ipv4/af_inet.c	2007-02-06 03:01:57 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/af_inet.c	2007-02-06 03:05:22 +0100
 @@ -115,6 +115,7 @@
  #ifdef CONFIG_IP_MROUTE
  #include <linux/mroute.h>
@@ -26779,8 +26864,8 @@
  	if (chk_addr_ret == RTN_MULTICAST || chk_addr_ret == RTN_BROADCAST)
  		inet->saddr = 0;  /* Use device */
  
---- linux-2.6.20/net/ipv4/devinet.c	2007-02-06 03:01:57 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/devinet.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/ipv4/devinet.c	2007-02-06 03:01:57 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/devinet.c	2007-02-06 03:05:22 +0100
 @@ -58,6 +58,7 @@
  #include <linux/sysctl.h>
  #endif
@@ -26850,8 +26935,8 @@
  			if (ip_idx < s_ip_idx)
  				continue;
  			if (inet_fill_ifaddr(skb, ifa, NETLINK_CB(cb->skb).pid,
---- linux-2.6.20/net/ipv4/fib_hash.c	2007-02-06 03:01:57 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/fib_hash.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/ipv4/fib_hash.c	2007-02-06 03:01:57 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/fib_hash.c	2007-02-06 03:05:22 +0100
 @@ -35,6 +35,7 @@
  #include <linux/skbuff.h>
  #include <linux/netlink.h>
@@ -26879,8 +26964,8 @@
  		snprintf(bf, sizeof(bf),
  			 "%s\t%08X\t%08X\t%04X\t%d\t%u\t%d\t%08X\t%d\t%u\t%u",
  			 fi->fib_dev ? fi->fib_dev->name : "*", prefix,
---- linux-2.6.20/net/ipv4/inet_connection_sock.c	2007-02-06 03:01:57 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/inet_connection_sock.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/ipv4/inet_connection_sock.c	2007-02-06 03:01:57 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/inet_connection_sock.c	2007-02-06 03:05:22 +0100
 @@ -39,7 +39,6 @@ int sysctl_local_port_range[2] = { 1024,
  int inet_csk_bind_conflict(const struct sock *sk,
  			   const struct inet_bind_bucket *tb)
@@ -26901,8 +26986,8 @@
  					break;
  			}
  		}
---- linux-2.6.20/net/ipv4/inet_diag.c	2006-11-30 21:19:45 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/inet_diag.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/ipv4/inet_diag.c	2006-11-30 21:19:45 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/inet_diag.c	2007-02-06 03:05:22 +0100
 @@ -693,6 +693,8 @@ static int inet_diag_dump(struct sk_buff
  			sk_for_each(sk, node, &hashinfo->listening_hash[i]) {
  				struct inet_sock *inet = inet_sk(sk);
@@ -26930,8 +27015,8 @@
  				if (num < s_num)
  					goto next_dying;
  				if (r->id.idiag_sport != tw->tw_sport &&
---- linux-2.6.20/net/ipv4/inet_hashtables.c	2007-02-06 03:01:57 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/inet_hashtables.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/ipv4/inet_hashtables.c	2007-02-06 03:01:57 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/inet_hashtables.c	2007-02-06 03:05:22 +0100
 @@ -140,11 +140,10 @@ static struct sock *inet_lookup_listener
  			const __be32 rcv_saddr = inet->rcv_saddr;
  			int score = sk->sk_family == PF_INET ? 1 : 0;
@@ -26956,8 +27041,8 @@
  		    (sk->sk_family == PF_INET || !ipv6_only_sock(sk)) &&
  		    !sk->sk_bound_dev_if)
  			goto sherry_cache;
---- linux-2.6.20/net/ipv4/raw.c	2007-02-06 03:01:59 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/raw.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/ipv4/raw.c	2007-02-06 03:01:59 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/raw.c	2007-02-06 03:05:22 +0100
 @@ -78,6 +78,7 @@
  #include <linux/seq_file.h>
  #include <linux/netfilter.h>
@@ -27057,8 +27142,8 @@
  
  	if (!sk && ++state->bucket < RAWV4_HTABLE_SIZE) {
  		sk = sk_head(&raw_v4_htable[state->bucket]);
---- linux-2.6.20/net/ipv4/tcp.c	2007-02-06 03:01:59 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/tcp.c	2007-02-06 04:05:16 +0100
+--- linux-2.6.20.1/net/ipv4/tcp.c	2007-02-06 03:01:59 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/tcp.c	2007-02-06 04:05:16 +0100
 @@ -259,6 +259,7 @@
  #include <linux/cache.h>
  #include <linux/err.h>
@@ -27067,8 +27152,8 @@
  
  #include <net/icmp.h>
  #include <net/tcp.h>
---- linux-2.6.20/net/ipv4/tcp_ipv4.c	2007-02-06 03:01:59 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/tcp_ipv4.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/ipv4/tcp_ipv4.c	2007-02-06 03:01:59 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/tcp_ipv4.c	2007-02-06 03:05:22 +0100
 @@ -77,6 +77,7 @@
  #include <linux/stddef.h>
  #include <linux/proc_fs.h>
@@ -27154,8 +27239,8 @@
  		if (sk->sk_family == st->family)
  			goto found;
  	}
---- linux-2.6.20/net/ipv4/tcp_minisocks.c	2007-02-06 03:01:59 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/tcp_minisocks.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/ipv4/tcp_minisocks.c	2007-02-06 03:01:59 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/tcp_minisocks.c	2007-02-06 03:05:22 +0100
 @@ -28,6 +28,10 @@
  #include <net/inet_common.h>
  #include <net/xfrm.h>
@@ -27179,18 +27264,22 @@
  #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
  		if (tw->tw_family == PF_INET6) {
  			struct ipv6_pinfo *np = inet6_sk(sk);
---- linux-2.6.20/net/ipv4/udp.c	2007-02-06 03:01:59 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv4/udp.c	2007-02-06 04:07:41 +0100
-@@ -196,6 +196,8 @@ gotit:
- 			    (!sk2->sk_reuse        || !sk->sk_reuse)         &&
- 			    (!sk2->sk_bound_dev_if || !sk->sk_bound_dev_if
- 			     || sk2->sk_bound_dev_if == sk->sk_bound_dev_if) &&
-+				/* FIXME: nx_addr_conflict(sk->sk_nx_info,
-+					inet_rcv_saddr(sk), sk2) &&	*/
- 			    (*saddr_comp)(sk, sk2)                             )
- 				goto fail;
- 	}
-@@ -253,6 +255,11 @@ static struct sock *__udp4_lib_lookup(__
+--- linux-2.6.20.1/net/ipv4/udp.c	2007-02-06 03:01:59 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv4/udp.c	2007-02-15 00:06:16 +0100
+@@ -219,11 +219,8 @@ __inline__ int udp_get_port(struct sock 
+ 
+ inline int ipv4_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2)
+ {
+-	struct inet_sock *inet1 = inet_sk(sk1), *inet2 = inet_sk(sk2);
+-
+ 	return 	( !ipv6_only_sock(sk2)  &&
+-		  (!inet1->rcv_saddr || !inet2->rcv_saddr ||
+-		   inet1->rcv_saddr == inet2->rcv_saddr      ));
++		   nx_addr_conflict(sk1->sk_nx_info, inet_rcv_saddr(sk1), sk2));
+ }
+ 
+ static inline int udp_v4_get_port(struct sock *sk, unsigned short snum)
+@@ -253,6 +250,11 @@ static struct sock *__udp4_lib_lookup(__
  				if (inet->rcv_saddr != daddr)
  					continue;
  				score+=2;
@@ -27202,7 +27291,7 @@
  			}
  			if (inet->daddr) {
  				if (inet->daddr != saddr)
-@@ -299,7 +306,8 @@ static inline struct sock *udp_v4_mcast_
+@@ -299,7 +301,8 @@ static inline struct sock *udp_v4_mcast_
  		if (inet->num != hnum					||
  		    (inet->daddr && inet->daddr != rmt_addr)		||
  		    (inet->dport != rmt_port && inet->dport)		||
@@ -27212,7 +27301,7 @@
  		    ipv6_only_sock(s)					||
  		    (s->sk_bound_dev_if && s->sk_bound_dev_if != dif))
  			continue;
-@@ -628,7 +636,20 @@ int udp_sendmsg(struct kiocb *iocb, stru
+@@ -628,7 +631,20 @@ int udp_sendmsg(struct kiocb *iocb, stru
  				    .uli_u = { .ports =
  					       { .sport = inet->sport,
  						 .dport = dport } } };
@@ -27233,7 +27322,7 @@
  		err = ip_route_output_flow(&rt, &fl, sk, !(msg->msg_flags&MSG_DONTWAIT));
  		if (err)
  			goto out;
-@@ -1540,7 +1561,8 @@ static struct sock *udp_get_first(struct
+@@ -1540,7 +1556,8 @@ static struct sock *udp_get_first(struct
  	for (state->bucket = 0; state->bucket < UDP_HTABLE_SIZE; ++state->bucket) {
  		struct hlist_node *node;
  		sk_for_each(sk, node, state->hashtable + state->bucket) {
@@ -27243,7 +27332,7 @@
  				goto found;
  		}
  	}
-@@ -1557,7 +1579,8 @@ static struct sock *udp_get_next(struct 
+@@ -1557,7 +1574,8 @@ static struct sock *udp_get_next(struct 
  		sk = sk_next(sk);
  try_again:
  		;
@@ -27253,8 +27342,8 @@
  
  	if (!sk && ++state->bucket < UDP_HTABLE_SIZE) {
  		sk = sk_head(state->hashtable + state->bucket);
---- linux-2.6.20/net/ipv6/addrconf.c	2007-02-06 03:01:59 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/ipv6/addrconf.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/ipv6/addrconf.c	2007-02-06 03:01:59 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/ipv6/addrconf.c	2007-02-06 03:05:22 +0100
 @@ -2736,7 +2736,10 @@ static void if6_seq_stop(struct seq_file
  static int if6_seq_show(struct seq_file *seq, void *v)
  {
@@ -27289,8 +27378,8 @@
  	read_lock(&dev_base_lock);
  	for (dev=dev_base, idx=0; dev; dev = dev->next, idx++) {
  		if (idx < s_idx)
---- linux-2.6.20/net/netlink/af_netlink.c	2007-02-06 03:02:00 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/netlink/af_netlink.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/netlink/af_netlink.c	2007-02-06 03:02:00 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/netlink/af_netlink.c	2007-02-06 03:05:22 +0100
 @@ -56,6 +56,9 @@
  #include <linux/types.h>
  #include <linux/audit.h>
@@ -27301,8 +27390,8 @@
  
  #include <net/sock.h>
  #include <net/scm.h>
---- linux-2.6.20/net/socket.c	2007-02-06 03:02:01 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/socket.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/socket.c	2007-02-06 03:02:01 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/socket.c	2007-02-06 03:05:22 +0100
 @@ -92,6 +92,8 @@
  
  #include <net/sock.h>
@@ -27406,8 +27495,8 @@
  
  	err = sock1->ops->socketpair(sock1, sock2);
  	if (err < 0)
---- linux-2.6.20/net/sunrpc/auth.c	2006-11-30 21:19:46 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/sunrpc/auth.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/sunrpc/auth.c	2006-11-30 21:19:46 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/sunrpc/auth.c	2007-02-06 03:05:22 +0100
 @@ -13,6 +13,7 @@
  #include <linux/errno.h>
  #include <linux/sunrpc/clnt.h>
@@ -27432,8 +27521,8 @@
  		.group_info = current->group_info,
  	};
  	struct rpc_cred *ret;
---- linux-2.6.20/net/sunrpc/auth_unix.c	2006-11-30 21:19:46 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/sunrpc/auth_unix.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/sunrpc/auth_unix.c	2006-11-30 21:19:46 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/sunrpc/auth_unix.c	2007-02-06 03:05:22 +0100
 @@ -11,12 +11,14 @@
  #include <linux/module.h>
  #include <linux/sunrpc/clnt.h>
@@ -27499,8 +27588,8 @@
  	hold = p++;
  	for (i = 0; i < 16 && cred->uc_gids[i] != (gid_t) NOGROUP; i++)
  		*p++ = htonl((u32) cred->uc_gids[i]);
---- linux-2.6.20/net/sunrpc/clnt.c	2007-02-06 03:02:01 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/sunrpc/clnt.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/sunrpc/clnt.c	2007-02-06 03:02:01 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/sunrpc/clnt.c	2007-02-15 00:05:56 +0100
 @@ -30,6 +30,7 @@
  #include <linux/smp_lock.h>
  #include <linux/utsname.h>
@@ -27514,14 +27603,14 @@
  	if (args->flags & RPC_CLNT_CREATE_ONESHOT)
  		clnt->cl_oneshot = 1;
 -
-+	/* FIXME: handle RPC_CLNT_CREATE_TAGGED
++	/* TODO: handle RPC_CLNT_CREATE_TAGGED
 +	if (args->flags & RPC_CLNT_CREATE_TAGGED)
 +		clnt->cl_tag = 1; */
  	return clnt;
  }
  EXPORT_SYMBOL_GPL(rpc_create);
---- linux-2.6.20/net/unix/af_unix.c	2007-02-06 03:02:01 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/unix/af_unix.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/unix/af_unix.c	2007-02-06 03:02:01 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/unix/af_unix.c	2007-02-06 03:05:22 +0100
 @@ -116,6 +116,8 @@
  #include <linux/mount.h>
  #include <net/checksum.h>
@@ -27549,8 +27638,8 @@
  		if (err)
  			goto out_mknod_dput;
  		mutex_unlock(&nd.dentry->d_inode->i_mutex);
---- linux-2.6.20/net/x25/af_x25.c	2007-02-06 03:02:01 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/net/x25/af_x25.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/net/x25/af_x25.c	2007-02-06 03:02:01 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/net/x25/af_x25.c	2007-02-06 03:05:22 +0100
 @@ -499,7 +499,10 @@ static int x25_create(struct socket *soc
  
  	x25 = x25_sk(sk);
@@ -27563,8 +27652,8 @@
  
  	x25_init_timers(sk);
  
---- linux-2.6.20/security/commoncap.c	2006-11-30 21:19:47 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/security/commoncap.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/security/commoncap.c	2006-11-30 21:19:47 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/security/commoncap.c	2007-02-06 03:05:22 +0100
 @@ -23,10 +23,11 @@
  #include <linux/ptrace.h>
  #include <linux/xattr.h>
@@ -27607,8 +27696,8 @@
  		return -EPERM;
  	return 0;
  }
---- linux-2.6.20/security/dummy.c	2007-02-06 03:02:01 +0100
-+++ linux-2.6.20-vs2.2.0-pre3/security/dummy.c	2007-02-06 03:05:22 +0100
+--- linux-2.6.20.1/security/dummy.c	2007-02-06 03:02:01 +0100
++++ linux-2.6.20.1-vs2.2.0-rc15/security/dummy.c	2007-02-06 03:05:22 +0100
 @@ -28,6 +28,7 @@
  #include <linux/hugetlb.h>
  #include <linux/ptrace.h>

Modified: dists/trunk/linux-2.6/debian/patches/series/1~experimental.1
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/1~experimental.1	(original)
+++ dists/trunk/linux-2.6/debian/patches/series/1~experimental.1	Sat Mar 10 13:18:48 2007
@@ -32,6 +32,8 @@
 + bugfix/arm/n2100-r8169-parity.patch
 + features/alpha/alpha-prctl.patch
 + bugfix/alpha/asm-subarchs.patch
-+ bugfix/powerpc/drivers_macintosh-broken.patch
 + bugfix/sparc/drivers_net-broken.patch
 + bugfix/forcedeth-napi-broken.patch
++ bugfix/all/stable/2.6.20.1
++ bugfix/all/stable/2.6.20.2
++ bugfix/powerpc/drivers_macintosh-broken.patch

Modified: dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra	(original)
+++ dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra	Sat Mar 10 13:18:48 2007
@@ -1,4 +1,4 @@
-+ features/all/vserver/vs2.2.0-pre3.patch *_vserver *_xen-vserver
++ features/all/vserver/vs2.2.0-rc15.patch *_vserver *_xen-vserver
 + features/all/vserver/bindmount-dev.patch *_vserver *_xen-vserver
 + features/all/xen/vserver-clash.patch *_xen-vserver
 #+ features/all/xen/fedora-36252.patch *_xen *_xen-vserver



More information about the Kernel-svn-changes mailing list