[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#688834: marked as done ([experimental] linux: please update to 3.6-rc series)



Your message dated Thu, 01 Nov 2012 06:03:19 +0000
with message-id <1351749799.13356.58.camel@deadeye.wl.decadent.org.uk>
and subject line Re: [experimental] linux: please update to 3.6-rc series
has caused the Debian Bug report #688834,
regarding [experimental] linux: please update to 3.6-rc series
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
688834: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=688834
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Source: linux
Version: 3.5.2-1~experimental.1
Tags: patch

Hi,

A patch to update the packaging in trunk to 3.6-rc7 is attached.  It
was made by trying to apply all patches from the usual series and
throwing away the ones that were already applied.  

Warnings from kconfig:

 .config:989:warning: symbol value 'm' invalid for MFD_WM8400
 .config:1030:warning: symbol value 'm' invalid for BMP085
 .config:1526:warning: symbol value 'm' invalid for POWER_SUPPLY
 .config:3695:warning: symbol value 'm' invalid for COMEDI_MISC_DRIVERS
 .config:3701:warning: symbol value 'm' invalid for COMEDI_PCI_DRIVERS
 .config:3756:warning: symbol value 'm' invalid for COMEDI_PCMCIA_DRIVERS
 .config:3764:warning: symbol value 'm' invalid for COMEDI_USB_DRIVERS

I'm building the result of applying this patch for amd64 right now
(was curious about how it would behave wrt other bugs).  I didn't
touch debian/config.

Thoughts?

Thanks,
Jonathan
Index: debian/changelog
===================================================================
--- debian/changelog	(révision 19400)
+++ debian/changelog	(copie de travail)
@@ -1,17 +1,18 @@
-linux (3.5.4-1~experimental.1) UNRELEASED; urgency=low
+linux (3.6~rc7-1~experimental.1) UNRELEASED; urgency=low
 
-  * New upstream stable update:
-    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.5.3
-    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.5.4
+  * New upstream release candidate
+    - mfd: lpc_ich: Fix a 3.5 kernel regression for iTCO_wdt driver
+      (Closes: #686040)
 
   [ Ben Hutchings ]
-  * mfd: lpc_ich: Fix a 3.5 kernel regression for iTCO_wdt driver
-    (Closes: #686040)
   * drm: Enable various drivers (Closes: #685479):
     - [x86] Enable DRM_GMA500 (previously DRM_PSB) as module
     - Enable DRM_CIRRUS_QEMU as module
   * media/dvb: Enable DVB_USB_AF9035 as module (Closes: #687050)
 
+  [ Jonathan Nieder ]
+  * aufs: Update to aufs3.x-rcN-20120827
+
  -- Ben Hutchings <ben@decadent.org.uk>  Mon, 27 Aug 2012 17:22:33 -0700
 
 linux (3.5.2-1~experimental.1) experimental; urgency=low
Index: debian/patches/series
===================================================================
--- debian/patches/series	(révision 19400)
+++ debian/patches/series	(copie de travail)
@@ -14,8 +14,6 @@
 features/all/aufs3/aufs3-add.patch
 # mark as staging/crap
 features/all/aufs3/mark-as-staging.patch
-# fix added exports from security/device_cgroup.c
-features/all/aufs3/aufs3-fix-export-__devcgroup_inode_permission.patch
 
 bugfix/ia64/hardcode-arch-script-output.patch
 bugfix/mips/disable-advansys.patch
@@ -41,52 +39,11 @@
 bugfix/arm/ixp4xx_iobe.patch
 debian/x86-memtest-WARN-if-bad-RAM-found.patch
 
-# Add link security restrictions from 3.6
-features/all/fs-add-link-restrictions.patch
-features/all/fs-add-link-restriction-audit-reporting.patch
-
-features/all/wacom/0029-wacom-do-not-request-tablet-data-on-MT-Tablet-PC-pen.patch
-features/all/wacom/0030-wacom-ignore-new-style-Wacom-multi-touch-packets-on-.patch
 bugfix/ia64/IA64-Export-asm-cmpxchg.h-to-userland.patch
 features/all/cpu-devices/Partially-revert-cpufreq-Add-support-for-x86-cpuinfo.patch
-bugfix/all/net-e100-ucode-is-optional-in-some-cases.patch
-bugfix/all/hwmon-applesmc-Skip-sensor-mapping.patch
-bugfix/all/hwmon-applesmc-Shorten-minimum-wait-time.patch
-bugfix/all/hwmon-applesmc-Allow-negative-temperature-values.patch
-bugfix/all/hwmon-applesmc-Ignore-some-temperature-registers.patch
-bugfix/all/hwmon-applesmc-Decode-and-act-on-read-write-status-c.patch
-bugfix/x86/mfd-lpc_ich-Fix-a-3.5-kernel-regression-for-iTCO_wdt.patch
 
 debian/debugfs-set-default-mode-to-700.patch
 
-bugfix/all/rds-set-correct-msg_namelen.patch
 bugfix/all/media-rc-ite-cir-Initialise-ite_dev-rdev-earlier.patch
-features/all/USB-add-USB_VENDOR_AND_INTERFACE_INFO-macro.patch
-bugfix/all/usb-Add-quirk-detection-based-on-interface-informati.patch
-bugfix/all/usb-Add-USB_QUIRK_RESET_RESUME-for-all-Logitech-UVC-.patch
 bugfix/alpha/alpha-use-large-data-model.diff
-features/arm/ahci-Add-JMicron-362-device-IDs.patch
 bugfix/all/speakup-lower-default-software-speech-rate.patch
-
-# These were all picked from the 3.5.5 patch queue
-bugfix/all/net-allow-driver-to-limit-number-of-gso-segments-per-skb.patch
-bugfix/all/sfc-fix-maximum-number-of-tso-segments-and-minimum-tx-queue-size.patch
-bugfix/all/tcp-apply-device-tso-segment-limit-earlier.patch
-bugfix/all/net_sched-gact-fix-potential-panic-in-tcf_gact.patch
-bugfix/all/af_packet-remove-bug-statement-in-tpacket_destruct_skb.patch
-bugfix/all/atm-fix-info-leak-in-getsockopt-so_atmpvc.patch
-bugfix/all/atm-fix-info-leak-via-getsockname.patch
-bugfix/all/bluetooth-hci-fix-info-leak-in-getsockopt-hci_filter.patch
-bugfix/all/bluetooth-hci-fix-info-leak-via-getsockname.patch
-bugfix/all/bluetooth-rfcomm-fix-info-leak-in-getsockopt-bt_security.patch
-bugfix/all/bluetooth-rfcomm-fix-info-leak-in-ioctl-rfcommgetdevlist.patch
-bugfix/all/bluetooth-rfcomm-fix-info-leak-via-getsockname.patch
-bugfix/all/bluetooth-l2cap-fix-info-leak-via-getsockname.patch
-bugfix/all/llc-fix-info-leak-via-getsockname.patch
-bugfix/all/dccp-fix-info-leak-via-getsockopt-dccp_sockopt_ccid_tx_info.patch
-bugfix/all/ipvs-fix-info-leak-in-getsockopt-ip_vs_so_get_timeout.patch
-bugfix/all/net-fix-info-leak-in-compat-dev_ifconf.patch
-bugfix/all/af_packet-don-t-emit-packet-on-orig-fanout-group.patch
-bugfix/all/af_netlink-force-credentials-passing.patch
-bugfix/all/netlink-fix-possible-spoofing-from-non-root-processes.patch
-bugfix/all/net-ipv4-ipmr_expire_timer-causes-crash-when-removing-net-namespace.patch
Index: debian/patches/features/all/USB-add-USB_VENDOR_AND_INTERFACE_INFO-macro.patch (deleted)
===================================================================
Index: debian/patches/features/all/fs-add-link-restriction-audit-reporting.patch (deleted)
===================================================================
Index: debian/patches/features/all/wacom/0029-wacom-do-not-request-tablet-data-on-MT-Tablet-PC-pen.patch (deleted)
===================================================================
Index: debian/patches/features/all/wacom/0030-wacom-ignore-new-style-Wacom-multi-touch-packets-on-.patch (deleted)
===================================================================
Index: debian/patches/features/all/fs-add-link-restrictions.patch (deleted)
===================================================================
Index: debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch
===================================================================
--- debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch	(révision 19400)
+++ debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch	(copie de travail)
@@ -1,7 +1,6 @@
 From: Ben Hutchings <ben@decadent.org.uk>
 Date: Sun, 30 May 2010 22:43:38 +0100
-Subject: [PATCH 1/2] cgroups: Allow memory cgroup support to be included but
- disabled
+Subject: cgroups: Allow memory cgroup support to be included but disabled
 
 Memory cgroup support has some run-time overhead, so it's useful to
 include it in a distribution kernel without enabling it by default.
@@ -9,6 +8,7 @@
 parameter 'cgroup_enable' as the opposite to 'cgroup_disable'.
 
 Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
 ---
  Documentation/kernel-parameters.txt |    4 ++--
  init/Kconfig                        |    8 ++++++++
@@ -17,10 +17,10 @@
  4 files changed, 29 insertions(+), 6 deletions(-)
 
 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index cc85a92..38e0b44 100644
+index ad7e2e5088c1..2f51d26d2548 100644
 --- a/Documentation/kernel-parameters.txt
 +++ b/Documentation/kernel-parameters.txt
-@@ -425,8 +425,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -455,8 +455,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
  	ccw_timeout_log [S390]
  			See Documentation/s390/CommonIO for details.
  
@@ -32,29 +32,29 @@
  
  	checkreqprot	[SELINUX] Set initial checkreqprot flag value.
 diff --git a/init/Kconfig b/init/Kconfig
-index d886b1e..3410369 100644
+index af6c7f8ba019..ba3d2277a708 100644
 --- a/init/Kconfig
 +++ b/init/Kconfig
-@@ -659,6 +659,14 @@ config CGROUP_MEM_RES_CTLR
+@@ -709,6 +709,14 @@ config MEMCG
  	  This config option also selects MM_OWNER config option, which
  	  could in turn add some fork/exit overhead.
  
-+config CGROUP_MEM_RES_CTLR_DISABLED
++config MEMCG_DISABLED
 +	bool "Memory Resource Controller disabled by default"
-+	depends on CGROUP_MEM_RES_CTLR
++	depends on MEMCG
 +	default n
 +	help
 +	  Disable the memory group resource controller unless explicitly
 +	  enabled using the kernel parameter "cgroup_enable=memory".
 +
- config CGROUP_MEM_RES_CTLR_SWAP
+ config MEMCG_SWAP
  	bool "Memory Resource Controller Swap Extension"
- 	depends on CGROUP_MEM_RES_CTLR && SWAP
+ 	depends on MEMCG && SWAP
 diff --git a/kernel/cgroup.c b/kernel/cgroup.c
-index 25c7eb5..b3c5aa7 100644
+index 79818507e444..604a9c5986b3 100644
 --- a/kernel/cgroup.c
 +++ b/kernel/cgroup.c
-@@ -4526,7 +4526,7 @@ static void cgroup_release_agent(struct work_struct *work)
+@@ -5029,7 +5029,7 @@ static void cgroup_release_agent(struct work_struct *work)
  	mutex_unlock(&cgroup_mutex);
  }
  
@@ -63,7 +63,7 @@
  {
  	int i;
  	char *token;
-@@ -4542,17 +4542,29 @@ static int __init cgroup_disable(char *str)
+@@ -5045,17 +5045,29 @@ static int __init cgroup_disable(char *str)
  			struct cgroup_subsys *ss = subsys[i];
  
  			if (!strcmp(token, ss->name)) {
@@ -97,19 +97,19 @@
   * Functons for CSS ID.
   */
 diff --git a/mm/memcontrol.c b/mm/memcontrol.c
-index 010f916..f660a07 100644
+index 795e525afaba..6fb9c36599f0 100644
 --- a/mm/memcontrol.c
 +++ b/mm/memcontrol.c
-@@ -5153,6 +5153,9 @@ static void mem_cgroup_move_task(struct cgroup_subsys *ss,
+@@ -5596,6 +5596,9 @@ static void mem_cgroup_move_task(struct cgroup *cont,
  
  struct cgroup_subsys mem_cgroup_subsys = {
  	.name = "memory",
-+#ifdef CONFIG_CGROUP_MEM_RES_CTLR_DISABLED
++#ifdef CONFIG_MEMCG_DISABLED
 +	.disabled = 1,
 +#endif
  	.subsys_id = mem_cgroup_subsys_id,
  	.create = mem_cgroup_create,
  	.pre_destroy = mem_cgroup_pre_destroy,
 -- 
-1.7.4.4
+1.7.10.4
 
Index: debian/patches/features/all/aufs3/aufs3-fix-export-__devcgroup_inode_permission.patch (deleted)
===================================================================
Index: debian/patches/features/all/aufs3/aufs3-add.patch
===================================================================
--- debian/patches/features/all/aufs3/aufs3-add.patch	(révision 19400)
+++ debian/patches/features/all/aufs3/aufs3-add.patch	(copie de travail)
@@ -1,5 +1,5 @@
---- a/fs/aufs/Kconfig	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/Kconfig	2012-01-10 02:15:56.545455955 +0000
+--- a/fs/aufs/Kconfig	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/Kconfig	2012-09-25 17:44:58.477910516 -0700
 @@ -0,0 +1,203 @@
 +config AUFS_FS
 +	tristate "Aufs (Advanced multi layered unification filesystem) support"
@@ -204,8 +204,8 @@
 +	Automatic configuration for internal use.
 +	When aufs supports Magic SysRq, enabled automatically.
 +endif
---- a/fs/aufs/Makefile	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/Makefile	2012-08-01 03:41:52.619414717 +0100
+--- a/fs/aufs/Makefile	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/Makefile	2012-09-25 17:44:58.481910453 -0700
 @@ -0,0 +1,42 @@
 +
 +include ${src}/magic.mk
@@ -249,8 +249,8 @@
 +aufs-$(CONFIG_AUFS_BR_HFSPLUS) += hfsplus.o
 +aufs-$(CONFIG_AUFS_DEBUG) += debug.o
 +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o
---- a/fs/aufs/aufs.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/aufs.h	2012-01-10 02:15:56.545455955 +0000
+--- a/fs/aufs/aufs.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/aufs.h	2012-09-25 17:44:58.481910453 -0700
 @@ -0,0 +1,60 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -312,8 +312,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_H__ */
---- a/fs/aufs/branch.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/branch.c	2012-07-22 01:31:00.134115312 +0100
+--- a/fs/aufs/branch.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/branch.c	2012-09-25 17:44:58.481910453 -0700
 @@ -0,0 +1,1169 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -1389,7 +1389,7 @@
 +		spin_unlock(&hf->f_lock);
 +		if (!file_check_writeable(hf)) {
 +			file_release_write(hf);
-+			mnt_drop_write(hf->f_vfsmnt);
++			vfsub_mnt_drop_write(hf->f_vfsmnt);
 +		}
 +	}
 +
@@ -1484,8 +1484,8 @@
 +	AuTraceErr(err);
 +	return err;
 +}
---- a/fs/aufs/branch.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/branch.h	2012-01-10 02:15:56.545455955 +0000
+--- a/fs/aufs/branch.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/branch.h	2012-09-25 17:44:58.481910453 -0700
 @@ -0,0 +1,230 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -1717,8 +1717,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_BRANCH_H__ */
---- a/fs/aufs/conf.mk	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/conf.mk	2012-01-10 02:15:56.545455955 +0000
+--- a/fs/aufs/conf.mk	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/conf.mk	2012-09-25 17:44:58.481910453 -0700
 @@ -0,0 +1,38 @@
 +
 +AuConfStr = CONFIG_AUFS_FS=${CONFIG_AUFS_FS}
@@ -1758,9 +1758,9 @@
 +${obj}/sysfs.o: ${AuConfName}
 +
 +-include ${srctree}/${src}/conf_priv.mk
---- a/fs/aufs/cpup.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/cpup.c	2012-07-22 01:31:00.162115458 +0100
-@@ -0,0 +1,1084 @@
+--- a/fs/aufs/cpup.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/cpup.c	2012-09-25 17:44:58.481910453 -0700
+@@ -0,0 +1,1085 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -2249,7 +2249,8 @@
 +	case S_IFREG:
 +		/* try stopping to update while we are referencing */
 +		IMustLock(h_inode);
-+		err = vfsub_create(h_dir, &h_path, mode | S_IWUSR);
++		err = vfsub_create(h_dir, &h_path, mode | S_IWUSR,
++				   /*want_excl*/true);
 +		if (!err)
 +			err = au_do_cpup_regular
 +				(dentry, bdst, bsrc, len,
@@ -2845,8 +2846,8 @@
 +	dput(parent);
 +	return err;
 +}
---- a/fs/aufs/cpup.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/cpup.h	2012-01-10 02:15:56.545455955 +0000
+--- a/fs/aufs/cpup.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/cpup.h	2012-09-25 17:44:58.481910453 -0700
 @@ -0,0 +1,81 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -2929,8 +2930,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_CPUP_H__ */
---- a/fs/aufs/dbgaufs.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dbgaufs.c	2012-01-10 02:15:56.545455955 +0000
+--- a/fs/aufs/dbgaufs.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dbgaufs.c	2012-09-25 17:44:58.481910453 -0700
 @@ -0,0 +1,334 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -3266,8 +3267,8 @@
 +		err = 0;
 +	return err;
 +}
---- a/fs/aufs/dbgaufs.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dbgaufs.h	2012-01-10 02:15:56.545455955 +0000
+--- a/fs/aufs/dbgaufs.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dbgaufs.h	2012-09-25 17:44:58.481910453 -0700
 @@ -0,0 +1,49 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -3318,8 +3319,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __DBGAUFS_H__ */
---- a/fs/aufs/dcsub.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dcsub.c	2012-01-10 02:15:56.545455955 +0000
+--- a/fs/aufs/dcsub.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dcsub.c	2012-09-25 17:44:58.481910453 -0700
 @@ -0,0 +1,243 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -3564,8 +3565,8 @@
 +
 +	return path_is_under(path + 0, path + 1);
 +}
---- a/fs/aufs/dcsub.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dcsub.h	2012-01-10 02:15:56.545455955 +0000
+--- a/fs/aufs/dcsub.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dcsub.h	2012-09-25 17:44:58.481910453 -0700
 @@ -0,0 +1,94 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -3661,9 +3662,9 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_DCSUB_H__ */
---- a/fs/aufs/debug.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/debug.c	2012-07-22 01:31:00.162115458 +0100
-@@ -0,0 +1,489 @@
+--- a/fs/aufs/debug.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/debug.c	2012-09-25 17:44:58.485910356 -0700
+@@ -0,0 +1,490 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -3804,9 +3805,10 @@
 +void au_dpri_dalias(struct inode *inode)
 +{
 +	struct dentry *d;
++	struct hlist_node *p;
 +
 +	spin_lock(&inode->i_lock);
-+	list_for_each_entry(d, &inode->i_dentry, d_alias)
++	hlist_for_each_entry(d, p, &inode->i_dentry, d_alias)
 +		au_dpri_dentry(d);
 +	spin_unlock(&inode->i_lock);
 +}
@@ -4153,8 +4155,8 @@
 +
 +	return 0;
 +}
---- a/fs/aufs/debug.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/debug.h	2012-07-22 01:31:00.162115458 +0100
+--- a/fs/aufs/debug.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/debug.h	2012-09-25 17:44:58.485910356 -0700
 @@ -0,0 +1,242 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -4398,9 +4400,9 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_DEBUG_H__ */
---- a/fs/aufs/dentry.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dentry.c	2012-07-22 01:31:00.162115458 +0100
-@@ -0,0 +1,1140 @@
+--- a/fs/aufs/dentry.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dentry.c	2012-09-25 17:44:58.485910356 -0700
+@@ -0,0 +1,1063 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -4426,63 +4428,6 @@
 +#include <linux/namei.h>
 +#include "aufs.h"
 +
-+static void au_h_nd(struct nameidata *h_nd, struct nameidata *nd)
-+{
-+	if (nd) {
-+		*h_nd = *nd;
-+
-+		/*
-+		 * gave up supporting LOOKUP_CREATE/OPEN for lower fs,
-+		 * due to whiteout and branch permission.
-+		 */
-+		h_nd->flags &= ~(/*LOOKUP_PARENT |*/ LOOKUP_OPEN | LOOKUP_CREATE
-+				 | LOOKUP_FOLLOW | LOOKUP_EXCL);
-+		/* unnecessary? */
-+		h_nd->intent.open.file = NULL;
-+	} else
-+		memset(h_nd, 0, sizeof(*h_nd));
-+}
-+
-+struct au_lkup_one_args {
-+	struct dentry **errp;
-+	struct qstr *name;
-+	struct dentry *h_parent;
-+	struct au_branch *br;
-+	struct nameidata *nd;
-+};
-+
-+struct dentry *au_lkup_one(struct qstr *name, struct dentry *h_parent,
-+			   struct au_branch *br, struct nameidata *nd)
-+{
-+	struct dentry *h_dentry;
-+	int err;
-+	struct nameidata h_nd;
-+
-+	if (au_test_fs_null_nd(h_parent->d_sb))
-+		return vfsub_lookup_one_len(name->name, h_parent, name->len);
-+
-+	au_h_nd(&h_nd, nd);
-+	h_nd.path.dentry = h_parent;
-+	h_nd.path.mnt = br->br_mnt;
-+
-+	err = vfsub_name_hash(name->name, &h_nd.last, name->len);
-+	h_dentry = ERR_PTR(err);
-+	if (!err) {
-+		path_get(&h_nd.path);
-+		h_dentry = vfsub_lookup_hash(&h_nd);
-+		path_put(&h_nd.path);
-+	}
-+
-+	AuTraceErrPtr(h_dentry);
-+	return h_dentry;
-+}
-+
-+static void au_call_lkup_one(void *args)
-+{
-+	struct au_lkup_one_args *a = args;
-+	*a->errp = au_lkup_one(a->name, a->h_parent, a->br, a->nd);
-+}
-+
 +#define AuLkup_ALLOW_NEG	1
 +#define au_ftest_lkup(flags, name)	((flags) & AuLkup_##name)
 +#define au_fset_lkup(flags, name) \
@@ -4493,7 +4438,7 @@
 +struct au_do_lookup_args {
 +	unsigned int		flags;
 +	mode_t			type;
-+	struct nameidata	*nd;
++	unsigned int		nd_flags;
 +};
 +
 +/*
@@ -4530,7 +4475,7 @@
 +		return NULL; /* success */
 +
 +real_lookup:
-+	h_dentry = au_lkup_one(&dentry->d_name, h_parent, br, args->nd);
++	h_dentry = vfsub_lkup_one(&dentry->d_name, h_parent);
 +	if (IS_ERR(h_dentry))
 +		goto out;
 +
@@ -4585,16 +4530,16 @@
 + * can be called at unlinking with @type is zero.
 + */
 +int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type,
-+		   struct nameidata *nd)
++		   unsigned int flags)
 +{
 +	int npositive, err;
 +	aufs_bindex_t bindex, btail, bdiropq;
 +	unsigned char isdir;
 +	struct qstr whname;
 +	struct au_do_lookup_args args = {
-+		.flags	= 0,
-+		.type	= type,
-+		.nd	= nd
++		.flags		= 0,
++		.type		= type,
++		.nd_flags	= flags
 +	};
 +	const struct qstr *name = &dentry->d_name;
 +	struct dentry *parent;
@@ -4690,17 +4635,15 @@
 +	int wkq_err;
 +
 +	if (!au_test_h_perm_sio(parent->d_inode, MAY_EXEC))
-+		dentry = au_lkup_one(name, parent, br, /*nd*/NULL);
++		dentry = vfsub_lkup_one(name, parent);
 +	else {
-+		struct au_lkup_one_args args = {
-+			.errp		= &dentry,
-+			.name		= name,
-+			.h_parent	= parent,
-+			.br		= br,
-+			.nd		= NULL
++		struct vfsub_lkup_one_args args = {
++			.errp	= &dentry,
++			.name	= name,
++			.parent	= parent
 +		};
 +
-+		wkq_err = au_wkq_wait(au_call_lkup_one, &args);
++		wkq_err = au_wkq_wait(vfsub_call_lkup_one, &args);
 +		if (unlikely(wkq_err))
 +			dentry = ERR_PTR(wkq_err);
 +	}
@@ -4778,7 +4721,7 @@
 +	return ia->i_ino != h_inode->i_ino
 +		/* || ia->i_nlink != h_inode->i_nlink */
 +		|| !uid_eq(ia->i_uid, h_inode->i_uid)
-+		|| !uid_eq(ia->i_gid, h_inode->i_gid)
++		|| !gid_eq(ia->i_gid, h_inode->i_gid)
 +		|| ia->i_version != h_inode->i_version
 +/*
 +		|| ia->i_size != h_inode->i_size
@@ -4808,7 +4751,7 @@
 +		goto out;
 +
 +	/* main purpose is namei.c:cached_lookup() and d_revalidate */
-+	h_d = au_lkup_one(&h_dentry->d_name, h_parent, br, /*nd*/NULL);
++	h_d = vfsub_lkup_one(&h_dentry->d_name, h_parent);
 +	err = PTR_ERR(h_d);
 +	if (IS_ERR(h_d))
 +		goto out;
@@ -5194,7 +5137,7 @@
 +	 * if current working dir is removed, it returns an error.
 +	 * but the dentry is legal.
 +	 */
-+	err = au_lkup_dentry(dentry, /*bstart*/0, /*type*/0, /*nd*/NULL);
++	err = au_lkup_dentry(dentry, /*bstart*/0, /*type*/0, /*flags*/0);
 +	AuDbgDentry(dentry);
 +	au_di_swap(tmp, dinfo);
 +	if (err == -ENOENT)
@@ -5223,43 +5166,25 @@
 +	return err;
 +}
 +
-+static noinline_for_stack
-+int au_do_h_d_reval(struct dentry *h_dentry, struct nameidata *nd,
-+		    struct dentry *dentry, aufs_bindex_t bindex)
++static int au_do_h_d_reval(struct dentry *h_dentry, unsigned int flags,
++			   struct dentry *dentry, aufs_bindex_t bindex)
 +{
 +	int err, valid;
-+	int (*reval)(struct dentry *, struct nameidata *);
 +
 +	err = 0;
 +	if (!(h_dentry->d_flags & DCACHE_OP_REVALIDATE))
 +		goto out;
-+	reval = h_dentry->d_op->d_revalidate;
 +
 +	AuDbg("b%d\n", bindex);
-+	if (au_test_fs_null_nd(h_dentry->d_sb))
-+		/* it may return tri-state */
-+		valid = reval(h_dentry, NULL);
-+	else {
-+		struct nameidata h_nd;
-+		int locked;
-+		struct dentry *parent;
++	/*
++	 * gave up supporting LOOKUP_CREATE/OPEN for lower fs,
++	 * due to whiteout and branch permission.
++	 */
++	flags &= ~(/*LOOKUP_PARENT |*/ LOOKUP_OPEN | LOOKUP_CREATE
++		   | LOOKUP_FOLLOW | LOOKUP_EXCL);
++	/* it may return tri-state */
++	valid = h_dentry->d_op->d_revalidate(h_dentry, flags);
 +
-+		au_h_nd(&h_nd, nd);
-+		parent = nd->path.dentry;
-+		locked = (nd && nd->path.dentry != dentry);
-+		if (locked)
-+			di_read_lock_parent(parent, AuLock_IR);
-+		BUG_ON(bindex > au_dbend(parent));
-+		h_nd.path.dentry = au_h_dptr(parent, bindex);
-+		BUG_ON(!h_nd.path.dentry);
-+		h_nd.path.mnt = au_sbr(parent->d_sb, bindex)->br_mnt;
-+		path_get(&h_nd.path);
-+		valid = reval(h_dentry, &h_nd);
-+		path_put(&h_nd.path);
-+		if (locked)
-+			di_read_unlock(parent, AuLock_IR);
-+	}
-+
 +	if (unlikely(valid < 0))
 +		err = valid;
 +	else if (!valid)
@@ -5272,7 +5197,7 @@
 +
 +/* todo: remove this */
 +static int h_d_revalidate(struct dentry *dentry, struct inode *inode,
-+			  struct nameidata *nd, int do_udba)
++			  unsigned int flags, int do_udba)
 +{
 +	int err;
 +	umode_t mode, h_mode;
@@ -5332,7 +5257,7 @@
 +		}
 +		spin_unlock(&h_dentry->d_lock);
 +
-+		err = au_do_h_d_reval(h_dentry, nd, dentry, bindex);
++		err = au_do_h_d_reval(h_dentry, flags, dentry, bindex);
 +		if (unlikely(err))
 +			/* do not goto err, to keep the errno */
 +			break;
@@ -5441,7 +5366,7 @@
 +/*
 + * if valid returns 1, otherwise 0.
 + */
-+static int aufs_d_revalidate(struct dentry *dentry, struct nameidata *nd)
++static int aufs_d_revalidate(struct dentry *dentry, unsigned int flags)
 +{
 +	int valid, err;
 +	unsigned int sigen;
@@ -5450,7 +5375,7 @@
 +	struct inode *inode;
 +
 +	/* todo: support rcu-walk? */
-+	if (nd && (nd->flags & LOOKUP_RCU))
++	if (flags & LOOKUP_RCU)
 +		return -ECHILD;
 +
 +	valid = 0;
@@ -5507,7 +5432,7 @@
 +		}
 +	}
 +
-+	err = h_d_revalidate(dentry, inode, nd, do_udba);
++	err = h_d_revalidate(dentry, inode, flags, do_udba);
 +	if (unlikely(!err && do_udba && au_dbstart(dentry) < 0)) {
 +		err = -EIO;
 +		AuDbg("both of real entry and whiteout found, %.*s, err %d\n",
@@ -5541,9 +5466,9 @@
 +	.d_revalidate	= aufs_d_revalidate,
 +	.d_release	= aufs_d_release
 +};
---- a/fs/aufs/dentry.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dentry.h	2012-01-10 02:15:56.549455982 +0000
-@@ -0,0 +1,237 @@
+--- a/fs/aufs/dentry.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dentry.h	2012-09-25 17:44:58.485910356 -0700
+@@ -0,0 +1,235 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -5592,15 +5517,13 @@
 +/* dentry.c */
 +extern const struct dentry_operations aufs_dop;
 +struct au_branch;
-+struct dentry *au_lkup_one(struct qstr *name, struct dentry *h_parent,
-+			   struct au_branch *br, struct nameidata *nd);
 +struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent,
 +			       struct au_branch *br);
 +int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir,
 +		struct dentry *h_parent, struct au_branch *br);
 +
 +int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type,
-+		   struct nameidata *nd);
++		   unsigned int flags);
 +int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex);
 +int au_refresh_dentry(struct dentry *dentry, struct dentry *parent);
 +int au_reval_dpath(struct dentry *dentry, unsigned int sigen);
@@ -5781,8 +5704,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_DENTRY_H__ */
---- a/fs/aufs/dinfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dinfo.c	2012-01-10 02:15:56.549455982 +0000
+--- a/fs/aufs/dinfo.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dinfo.c	2012-09-25 17:44:58.485910356 -0700
 @@ -0,0 +1,543 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -6327,9 +6250,9 @@
 +			return bindex;
 +	return -1;
 +}
---- a/fs/aufs/dir.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dir.c	2012-06-04 21:49:59.814840078 +0100
-@@ -0,0 +1,636 @@
+--- a/fs/aufs/dir.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dir.c	2012-09-25 17:44:58.485910356 -0700
+@@ -0,0 +1,633 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -6555,9 +6478,6 @@
 +	finfo = au_fi(file);
 +	fidir = finfo->fi_hdir;
 +	if (fidir) {
-+		/* remove me from sb->s_files */
-+		file_sb_list_del(file);
-+
 +		vdir_cache = fidir->fd_vdir_cache; /* lock-free */
 +		if (vdir_cache)
 +			au_vdir_free(vdir_cache);
@@ -6966,8 +6886,8 @@
 +	.flush		= aufs_flush_dir,
 +	.fsync		= aufs_fsync_dir
 +};
---- a/fs/aufs/dir.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dir.h	2012-01-10 02:15:56.549455982 +0000
+--- a/fs/aufs/dir.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dir.h	2012-09-25 17:44:58.485910356 -0700
 @@ -0,0 +1,137 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -7106,9 +7026,9 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_DIR_H__ */
---- a/fs/aufs/dynop.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dynop.c	2012-01-10 02:15:56.549455982 +0000
-@@ -0,0 +1,377 @@
+--- a/fs/aufs/dynop.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dynop.c	2012-09-25 17:44:58.485910356 -0700
+@@ -0,0 +1,379 @@
 +/*
 + * Copyright (C) 2010-2012 Junjiro R. Okajima
 + *
@@ -7305,6 +7225,8 @@
 +	DySetAop(launder_page);
 +	DySetAop(is_partially_uptodate);
 +	DySetAop(error_remove_page);
++	DySetAop(swap_activate);
++	DySetAop(swap_deactivate);
 +
 +	DyDbgSize(cnt, *h_aop);
 +	dyaop->da_get_xip_mem = h_aop->get_xip_mem;
@@ -7486,8 +7408,8 @@
 +	for (i = 0; i < AuDyLast; i++)
 +		WARN_ON(!list_empty(&dynop[i].head));
 +}
---- a/fs/aufs/dynop.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/dynop.h	2012-01-10 02:15:56.549455982 +0000
+--- a/fs/aufs/dynop.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/dynop.h	2012-09-25 17:44:58.485910356 -0700
 @@ -0,0 +1,76 @@
 +/*
 + * Copyright (C) 2010-2012 Junjiro R. Okajima
@@ -7565,9 +7487,9 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_DYNOP_H__ */
---- a/fs/aufs/export.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/export.c	2012-07-22 01:31:00.162115458 +0100
-@@ -0,0 +1,810 @@
+--- a/fs/aufs/export.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/export.c	2012-09-25 17:44:58.489910277 -0700
+@@ -0,0 +1,811 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -7781,6 +7703,7 @@
 +	struct dentry *dentry, *d;
 +	struct inode *inode;
 +	unsigned int sigen;
++	struct hlist_node *p;
 +
 +	dentry = NULL;
 +	inode = ilookup(sb, ino);
@@ -7799,7 +7722,7 @@
 +		dentry = d_find_alias(inode);
 +	else {
 +		spin_lock(&inode->i_lock);
-+		list_for_each_entry(d, &inode->i_dentry, d_alias) {
++		hlist_for_each_entry(d, p, &inode->i_dentry, d_alias) {
 +			spin_lock(&d->d_lock);
 +			if (!au_test_anon(d)
 +			    && d->d_parent->d_inode->i_ino == dir_ino) {
@@ -7953,7 +7876,7 @@
 +	if (!arg.found)
 +		goto out_name;
 +
-+	/* do not call au_lkup_one() */
++	/* do not call vfsub_lkup_one() */
 +	dir = parent->d_inode;
 +	mutex_lock(&dir->i_mutex);
 +	dentry = vfsub_lookup_one_len(arg.name, parent, arg.namelen);
@@ -8378,9 +8301,9 @@
 +	BUILD_BUG_ON(sizeof(u) != sizeof(int));
 +	atomic_set(&sbinfo->si_xigen_next, u);
 +}
---- a/fs/aufs/f_op.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/f_op.c	2012-08-01 03:41:52.619414717 +0100
-@@ -0,0 +1,727 @@
+--- a/fs/aufs/f_op.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/f_op.c	2012-09-25 17:44:58.489910277 -0700
+@@ -0,0 +1,724 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -8466,11 +8389,8 @@
 +
 +	finfo = au_fi(file);
 +	bindex = finfo->fi_btop;
-+	if (bindex >= 0) {
-+		/* remove me from sb->s_files */
-+		file_sb_list_del(file);
++	if (bindex >= 0)
 +		au_set_h_fptr(file, bindex, NULL);
-+	}
 +
 +	au_finfo_fin(file);
 +	return 0;
@@ -9108,8 +9028,8 @@
 +	.aio_splice_read  = aufs_aio_splice_read
 +#endif
 +};
---- a/fs/aufs/f_op_sp.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/f_op_sp.c	2012-07-22 01:31:00.162115458 +0100
+--- a/fs/aufs/f_op_sp.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/f_op_sp.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,295 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -9406,9 +9326,9 @@
 +
 +	return ret;
 +}
---- a/fs/aufs/file.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/file.c	2012-06-04 21:49:59.854840268 +0100
-@@ -0,0 +1,676 @@
+--- a/fs/aufs/file.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/file.c	2012-09-25 17:44:58.489910277 -0700
+@@ -0,0 +1,683 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -10063,6 +9983,11 @@
 +static int aufs_error_remove_page(struct address_space *mapping,
 +				  struct page *page)
 +{ AuUnsupport(); return 0; }
++static int aufs_swap_activate(struct swap_info_struct *sis, struct file *file,
++			      sector_t *span)
++{ AuUnsupport(); return 0; }
++static void aufs_swap_deactivate(struct file *file)
++{ AuUnsupport(); }
 +#endif /* CONFIG_AUFS_DEBUG */
 +
 +const struct address_space_operations aufs_aop = {
@@ -10082,11 +10007,13 @@
 +	.migratepage		= aufs_migratepage,
 +	.launder_page		= aufs_launder_page,
 +	.is_partially_uptodate	= aufs_is_partially_uptodate,
-+	.error_remove_page	= aufs_error_remove_page
++	.error_remove_page	= aufs_error_remove_page,
++	.swap_activate		= aufs_swap_activate,
++	.swap_deactivate	= aufs_swap_deactivate
 +#endif /* CONFIG_AUFS_DEBUG */
 +};
---- a/fs/aufs/file.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/file.h	2012-08-01 03:41:52.619414717 +0100
+--- a/fs/aufs/file.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/file.h	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,298 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -10386,8 +10313,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_FILE_H__ */
---- a/fs/aufs/finfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/finfo.c	2012-01-10 02:15:56.549455982 +0000
+--- a/fs/aufs/finfo.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/finfo.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,156 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -10545,9 +10472,9 @@
 +out:
 +	return err;
 +}
---- a/fs/aufs/fstype.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/fstype.h	2012-01-10 02:15:56.553455997 +0000
-@@ -0,0 +1,496 @@
+--- a/fs/aufs/fstype.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/fstype.h	2012-09-25 17:44:58.489910277 -0700
+@@ -0,0 +1,481 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -10889,16 +10816,6 @@
 +		|| au_test_aufs(sb); /* will be supported in next version */
 +}
 +
-+/*
-+ * If the filesystem supports NFS-export, then it has to support NULL as
-+ * a nameidata parameter for ->create(), ->lookup() and ->d_revalidate().
-+ * We can apply this principle when we handle a lower filesystem.
-+ */
-+static inline int au_test_fs_null_nd(struct super_block *sb)
-+{
-+	return !!sb->s_export_op;
-+}
-+
 +static inline int au_test_fs_remote(struct super_block *sb)
 +{
 +	return !au_test_tmpfs(sb)
@@ -11014,11 +10931,6 @@
 +{
 +	return au_test_fs_remote(sb)
 +		|| au_test_fs_bad_iattr_size(sb)
-+#ifdef CONFIG_AUFS_BR_RAMFS
-+		|| !(au_test_ramfs(sb) || au_test_fs_null_nd(sb))
-+#else
-+		|| !au_test_fs_null_nd(sb) /* to keep xino code simple */
-+#endif
 +		/* don't want unnecessary work for xino */
 +		|| au_test_aufs(sb)
 +		|| au_test_ecryptfs(sb)
@@ -11044,8 +10956,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_FSTYPE_H__ */
---- a/fs/aufs/hfsnotify.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/hfsnotify.c	2012-07-22 01:31:00.162115458 +0100
+--- a/fs/aufs/hfsnotify.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/hfsnotify.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,257 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -11304,8 +11216,8 @@
 +	.fin_br		= au_hfsn_fin_br,
 +	.init_br	= au_hfsn_init_br
 +};
---- a/fs/aufs/hfsplus.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/hfsplus.c	2012-01-10 02:15:56.553455997 +0000
+--- a/fs/aufs/hfsplus.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/hfsplus.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,57 @@
 +/*
 + * Copyright (C) 2010-2012 Junjiro R. Okajima
@@ -11364,9 +11276,9 @@
 +		au_sbr_put(dentry->d_sb, bindex);
 +	}
 +}
---- a/fs/aufs/hnotify.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/hnotify.c	2012-07-22 01:31:00.162115458 +0100
-@@ -0,0 +1,712 @@
+--- a/fs/aufs/hnotify.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/hnotify.c	2012-09-25 17:44:58.489910277 -0700
+@@ -0,0 +1,713 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -11569,6 +11481,7 @@
 +	int err;
 +	struct dentry *d;
 +	struct qstr *dname;
++	struct hlist_node *p;
 +
 +	err = 1;
 +	if (unlikely(inode->i_ino == AUFS_ROOT_INO)) {
@@ -11581,7 +11494,7 @@
 +		AuDebugOn(!name);
 +		au_iigen_dec(inode);
 +		spin_lock(&inode->i_lock);
-+		list_for_each_entry(d, &inode->i_dentry, d_alias) {
++		hlist_for_each_entry(d, p, &inode->i_dentry, d_alias) {
 +			spin_lock(&d->d_lock);
 +			dname = &d->d_name;
 +			if (dname->len != nlen
@@ -12079,8 +11992,8 @@
 +	if (au_cachep[AuCache_HNOTIFY])
 +		au_hn_destroy_cache();
 +}
---- a/fs/aufs/i_op.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/i_op.c	2012-08-01 03:41:52.619414717 +0100
+--- a/fs/aufs/i_op.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/i_op.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,1009 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -12238,7 +12151,7 @@
 +/* ---------------------------------------------------------------------- */
 +
 +static struct dentry *aufs_lookup(struct inode *dir, struct dentry *dentry,
-+				  struct nameidata *nd)
++				  unsigned int flags)
 +{
 +	struct dentry *ret, *parent;
 +	struct inode *inode;
@@ -12270,7 +12183,7 @@
 +		err = au_digen_test(parent, au_sigen(sb));
 +	if (!err) {
 +		npositive = au_lkup_dentry(dentry, au_dbstart(parent),
-+					   /*type*/0, nd);
++					   /*type*/0, flags);
 +		err = npositive;
 +	}
 +	di_read_unlock(parent, AuLock_IR);
@@ -12442,7 +12355,7 @@
 +void au_unpin(struct au_pin *p)
 +{
 +	if (p->h_mnt && au_ftest_pin(p->flags, MNT_WRITE))
-+		mnt_drop_write(p->h_mnt);
++		vfsub_mnt_drop_write(p->h_mnt);
 +	if (!p->hdir)
 +		return;
 +
@@ -12470,7 +12383,7 @@
 +	if (IS_ROOT(p->dentry)) {
 +		if (au_ftest_pin(p->flags, MNT_WRITE)) {
 +			p->h_mnt = br->br_mnt;
-+			err = mnt_want_write(p->h_mnt);
++			err = vfsub_mnt_want_write(p->h_mnt);
 +			if (unlikely(err)) {
 +				au_fclr_pin(p->flags, MNT_WRITE);
 +				goto out_err;
@@ -12524,7 +12437,7 @@
 +
 +	if (au_ftest_pin(p->flags, MNT_WRITE)) {
 +		p->h_mnt = br->br_mnt;
-+		err = mnt_want_write(p->h_mnt);
++		err = vfsub_mnt_want_write(p->h_mnt);
 +		if (unlikely(err)) {
 +			au_fclr_pin(p->flags, MNT_WRITE);
 +			goto out_unpin;
@@ -13018,7 +12931,6 @@
 +out_name:
 +	__putname(buf.k);
 +out:
-+	path_put(&nd->path);
 +	AuTraceErr(err);
 +	return ERR_PTR(err);
 +}
@@ -13082,6 +12994,7 @@
 +	.getattr	= aufs_getattr,
 +
 +	.update_time	= aufs_update_time
++	/* no support for atomic_open() */
 +};
 +
 +struct inode_operations aufs_iop = {
@@ -13091,8 +13004,8 @@
 +
 +	.update_time	= aufs_update_time
 +};
---- a/fs/aufs/i_op_add.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/i_op_add.c	2012-06-04 21:49:59.854840268 +0100
+--- a/fs/aufs/i_op_add.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/i_op_add.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,712 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -13312,7 +13225,7 @@
 +	union {
 +		struct {
 +			umode_t mode;
-+			struct nameidata *nd;
++			bool want_excl;
 +		} c;
 +		struct {
 +			const char *symname;
@@ -13363,7 +13276,7 @@
 +	h_dir = au_pinned_h_dir(&pin);
 +	switch (arg->type) {
 +	case Creat:
-+		err = vfsub_create(h_dir, &h_path, arg->u.c.mode);
++		err = vfsub_create(h_dir, &h_path, arg->u.c.mode, arg->u.c.want_excl);
 +		break;
 +	case Symlink:
 +		err = vfsub_symlink(h_dir, &h_path, arg->u.s.symname);
@@ -13428,13 +13341,13 @@
 +}
 +
 +int aufs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
-+		struct nameidata *nd)
++		bool want_excl)
 +{
 +	struct simple_arg arg = {
 +		.type = Creat,
 +		.u.c = {
-+			.mode	= mode,
-+			.nd	= nd
++			.mode		= mode,
++			.want_excl	= want_excl
 +		}
 +	};
 +	return add_simple(dir, dentry, &arg);
@@ -13806,8 +13719,8 @@
 +out:
 +	return err;
 +}
---- a/fs/aufs/i_op_del.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/i_op_del.c	2012-01-10 02:15:56.557456016 +0000
+--- a/fs/aufs/i_op_del.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/i_op_del.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,478 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -13880,7 +13793,7 @@
 +			au_di_swap(tmp, dinfo);
 +			/* returns the number of positive dentries */
 +			need_wh = au_lkup_dentry(dentry, bstart + 1, /*type*/0,
-+						 /*nd*/NULL);
++						 /*flags*/0);
 +			au_di_swap(tmp, dinfo);
 +			au_rw_write_unlock(&tmp->di_rwsem);
 +			au_di_free(tmp);
@@ -14287,8 +14200,8 @@
 +	AuTraceErr(err);
 +	return err;
 +}
---- a/fs/aufs/i_op_ren.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/i_op_ren.c	2012-07-22 01:31:00.162115458 +0100
+--- a/fs/aufs/i_op_ren.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/i_op_ren.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,1026 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -14411,11 +14324,11 @@
 +{
 +	int rerr;
 +
-+	a->h_path.dentry = au_lkup_one(&a->src_dentry->d_name, a->src_h_parent,
-+				       a->br, /*nd*/NULL);
++	a->h_path.dentry = vfsub_lkup_one(&a->src_dentry->d_name,
++					  a->src_h_parent);
 +	rerr = PTR_ERR(a->h_path.dentry);
 +	if (IS_ERR(a->h_path.dentry)) {
-+		RevertFailure("au_lkup_one %.*s", AuDLNPair(a->src_dentry));
++		RevertFailure("lkup one %.*s", AuDLNPair(a->src_dentry));
 +		return;
 +	}
 +
@@ -14445,11 +14358,11 @@
 +{
 +	int rerr;
 +
-+	a->h_path.dentry = au_lkup_one(&a->dst_dentry->d_name, a->dst_h_parent,
-+				       a->br, /*nd*/NULL);
++	a->h_path.dentry = vfsub_lkup_one(&a->dst_dentry->d_name,
++					  a->dst_h_parent);
 +	rerr = PTR_ERR(a->h_path.dentry);
 +	if (IS_ERR(a->h_path.dentry)) {
-+		RevertFailure("lookup %.*s", AuDLNPair(a->dst_dentry));
++		RevertFailure("lkup one %.*s", AuDLNPair(a->dst_dentry));
 +		return;
 +	}
 +	if (a->h_path.dentry->d_inode) {
@@ -14906,7 +14819,7 @@
 +
 +	sb = a->dst_dentry->d_sb;
 +	if (au_ftest_ren(a->flags, MNT_WRITE))
-+		mnt_drop_write(a->br->br_mnt);
++		vfsub_mnt_drop_write(a->br->br_mnt);
 +	vfsub_unlock_rename(a->src_h_parent, a->src_hdir,
 +			    a->dst_h_parent, a->dst_hdir);
 +}
@@ -14936,7 +14849,7 @@
 +				  a->dst_h_parent->d_inode, a->dst_h_parent,
 +				  a->br);
 +	if (!err) {
-+		err = mnt_want_write(a->br->br_mnt);
++		err = vfsub_mnt_want_write(a->br->br_mnt);
 +		if (unlikely(err))
 +			goto out_unlock;
 +		au_fset_ren(a->flags, MNT_WRITE);
@@ -15316,8 +15229,8 @@
 +	AuTraceErr(err);
 +	return err;
 +}
---- a/fs/aufs/iinfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/iinfo.c	2012-01-10 02:15:56.557456016 +0000
+--- a/fs/aufs/iinfo.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/iinfo.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,264 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -15583,8 +15496,8 @@
 +	iinfo->ii_hinode = NULL;
 +	AuRwDestroy(&iinfo->ii_rwsem);
 +}
---- a/fs/aufs/inode.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/inode.c	2012-08-01 04:08:08.827230713 +0100
+--- a/fs/aufs/inode.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/inode.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,478 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -16051,7 +15964,7 @@
 +
 +int au_test_h_perm(struct inode *h_inode, int mask)
 +{
-+	if (current_fsuid() == GLOBAL_ROOT_GID)
++	if (uid_eq(current_fsuid(), GLOBAL_ROOT_UID))
 +		return 0;
 +	return inode_permission(h_inode, mask);
 +}
@@ -16064,8 +15977,8 @@
 +		mask |= MAY_READ; /* force permission check */
 +	return au_test_h_perm(h_inode, mask);
 +}
---- a/fs/aufs/inode.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/inode.h	2012-06-04 21:49:59.854840268 +0100
+--- a/fs/aufs/inode.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/inode.h	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,560 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -16230,7 +16143,7 @@
 +	       dev_t dev);
 +int aufs_symlink(struct inode *dir, struct dentry *dentry, const char *symname);
 +int aufs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
-+		struct nameidata *nd);
++		bool want_excl);
 +int aufs_link(struct dentry *src_dentry, struct inode *dir,
 +	      struct dentry *dentry);
 +int aufs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode);
@@ -16627,8 +16540,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_INODE_H__ */
---- a/fs/aufs/ioctl.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/ioctl.c	2012-01-10 02:15:56.557456016 +0000
+--- a/fs/aufs/ioctl.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/ioctl.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,196 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -16826,8 +16739,8 @@
 +}
 +#endif
 +#endif
---- a/fs/aufs/loop.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/loop.c	2012-07-22 01:31:00.162115458 +0100
+--- a/fs/aufs/loop.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/loop.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,133 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -16962,8 +16875,8 @@
 +{
 +	kfree(au_warn_loopback_array);
 +}
---- a/fs/aufs/loop.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/loop.h	2012-01-10 02:15:56.557456016 +0000
+--- a/fs/aufs/loop.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/loop.h	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,50 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -17015,8 +16928,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_LOOP_H__ */
---- a/fs/aufs/magic.mk	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/magic.mk	2012-01-10 02:15:56.557456016 +0000
+--- a/fs/aufs/magic.mk	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/magic.mk	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,54 @@
 +
 +# defined in ${srctree}/fs/fuse/inode.c
@@ -17072,8 +16985,8 @@
 +ifdef CONFIG_HFSPLUS_FS
 +ccflags-y += -DHFSPLUS_SUPER_MAGIC=0x482b
 +endif
---- a/fs/aufs/module.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/module.c	2012-03-11 05:01:22.570973560 +0000
+--- a/fs/aufs/module.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/module.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,196 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -17271,8 +17184,8 @@
 +
 +module_init(aufs_init);
 +module_exit(aufs_exit);
---- a/fs/aufs/module.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/module.h	2012-03-11 05:01:22.570973560 +0000
+--- a/fs/aufs/module.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/module.h	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,105 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -17379,8 +17292,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_MODULE_H__ */
---- a/fs/aufs/opts.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/opts.c	2012-07-22 01:31:00.166115467 +0100
+--- a/fs/aufs/opts.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/opts.c	2012-09-25 17:44:58.489910277 -0700
 @@ -0,0 +1,1677 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -19059,8 +18972,8 @@
 +{
 +	return au_mntflags(sb) & AuOptMask_UDBA;
 +}
---- a/fs/aufs/opts.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/opts.h	2012-01-10 02:15:56.561456041 +0000
+--- a/fs/aufs/opts.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/opts.h	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,209 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -19271,8 +19184,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_OPTS_H__ */
---- a/fs/aufs/plink.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/plink.c	2012-08-01 04:08:08.827230713 +0100
+--- a/fs/aufs/plink.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/plink.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,511 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -19485,7 +19398,7 @@
 +
 +	h_mtx = &h_parent->d_inode->i_mutex;
 +	mutex_lock_nested(h_mtx, AuLsc_I_CHILD2);
-+	h_dentry = au_lkup_one(tgtname, h_parent, br, /*nd*/NULL);
++	h_dentry = vfsub_lkup_one(tgtname, h_parent);
 +	mutex_unlock(h_mtx);
 +	return h_dentry;
 +}
@@ -19513,7 +19426,7 @@
 +	h_dir = h_parent->d_inode;
 +	tgtname.len = plink_name(a, sizeof(a), inode, bindex);
 +
-+	if (current_fsuid() != GLOBAL_ROOT_GID) {
++	if (!uid_eq(current_fsuid(), GLOBAL_ROOT_UID)) {
 +		struct au_do_plink_lkup_args args = {
 +			.errp		= &h_dentry,
 +			.tgtname	= &tgtname,
@@ -19543,7 +19456,7 @@
 +	h_dir = h_parent->d_inode;
 +	mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_CHILD2);
 +again:
-+	h_path.dentry = au_lkup_one(tgt, h_parent, br, /*nd*/NULL);
++	h_path.dentry = vfsub_lkup_one(tgt, h_parent);
 +	err = PTR_ERR(h_path.dentry);
 +	if (IS_ERR(h_path.dentry))
 +		goto out;
@@ -19598,7 +19511,7 @@
 +	tgtname.len = plink_name(a, sizeof(a), inode, bindex);
 +
 +	/* always superio. */
-+	if (current_fsuid() != GLOBAL_ROOT_GID) {
++	if (!uid_eq(current_fsuid(), GLOBAL_ROOT_UID)) {
 +		struct do_whplink_args args = {
 +			.errp		= &err,
 +			.tgt		= &tgtname,
@@ -19785,8 +19698,8 @@
 +		iput(inode);
 +	}
 +}
---- a/fs/aufs/poll.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/poll.c	2012-01-10 02:15:56.561456041 +0000
+--- a/fs/aufs/poll.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/poll.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,56 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -19844,8 +19757,8 @@
 +	AuTraceErr((int)mask);
 +	return mask;
 +}
---- a/fs/aufs/procfs.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/procfs.c	2012-01-10 02:15:56.561456041 +0000
+--- a/fs/aufs/procfs.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/procfs.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,170 @@
 +/*
 + * Copyright (C) 2010-2012 Junjiro R. Okajima
@@ -20017,8 +19930,8 @@
 +out:
 +	return err;
 +}
---- a/fs/aufs/rdu.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/rdu.c	2012-06-04 21:49:59.854840268 +0100
+--- a/fs/aufs/rdu.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/rdu.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,384 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -20404,8 +20317,8 @@
 +	return err;
 +}
 +#endif
---- a/fs/aufs/rwsem.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/rwsem.h	2012-01-10 02:15:56.561456041 +0000
+--- a/fs/aufs/rwsem.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/rwsem.h	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,188 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -20595,8 +20508,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_RWSEM_H__ */
---- a/fs/aufs/sbinfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/sbinfo.c	2012-01-10 02:15:56.561456041 +0000
+--- a/fs/aufs/sbinfo.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/sbinfo.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,343 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -20941,8 +20854,8 @@
 +	p = radix_tree_delete(&sbinfo->au_si_pid.tree, current->pid);
 +	spin_unlock(&sbinfo->au_si_pid.tree_lock);
 +}
---- a/fs/aufs/spl.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/spl.h	2012-01-10 02:15:56.561456041 +0000
+--- a/fs/aufs/spl.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/spl.h	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,62 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -21006,8 +20919,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_SPL_H__ */
---- a/fs/aufs/super.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/super.c	2012-06-04 21:49:59.854840268 +0100
+--- a/fs/aufs/super.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/super.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,962 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -21060,7 +20973,7 @@
 +{
 +	struct inode *inode = container_of(head, struct inode, i_rcu);
 +
-+	INIT_LIST_HEAD(&inode->i_dentry);
++	INIT_HLIST_HEAD(&inode->i_dentry);
 +	au_cache_free_icntnr(container_of(inode, struct au_icntnr, vfs_inode));
 +}
 +
@@ -21971,8 +21884,8 @@
 +	/* no need to __module_get() and module_put(). */
 +	.owner		= THIS_MODULE,
 +};
---- a/fs/aufs/super.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/super.h	2012-01-10 02:15:56.569456073 +0000
+--- a/fs/aufs/super.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/super.h	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,546 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -22520,8 +22433,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_SUPER_H__ */
---- a/fs/aufs/sysaufs.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/sysaufs.c	2012-01-10 02:15:56.569456073 +0000
+--- a/fs/aufs/sysaufs.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/sysaufs.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,105 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -22628,8 +22541,8 @@
 +out:
 +	return err;
 +}
---- a/fs/aufs/sysaufs.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/sysaufs.h	2012-01-10 02:15:56.569456073 +0000
+--- a/fs/aufs/sysaufs.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/sysaufs.h	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,104 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -22735,8 +22648,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __SYSAUFS_H__ */
---- a/fs/aufs/sysfs.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/sysfs.c	2012-07-22 01:31:00.166115467 +0100
+--- a/fs/aufs/sysfs.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/sysfs.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,257 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -22995,8 +22908,8 @@
 +				br->br_name, err);
 +	}
 +}
---- a/fs/aufs/sysrq.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/sysrq.c	2012-07-22 01:31:00.166115467 +0100
+--- a/fs/aufs/sysrq.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/sysrq.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,148 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -23076,7 +22989,7 @@
 +		spin_lock(&inode_sb_list_lock);
 +		list_for_each_entry(i, &sb->s_inodes, i_sb_list) {
 +			spin_lock(&i->i_lock);
-+			if (1 || list_empty(&i->i_dentry))
++			if (1 || hlist_empty(&i->i_dentry))
 +				au_dpri_inode(i);
 +			spin_unlock(&i->i_lock);
 +		}
@@ -23146,8 +23059,8 @@
 +	if (unlikely(err))
 +		pr_err("err %d (ignored)\n", err);
 +}
---- a/fs/aufs/vdir.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/vdir.c	2012-01-10 02:15:56.569456073 +0000
+--- a/fs/aufs/vdir.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/vdir.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,885 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -24034,9 +23947,9 @@
 +	/* smp_mb(); */
 +	return 0;
 +}
---- a/fs/aufs/vfsub.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/vfsub.c	2012-06-04 21:49:59.854840268 +0100
-@@ -0,0 +1,832 @@
+--- a/fs/aufs/vfsub.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/vfsub.c	2012-09-25 17:44:58.493910207 -0700
+@@ -0,0 +1,777 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -24091,9 +24004,7 @@
 +{
 +	struct file *file;
 +
-+	path_get(path);
-+	file = dentry_open(path->dentry, path->mnt,
-+			   flags /* | __FMODE_NONOTIFY */,
++	file = dentry_open(path, flags /* | __FMODE_NONOTIFY */,
 +			   current_cred());
 +	if (!IS_ERR_OR_NULL(file)
 +	    && (file->f_mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ)
@@ -24150,50 +24061,12 @@
 +	return path.dentry;
 +}
 +
-+struct dentry *vfsub_lookup_hash(struct nameidata *nd)
++void vfsub_call_lkup_one(void *args)
 +{
-+	struct path path = {
-+		.mnt = nd->path.mnt
-+	};
-+
-+	IMustLock(nd->path.dentry->d_inode);
-+
-+	path.dentry = lookup_hash(nd);
-+	if (IS_ERR(path.dentry))
-+		goto out;
-+	if (path.dentry->d_inode)
-+		vfsub_update_h_iattr(&path, /*did*/NULL); /*ignore*/
-+
-+out:
-+	AuTraceErrPtr(path.dentry);
-+	return path.dentry;
++	struct vfsub_lkup_one_args *a = args;
++	*a->errp = vfsub_lkup_one(a->name, a->parent);
 +}
 +
-+/*
-+ * this is "VFS:__lookup_one_len()" which was removed and merged into
-+ * VFS:lookup_one_len() by the commit.
-+ *	6a96ba5 2011-03-14 kill __lookup_one_len()
-+ * this function should always be equivalent to the corresponding part in
-+ * VFS:lookup_one_len().
-+ */
-+int vfsub_name_hash(const char *name, struct qstr *this, int len)
-+{
-+	unsigned int c;
-+
-+	this->name = name;
-+	this->len = len;
-+	this->hash = full_name_hash(name, len);
-+	if (!len)
-+		return -EACCES;
-+
-+	while (len--) {
-+		c = *(const unsigned char *)name++;
-+		if (c == '/' || c == '\0')
-+			return -EACCES;
-+	}
-+	return 0;
-+}
-+
 +/* ---------------------------------------------------------------------- */
 +
 +struct dentry *vfsub_lock_rename(struct dentry *d1, struct au_hinode *hdir1,
@@ -24224,7 +24097,7 @@
 +
 +/* ---------------------------------------------------------------------- */
 +
-+int vfsub_create(struct inode *dir, struct path *path, int mode)
++int vfsub_create(struct inode *dir, struct path *path, int mode, bool want_excl)
 +{
 +	int err;
 +	struct dentry *d;
@@ -24238,23 +24111,7 @@
 +	if (unlikely(err))
 +		goto out;
 +
-+	if (au_test_fs_null_nd(dir->i_sb))
-+		err = vfs_create(dir, path->dentry, mode, NULL);
-+	else {
-+		struct nameidata h_nd;
-+
-+		memset(&h_nd, 0, sizeof(h_nd));
-+		h_nd.flags = LOOKUP_CREATE;
-+		h_nd.intent.open.flags = O_CREAT
-+			| vfsub_fmode_to_uint(FMODE_READ);
-+		h_nd.intent.open.create_mode = mode;
-+		h_nd.path.dentry = path->dentry->d_parent;
-+		h_nd.path.mnt = path->mnt;
-+		path_get(&h_nd.path);
-+		err = vfs_create(dir, path->dentry, mode, &h_nd);
-+		path_put(&h_nd.path);
-+	}
-+
++	err = vfs_create(dir, path->dentry, mode, want_excl);
 +	if (!err) {
 +		struct path tmp = *path;
 +		int did;
@@ -24354,6 +24211,7 @@
 +	if (unlikely(err))
 +		return err;
 +
++	/* we don't call may_linkat() */
 +	d = path->dentry;
 +	path->dentry = d->d_parent;
 +	err = security_path_link(src_dentry, path, d);
@@ -24637,7 +24495,7 @@
 +
 +	h_inode = h_path->dentry->d_inode;
 +	if (!h_file) {
-+		err = mnt_want_write(h_path->mnt);
++		err = vfsub_mnt_want_write(h_path->mnt);
 +		if (err)
 +			goto out;
 +		err = inode_permission(h_inode, MAY_WRITE);
@@ -24665,7 +24523,7 @@
 +		put_write_access(h_inode);
 +out_mnt:
 +	if (!h_file)
-+		mnt_drop_write(h_path->mnt);
++		vfsub_mnt_drop_write(h_path->mnt);
 +out:
 +	return err;
 +}
@@ -24869,9 +24727,9 @@
 +
 +	return err;
 +}
---- a/fs/aufs/vfsub.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/vfsub.h	2012-07-22 01:31:00.166115467 +0100
-@@ -0,0 +1,252 @@
+--- a/fs/aufs/vfsub.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/vfsub.h	2012-09-25 17:44:58.493910207 -0700
+@@ -0,0 +1,283 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -24901,12 +24759,12 @@
 +
 +#include <linux/fs.h>
 +#include <linux/lglock.h>
++#include <linux/mount.h>
 +#include "debug.h"
 +
 +/* copied from linux/fs/internal.h */
 +/* todo: BAD approach!! */
 +extern struct lglock vfsmount_lock;
-+extern void file_sb_list_del(struct file *f);
 +extern spinlock_t inode_sb_list_lock;
 +
 +/* copied from linux/fs/file_table.c */
@@ -24993,20 +24851,51 @@
 +struct file *vfsub_dentry_open(struct path *path, int flags);
 +struct file *vfsub_filp_open(const char *path, int oflags, int mode);
 +int vfsub_kern_path(const char *name, unsigned int flags, struct path *path);
++
 +struct dentry *vfsub_lookup_one_len(const char *name, struct dentry *parent,
 +				    int len);
-+struct dentry *vfsub_lookup_hash(struct nameidata *nd);
-+int vfsub_name_hash(const char *name, struct qstr *this, int len);
 +
++struct vfsub_lkup_one_args {
++	struct dentry **errp;
++	struct qstr *name;
++	struct dentry *parent;
++};
++
++static inline struct dentry *vfsub_lkup_one(struct qstr *name,
++					    struct dentry *parent)
++{
++	return vfsub_lookup_one_len(name->name, parent, name->len);
++}
++
++void vfsub_call_lkup_one(void *args);
++
 +/* ---------------------------------------------------------------------- */
 +
++static inline int vfsub_mnt_want_write(struct vfsmount *mnt)
++{
++	int err;
++	lockdep_off();
++	err = mnt_want_write(mnt);
++	lockdep_on();
++	return err;
++}
++
++static inline void vfsub_mnt_drop_write(struct vfsmount *mnt)
++{
++	lockdep_off();
++	mnt_drop_write(mnt);
++	lockdep_on();
++}
++
++/* ---------------------------------------------------------------------- */
++
 +struct au_hinode;
 +struct dentry *vfsub_lock_rename(struct dentry *d1, struct au_hinode *hdir1,
 +				 struct dentry *d2, struct au_hinode *hdir2);
 +void vfsub_unlock_rename(struct dentry *d1, struct au_hinode *hdir1,
 +			 struct dentry *d2, struct au_hinode *hdir2);
 +
-+int vfsub_create(struct inode *dir, struct path *path, int mode);
++int vfsub_create(struct inode *dir, struct path *path, int mode, bool want_excl);
 +int vfsub_symlink(struct inode *dir, struct path *path,
 +		  const char *symname);
 +int vfsub_mknod(struct inode *dir, struct path *path, int mode, dev_t dev);
@@ -25124,8 +25013,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_VFSUB_H__ */
---- a/fs/aufs/wbr_policy.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/wbr_policy.c	2012-01-10 02:15:56.569456073 +0000
+--- a/fs/aufs/wbr_policy.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/wbr_policy.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,700 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -25827,9 +25716,9 @@
 +		.fin	= au_wbr_create_fin_mfs
 +	}
 +};
---- a/fs/aufs/whout.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/whout.c	2012-07-22 01:31:00.166115467 +0100
-@@ -0,0 +1,1041 @@
+--- a/fs/aufs/whout.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/whout.c	2012-09-25 17:44:58.493910207 -0700
+@@ -0,0 +1,1042 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
 + *
@@ -25903,7 +25792,7 @@
 +	struct dentry *wh_dentry;
 +
 +	if (!try_sio)
-+		wh_dentry = au_lkup_one(wh_name, h_parent, br, /*nd*/NULL);
++		wh_dentry = vfsub_lkup_one(wh_name, h_parent);
 +	else
 +		wh_dentry = au_sio_lkup_one(wh_name, h_parent, br);
 +	err = PTR_ERR(wh_dentry);
@@ -26069,7 +25958,7 @@
 +	};
 +
 +	err = 0;
-+	h_path.dentry = au_lkup_one(wh, h_parent, br, /*nd*/NULL);
++	h_path.dentry = vfsub_lkup_one(wh, h_parent);
 +	if (IS_ERR(h_path.dentry))
 +		err = PTR_ERR(h_path.dentry);
 +	else {
@@ -26095,13 +25984,13 @@
 +	if (!whpath->dentry->d_inode)
 +		return;
 +
-+	err = mnt_want_write(whpath->mnt);
++	err = vfsub_mnt_want_write(whpath->mnt);
 +	if (!err) {
 +		if (isdir)
 +			err = vfsub_rmdir(h_dir, whpath);
 +		else
 +			err = vfsub_unlink(h_dir, whpath, /*force*/0);
-+		mnt_drop_write(whpath->mnt);
++		vfsub_mnt_drop_write(whpath->mnt);
 +	}
 +	if (unlikely(err))
 +		pr_warn("failed removing %.*s (%d), ignored.\n",
@@ -26131,10 +26020,10 @@
 +
 +		if (au_test_nfs(path->dentry->d_sb))
 +			mode |= S_IXUGO;
-+		err = mnt_want_write(path->mnt);
++		err = vfsub_mnt_want_write(path->mnt);
 +		if (!err) {
 +			err = vfsub_mkdir(h_dir, path, mode);
-+			mnt_drop_write(path->mnt);
++			vfsub_mnt_drop_write(path->mnt);
 +		}
 +	} else if (S_ISDIR(path->dentry->d_inode->i_mode))
 +		err = 0;
@@ -26229,11 +26118,12 @@
 +	err = -EEXIST;
 +	h_dir = h_root->d_inode;
 +	if (!base[AuBrWh_BASE].dentry->d_inode) {
-+		err = mnt_want_write(h_path->mnt);
++		err = vfsub_mnt_want_write(h_path->mnt);
 +		if (!err) {
 +			h_path->dentry = base[AuBrWh_BASE].dentry;
-+			err = vfsub_create(h_dir, h_path, WH_MASK);
-+			mnt_drop_write(h_path->mnt);
++			err = vfsub_create(h_dir, h_path, WH_MASK,
++					   /*want_excl*/true);
++			vfsub_mnt_drop_write(h_path->mnt);
 +		}
 +	} else if (S_ISREG(base[AuBrWh_BASE].dentry->d_inode->i_mode))
 +		err = 0;
@@ -26395,12 +26285,12 @@
 +	err = au_h_verify(wbr->wbr_whbase, au_opt_udba(a->sb), hdir->hi_inode,
 +			  h_root, a->br);
 +	if (!err) {
-+		err = mnt_want_write(a->br->br_mnt);
++		err = vfsub_mnt_want_write(a->br->br_mnt);
 +		if (!err) {
 +			h_path.dentry = wbr->wbr_whbase;
 +			h_path.mnt = a->br->br_mnt;
 +			err = vfsub_unlink(hdir->hi_inode, &h_path, /*force*/0);
-+			mnt_drop_write(a->br->br_mnt);
++			vfsub_mnt_drop_write(a->br->br_mnt);
 +		}
 +	} else {
 +		pr_warn("%.*s is moved, ignored\n",
@@ -26494,7 +26384,7 @@
 +	}
 +
 +	/* return this error in this context */
-+	err = vfsub_create(h_dir, &h_path, WH_MASK);
++	err = vfsub_create(h_dir, &h_path, WH_MASK, /*want_excl*/true);
 +
 +out:
 +	wbr_wh_read_unlock(wbr);
@@ -26517,7 +26407,7 @@
 +	sb = dentry->d_sb;
 +	br = au_sbr(sb, bindex);
 +	h_dentry = au_h_dptr(dentry, bindex);
-+	opq_dentry = au_lkup_one(&diropq_name, h_dentry, br, /*nd*/NULL);
++	opq_dentry = vfsub_lkup_one(&diropq_name, h_dentry);
 +	if (IS_ERR(opq_dentry))
 +		goto out;
 +
@@ -26599,7 +26489,7 @@
 +	err = au_wh_name_alloc(&wh_name, base_name);
 +	wh_dentry = ERR_PTR(err);
 +	if (!err) {
-+		wh_dentry = au_lkup_one(&wh_name, h_parent, br, /*nd*/NULL);
++		wh_dentry = vfsub_lkup_one(&wh_name, h_parent);
 +		kfree(wh_name.name);
 +	}
 +	return wh_dentry;
@@ -26830,11 +26720,11 @@
 +	err = au_h_verify(a->wh_dentry, au_opt_udba(sb), h_dir, h_parent,
 +			  a->br);
 +	if (!err) {
-+		err = mnt_want_write(a->br->br_mnt);
++		err = vfsub_mnt_want_write(a->br->br_mnt);
 +		if (!err) {
 +			err = au_whtmp_rmdir(a->dir, bindex, a->wh_dentry,
 +					     &a->whlist);
-+			mnt_drop_write(a->br->br_mnt);
++			vfsub_mnt_drop_write(a->br->br_mnt);
 +		}
 +	}
 +	au_hn_imtx_unlock(hdir);
@@ -26871,8 +26761,8 @@
 +		au_whtmp_rmdir_free(args);
 +	}
 +}
---- a/fs/aufs/whout.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/whout.h	2012-01-10 02:15:56.573456100 +0000
+--- a/fs/aufs/whout.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/whout.h	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,88 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -26962,8 +26852,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_WHOUT_H__ */
---- a/fs/aufs/wkq.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/wkq.c	2012-08-01 04:08:08.831230728 +0100
+--- a/fs/aufs/wkq.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/wkq.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,214 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -27013,7 +26903,7 @@
 +{
 +	struct au_wkinfo *wkinfo = container_of(wk, struct au_wkinfo, wk);
 +
-+	AuDebugOn(current_fsuid() != GLOBAL_ROOT_GID);
++	AuDebugOn(!uid_eq(current_fsuid(), GLOBAL_ROOT_UID));
 +	AuDebugOn(rlimit(RLIMIT_FSIZE) != RLIM_INFINITY);
 +
 +	wkinfo->func(wkinfo->args);
@@ -27179,8 +27069,8 @@
 +
 +	return err;
 +}
---- a/fs/aufs/wkq.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/wkq.h	2012-01-10 02:15:56.573456100 +0000
+--- a/fs/aufs/wkq.h	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/wkq.h	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,92 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -27274,8 +27164,8 @@
 +
 +#endif /* __KERNEL__ */
 +#endif /* __AUFS_WKQ_H__ */
---- a/fs/aufs/xino.c	1970-01-01 01:00:00.000000000 +0100
-+++ b/fs/aufs/xino.c	2012-07-22 01:31:00.166115467 +0100
+--- a/fs/aufs/xino.c	1969-12-31 16:00:00.000000000 -0800
++++ b/fs/aufs/xino.c	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,1264 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -28541,8 +28431,8 @@
 +out:
 +	return err;
 +}
---- a/include/linux/aufs_type.h	1970-01-01 01:00:00.000000000 +0100
-+++ b/include/linux/aufs_type.h	2012-08-01 03:41:52.619414717 +0100
+--- a/include/linux/aufs_type.h	1969-12-31 16:00:00.000000000 -0800
++++ b/include/linux/aufs_type.h	2012-09-25 17:44:58.493910207 -0700
 @@ -0,0 +1,233 @@
 +/*
 + * Copyright (C) 2005-2012 Junjiro R. Okajima
@@ -28585,7 +28475,7 @@
 +
 +#include <linux/limits.h>
 +
-+#define AUFS_VERSION	"3.5-20120730"
++#define AUFS_VERSION	"3.x-rcN-20120827"
 +
 +/* todo? move this to linux-2.6.19/include/magic.h */
 +#define AUFS_SUPER_MAGIC	('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
Index: debian/patches/features/all/aufs3/aufs3-standalone.patch
===================================================================
--- debian/patches/features/all/aufs3/aufs3-standalone.patch	(révision 19400)
+++ debian/patches/features/all/aufs3/aufs3-standalone.patch	(copie de travail)
@@ -1,10 +1,10 @@
-aufs3.5 standalone patch
+aufs3.x-rcN standalone patch
 
 diff --git a/fs/file_table.c b/fs/file_table.c
-index a305d9e..6a768be 100644
+index 701985e..a9fe741 100644
 --- a/fs/file_table.c
 +++ b/fs/file_table.c
-@@ -35,6 +35,7 @@ struct files_stat_struct files_stat = {
+@@ -37,6 +37,7 @@ struct files_stat_struct files_stat = {
  };
  
  DEFINE_LGLOCK(files_lglock);
@@ -12,7 +12,7 @@
  
  /* SLAB cache for file structures */
  static struct kmem_cache *filp_cachep __read_mostly;
-@@ -441,6 +442,8 @@ void file_sb_list_del(struct file *file)
+@@ -509,6 +510,8 @@ void file_sb_list_del(struct file *file)
  	}
  }
  
@@ -22,7 +22,7 @@
  
  /*
 diff --git a/fs/inode.c b/fs/inode.c
-index 7f772fd..e789d2f 100644
+index 7b2c8fa..0c4318d 100644
 --- a/fs/inode.c
 +++ b/fs/inode.c
 @@ -56,6 +56,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
@@ -41,20 +41,8 @@
  
  /**
   *	touch_atime	-	update the access time
-diff --git a/fs/namei.c b/fs/namei.c
-index 18c9782..f09edf3 100644
---- a/fs/namei.c
-+++ b/fs/namei.c
-@@ -1868,6 +1868,7 @@ struct dentry *lookup_hash(struct nameidata *nd)
- {
- 	return __lookup_hash(&nd->last, nd->path.dentry, nd);
- }
-+EXPORT_SYMBOL_GPL(lookup_hash);
- 
- /**
-  * lookup_one_len - filesystem helper to lookup single pathname component
 diff --git a/fs/namespace.c b/fs/namespace.c
-index 1e4a5fe..06aa768 100644
+index 4d31f73..fe1eca1 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
 @@ -50,6 +50,7 @@ EXPORT_SYMBOL_GPL(fs_kobj);
@@ -65,7 +53,7 @@
  
  static inline unsigned long hash(struct vfsmount *mnt, struct dentry *dentry)
  {
-@@ -1341,6 +1342,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
+@@ -1401,6 +1402,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
  	}
  	return 0;
  }
@@ -135,7 +123,7 @@
  static int fsnotify_mark_destroy(void *ignored)
  {
 diff --git a/fs/open.c b/fs/open.c
-index 1540632..2463289 100644
+index e1f2cdb..2804cd6 100644
 --- a/fs/open.c
 +++ b/fs/open.c
 @@ -60,6 +60,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
@@ -147,10 +135,10 @@
  static long do_sys_truncate(const char __user *pathname, loff_t length)
  {
 diff --git a/fs/splice.c b/fs/splice.c
-index e3c40b5..3afc547 100644
+index 663b402..51e1deb 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
-@@ -1114,6 +1114,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+@@ -1117,6 +1117,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
  
  	return splice_write(pipe, out, ppos, len, flags);
  }
@@ -158,7 +146,7 @@
  
  /*
   * Attempt to initiate a splice from a file to a pipe.
-@@ -1140,6 +1141,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
+@@ -1143,6 +1144,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
  
  	return splice_read(in, ppos, pipe, len, flags);
  }
Index: debian/patches/features/all/aufs3/aufs3-base.patch
===================================================================
--- debian/patches/features/all/aufs3/aufs3-base.patch	(révision 19400)
+++ debian/patches/features/all/aufs3/aufs3-base.patch	(copie de travail)
@@ -1,7 +1,7 @@
-aufs3.5 base patch
+aufs3.x-rcN base patch
 
 diff --git a/fs/inode.c b/fs/inode.c
-index c99163b..7f772fd 100644
+index ac8d904..7b2c8fa 100644
 --- a/fs/inode.c
 +++ b/fs/inode.c
 @@ -1491,7 +1491,7 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
@@ -13,24 +13,11 @@
  {
  	if (inode->i_op->update_time)
  		return inode->i_op->update_time(inode, time, flags);
-diff --git a/fs/namei.c b/fs/namei.c
-index 7d69419..18c9782 100644
---- a/fs/namei.c
-+++ b/fs/namei.c
-@@ -1864,7 +1864,7 @@ int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
-  * needs parent already locked. Doesn't follow mounts.
-  * SMP-safe.
-  */
--static struct dentry *lookup_hash(struct nameidata *nd)
-+struct dentry *lookup_hash(struct nameidata *nd)
- {
- 	return __lookup_hash(&nd->last, nd->path.dentry, nd);
- }
 diff --git a/fs/splice.c b/fs/splice.c
-index 7bf08fa..e3c40b5 100644
+index 41514dd..663b402 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
-@@ -1090,8 +1090,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
+@@ -1093,8 +1093,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
  /*
   * Attempt to initiate a splice from pipe to file.
   */
@@ -41,7 +28,7 @@
  {
  	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
  				loff_t *, size_t, unsigned int);
-@@ -1118,9 +1118,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+@@ -1121,9 +1121,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
  /*
   * Attempt to initiate a splice from a file to a pipe.
   */
@@ -55,10 +42,10 @@
  	ssize_t (*splice_read)(struct file *, loff_t *,
  			       struct pipe_inode_info *, size_t, unsigned int);
 diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 17fd887..9c75a47 100644
+index aa11047..9116d2e 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -2591,6 +2591,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *);
+@@ -2741,6 +2741,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *);
  extern int inode_newsize_ok(const struct inode *, loff_t offset);
  extern void setattr_copy(struct inode *inode, const struct iattr *attr);
  
@@ -66,18 +53,6 @@
  extern int file_update_time(struct file *file);
  
  extern int generic_show_options(struct seq_file *m, struct dentry *root);
-diff --git a/include/linux/namei.h b/include/linux/namei.h
-index ffc0213..ef35a31 100644
---- a/include/linux/namei.h
-+++ b/include/linux/namei.h
-@@ -85,6 +85,7 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
- extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
- 		int (*open)(struct inode *, struct file *));
- 
-+extern struct dentry *lookup_hash(struct nameidata *nd);
- extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
- 
- extern int follow_down_one(struct path *);
 diff --git a/include/linux/splice.h b/include/linux/splice.h
 index 09a545a..1ac5727 100644
 --- a/include/linux/splice.h
Index: debian/patches/features/all/aufs3/aufs3-kbuild.patch
===================================================================
--- debian/patches/features/all/aufs3/aufs3-kbuild.patch	(révision 19400)
+++ debian/patches/features/all/aufs3/aufs3-kbuild.patch	(copie de travail)
@@ -1,4 +1,4 @@
-aufs3.5 kbuild patch
+aufs3.x-rcN kbuild patch
 
 diff --git a/fs/Kconfig b/fs/Kconfig
 index f95ae3a..6d8a9a5 100644
@@ -22,7 +22,7 @@
  obj-$(CONFIG_PSTORE)		+= pstore/
 +obj-$(CONFIG_AUFS_FS)           += aufs/
 diff --git a/include/linux/Kbuild b/include/linux/Kbuild
-index 8760be3..a1b8446 100644
+index fa21760..ee029e3 100644
 --- a/include/linux/Kbuild
 +++ b/include/linux/Kbuild
 @@ -66,6 +66,7 @@ header-y += atmppp.h
Index: debian/patches/features/arm/ahci-Add-JMicron-362-device-IDs.patch (deleted)
===================================================================
Index: debian/patches/debian/dfsg/vs6624-disable.patch
===================================================================
--- debian/patches/debian/dfsg/vs6624-disable.patch	(révision 19400)
+++ debian/patches/debian/dfsg/vs6624-disable.patch	(copie de travail)
@@ -3,9 +3,9 @@
 --- a/drivers/media/video/Kconfig
 +++ b/drivers/media/video/Kconfig
 @@ -483,6 +483,7 @@ config VIDEO_OV7670
- config VIDEO_VS6624
  	tristate "ST VS6624 sensor support"
  	depends on VIDEO_V4L2 && I2C
+ 	depends on MEDIA_CAMERA_SUPPORT
 +	depends on BROKEN
  	---help---
  	  This is a Video4Linux2 sensor-level driver for the ST VS6624
Index: debian/patches/debian/version.patch
===================================================================
--- debian/patches/debian/version.patch	(révision 19400)
+++ debian/patches/debian/version.patch	(copie de travail)
@@ -116,20 +116,19 @@
  #include <asm/apic.h>
  #include <asm/syscalls.h>
 @@ -146,11 +147,12 @@ void show_regs_common(void)
+ 	/* Board Name is optional */
  	board = dmi_get_system_info(DMI_BOARD_NAME);
  
- 	printk(KERN_CONT "\n");
--	printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s",
-+	printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s%s",
- 		current->pid, current->comm, print_tainted(),
- 		init_utsname()->release,
- 		(int)strcspn(init_utsname()->version, " "),
--		init_utsname()->version);
-+		init_utsname()->version,
-+		LINUX_PACKAGE_ID);
- 	printk(KERN_CONT " %s %s", vendor, product);
- 	if (board)
- 		printk(KERN_CONT "/%s", board);
+-	printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s %s %s%s%s\n",
++	printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s%s %s %s%s%s\n",
+ 	       current->pid, current->comm, print_tainted(),
+ 	       init_utsname()->release,
+ 	       (int)strcspn(init_utsname()->version, " "),
+ 	       init_utsname()->version,
++	       LINUX_PACKAGE_ID,
+ 	       vendor, product,
+ 	       board ? "/" : "",
+ 	       board ? board : "");
 --- a/arch/x86/kernel/dumpstack.c
 +++ b/arch/x86/kernel/dumpstack.c
 @@ -15,6 +15,7 @@
Index: debian/patches/bugfix/x86/mfd-lpc_ich-Fix-a-3.5-kernel-regression-for-iTCO_wdt.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/sfc-fix-maximum-number-of-tso-segments-and-minimum-tx-queue-size.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/atm-fix-info-leak-in-getsockopt-so_atmpvc.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/bluetooth-rfcomm-fix-info-leak-via-getsockname.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/af_packet-don-t-emit-packet-on-orig-fanout-group.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/af_packet-remove-bug-statement-in-tpacket_destruct_skb.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/hwmon-applesmc-Allow-negative-temperature-values.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/hwmon-applesmc-Skip-sensor-mapping.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/usb-Add-USB_QUIRK_RESET_RESUME-for-all-Logitech-UVC-.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/rds-set-correct-msg_namelen.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/af_netlink-force-credentials-passing.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/bluetooth-hci-fix-info-leak-via-getsockname.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/hwmon-applesmc-Ignore-some-temperature-registers.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/llc-fix-info-leak-via-getsockname.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/dccp-fix-info-leak-via-getsockopt-dccp_sockopt_ccid_tx_info.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/ipvs-fix-info-leak-in-getsockopt-ip_vs_so_get_timeout.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/atm-fix-info-leak-via-getsockname.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/net-e100-ucode-is-optional-in-some-cases.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/bluetooth-hci-fix-info-leak-in-getsockopt-hci_filter.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/net-allow-driver-to-limit-number-of-gso-segments-per-skb.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/bluetooth-rfcomm-fix-info-leak-in-getsockopt-bt_security.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/hwmon-applesmc-Decode-and-act-on-read-write-status-c.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/net_sched-gact-fix-potential-panic-in-tcf_gact.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/usb-Add-quirk-detection-based-on-interface-informati.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/net-fix-info-leak-in-compat-dev_ifconf.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/bluetooth-rfcomm-fix-info-leak-in-ioctl-rfcommgetdevlist.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/tcp-apply-device-tso-segment-limit-earlier.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/netlink-fix-possible-spoofing-from-non-root-processes.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/bluetooth-l2cap-fix-info-leak-via-getsockname.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/net-ipv4-ipmr_expire_timer-causes-crash-when-removing-net-namespace.patch (deleted)
===================================================================
Index: debian/patches/bugfix/all/hwmon-applesmc-Shorten-minimum-wait-time.patch (deleted)
===================================================================

--- End Message ---
--- Begin Message ---
Version: 3.6.4-1~experimental.1

...is now in experimental

-- 
Ben Hutchings
I'm always amazed by the number of people who take up solipsism because
they heard someone else explain it. - E*Borg on alt.fan.pratchett

Attachment: signature.asc
Description: This is a digitally signed message part


--- End Message ---

Reply to: