[packages/kernel] - up to 4.2.1; builds on x8664; not tested

arekm arekm at pld-linux.org
Thu Sep 24 14:25:41 CEST 2015


commit c2c0f25cba50bfcba203019d305e6b97eaebe9ed
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Thu Sep 24 14:25:32 2015 +0200

    - up to 4.2.1; builds on x8664; not tested

 kernel-apparmor.patch        | 150 ++++-------
 kernel-aufs4.patch           | 598 ++++++++++++++++++++++---------------------
 kernel-imq.patch             | 125 +++++----
 kernel-multiarch.config      | 297 +++++++++++++++------
 kernel-virtio-gl-accel.patch |   2 +-
 kernel.spec                  |  14 +-
 6 files changed, 665 insertions(+), 521 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index 2d5f04c..620a2e3 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -69,9 +69,9 @@
 %define		have_pcmcia	0
 %endif
 
-%define		rel		1
-%define		basever		4.1
-%define		postver		.8
+%define		rel		0.1
+%define		basever		4.2
+%define		postver		.1
 
 # define this to '-%{basever}' for longterm branch
 %define		versuffix	-%{basever}
@@ -117,10 +117,10 @@ Epoch:		3
 License:	GPL v2
 Group:		Base/Kernel
 Source0:	http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{basever}.tar.xz
-# Source0-md5:	fe9dc0f6729f36400ea81aa41d614c37
+# Source0-md5:	3d5ea06d767e2f35c999eeadafc76523
 %if "%{postver}" != ".0"
 Patch0:		http://www.kernel.org/pub/linux/kernel/v4.x/patch-%{version}.xz
-# Patch0-md5:	8d941859273f8b3f7e0d7d6d14e3be91
+# Patch0-md5:	3e1cc007d930f8760ef0730609dca035
 %endif
 Source1:	kernel.sysconfig
 
@@ -227,8 +227,8 @@ Patch2001:	kernel-pwc-uncompress.patch
 Patch2003:	kernel-regressions.patch
 Patch2004:	kernel-libata-ahci-pm.patch
 
-# bzr co lp:apparmor
-# ls apparmor/kernel-patches/3.12
+# git://git.kernel.org/pub/scm/linux/kernel/git/jj/linux-apparmor
+# branch v4.2-aa2.8-out-of-tree
 Patch5000:	kernel-apparmor.patch
 
 # for rescuecd
diff --git a/kernel-apparmor.patch b/kernel-apparmor.patch
index cab89b9..f83524d 100644
--- a/kernel-apparmor.patch
+++ b/kernel-apparmor.patch
@@ -1,30 +1,12 @@
-From d29d73fa5d7b5d016f9c17236fff2a741acea247 Mon Sep 17 00:00:00 2001
+From e37c855a09ba7a8fa69334e9e3c7f5b0f66de896 Mon Sep 17 00:00:00 2001
 From: John Johansen <john.johansen at canonical.com>
 Date: Mon, 4 Oct 2010 15:03:36 -0700
-Subject: [PATCH 1/3] UBUNTU: SAUCE: AppArmor: basic networking rules
+Subject: UBUNTU: SAUCE: AppArmor: basic networking rules
 
 Base support for network mediation.
 
 Signed-off-by: John Johansen <john.johansen at canonical.com>
 
-Conflicts:
-	security/apparmor/Makefile
-	security/apparmor/policy.c
----
- security/apparmor/.gitignore       |   1 +
- security/apparmor/Makefile         |  42 +++++++++-
- security/apparmor/apparmorfs.c     |   1 +
- security/apparmor/include/audit.h  |   4 +
- security/apparmor/include/net.h    |  44 ++++++++++
- security/apparmor/include/policy.h |   3 +
- security/apparmor/lsm.c            | 112 +++++++++++++++++++++++++
- security/apparmor/net.c            | 162 +++++++++++++++++++++++++++++++++++++
- security/apparmor/policy.c         |   1 +
- security/apparmor/policy_unpack.c  |  46 +++++++++++
- 10 files changed, 414 insertions(+), 2 deletions(-)
- create mode 100644 security/apparmor/include/net.h
- create mode 100644 security/apparmor/net.c
-
 diff --git a/security/apparmor/.gitignore b/security/apparmor/.gitignore
 index 9cdec70..d5b291e 100644
 --- a/security/apparmor/.gitignore
@@ -110,7 +92,7 @@ index d693df8..5dbb72f 100644
 +	$(call cmd,make-af)
 +	$(call cmd,make-sock)
 diff --git a/security/apparmor/apparmorfs.c b/security/apparmor/apparmorfs.c
-index 7db9954..18fc02c 100644
+index ad4fa49..6362c5a 100644
 --- a/security/apparmor/apparmorfs.c
 +++ b/security/apparmor/apparmorfs.c
 @@ -806,6 +806,7 @@ static struct aa_fs_entry aa_fs_entry_features[] = {
@@ -122,10 +104,10 @@ index 7db9954..18fc02c 100644
  	AA_FS_DIR("rlimit",			aa_fs_entry_rlimit),
  	AA_FS_DIR("caps",			aa_fs_entry_caps),
 diff --git a/security/apparmor/include/audit.h b/security/apparmor/include/audit.h
-index 30e8d76..61abec5 100644
+index ba3dfd1..5d3c419 100644
 --- a/security/apparmor/include/audit.h
 +++ b/security/apparmor/include/audit.h
-@@ -126,6 +126,10 @@ struct apparmor_audit_data {
+@@ -125,6 +125,10 @@ struct apparmor_audit_data {
  			u32 denied;
  			kuid_t ouid;
  		} fs;
@@ -215,7 +197,7 @@ index c28b0f2..b524d88 100644
  
  	unsigned char *hash;
 diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
-index fb99e18..de55a7f 100644
+index dec607c..47fd244 100644
 --- a/security/apparmor/lsm.c
 +++ b/security/apparmor/lsm.c
 @@ -32,6 +32,7 @@
@@ -226,7 +208,7 @@ index fb99e18..de55a7f 100644
  #include "include/path.h"
  #include "include/policy.h"
  #include "include/procattr.h"
-@@ -615,6 +616,104 @@ static int apparmor_task_setrlimit(struct task_struct *task,
+@@ -605,6 +606,104 @@ static int apparmor_task_setrlimit(struct task_struct *task,
  	return error;
  }
  
@@ -328,29 +310,29 @@ index fb99e18..de55a7f 100644
 +	return aa_revalidate_sk(OP_SOCK_SHUTDOWN, sk);
 +}
 +
- static struct security_operations apparmor_ops = {
- 	.name =				"apparmor",
- 
-@@ -647,6 +746,19 @@ static struct security_operations apparmor_ops = {
- 	.getprocattr =			apparmor_getprocattr,
- 	.setprocattr =			apparmor_setprocattr,
+ static struct security_hook_list apparmor_hooks[] = {
+ 	LSM_HOOK_INIT(ptrace_access_check, apparmor_ptrace_access_check),
+ 	LSM_HOOK_INIT(ptrace_traceme, apparmor_ptrace_traceme),
+@@ -634,6 +733,19 @@ static struct security_hook_list apparmor_hooks[] = {
+ 	LSM_HOOK_INIT(getprocattr, apparmor_getprocattr),
+ 	LSM_HOOK_INIT(setprocattr, apparmor_setprocattr),
  
-+	.socket_create =		apparmor_socket_create,
-+	.socket_bind =			apparmor_socket_bind,
-+	.socket_connect =		apparmor_socket_connect,
-+	.socket_listen =		apparmor_socket_listen,
-+	.socket_accept =		apparmor_socket_accept,
-+	.socket_sendmsg =		apparmor_socket_sendmsg,
-+	.socket_recvmsg =		apparmor_socket_recvmsg,
-+	.socket_getsockname =		apparmor_socket_getsockname,
-+	.socket_getpeername =		apparmor_socket_getpeername,
-+	.socket_getsockopt =		apparmor_socket_getsockopt,
-+	.socket_setsockopt =		apparmor_socket_setsockopt,
-+	.socket_shutdown =		apparmor_socket_shutdown,
-+
- 	.cred_alloc_blank =		apparmor_cred_alloc_blank,
- 	.cred_free =			apparmor_cred_free,
- 	.cred_prepare =			apparmor_cred_prepare,
++	LSM_HOOK_INIT(socket_create, apparmor_socket_create),
++	LSM_HOOK_INIT(socket_bind, apparmor_socket_bind),
++	LSM_HOOK_INIT(socket_connect, apparmor_socket_connect),
++	LSM_HOOK_INIT(socket_listen, apparmor_socket_listen),
++	LSM_HOOK_INIT(socket_accept, apparmor_socket_accept),
++	LSM_HOOK_INIT(socket_sendmsg, apparmor_socket_sendmsg),
++	LSM_HOOK_INIT(socket_recvmsg, apparmor_socket_recvmsg),
++	LSM_HOOK_INIT(socket_getsockname, apparmor_socket_getsockname),
++	LSM_HOOK_INIT(socket_getpeername, apparmor_socket_getpeername),
++	LSM_HOOK_INIT(socket_getsockopt, apparmor_socket_getsockopt),
++	LSM_HOOK_INIT(socket_setsockopt, apparmor_socket_setsockopt),
++	LSM_HOOK_INIT(socket_shutdown, apparmor_socket_shutdown),
++
+ 	LSM_HOOK_INIT(cred_alloc_blank, apparmor_cred_alloc_blank),
+ 	LSM_HOOK_INIT(cred_free, apparmor_cred_free),
+ 	LSM_HOOK_INIT(cred_prepare, apparmor_cred_prepare),
 diff --git a/security/apparmor/net.c b/security/apparmor/net.c
 new file mode 100644
 index 0000000..003dd18
@@ -603,13 +585,12 @@ index a689f10..1a35e6b 100644
  		/* generic policy dfa - optional and may be NULL */
  		profile->policy.dfa = unpack_dfa(e);
 -- 
-1.8.3.2
+cgit v0.10.2
 
-From b452a37e97af826ba6c7548230e07c95bd13d9c4 Mon Sep 17 00:00:00 2001
+From 6b77d90baf3807b70ca17309ad6c0bd39f3297e7 Mon Sep 17 00:00:00 2001
 From: John Johansen <john.johansen at canonical.com>
 Date: Fri, 29 Jun 2012 17:34:00 -0700
-Subject: [PATCH 2/3] apparmor: Fix quieting of audit messages for network
- mediation
+Subject: apparmor: Fix quieting of audit messages for network mediation
 
 If a profile specified a quieting of network denials for a given rule by
 either the quiet or deny rule qualifiers, the resultant quiet mask for
@@ -623,9 +604,6 @@ denied requests was applied incorrectly, resulting in two potential bugs.
    they had been specifically marked as quieted.
 
 Signed-off-by: John Johansen <john.johansen at canonical.com>
----
- security/apparmor/net.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/security/apparmor/net.c b/security/apparmor/net.c
 index 003dd18..6e6e5c9 100644
@@ -641,12 +619,12 @@ index 003dd18..6e6e5c9 100644
  		if (denied & kill_mask)
  			audit_type = AUDIT_APPARMOR_KILL;
 -- 
-1.8.3.2
+cgit v0.10.2
 
-From 0f113c1f052be315f5097d8b7294a620b0adda87 Mon Sep 17 00:00:00 2001
+From a71049ba973b214e88eae89f9cb0c4965d184ead Mon Sep 17 00:00:00 2001
 From: John Johansen <john.johansen at canonical.com>
 Date: Wed, 16 May 2012 10:58:05 -0700
-Subject: [PATCH 3/3] UBUNTU: SAUCE: apparmor: Add the ability to mediate mount
+Subject: UBUNTU: SAUCE: apparmor: Add the ability to mediate mount
 
 Add the ability for apparmor to do mediation of mount operations. Mount
 rules require an updated apparmor_parser (2.8 series) for policy compilation.
@@ -686,24 +664,6 @@ See the apparmor userspace for full documentation
 Signed-off-by: John Johansen <john.johansen at canonical.com>
 Acked-by: Kees Cook <kees at ubuntu.com>
 
-Conflicts:
-	security/apparmor/Makefile
-	security/apparmor/apparmorfs.c
----
- security/apparmor/Makefile           |   2 +-
- security/apparmor/apparmorfs.c       |  15 +-
- security/apparmor/audit.c            |   4 +
- security/apparmor/domain.c           |   2 +-
- security/apparmor/include/apparmor.h |   3 +-
- security/apparmor/include/audit.h    |  11 +
- security/apparmor/include/domain.h   |   2 +
- security/apparmor/include/mount.h    |  54 +++
- security/apparmor/lsm.c              |  59 ++++
- security/apparmor/mount.c            | 620 +++++++++++++++++++++++++++++++++++
- 10 files changed, 768 insertions(+), 4 deletions(-)
- create mode 100644 security/apparmor/include/mount.h
- create mode 100644 security/apparmor/mount.c
-
 diff --git a/security/apparmor/Makefile b/security/apparmor/Makefile
 index 5dbb72f..89b3445 100644
 --- a/security/apparmor/Makefile
@@ -718,7 +678,7 @@ index 5dbb72f..89b3445 100644
  
  clean-files := capability_names.h rlim_names.h net_names.h
 diff --git a/security/apparmor/apparmorfs.c b/security/apparmor/apparmorfs.c
-index 18fc02c..e709030 100644
+index 6362c5a..4917747 100644
 --- a/security/apparmor/apparmorfs.c
 +++ b/security/apparmor/apparmorfs.c
 @@ -799,7 +799,18 @@ static struct aa_fs_entry aa_fs_entry_domain[] = {
@@ -751,7 +711,7 @@ index 18fc02c..e709030 100644
  	AA_FS_DIR("rlimit",			aa_fs_entry_rlimit),
  	AA_FS_DIR("caps",			aa_fs_entry_caps),
 diff --git a/security/apparmor/audit.c b/security/apparmor/audit.c
-index 031d2d9..02d804c 100644
+index 89c7865..7fdb5d7 100644
 --- a/security/apparmor/audit.c
 +++ b/security/apparmor/audit.c
 @@ -44,6 +44,10 @@ const char *const op_table[] = {
@@ -766,10 +726,10 @@ index 031d2d9..02d804c 100644
  	"post_create",
  	"bind",
 diff --git a/security/apparmor/domain.c b/security/apparmor/domain.c
-index 26c607c..23936c5 100644
+index dc0027b..a2e3813 100644
 --- a/security/apparmor/domain.c
 +++ b/security/apparmor/domain.c
-@@ -238,7 +238,7 @@ static const char *next_name(int xtype, const char *name)
+@@ -236,7 +236,7 @@ static const char *next_name(int xtype, const char *name)
   *
   * Returns: refcounted profile, or NULL on failure (MAYBE NULL)
   */
@@ -779,7 +739,7 @@ index 26c607c..23936c5 100644
  	struct aa_profile *new_profile = NULL;
  	struct aa_namespace *ns = profile->ns;
 diff --git a/security/apparmor/include/apparmor.h b/security/apparmor/include/apparmor.h
-index 8fb1488..22b172c 100644
+index e4ea626..ce6ff6a 100644
 --- a/security/apparmor/include/apparmor.h
 +++ b/security/apparmor/include/apparmor.h
 @@ -30,8 +30,9 @@
@@ -794,7 +754,7 @@ index 8fb1488..22b172c 100644
  /* Control parameters settable through module/boot flags */
  extern enum audit_mode aa_g_audit;
 diff --git a/security/apparmor/include/audit.h b/security/apparmor/include/audit.h
-index 61abec5..a9835c3 100644
+index 5d3c419..b9f1d57 100644
 --- a/security/apparmor/include/audit.h
 +++ b/security/apparmor/include/audit.h
 @@ -72,6 +72,10 @@ enum aa_ops {
@@ -808,7 +768,7 @@ index 61abec5..a9835c3 100644
  	OP_CREATE,
  	OP_POST_CREATE,
  	OP_BIND,
-@@ -121,6 +125,13 @@ struct apparmor_audit_data {
+@@ -120,6 +124,13 @@ struct apparmor_audit_data {
  			unsigned long max;
  		} rlim;
  		struct {
@@ -896,7 +856,7 @@ index 0000000..bc17a53
 +
 +#endif /* __AA_MOUNT_H */
 diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
-index de55a7f..e0dd95f 100644
+index 47fd244..fb92441 100644
 --- a/security/apparmor/lsm.c
 +++ b/security/apparmor/lsm.c
 @@ -36,6 +36,7 @@
@@ -907,7 +867,7 @@ index de55a7f..e0dd95f 100644
  
  /* Flag indicating whether initialization completed */
  int apparmor_initialized __initdata;
-@@ -502,6 +503,60 @@ static int apparmor_file_mprotect(struct vm_area_struct *vma,
+@@ -492,6 +493,60 @@ static int apparmor_file_mprotect(struct vm_area_struct *vma,
  			   !(vma->vm_flags & VM_SHARED) ? MAP_PRIVATE : 0);
  }
  
@@ -968,17 +928,17 @@ index de55a7f..e0dd95f 100644
  static int apparmor_getprocattr(struct task_struct *task, char *name,
  				char **value)
  {
-@@ -722,6 +777,10 @@ static struct security_operations apparmor_ops = {
- 	.capget =			apparmor_capget,
- 	.capable =			apparmor_capable,
+@@ -710,6 +765,10 @@ static struct security_hook_list apparmor_hooks[] = {
+ 	LSM_HOOK_INIT(capget, apparmor_capget),
+ 	LSM_HOOK_INIT(capable, apparmor_capable),
  
-+	.sb_mount =			apparmor_sb_mount,
-+	.sb_umount =			apparmor_sb_umount,
-+	.sb_pivotroot =			apparmor_sb_pivotroot,
-+
- 	.path_link =			apparmor_path_link,
- 	.path_unlink =			apparmor_path_unlink,
- 	.path_symlink =			apparmor_path_symlink,
++	LSM_HOOK_INIT(sb_mount, apparmor_sb_mount),
++	LSM_HOOK_INIT(sb_umount, apparmor_sb_umount),
++	LSM_HOOK_INIT(sb_pivotroot, apparmor_sb_pivotroot),
++	
+ 	LSM_HOOK_INIT(path_link, apparmor_path_link),
+ 	LSM_HOOK_INIT(path_unlink, apparmor_path_unlink),
+ 	LSM_HOOK_INIT(path_symlink, apparmor_path_symlink),
 diff --git a/security/apparmor/mount.c b/security/apparmor/mount.c
 new file mode 100644
 index 0000000..478aa4d
@@ -1606,5 +1566,5 @@ index 0000000..478aa4d
 +	return error;
 +}
 -- 
-1.8.3.2
+cgit v0.10.2
 
diff --git a/kernel-aufs4.patch b/kernel-aufs4.patch
index 505b512..8ab7d27 100644
--- a/kernel-aufs4.patch
+++ b/kernel-aufs4.patch
@@ -13,16 +13,16 @@ index 011f433..b1083f6 100644
  endif # MISC_FILESYSTEMS
  
 diff --git a/fs/Makefile b/fs/Makefile
-index cb92fd4..8c2df12 100644
+index cb20e4b..dd81418 100644
 --- a/fs/Makefile
 +++ b/fs/Makefile
-@@ -127,3 +127,4 @@ obj-y				+= exofs/ # Multiple modules
+@@ -126,3 +126,4 @@ obj-y				+= exofs/ # Multiple modules
  obj-$(CONFIG_CEPH_FS)		+= ceph/
  obj-$(CONFIG_PSTORE)		+= pstore/
  obj-$(CONFIG_EFIVAR_FS)		+= efivarfs/
 +obj-$(CONFIG_AUFS_FS)           += aufs/
 diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild
-index 1a0006a..ddad01a 100644
+index 1ff9942..31efc0a 100644
 --- a/include/uapi/linux/Kbuild
 +++ b/include/uapi/linux/Kbuild
 @@ -59,6 +59,7 @@ header-y += atmsvc.h
@@ -36,10 +36,10 @@ index 1a0006a..ddad01a 100644
 aufs4.x-rcN base patch
 
 diff --git a/MAINTAINERS b/MAINTAINERS
-index d8afd29..feac5ea 100644
+index 8133cef..04beb19 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -1880,6 +1880,19 @@ F:	include/linux/audit.h
+@@ -1939,6 +1939,19 @@ F:	include/linux/audit.h
  F:	include/uapi/linux/audit.h
  F:	kernel/audit*
  
@@ -60,10 +60,10 @@ index d8afd29..feac5ea 100644
  M:	Miguel Ojeda Sandonis <miguel.ojeda.sandonis at gmail.com>
  W:	http://miguelojeda.es/auxdisplay.htm
 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index d7173cb..0160952 100644
+index f7a4c9d..23103ad 100644
 --- a/drivers/block/loop.c
 +++ b/drivers/block/loop.c
-@@ -540,6 +540,24 @@ static inline int is_loop_device(struct file *file)
+@@ -560,6 +560,24 @@ static inline int is_loop_device(struct file *file)
  	return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR;
  }
  
@@ -89,7 +89,7 @@ index d7173cb..0160952 100644
  
  static ssize_t loop_attr_show(struct device *dev, char *page,
 diff --git a/fs/dcache.c b/fs/dcache.c
-index 37b5afd..bc261e2 100644
+index 7a3f3e5..0b40298 100644
 --- a/fs/dcache.c
 +++ b/fs/dcache.c
 @@ -1164,7 +1164,7 @@ enum d_walk_ret {
@@ -135,10 +135,10 @@ index 819ef3f..fd0414e 100644
  {
  	mm_segment_t old_fs;
 diff --git a/fs/splice.c b/fs/splice.c
-index bfe62ae..fa5eee5 100644
+index 5fc1e50..5f8385a 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
-@@ -1101,8 +1101,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
+@@ -1102,8 +1102,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
  /*
   * Attempt to initiate a splice from pipe to file.
   */
@@ -149,7 +149,7 @@ index bfe62ae..fa5eee5 100644
  {
  	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,
+@@ -1119,9 +1119,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.
   */
@@ -175,10 +175,10 @@ index f87d308..9a290b3 100644
  static inline void fput_light(struct file *file, int fput_needed)
  {
 diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 35ec87e..3229f97 100644
+index a0653e5..86080ea 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -1649,6 +1649,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
+@@ -1661,6 +1661,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
  			      struct iovec *fast_pointer,
  			      struct iovec **ret_pointer);
  
@@ -209,10 +209,10 @@ index da2751d..2e0fca6 100644
 aufs4.x-rcN mmap patch
 
 diff --git a/fs/buffer.c b/fs/buffer.c
-index c7a5602..8c50a22 100644
+index 1cf7a53..076aff86 100644
 --- a/fs/buffer.c
 +++ b/fs/buffer.c
-@@ -2450,7 +2450,7 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,
+@@ -2473,7 +2473,7 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,
  	 * Update file times before taking page lock. We may end up failing the
  	 * fault so this update may be superfluous but who really cares...
  	 */
@@ -222,10 +222,10 @@ index c7a5602..8c50a22 100644
  	ret = __block_page_mkwrite(vma, vmf, get_block);
  	sb_end_pagefault(sb);
 diff --git a/fs/proc/base.c b/fs/proc/base.c
-index 093ca14..fc1ac03 100644
+index 87782e8..b287e64 100644
 --- a/fs/proc/base.c
 +++ b/fs/proc/base.c
-@@ -1744,7 +1744,7 @@ static int proc_map_files_get_link(struct dentry *dentry, struct path *path)
+@@ -1934,7 +1934,7 @@ static int proc_map_files_get_link(struct dentry *dentry, struct path *path)
  	down_read(&mm->mmap_sem);
  	vma = find_exact_vma(mm, vm_start, vm_end);
  	if (vma && vma->vm_file) {
@@ -235,7 +235,7 @@ index 093ca14..fc1ac03 100644
  		rc = 0;
  	}
 diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
-index d4a3574..1397181 100644
+index f8595e8..cb8eda0 100644
 --- a/fs/proc/nommu.c
 +++ b/fs/proc/nommu.c
 @@ -45,7 +45,10 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region)
@@ -251,7 +251,7 @@ index d4a3574..1397181 100644
  		ino = inode->i_ino;
  	}
 diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
-index 6dee68d..9afa35d 100644
+index ca1e091..8940e47 100644
 --- a/fs/proc/task_mmu.c
 +++ b/fs/proc/task_mmu.c
 @@ -279,7 +279,10 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
@@ -276,7 +276,7 @@ index 6dee68d..9afa35d 100644
  	struct mm_walk walk = {
  		.hugetlb_entry = gather_hugetlb_stats,
 diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
-index 599ec2e..1740207 100644
+index e0d64c9..7aa92db 100644
 --- a/fs/proc/task_nommu.c
 +++ b/fs/proc/task_nommu.c
 @@ -160,7 +160,10 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
@@ -292,10 +292,10 @@ index 599ec2e..1740207 100644
  		ino = inode->i_ino;
  		pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
 diff --git a/include/linux/mm.h b/include/linux/mm.h
-index 0755b9f..2ee5500 100644
+index 2e872f9..2494ed2 100644
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
-@@ -1172,6 +1172,28 @@ static inline int fixup_user_fault(struct task_struct *tsk,
+@@ -1173,6 +1173,28 @@ static inline int fixup_user_fault(struct task_struct *tsk,
  }
  #endif
  
@@ -325,10 +325,10 @@ index 0755b9f..2ee5500 100644
  extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
  		void *buf, int len, int write);
 diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index 8d37e26..ce89d4c 100644
+index 0038ac7..409940d 100644
 --- a/include/linux/mm_types.h
 +++ b/include/linux/mm_types.h
-@@ -241,6 +241,7 @@ struct vm_region {
+@@ -259,6 +259,7 @@ struct vm_region {
  	unsigned long	vm_top;		/* region allocated to here */
  	unsigned long	vm_pgoff;	/* the offset in vm_file corresponding to vm_start */
  	struct file	*vm_file;	/* the backing file or NULL */
@@ -336,7 +336,7 @@ index 8d37e26..ce89d4c 100644
  
  	int		vm_usage;	/* region usage count (access under nommu_region_sem) */
  	bool		vm_icache_flushed : 1; /* true if the icache has been flushed for
-@@ -305,6 +306,7 @@ struct vm_area_struct {
+@@ -323,6 +324,7 @@ struct vm_area_struct {
  	unsigned long vm_pgoff;		/* Offset (within vm_file) in PAGE_SIZE
  					   units, *not* PAGE_CACHE_SIZE */
  	struct file * vm_file;		/* File we map to (can be NULL). */
@@ -345,7 +345,7 @@ index 8d37e26..ce89d4c 100644
  
  #ifndef CONFIG_MMU
 diff --git a/kernel/fork.c b/kernel/fork.c
-index 03c1eaa..7e215ba 100644
+index 1bfefc6..a86bd7f 100644
 --- a/kernel/fork.c
 +++ b/kernel/fork.c
 @@ -456,7 +456,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
@@ -371,10 +371,10 @@ index 98c4eae..3f0c9b9 100644
  obj-y += init-mm.o
  
 diff --git a/mm/filemap.c b/mm/filemap.c
-index 6bf5e42..a863d0f 100644
+index 1283fc8..128f18f 100644
 --- a/mm/filemap.c
 +++ b/mm/filemap.c
-@@ -2062,7 +2062,7 @@ int filemap_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
+@@ -2089,7 +2089,7 @@ int filemap_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
  	int ret = VM_FAULT_LOCKED;
  
  	sb_start_pagefault(inode->i_sb);
@@ -383,27 +383,8 @@ index 6bf5e42..a863d0f 100644
  	lock_page(page);
  	if (page->mapping != inode->i_mapping) {
  		unlock_page(page);
-diff --git a/mm/madvise.c b/mm/madvise.c
-index d551475..1ebf71b 100644
---- a/mm/madvise.c
-+++ b/mm/madvise.c
-@@ -320,12 +320,12 @@ static long madvise_remove(struct vm_area_struct *vma,
- 	 * vma's reference to the file) can go away as soon as we drop
- 	 * mmap_sem.
- 	 */
--	get_file(f);
-+	vma_get_file(vma);
- 	up_read(&current->mm->mmap_sem);
- 	error = vfs_fallocate(f,
- 				FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
- 				offset, end - start);
--	fput(f);
-+	vma_fput(vma);
- 	down_read(&current->mm->mmap_sem);
- 	return error;
- }
 diff --git a/mm/memory.c b/mm/memory.c
-index 22e037e..62096a2 100644
+index a84fbb7..13973d2 100644
 --- a/mm/memory.c
 +++ b/mm/memory.c
 @@ -2034,7 +2034,7 @@ static inline int wp_page_reuse(struct mm_struct *mm,
@@ -416,7 +397,7 @@ index 22e037e..62096a2 100644
  
  	return VM_FAULT_WRITE;
 diff --git a/mm/mmap.c b/mm/mmap.c
-index bb50cac..1ab5e596 100644
+index aa632ad..3ff75d3 100644
 --- a/mm/mmap.c
 +++ b/mm/mmap.c
 @@ -274,7 +274,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
@@ -495,28 +476,11 @@ index bb50cac..1ab5e596 100644
  			if (new_vma->vm_ops && new_vma->vm_ops->open)
  				new_vma->vm_ops->open(new_vma);
  			vma_link(mm, new_vma, prev, rb_link, rb_parent);
-diff --git a/mm/msync.c b/mm/msync.c
-index bb04d53..5c24c54 100644
---- a/mm/msync.c
-+++ b/mm/msync.c
-@@ -84,10 +84,10 @@ SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags)
- 		start = vma->vm_end;
- 		if ((flags & MS_SYNC) && file &&
- 				(vma->vm_flags & VM_SHARED)) {
--			get_file(file);
-+			vma_get_file(vma);
- 			up_read(&mm->mmap_sem);
- 			error = vfs_fsync_range(file, fstart, fend, 1);
--			fput(file);
-+			vma_fput(vma);
- 			if (error || start >= end)
- 				goto out;
- 			down_read(&mm->mmap_sem);
 diff --git a/mm/nommu.c b/mm/nommu.c
-index e544508..dd6f74a 100644
+index 58ea364..f937b7e 100644
 --- a/mm/nommu.c
 +++ b/mm/nommu.c
-@@ -693,7 +693,7 @@ static void __put_nommu_region(struct vm_region *region)
+@@ -671,7 +671,7 @@ static void __put_nommu_region(struct vm_region *region)
  		up_write(&nommu_region_sem);
  
  		if (region->vm_file)
@@ -525,7 +489,7 @@ index e544508..dd6f74a 100644
  
  		/* IO memory and memory shared directly out of the pagecache
  		 * from ramfs/tmpfs mustn't be released here */
-@@ -858,7 +858,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -829,7 +829,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
  	if (vma->vm_ops && vma->vm_ops->close)
  		vma->vm_ops->close(vma);
  	if (vma->vm_file)
@@ -534,7 +498,7 @@ index e544508..dd6f74a 100644
  	put_nommu_region(vma->vm_region);
  	kmem_cache_free(vm_area_cachep, vma);
  }
-@@ -1398,7 +1398,7 @@ unsigned long do_mmap_pgoff(struct file *file,
+@@ -1354,7 +1354,7 @@ unsigned long do_mmap_pgoff(struct file *file,
  					goto error_just_free;
  				}
  			}
@@ -543,7 +507,7 @@ index e544508..dd6f74a 100644
  			kmem_cache_free(vm_region_jar, region);
  			region = pregion;
  			result = start;
-@@ -1474,10 +1474,10 @@ error_just_free:
+@@ -1429,10 +1429,10 @@ error_just_free:
  	up_write(&nommu_region_sem);
  error:
  	if (region->vm_file)
@@ -554,11 +518,11 @@ index e544508..dd6f74a 100644
 -		fput(vma->vm_file);
 +		vma_fput(vma);
  	kmem_cache_free(vm_area_cachep, vma);
- 	kleave(" = %d", ret);
  	return ret;
+ 
 diff --git a/mm/prfile.c b/mm/prfile.c
 new file mode 100644
-index 0000000..6aa5ab5
+index 0000000..b323b8a
 --- /dev/null
 +++ b/mm/prfile.c
 @@ -0,0 +1,86 @@
@@ -583,7 +547,7 @@ index 0000000..6aa5ab5
 +{
 +#ifdef PRFILE_TRACE
 +	if (pr)
-+		pr_info("%s:%d: %s, %p\n", func, line, func2,
++		pr_info("%s:%d: %s, %s\n", func, line, func2,
 +			f ? (char *)f->f_path.dentry->d_name.name : "(null)");
 +#endif
 +}
@@ -651,7 +615,7 @@ index 0000000..6aa5ab5
 aufs4.x-rcN standalone patch
 
 diff --git a/fs/dcache.c b/fs/dcache.c
-index bc261e2..8d7951d 100644
+index 0b40298..4844e61 100644
 --- a/fs/dcache.c
 +++ b/fs/dcache.c
 @@ -1269,6 +1269,7 @@ rename_retry:
@@ -663,10 +627,10 @@ index bc261e2..8d7951d 100644
  /*
   * Search for at least 1 mount point in the dentry's subdirs.
 diff --git a/fs/file_table.c b/fs/file_table.c
-index 294174d..3cea027 100644
+index 7f9d407..8c9ec1d 100644
 --- a/fs/file_table.c
 +++ b/fs/file_table.c
-@@ -147,6 +147,7 @@ over:
+@@ -146,6 +146,7 @@ over:
  	}
  	return ERR_PTR(-ENFILE);
  }
@@ -674,7 +638,7 @@ index 294174d..3cea027 100644
  
  /**
   * alloc_file - allocate and initialize a 'struct file'
-@@ -308,6 +309,7 @@ void put_filp(struct file *file)
+@@ -307,6 +308,7 @@ void put_filp(struct file *file)
  		file_free(file);
  	}
  }
@@ -683,7 +647,7 @@ index 294174d..3cea027 100644
  void __init files_init(unsigned long mempages)
  { 
 diff --git a/fs/inode.c b/fs/inode.c
-index ea37cd1..58f5f58 100644
+index d30640f..1ecc715 100644
 --- a/fs/inode.c
 +++ b/fs/inode.c
 @@ -58,6 +58,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
@@ -695,7 +659,7 @@ index ea37cd1..58f5f58 100644
  /*
   * Empty aops. Can be used for the cases where the user does not
 diff --git a/fs/namespace.c b/fs/namespace.c
-index 1b9e111..d45b81b 100644
+index c7cb8a5..08723de 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
 @@ -463,6 +463,7 @@ void __mnt_drop_write(struct vfsmount *mnt)
@@ -706,7 +670,7 @@ index 1b9e111..d45b81b 100644
  
  /**
   * mnt_drop_write - give up write access to a mount
-@@ -1768,6 +1769,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
+@@ -1779,6 +1780,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
  	}
  	return 0;
  }
@@ -787,10 +751,10 @@ index 92e48c7..d2c4b68 100644
  static int fsnotify_mark_destroy(void *ignored)
  {
 diff --git a/fs/open.c b/fs/open.c
-index 98e5a52..a94e2e7 100644
+index e33dab2..b84b828 100644
 --- a/fs/open.c
 +++ b/fs/open.c
-@@ -62,6 +62,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
+@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
  	mutex_unlock(&dentry->d_inode->i_mutex);
  	return ret;
  }
@@ -798,14 +762,14 @@ index 98e5a52..a94e2e7 100644
  
  long vfs_truncate(struct path *path, loff_t length)
  {
-@@ -676,6 +677,7 @@ int open_check_o_direct(struct file *f)
+@@ -678,6 +679,7 @@ int open_check_o_direct(struct file *f)
  	}
  	return 0;
  }
 +EXPORT_SYMBOL(open_check_o_direct);
  
  static int do_dentry_open(struct file *f,
- 			  int (*open)(struct inode *, struct file *),
+ 			  struct inode *inode,
 diff --git a/fs/read_write.c b/fs/read_write.c
 index fd0414e..8ace6ec 100644
 --- a/fs/read_write.c
@@ -827,10 +791,10 @@ index fd0414e..8ace6ec 100644
  ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
  {
 diff --git a/fs/splice.c b/fs/splice.c
-index fa5eee5..bfb3324 100644
+index 5f8385a..f76067e 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,
+@@ -1115,6 +1115,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
  
  	return splice_write(pipe, out, ppos, len, flags);
  }
@@ -838,7 +802,7 @@ index fa5eee5..bfb3324 100644
  
  /*
   * 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,
+@@ -1141,6 +1142,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
  
  	return splice_read(in, ppos, pipe, len, flags);
  }
@@ -847,7 +811,7 @@ index fa5eee5..bfb3324 100644
  /**
   * splice_direct_to_actor - splices data directly between two non-pipes
 diff --git a/fs/xattr.c b/fs/xattr.c
-index 4ef6985..6bb6303 100644
+index 072fee1..a7677af 100644
 --- a/fs/xattr.c
 +++ b/fs/xattr.c
 @@ -207,6 +207,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
@@ -859,10 +823,10 @@ index 4ef6985..6bb6303 100644
  /* Compare an extended attribute value with the given value */
  int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name,
 diff --git a/security/commoncap.c b/security/commoncap.c
-index f2875cd..ebf06ec 100644
+index d103f5a4..393654e 100644
 --- a/security/commoncap.c
 +++ b/security/commoncap.c
-@@ -975,9 +975,11 @@ int cap_mmap_addr(unsigned long addr)
+@@ -970,12 +970,14 @@ int cap_mmap_addr(unsigned long addr)
  	}
  	return ret;
  }
@@ -874,6 +838,9 @@ index f2875cd..ebf06ec 100644
  	return 0;
  }
 +EXPORT_SYMBOL(cap_mmap_file);
+ 
+ #ifdef CONFIG_SECURITY
+ 
 diff --git a/security/device_cgroup.c b/security/device_cgroup.c
 index 188c1d2..426d9af 100644
 --- a/security/device_cgroup.c
@@ -895,74 +862,74 @@ index 188c1d2..426d9af 100644
  int devcgroup_inode_mknod(int mode, dev_t dev)
  {
 diff --git a/security/security.c b/security/security.c
-index 8e9b1f4..c1c7cd1 100644
+index 595fffa..346bad6 100644
 --- a/security/security.c
 +++ b/security/security.c
-@@ -430,6 +430,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
+@@ -438,6 +438,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
  		return 0;
- 	return security_ops->path_rmdir(dir, dentry);
+ 	return call_int_hook(path_rmdir, 0, dir, dentry);
  }
 +EXPORT_SYMBOL(security_path_rmdir);
  
  int security_path_unlink(struct path *dir, struct dentry *dentry)
  {
-@@ -446,6 +447,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
+@@ -454,6 +455,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
  		return 0;
- 	return security_ops->path_symlink(dir, dentry, old_name);
+ 	return call_int_hook(path_symlink, 0, dir, dentry, old_name);
  }
 +EXPORT_SYMBOL(security_path_symlink);
  
  int security_path_link(struct dentry *old_dentry, struct path *new_dir,
  		       struct dentry *new_dentry)
-@@ -454,6 +456,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
+@@ -462,6 +464,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
  		return 0;
- 	return security_ops->path_link(old_dentry, new_dir, new_dentry);
+ 	return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
  }
 +EXPORT_SYMBOL(security_path_link);
  
  int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
  			 struct path *new_dir, struct dentry *new_dentry,
-@@ -481,6 +484,7 @@ int security_path_truncate(struct path *path)
+@@ -489,6 +492,7 @@ int security_path_truncate(struct path *path)
  		return 0;
- 	return security_ops->path_truncate(path);
+ 	return call_int_hook(path_truncate, 0, path);
  }
 +EXPORT_SYMBOL(security_path_truncate);
  
  int security_path_chmod(struct path *path, umode_t mode)
  {
-@@ -488,6 +492,7 @@ int security_path_chmod(struct path *path, umode_t mode)
+@@ -496,6 +500,7 @@ int security_path_chmod(struct path *path, umode_t mode)
  		return 0;
- 	return security_ops->path_chmod(path, mode);
+ 	return call_int_hook(path_chmod, 0, path, mode);
  }
 +EXPORT_SYMBOL(security_path_chmod);
  
  int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
  {
-@@ -495,6 +500,7 @@ int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
+@@ -503,6 +508,7 @@ int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
  		return 0;
- 	return security_ops->path_chown(path, uid, gid);
+ 	return call_int_hook(path_chown, 0, path, uid, gid);
  }
 +EXPORT_SYMBOL(security_path_chown);
  
  int security_path_chroot(struct path *path)
  {
-@@ -580,6 +586,7 @@ int security_inode_readlink(struct dentry *dentry)
+@@ -588,6 +594,7 @@ int security_inode_readlink(struct dentry *dentry)
  		return 0;
- 	return security_ops->inode_readlink(dentry);
+ 	return call_int_hook(inode_readlink, 0, dentry);
  }
 +EXPORT_SYMBOL(security_inode_readlink);
  
- int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd)
- {
-@@ -594,6 +601,7 @@ int security_inode_permission(struct inode *inode, int mask)
+ int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
+ 			       bool rcu)
+@@ -603,6 +610,7 @@ int security_inode_permission(struct inode *inode, int mask)
  		return 0;
- 	return security_ops->inode_permission(inode, mask);
+ 	return call_int_hook(inode_permission, 0, inode, mask);
  }
 +EXPORT_SYMBOL(security_inode_permission);
  
  int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
  {
-@@ -716,6 +724,7 @@ int security_file_permission(struct file *file, int mask)
+@@ -741,6 +749,7 @@ int security_file_permission(struct file *file, int mask)
  
  	return fsnotify_perm(file, mask);
  }
@@ -970,7 +937,7 @@ index 8e9b1f4..c1c7cd1 100644
  
  int security_file_alloc(struct file *file)
  {
-@@ -775,6 +784,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
+@@ -800,6 +809,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
  		return ret;
  	return ima_file_mmap(file, prot);
  }
@@ -980,7 +947,7 @@ index 8e9b1f4..c1c7cd1 100644
  {
 diff -urN /usr/share/empty/Documentation/ABI/testing/debugfs-aufs linux/Documentation/ABI/testing/debugfs-aufs
 --- /usr/share/empty/Documentation/ABI/testing/debugfs-aufs	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/ABI/testing/debugfs-aufs	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/ABI/testing/debugfs-aufs	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,50 @@
 +What:		/debug/aufs/si_<id>/
 +Date:		March 2009
@@ -1034,7 +1001,7 @@ diff -urN /usr/share/empty/Documentation/ABI/testing/debugfs-aufs linux/Document
 +		will be empty. About XINO files, see the aufs manual.
 diff -urN /usr/share/empty/Documentation/ABI/testing/sysfs-aufs linux/Documentation/ABI/testing/sysfs-aufs
 --- /usr/share/empty/Documentation/ABI/testing/sysfs-aufs	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/ABI/testing/sysfs-aufs	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/ABI/testing/sysfs-aufs	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,31 @@
 +What:		/sys/fs/aufs/si_<id>/
 +Date:		March 2009
@@ -1069,7 +1036,7 @@ diff -urN /usr/share/empty/Documentation/ABI/testing/sysfs-aufs linux/Documentat
 +		will be empty. About XINO files, see the aufs manual.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt linux/Documentation/filesystems/aufs/design/01intro.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/01intro.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/01intro.txt	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,170 @@
 +
 +# Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -1243,7 +1210,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt lin
 +about it. But currently I have implemented it in kernel space.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt linux/Documentation/filesystems/aufs/design/02struct.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/02struct.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/02struct.txt	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,258 @@
 +
 +# Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -1505,7 +1472,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt li
 +For this purpose, use "aumvdown" command in aufs-util.git.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03atomic_open.txt linux/Documentation/filesystems/aufs/design/03atomic_open.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/03atomic_open.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/03atomic_open.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/03atomic_open.txt	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,85 @@
 +
 +# Copyright (C) 2015 Junjiro R. Okajima
@@ -1594,7 +1561,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03atomic_open.t
 +       be implemented in aufs, but not all I am afraid.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt linux/Documentation/filesystems/aufs/design/03lookup.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/03lookup.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/03lookup.txt	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,113 @@
 +
 +# Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -1711,7 +1678,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt li
 +   by over-mounting something (or another method).
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt linux/Documentation/filesystems/aufs/design/04branch.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/04branch.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/04branch.txt	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,74 @@
 +
 +# Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -1789,7 +1756,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt li
 +    same named entry on the upper branch.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.txt linux/Documentation/filesystems/aufs/design/05wbr_policy.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/05wbr_policy.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/05wbr_policy.txt	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,64 @@
 +
 +# Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -1857,7 +1824,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.tx
 +  copyup policy.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06fhsm.txt linux/Documentation/filesystems/aufs/design/06fhsm.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/06fhsm.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/06fhsm.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/06fhsm.txt	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,120 @@
 +
 +# Copyright (C) 2011-2015 Junjiro R. Okajima
@@ -1981,7 +1948,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06fhsm.txt linu
 +should restore the original file state after an error happens.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt linux/Documentation/filesystems/aufs/design/06mmap.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/06mmap.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/06mmap.txt	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,72 @@
 +
 +# Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -2057,7 +2024,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt linu
 +I have to give up this "looks-smater" approach.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06xattr.txt linux/Documentation/filesystems/aufs/design/06xattr.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/06xattr.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/06xattr.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/06xattr.txt	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,96 @@
 +
 +# Copyright (C) 2014-2015 Junjiro R. Okajima
@@ -2157,7 +2124,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06xattr.txt lin
 +now, aufs implements the branch attributes to ignore the error.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt linux/Documentation/filesystems/aufs/design/07export.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/07export.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/07export.txt	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,58 @@
 +
 +# Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -2219,7 +2186,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt li
 +  lookup_one_len(), vfs_getattr(), encode_fh() and others.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt linux/Documentation/filesystems/aufs/design/08shwh.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/08shwh.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/08shwh.txt	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,52 @@
 +
 +# Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -2275,7 +2242,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt linu
 +initramfs will use it to replace the old one at the next boot.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt linux/Documentation/filesystems/aufs/design/10dynop.txt
 --- /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/design/10dynop.txt	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/design/10dynop.txt	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,47 @@
 +
 +# Copyright (C) 2010-2015 Junjiro R. Okajima
@@ -2326,7 +2293,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt lin
 +regular files only.
 diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documentation/filesystems/aufs/README
 --- /usr/share/empty/Documentation/filesystems/aufs/README	1970-01-01 01:00:00.000000000 +0100
-+++ linux/Documentation/filesystems/aufs/README	2015-06-28 17:35:44.344717109 +0200
++++ linux/Documentation/filesystems/aufs/README	2015-09-24 10:47:58.244719488 +0200
 @@ -0,0 +1,383 @@
 +
 +Aufs4 -- advanced multi layered unification filesystem version 4.x
@@ -2691,7 +2658,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +The Parted Magic Project made a donation (2013/9 and 11).
 +Pavel Barta made a donation (2013/10).
 +Nikolay Pertsev made a donation (2014/5).
-+James B made a donation (2014/7).
++James B made a donation (2014/7 and 2015/7).
 +Stefano Di Biase made a donation (2014/8).
 +Daniel Epellei made a donation (2015/1).
 +
@@ -2713,7 +2680,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +# End: ;
 diff -urN /usr/share/empty/fs/aufs/aufs.h linux/fs/aufs/aufs.h
 --- /usr/share/empty/fs/aufs/aufs.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/aufs.h	2015-06-28 17:35:44.344717109 +0200
++++ linux/fs/aufs/aufs.h	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,59 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -2776,7 +2743,7 @@ diff -urN /usr/share/empty/fs/aufs/aufs.h linux/fs/aufs/aufs.h
 +#endif /* __AUFS_H__ */
 diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 --- /usr/share/empty/fs/aufs/branch.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/branch.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/branch.c	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,1414 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -4194,7 +4161,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 +}
 diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h
 --- /usr/share/empty/fs/aufs/branch.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/branch.h	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/branch.h	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,279 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -4477,7 +4444,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h
 +#endif /* __AUFS_BRANCH_H__ */
 diff -urN /usr/share/empty/fs/aufs/conf.mk linux/fs/aufs/conf.mk
 --- /usr/share/empty/fs/aufs/conf.mk	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/conf.mk	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/conf.mk	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,38 @@
 +
 +AuConfStr = CONFIG_AUFS_FS=${CONFIG_AUFS_FS}
@@ -4519,7 +4486,7 @@ diff -urN /usr/share/empty/fs/aufs/conf.mk linux/fs/aufs/conf.mk
 +-include ${srctree}/${src}/conf_priv.mk
 diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 --- /usr/share/empty/fs/aufs/cpup.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/cpup.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/cpup.c	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,1319 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -5842,7 +5809,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 +}
 diff -urN /usr/share/empty/fs/aufs/cpup.h linux/fs/aufs/cpup.h
 --- /usr/share/empty/fs/aufs/cpup.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/cpup.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/cpup.h	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,94 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -5940,7 +5907,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.h linux/fs/aufs/cpup.h
 +#endif /* __AUFS_CPUP_H__ */
 diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c
 --- /usr/share/empty/fs/aufs/dbgaufs.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dbgaufs.c	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/dbgaufs.c	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,432 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -6376,7 +6343,7 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c
 +}
 diff -urN /usr/share/empty/fs/aufs/dbgaufs.h linux/fs/aufs/dbgaufs.h
 --- /usr/share/empty/fs/aufs/dbgaufs.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dbgaufs.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/dbgaufs.h	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,48 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -6428,7 +6395,7 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.h linux/fs/aufs/dbgaufs.h
 +#endif /* __DBGAUFS_H__ */
 diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c
 --- /usr/share/empty/fs/aufs/dcsub.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dcsub.c	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/dcsub.c	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,224 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -6656,7 +6623,7 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c
 +}
 diff -urN /usr/share/empty/fs/aufs/dcsub.h linux/fs/aufs/dcsub.h
 --- /usr/share/empty/fs/aufs/dcsub.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dcsub.h	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/dcsub.h	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,136 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -6796,7 +6763,7 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.h linux/fs/aufs/dcsub.h
 +#endif /* __AUFS_DCSUB_H__ */
 diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c
 --- /usr/share/empty/fs/aufs/debug.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/debug.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/debug.c	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,440 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -7240,7 +7207,7 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c
 +}
 diff -urN /usr/share/empty/fs/aufs/debug.h linux/fs/aufs/debug.h
 --- /usr/share/empty/fs/aufs/debug.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/debug.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/debug.h	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,225 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -7469,7 +7436,7 @@ diff -urN /usr/share/empty/fs/aufs/debug.h linux/fs/aufs/debug.h
 +#endif /* __AUFS_DEBUG_H__ */
 diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 --- /usr/share/empty/fs/aufs/dentry.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dentry.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/dentry.c	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,1105 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -8578,7 +8545,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +};
 diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h
 --- /usr/share/empty/fs/aufs/dentry.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dentry.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/dentry.h	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,233 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -8815,7 +8782,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h
 +#endif /* __AUFS_DENTRY_H__ */
 diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c
 --- /usr/share/empty/fs/aufs/dinfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dinfo.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/dinfo.c	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,550 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -9369,7 +9336,7 @@ diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c
 +}
 diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c
 --- /usr/share/empty/fs/aufs/dir.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dir.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/dir.c	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,753 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -10126,7 +10093,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c
 +};
 diff -urN /usr/share/empty/fs/aufs/dir.h linux/fs/aufs/dir.h
 --- /usr/share/empty/fs/aufs/dir.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dir.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/dir.h	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,131 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -10261,7 +10228,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.h linux/fs/aufs/dir.h
 +#endif /* __AUFS_DIR_H__ */
 diff -urN /usr/share/empty/fs/aufs/dynop.c linux/fs/aufs/dynop.c
 --- /usr/share/empty/fs/aufs/dynop.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dynop.c	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/dynop.c	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,369 @@
 +/*
 + * Copyright (C) 2010-2015 Junjiro R. Okajima
@@ -10634,7 +10601,7 @@ diff -urN /usr/share/empty/fs/aufs/dynop.c linux/fs/aufs/dynop.c
 +}
 diff -urN /usr/share/empty/fs/aufs/dynop.h linux/fs/aufs/dynop.h
 --- /usr/share/empty/fs/aufs/dynop.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dynop.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/dynop.h	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,74 @@
 +/*
 + * Copyright (C) 2010-2015 Junjiro R. Okajima
@@ -10712,7 +10679,7 @@ diff -urN /usr/share/empty/fs/aufs/dynop.h linux/fs/aufs/dynop.h
 +#endif /* __AUFS_DYNOP_H__ */
 diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c
 --- /usr/share/empty/fs/aufs/export.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/export.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/export.c	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,832 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -11548,7 +11515,7 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c
 +}
 diff -urN /usr/share/empty/fs/aufs/fhsm.c linux/fs/aufs/fhsm.c
 --- /usr/share/empty/fs/aufs/fhsm.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/fhsm.c	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/fhsm.c	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,426 @@
 +/*
 + * Copyright (C) 2011-2015 Junjiro R. Okajima
@@ -11978,7 +11945,7 @@ diff -urN /usr/share/empty/fs/aufs/fhsm.c linux/fs/aufs/fhsm.c
 +}
 diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
 --- /usr/share/empty/fs/aufs/file.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/file.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/file.c	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,841 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -12823,7 +12790,7 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
 +};
 diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h
 --- /usr/share/empty/fs/aufs/file.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/file.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/file.h	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,291 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -13118,7 +13085,7 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h
 +#endif /* __AUFS_FILE_H__ */
 diff -urN /usr/share/empty/fs/aufs/finfo.c linux/fs/aufs/finfo.c
 --- /usr/share/empty/fs/aufs/finfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/finfo.c	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/finfo.c	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,157 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -13279,7 +13246,7 @@ diff -urN /usr/share/empty/fs/aufs/finfo.c linux/fs/aufs/finfo.c
 +}
 diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 --- /usr/share/empty/fs/aufs/f_op.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/f_op.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/f_op.c	2015-09-24 10:47:58.251386326 +0200
 @@ -0,0 +1,738 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -14021,7 +13988,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +};
 diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h
 --- /usr/share/empty/fs/aufs/fstype.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/fstype.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/fstype.h	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,400 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -14425,7 +14392,7 @@ diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h
 +#endif /* __AUFS_FSTYPE_H__ */
 diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c
 --- /usr/share/empty/fs/aufs/hfsnotify.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/hfsnotify.c	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/hfsnotify.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,288 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -14717,7 +14684,7 @@ diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c
 +};
 diff -urN /usr/share/empty/fs/aufs/hfsplus.c linux/fs/aufs/hfsplus.c
 --- /usr/share/empty/fs/aufs/hfsplus.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/hfsplus.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/hfsplus.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,56 @@
 +/*
 + * Copyright (C) 2010-2015 Junjiro R. Okajima
@@ -14777,7 +14744,7 @@ diff -urN /usr/share/empty/fs/aufs/hfsplus.c linux/fs/aufs/hfsplus.c
 +}
 diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c
 --- /usr/share/empty/fs/aufs/hnotify.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/hnotify.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/hnotify.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,710 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -15491,7 +15458,7 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c
 +}
 diff -urN /usr/share/empty/fs/aufs/iinfo.c linux/fs/aufs/iinfo.c
 --- /usr/share/empty/fs/aufs/iinfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/iinfo.c	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/iinfo.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,277 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -15772,7 +15739,7 @@ diff -urN /usr/share/empty/fs/aufs/iinfo.c linux/fs/aufs/iinfo.c
 +}
 diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c
 --- /usr/share/empty/fs/aufs/inode.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/inode.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/inode.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,500 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -16276,7 +16243,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c
 +}
 diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h
 --- /usr/share/empty/fs/aufs/inode.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/inode.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/inode.h	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,673 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -16953,7 +16920,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h
 +#endif /* __AUFS_INODE_H__ */
 diff -urN /usr/share/empty/fs/aufs/ioctl.c linux/fs/aufs/ioctl.c
 --- /usr/share/empty/fs/aufs/ioctl.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/ioctl.c	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/ioctl.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,219 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -17176,7 +17143,7 @@ diff -urN /usr/share/empty/fs/aufs/ioctl.c linux/fs/aufs/ioctl.c
 +#endif
 diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c
 --- /usr/share/empty/fs/aufs/i_op_add.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/i_op_add.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/i_op_add.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,932 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -18112,8 +18079,8 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c
 +}
 diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 --- /usr/share/empty/fs/aufs/i_op.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/i_op.c	2015-06-28 17:36:09.025073697 +0200
-@@ -0,0 +1,1447 @@
++++ linux/fs/aufs/i_op.c	2015-09-24 10:47:58.254719746 +0200
+@@ -0,0 +1,1483 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
 + *
@@ -19358,101 +19325,137 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +
 +/* ---------------------------------------------------------------------- */
 +
-+static int h_readlink(struct dentry *dentry, int bindex, char __user *buf,
-+		      int bufsiz)
-+{
-+	int err;
-+	struct super_block *sb;
-+	struct dentry *h_dentry;
-+	struct inode *inode, *h_inode;
++/*
++ * Assumption:
++ * - the number of symlinks is not so many.
++ *
++ * Structure:
++ * - sbinfo (instead of iinfo) contains an hlist of struct au_symlink.
++ *   If iinfo contained the hlist, then it would be rather large waste of memory
++ *   I am afraid.
++ * - struct au_symlink contains the necessary info for h_inode follow_link() and
++ *   put_link().
++ */
 +
-+	err = -EINVAL;
-+	h_dentry = au_h_dptr(dentry, bindex);
-+	h_inode = d_inode(h_dentry);
-+	if (unlikely(!h_inode->i_op->readlink))
-+		goto out;
++struct au_symlink {
++	union {
++		struct hlist_node hlist;
++		struct rcu_head rcu;
++	};
 +
-+	err = security_inode_readlink(h_dentry);
-+	if (unlikely(err))
-+		goto out;
++	struct inode *h_inode;
++	void *h_cookie;
++};
 +
-+	sb = dentry->d_sb;
-+	inode = d_inode(dentry);
-+	if (!au_test_ro(sb, bindex, inode)) {
-+		vfsub_touch_atime(au_sbr_mnt(sb, bindex), h_dentry);
-+		fsstack_copy_attr_atime(inode, h_inode);
-+	}
-+	err = h_inode->i_op->readlink(h_dentry, buf, bufsiz);
++static void au_symlink_add(struct super_block *sb, struct au_symlink *slink,
++			   struct inode *h_inode, void *cookie)
++{
++	struct au_sbinfo *sbinfo;
 +
-+out:
-+	return err;
++	ihold(h_inode);
++	slink->h_inode = h_inode;
++	slink->h_cookie = cookie;
++	sbinfo = au_sbi(sb);
++	au_sphl_add(&slink->hlist, &sbinfo->si_symlink);
 +}
 +
-+static int aufs_readlink(struct dentry *dentry, char __user *buf, int bufsiz)
++static void au_symlink_del(struct super_block *sb, struct au_symlink *slink)
 +{
-+	int err;
-+
-+	err = aufs_read_lock(dentry, AuLock_IR | AuLock_GEN);
-+	if (unlikely(err))
-+		goto out;
-+	err = au_d_hashed_positive(dentry);
-+	if (!err)
-+		err = h_readlink(dentry, au_dbstart(dentry), buf, bufsiz);
-+	aufs_read_unlock(dentry, AuLock_IR);
++	struct au_sbinfo *sbinfo;
 +
-+out:
-+	return err;
++	/* do not iput() within rcu */
++	iput(slink->h_inode);
++	slink->h_inode = NULL;
++	sbinfo = au_sbi(sb);
++	au_sphl_del_rcu(&slink->hlist, &sbinfo->si_symlink);
++	kfree_rcu(slink, rcu);
 +}
 +
-+static void *aufs_follow_link(struct dentry *dentry, struct nameidata *nd)
++static const char *aufs_follow_link(struct dentry *dentry, void **cookie)
 +{
++	const char *ret;
++	struct inode *inode, *h_inode;
++	struct dentry *h_dentry;
++	struct au_symlink *slink;
 +	int err;
-+	mm_segment_t old_fs;
-+	union {
-+		char *k;
-+		char __user *u;
-+	} buf;
-+
-+	err = -ENOMEM;
-+	buf.k = (void *)__get_free_page(GFP_NOFS);
-+	if (unlikely(!buf.k))
-+		goto out;
++	aufs_bindex_t bindex;
 +
++	ret = NULL; /* supress a warning */
 +	err = aufs_read_lock(dentry, AuLock_IR | AuLock_GEN);
 +	if (unlikely(err))
-+		goto out_name;
++		goto out;
 +
 +	err = au_d_hashed_positive(dentry);
-+	if (!err) {
-+		old_fs = get_fs();
-+		set_fs(KERNEL_DS);
-+		err = h_readlink(dentry, au_dbstart(dentry), buf.u, PATH_MAX);
-+		set_fs(old_fs);
++	if (unlikely(err))
++		goto out_unlock;
++
++	err = -EINVAL;
++	inode = d_inode(dentry);
++	bindex = au_ibstart(inode);
++	h_inode = au_h_iptr(inode, bindex);
++	if (unlikely(!h_inode->i_op->follow_link))
++		goto out_unlock;
++
++	err = -ENOMEM;
++	slink = kmalloc(sizeof(*slink), GFP_NOFS);
++	if (unlikely(!slink))
++		goto out_unlock;
++
++	err = -EBUSY;
++	h_dentry = NULL;
++	if (au_dbstart(dentry) <= bindex) {
++		h_dentry = au_h_dptr(dentry, bindex);
++		if (h_dentry)
++			dget(h_dentry);
 +	}
-+	aufs_read_unlock(dentry, AuLock_IR);
++	if (!h_dentry) {
++		h_dentry = d_find_any_alias(h_inode);
++		if (IS_ERR(h_dentry)) {
++			err = PTR_ERR(h_dentry);
++			goto out_free;
++		}
++	}
++	if (unlikely(!h_dentry))
++		goto out_free;
 +
-+	if (err >= 0) {
-+		buf.k[err] = 0;
-+		/* will be freed by put_link */
-+		nd_set_link(nd, buf.k);
-+		return NULL; /* success */
++	err = 0;
++	AuDbg("%pf\n", h_inode->i_op->follow_link);
++	AuDbgDentry(h_dentry);
++	ret = h_inode->i_op->follow_link(h_dentry, cookie);
++	dput(h_dentry);
++
++	if (!IS_ERR_OR_NULL(ret)) {
++		au_symlink_add(inode->i_sb, slink, h_inode, *cookie);
++		*cookie = slink;
++		AuDbg("slink %p\n", slink);
++		goto out_unlock; /* success */
 +	}
 +
-+out_name:
-+	free_page((unsigned long)buf.k);
++out_free:
++	slink->h_inode = NULL;
++	kfree_rcu(slink, rcu);
++out_unlock:
++	aufs_read_unlock(dentry, AuLock_IR);
 +out:
-+	AuTraceErr(err);
-+	return ERR_PTR(err);
++	if (unlikely(err))
++		ret = ERR_PTR(err);
++	AuTraceErrPtr(ret);
++	return ret;
 +}
 +
-+static void aufs_put_link(struct dentry *dentry __maybe_unused,
-+			  struct nameidata *nd, void *cookie __maybe_unused)
++static void aufs_put_link(struct inode *inode, void *cookie)
 +{
-+	char *p;
++	struct au_symlink *slink;
++	struct inode *h_inode;
 +
-+	p = nd_get_link(nd);
-+	if (!IS_ERR_OR_NULL(p))
-+		free_page((unsigned long)p);
++	slink = cookie;
++	AuDbg("slink %p\n", slink);
++	h_inode = slink->h_inode;
++	AuDbg("%pf\n", h_inode->i_op->put_link);
++	AuDbgInode(h_inode);
++	if (h_inode->i_op->put_link)
++		h_inode->i_op->put_link(h_inode, slink->h_cookie);
++	au_symlink_del(inode->i_sb, slink);
 +}
 +
 +/* ---------------------------------------------------------------------- */
@@ -19503,7 +19506,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +	.removexattr	= aufs_removexattr,
 +#endif
 +
-+	.readlink	= aufs_readlink,
++	.readlink	= generic_readlink,
 +	.follow_link	= aufs_follow_link,
 +	.put_link	= aufs_put_link,
 +
@@ -19563,7 +19566,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +};
 diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c
 --- /usr/share/empty/fs/aufs/i_op_del.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/i_op_del.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/i_op_del.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,510 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -20077,7 +20080,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c
 +}
 diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
 --- /usr/share/empty/fs/aufs/i_op_ren.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/i_op_ren.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/i_op_ren.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,1017 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -21098,7 +21101,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
 +}
 diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig
 --- /usr/share/empty/fs/aufs/Kconfig	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/Kconfig	2015-06-28 17:35:44.344717109 +0200
++++ linux/fs/aufs/Kconfig	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,185 @@
 +config AUFS_FS
 +	tristate "Aufs (Advanced multi layered unification filesystem) support"
@@ -21287,7 +21290,7 @@ diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig
 +endif
 diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c
 --- /usr/share/empty/fs/aufs/loop.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/loop.c	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/loop.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,145 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -21436,7 +21439,7 @@ diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c
 +}
 diff -urN /usr/share/empty/fs/aufs/loop.h linux/fs/aufs/loop.h
 --- /usr/share/empty/fs/aufs/loop.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/loop.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/loop.h	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,52 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -21492,7 +21495,7 @@ diff -urN /usr/share/empty/fs/aufs/loop.h linux/fs/aufs/loop.h
 +#endif /* __AUFS_LOOP_H__ */
 diff -urN /usr/share/empty/fs/aufs/magic.mk linux/fs/aufs/magic.mk
 --- /usr/share/empty/fs/aufs/magic.mk	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/magic.mk	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/magic.mk	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,30 @@
 +
 +# defined in ${srctree}/fs/fuse/inode.c
@@ -21526,7 +21529,7 @@ diff -urN /usr/share/empty/fs/aufs/magic.mk linux/fs/aufs/magic.mk
 +endif
 diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile
 --- /usr/share/empty/fs/aufs/Makefile	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/Makefile	2015-06-28 17:35:44.344717109 +0200
++++ linux/fs/aufs/Makefile	2015-09-24 10:47:58.248052907 +0200
 @@ -0,0 +1,44 @@
 +
 +include ${src}/magic.mk
@@ -21574,7 +21577,7 @@ diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile
 +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o
 diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c
 --- /usr/share/empty/fs/aufs/module.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/module.c	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/module.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,210 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -21788,7 +21791,7 @@ diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c
 +module_exit(aufs_exit);
 diff -urN /usr/share/empty/fs/aufs/module.h linux/fs/aufs/module.h
 --- /usr/share/empty/fs/aufs/module.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/module.h	2015-06-28 17:35:44.348050491 +0200
++++ linux/fs/aufs/module.h	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,104 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -21896,7 +21899,7 @@ diff -urN /usr/share/empty/fs/aufs/module.h linux/fs/aufs/module.h
 +#endif /* __AUFS_MODULE_H__ */
 diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
 --- /usr/share/empty/fs/aufs/mvdown.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/mvdown.c	2015-06-28 17:36:09.025073697 +0200
++++ linux/fs/aufs/mvdown.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,694 @@
 +/*
 + * Copyright (C) 2011-2015 Junjiro R. Okajima
@@ -22594,7 +22597,7 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
 +}
 diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
 --- /usr/share/empty/fs/aufs/opts.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/opts.c	2015-06-28 17:36:09.028407078 +0200
++++ linux/fs/aufs/opts.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,1835 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -24433,7 +24436,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
 +}
 diff -urN /usr/share/empty/fs/aufs/opts.h linux/fs/aufs/opts.h
 --- /usr/share/empty/fs/aufs/opts.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/opts.h	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/opts.h	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,210 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -24647,7 +24650,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.h linux/fs/aufs/opts.h
 +#endif /* __AUFS_OPTS_H__ */
 diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c
 --- /usr/share/empty/fs/aufs/plink.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/plink.c	2015-06-28 17:36:09.028407078 +0200
++++ linux/fs/aufs/plink.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,528 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -25179,7 +25182,7 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c
 +}
 diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c
 --- /usr/share/empty/fs/aufs/poll.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/poll.c	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/poll.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,52 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -25235,7 +25238,7 @@ diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c
 +}
 diff -urN /usr/share/empty/fs/aufs/posix_acl.c linux/fs/aufs/posix_acl.c
 --- /usr/share/empty/fs/aufs/posix_acl.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/posix_acl.c	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/posix_acl.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,99 @@
 +/*
 + * Copyright (C) 2014-2015 Junjiro R. Okajima
@@ -25338,7 +25341,7 @@ diff -urN /usr/share/empty/fs/aufs/posix_acl.c linux/fs/aufs/posix_acl.c
 +}
 diff -urN /usr/share/empty/fs/aufs/procfs.c linux/fs/aufs/procfs.c
 --- /usr/share/empty/fs/aufs/procfs.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/procfs.c	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/procfs.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,169 @@
 +/*
 + * Copyright (C) 2010-2015 Junjiro R. Okajima
@@ -25511,7 +25514,7 @@ diff -urN /usr/share/empty/fs/aufs/procfs.c linux/fs/aufs/procfs.c
 +}
 diff -urN /usr/share/empty/fs/aufs/rdu.c linux/fs/aufs/rdu.c
 --- /usr/share/empty/fs/aufs/rdu.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/rdu.c	2015-06-28 17:36:09.028407078 +0200
++++ linux/fs/aufs/rdu.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,388 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -25903,7 +25906,7 @@ diff -urN /usr/share/empty/fs/aufs/rdu.c linux/fs/aufs/rdu.c
 +#endif
 diff -urN /usr/share/empty/fs/aufs/rwsem.h linux/fs/aufs/rwsem.h
 --- /usr/share/empty/fs/aufs/rwsem.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/rwsem.h	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/rwsem.h	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,191 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -26098,8 +26101,8 @@ diff -urN /usr/share/empty/fs/aufs/rwsem.h linux/fs/aufs/rwsem.h
 +#endif /* __AUFS_RWSEM_H__ */
 diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
 --- /usr/share/empty/fs/aufs/sbinfo.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sbinfo.c	2015-06-28 17:36:09.028407078 +0200
-@@ -0,0 +1,356 @@
++++ linux/fs/aufs/sbinfo.c	2015-09-24 10:47:58.254719746 +0200
+@@ -0,0 +1,360 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
 + *
@@ -26137,6 +26140,8 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
 +		AuDebugOn(!hlist_empty(&sbinfo->si_plink[i].head));
 +	AuDebugOn(atomic_read(&sbinfo->si_nowait.nw_len));
 +
++	AuDebugOn(!hlist_empty(&sbinfo->si_symlink.head));
++
 +	au_rw_write_lock(&sbinfo->si_rwsem);
 +	au_br_free(sbinfo);
 +	au_rw_write_unlock(&sbinfo->si_rwsem);
@@ -26203,6 +26208,8 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
 +
 +	sbinfo->si_mntflags = au_opts_plink(AuOpt_Def);
 +
++	au_sphl_init(&sbinfo->si_symlink);
++
 +	sbinfo->si_xino_jiffy = jiffies;
 +	sbinfo->si_xino_expire
 +		= msecs_to_jiffies(AUFS_XINO_DEF_SEC * MSEC_PER_SEC);
@@ -26458,7 +26465,7 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
 +}
 diff -urN /usr/share/empty/fs/aufs/spl.h linux/fs/aufs/spl.h
 --- /usr/share/empty/fs/aufs/spl.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/spl.h	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/spl.h	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,111 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -26573,7 +26580,7 @@ diff -urN /usr/share/empty/fs/aufs/spl.h linux/fs/aufs/spl.h
 +#endif /* __AUFS_SPL_H__ */
 diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
 --- /usr/share/empty/fs/aufs/super.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/super.c	2015-06-28 17:36:09.028407078 +0200
++++ linux/fs/aufs/super.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,1004 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -27581,8 +27588,8 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
 +};
 diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
 --- /usr/share/empty/fs/aufs/super.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/super.h	2015-06-28 17:36:09.028407078 +0200
-@@ -0,0 +1,635 @@
++++ linux/fs/aufs/super.h	2015-09-24 10:47:58.254719746 +0200
+@@ -0,0 +1,638 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
 + *
@@ -27728,6 +27735,9 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
 +	/* include/asm-ia64/siginfo.h defines a macro named si_flags */
 +	unsigned int		si_mntflags;
 +
++	/* symlink to follow_link() and put_link() */
++	struct au_sphlhead	si_symlink;
++
 +	/* external inode number (bitmap and translation table) */
 +	vfs_readf_t		si_xread;
 +	vfs_writef_t		si_xwrite;
@@ -28220,7 +28230,7 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
 +#endif /* __AUFS_SUPER_H__ */
 diff -urN /usr/share/empty/fs/aufs/sysaufs.c linux/fs/aufs/sysaufs.c
 --- /usr/share/empty/fs/aufs/sysaufs.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sysaufs.c	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/sysaufs.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,104 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -28328,7 +28338,7 @@ diff -urN /usr/share/empty/fs/aufs/sysaufs.c linux/fs/aufs/sysaufs.c
 +}
 diff -urN /usr/share/empty/fs/aufs/sysaufs.h linux/fs/aufs/sysaufs.h
 --- /usr/share/empty/fs/aufs/sysaufs.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sysaufs.h	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/sysaufs.h	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,101 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -28433,7 +28443,7 @@ diff -urN /usr/share/empty/fs/aufs/sysaufs.h linux/fs/aufs/sysaufs.h
 +#endif /* __SYSAUFS_H__ */
 diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c
 --- /usr/share/empty/fs/aufs/sysfs.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sysfs.c	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/sysfs.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,372 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -28809,7 +28819,7 @@ diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c
 +}
 diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c
 --- /usr/share/empty/fs/aufs/sysrq.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sysrq.c	2015-06-28 17:36:09.028407078 +0200
++++ linux/fs/aufs/sysrq.c	2015-09-24 10:47:58.254719746 +0200
 @@ -0,0 +1,157 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -28970,7 +28980,7 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c
 +}
 diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 --- /usr/share/empty/fs/aufs/vdir.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/vdir.c	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/vdir.c	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,888 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -29862,7 +29872,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +}
 diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 --- /usr/share/empty/fs/aufs/vfsub.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/vfsub.c	2015-06-28 17:36:09.028407078 +0200
++++ linux/fs/aufs/vfsub.c	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,848 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -30714,7 +30724,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +}
 diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 --- /usr/share/empty/fs/aufs/vfsub.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/vfsub.h	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/vfsub.h	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,286 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -31004,7 +31014,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 +#endif /* __AUFS_VFSUB_H__ */
 diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c
 --- /usr/share/empty/fs/aufs/wbr_policy.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/wbr_policy.c	2015-06-28 17:36:09.028407078 +0200
++++ linux/fs/aufs/wbr_policy.c	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,765 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -31773,7 +31783,7 @@ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c
 +};
 diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 --- /usr/share/empty/fs/aufs/whout.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/whout.c	2015-06-28 17:36:09.028407078 +0200
++++ linux/fs/aufs/whout.c	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,1063 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -32840,7 +32850,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +}
 diff -urN /usr/share/empty/fs/aufs/whout.h linux/fs/aufs/whout.h
 --- /usr/share/empty/fs/aufs/whout.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/whout.h	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/whout.h	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,85 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -32929,7 +32939,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.h linux/fs/aufs/whout.h
 +#endif /* __AUFS_WHOUT_H__ */
 diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c
 --- /usr/share/empty/fs/aufs/wkq.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/wkq.c	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/wkq.c	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,213 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -33146,7 +33156,7 @@ diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c
 +}
 diff -urN /usr/share/empty/fs/aufs/wkq.h linux/fs/aufs/wkq.h
 --- /usr/share/empty/fs/aufs/wkq.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/wkq.h	2015-06-28 17:35:44.351383872 +0200
++++ linux/fs/aufs/wkq.h	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,91 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -33241,7 +33251,7 @@ diff -urN /usr/share/empty/fs/aufs/wkq.h linux/fs/aufs/wkq.h
 +#endif /* __AUFS_WKQ_H__ */
 diff -urN /usr/share/empty/fs/aufs/xattr.c linux/fs/aufs/xattr.c
 --- /usr/share/empty/fs/aufs/xattr.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/xattr.c	2015-06-28 17:36:09.028407078 +0200
++++ linux/fs/aufs/xattr.c	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,344 @@
 +/*
 + * Copyright (C) 2014-2015 Junjiro R. Okajima
@@ -33589,7 +33599,7 @@ diff -urN /usr/share/empty/fs/aufs/xattr.c linux/fs/aufs/xattr.c
 +#endif
 diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 --- /usr/share/empty/fs/aufs/xino.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/xino.c	2015-06-28 17:36:09.028407078 +0200
++++ linux/fs/aufs/xino.c	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,1297 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -34890,7 +34900,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +}
 diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/linux/aufs_type.h
 --- /usr/share/empty/include/uapi/linux/aufs_type.h	1970-01-01 01:00:00.000000000 +0100
-+++ linux/include/uapi/linux/aufs_type.h	2015-06-28 17:36:09.028407078 +0200
++++ linux/include/uapi/linux/aufs_type.h	2015-09-24 10:47:58.258053165 +0200
 @@ -0,0 +1,419 @@
 +/*
 + * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -34933,7 +34943,7 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
 +
 +#include <linux/limits.h>
 +
-+#define AUFS_VERSION	"4.x-rcN-20150622"
++#define AUFS_VERSION	"4.x-rcN-20150921"
 +
 +/* todo? move this to linux-2.6.19/include/magic.h */
 +#define AUFS_SUPER_MAGIC	('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
@@ -35314,10 +35324,10 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
 aufs4.x-rcN loopback patch
 
 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index 0160952..866f8e2 100644
+index 23103ad..5c3263f 100644
 --- a/drivers/block/loop.c
 +++ b/drivers/block/loop.c
-@@ -419,7 +419,7 @@ static int do_req_filebacked(struct loop_device *lo, struct request *rq)
+@@ -417,7 +417,7 @@ static int do_req_filebacked(struct loop_device *lo, struct request *rq)
  }
  
  struct switch_request {
@@ -35326,7 +35336,7 @@ index 0160952..866f8e2 100644
  	struct completion wait;
  };
  
-@@ -439,6 +439,7 @@ static void do_loop_switch(struct loop_device *lo, struct switch_request *p)
+@@ -437,6 +437,7 @@ static void do_loop_switch(struct loop_device *lo, struct switch_request *p)
  	mapping = file->f_mapping;
  	mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask);
  	lo->lo_backing_file = file;
@@ -35334,7 +35344,7 @@ index 0160952..866f8e2 100644
  	lo->lo_blocksize = S_ISBLK(mapping->host->i_mode) ?
  		mapping->host->i_bdev->bd_block_size : PAGE_SIZE;
  	lo->old_gfp_mask = mapping_gfp_mask(mapping);
-@@ -450,11 +451,13 @@ static void do_loop_switch(struct loop_device *lo, struct switch_request *p)
+@@ -448,11 +449,13 @@ static void do_loop_switch(struct loop_device *lo, struct switch_request *p)
   * First it needs to flush existing IO, it does this by sending a magic
   * BIO down the pipe. The completion of this BIO does the actual switch.
   */
@@ -35349,7 +35359,7 @@ index 0160952..866f8e2 100644
  
  	/* freeze queue and wait for completion of scheduled requests */
  	blk_mq_freeze_queue(lo->lo_queue);
-@@ -473,7 +476,16 @@ static int loop_switch(struct loop_device *lo, struct file *file)
+@@ -471,7 +474,16 @@ static int loop_switch(struct loop_device *lo, struct file *file)
   */
  static int loop_flush(struct loop_device *lo)
  {
@@ -35366,8 +35376,8 @@ index 0160952..866f8e2 100644
 +	return f;
  }
  
- /*
-@@ -488,6 +500,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+ static void loop_reread_partitions(struct loop_device *lo,
+@@ -508,6 +520,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  			  unsigned int arg)
  {
  	struct file	*file, *old_file;
@@ -35375,7 +35385,7 @@ index 0160952..866f8e2 100644
  	struct inode	*inode;
  	int		error;
  
-@@ -504,9 +517,16 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -524,9 +537,16 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  	file = fget(arg);
  	if (!file)
  		goto out;
@@ -35392,7 +35402,7 @@ index 0160952..866f8e2 100644
  
  	error = -EINVAL;
  
-@@ -518,17 +538,21 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
+@@ -538,17 +558,21 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
  		goto out_putf;
  
  	/* and ... switch */
@@ -35405,7 +35415,7 @@ index 0160952..866f8e2 100644
 +	if (old_virt_file)
 +		fput(old_virt_file);
  	if (lo->lo_flags & LO_FLAGS_PARTSCAN)
- 		ioctl_by_bdev(bdev, BLKRRPART, 0);
+ 		loop_reread_partitions(lo, bdev);
  	return 0;
  
   out_putf:
@@ -35415,7 +35425,7 @@ index 0160952..866f8e2 100644
   out:
  	return error;
  }
-@@ -689,7 +713,7 @@ static void loop_config_discard(struct loop_device *lo)
+@@ -709,7 +733,7 @@ static void loop_config_discard(struct loop_device *lo)
  static int loop_set_fd(struct loop_device *lo, fmode_t mode,
  		       struct block_device *bdev, unsigned int arg)
  {
@@ -35424,7 +35434,7 @@ index 0160952..866f8e2 100644
  	struct inode	*inode;
  	struct address_space *mapping;
  	unsigned lo_blocksize;
-@@ -704,6 +728,12 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
+@@ -724,6 +748,12 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
  	file = fget(arg);
  	if (!file)
  		goto out;
@@ -35437,7 +35447,7 @@ index 0160952..866f8e2 100644
  
  	error = -EBUSY;
  	if (lo->lo_state != Lo_unbound)
-@@ -752,6 +782,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
+@@ -778,6 +808,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
  	lo->lo_device = bdev;
  	lo->lo_flags = lo_flags;
  	lo->lo_backing_file = file;
@@ -35445,7 +35455,7 @@ index 0160952..866f8e2 100644
  	lo->transfer = NULL;
  	lo->ioctl = NULL;
  	lo->lo_sizelimit = 0;
-@@ -783,6 +814,8 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
+@@ -809,6 +840,8 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
  
   out_putf:
  	fput(file);
@@ -35454,7 +35464,7 @@ index 0160952..866f8e2 100644
   out:
  	/* This is safe: open() is still holding a reference. */
  	module_put(THIS_MODULE);
-@@ -829,6 +862,7 @@ loop_init_xfer(struct loop_device *lo, struct loop_func_table *xfer,
+@@ -855,6 +888,7 @@ loop_init_xfer(struct loop_device *lo, struct loop_func_table *xfer,
  static int loop_clr_fd(struct loop_device *lo)
  {
  	struct file *filp = lo->lo_backing_file;
@@ -35462,7 +35472,7 @@ index 0160952..866f8e2 100644
  	gfp_t gfp = lo->old_gfp_mask;
  	struct block_device *bdev = lo->lo_device;
  
-@@ -857,6 +891,7 @@ static int loop_clr_fd(struct loop_device *lo)
+@@ -886,6 +920,7 @@ static int loop_clr_fd(struct loop_device *lo)
  	spin_lock_irq(&lo->lo_lock);
  	lo->lo_state = Lo_rundown;
  	lo->lo_backing_file = NULL;
@@ -35470,7 +35480,7 @@ index 0160952..866f8e2 100644
  	spin_unlock_irq(&lo->lo_lock);
  
  	loop_release_xfer(lo);
-@@ -898,6 +933,8 @@ static int loop_clr_fd(struct loop_device *lo)
+@@ -931,6 +966,8 @@ static int loop_clr_fd(struct loop_device *lo)
  	 * bd_mutex which is usually taken before lo_ctl_mutex.
  	 */
  	fput(filp);
@@ -35480,7 +35490,7 @@ index 0160952..866f8e2 100644
  }
  
 diff --git a/drivers/block/loop.h b/drivers/block/loop.h
-index 301c27f..df84aa0 100644
+index 25e8997..93b6fce 100644
 --- a/drivers/block/loop.h
 +++ b/drivers/block/loop.h
 @@ -46,7 +46,7 @@ struct loop_device {
@@ -35571,10 +35581,10 @@ index ee5780d..da35759 100644
  
  /* ---------------------------------------------------------------------- */
 diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 3229f97..f63cc0d 100644
+index 86080ea..5f8e0f2 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -1696,6 +1696,10 @@ struct super_operations {
+@@ -1708,6 +1708,10 @@ struct super_operations {
  				  struct shrink_control *);
  	long (*free_cached_objects)(struct super_block *,
  				    struct shrink_control *);
diff --git a/kernel-imq.patch b/kernel-imq.patch
index dc0dc2a..a8cd77e 100644
--- a/kernel-imq.patch
+++ b/kernel-imq.patch
@@ -1,8 +1,8 @@
 diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
-index df51d60..e937550 100644
+index c18f9e6..ec43bde 100644
 --- a/drivers/net/Kconfig
 +++ b/drivers/net/Kconfig
-@@ -220,6 +220,125 @@ config RIONET_RX_SIZE
+@@ -234,6 +234,125 @@ config RIONET_RX_SIZE
  	depends on RIONET
  	default "128"
  
@@ -129,7 +129,7 @@ index df51d60..e937550 100644
  	tristate "Universal TUN/TAP device driver support"
  	depends on INET
 diff --git a/drivers/net/Makefile b/drivers/net/Makefile
-index e25fdd7..b411742 100644
+index c12cb22..03b82c6 100644
 --- a/drivers/net/Makefile
 +++ b/drivers/net/Makefile
 @@ -10,6 +10,7 @@ obj-$(CONFIG_IPVLAN) += ipvlan/
@@ -142,10 +142,10 @@ index e25fdd7..b411742 100644
  obj-$(CONFIG_MII) += mii.o
 diff --git a/drivers/net/imq.c b/drivers/net/imq.c
 new file mode 100644
-index 0000000..b010f39
+index 0000000..c60929b
 --- /dev/null
 +++ b/drivers/net/imq.c
-@@ -0,0 +1,903 @@
+@@ -0,0 +1,908 @@
 +/*
 + *             Pseudo-driver for the intermediate queue device.
 + *
@@ -725,8 +725,6 @@ index 0000000..b010f39
 +		entry->skb = skb;
 +	}
 +
-+	skb->nf_queue_entry = entry;
-+
 +	dev->stats.rx_bytes += skb->len;
 +	dev->stats.rx_packets++;
 +
@@ -752,6 +750,7 @@ index 0000000..b010f39
 +	if (unlikely(!q->enqueue))
 +		goto packet_not_eaten_by_imq_dev;
 +
++	skb->nf_queue_entry = entry;
 +	root_lock = qdisc_lock(q);
 +	spin_lock(root_lock);
 +
@@ -762,7 +761,6 @@ index 0000000..b010f39
 +	/* backup skb->cb, as qdisc layer will overwrite it */
 +	skb_save_cb(skb_shared);
 +	qdisc_enqueue_root(skb_shared, q); /* might kfree_skb */
-+
 +	if (likely(atomic_read(&skb_shared->users) == users + 1)) {
 +		bool validate;
 +
@@ -798,12 +796,19 @@ index 0000000..b010f39
 +				*/
 +				if (imq_dev_accurate_stats && txq->xmit_lock_owner != cpu) {
 +					HARD_TX_LOCK(dev, txq, cpu);
-+					dev_hard_start_xmit(skb_popd, dev, txq, &dummy_ret);
++					if (!netif_xmit_frozen_or_stopped(txq)) {
++						dev_hard_start_xmit(skb_popd, dev, txq, &dummy_ret);
++					}
 +					HARD_TX_UNLOCK(dev, txq);
 +				} else {
-+					dev_hard_start_xmit(skb_popd, dev, txq, &dummy_ret);
++					if (!netif_xmit_frozen_or_stopped(txq)) {
++						dev_hard_start_xmit(skb_popd, dev, txq, &dummy_ret);
++					}
 +				}
 +			}
++		} else {
++			/* No ready skb, then schedule it */
++			__netif_schedule(q);
 +		}
 +#endif
 +		rcu_read_unlock_bh();
@@ -1069,10 +1074,10 @@ index 0000000..1babb09
 +#endif /* _IMQ_H */
 +
 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index 05b9a69..0c35dff 100644
+index e20979d..9c8f9a1 100644
 --- a/include/linux/netdevice.h
 +++ b/include/linux/netdevice.h
-@@ -3276,6 +3276,19 @@ static inline void netif_tx_unlock_bh(struct net_device *dev)
+@@ -3279,6 +3279,19 @@ static inline void netif_tx_unlock_bh(struct net_device *dev)
  	}						\
  }
  
@@ -1140,20 +1145,20 @@ index 0000000..198ac01
 +#endif /* _IP6T_IMQ_H */
 +
 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index f15154a..d76d31a 100644
+index 9b88536..61686b0 100644
 --- a/include/linux/skbuff.h
 +++ b/include/linux/skbuff.h
-@@ -35,6 +35,9 @@
- #include <linux/netdev_features.h>
- #include <linux/sched.h>
- #include <net/flow_keys.h>
+@@ -37,6 +37,9 @@
+ #include <net/flow_dissector.h>
+ #include <linux/splice.h>
+ #include <linux/in6.h>
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +#include <linux/imq.h>
 +#endif
  
  /* A. Checksumming of received packets by device.
   *
-@@ -540,6 +543,9 @@ struct sk_buff {
+@@ -548,6 +551,9 @@ struct sk_buff {
  	 * first. This is owned by whoever has the skb queued ATM.
  	 */
  	char			cb[48] __aligned(8);
@@ -1163,7 +1168,7 @@ index f15154a..d76d31a 100644
  
  	unsigned long		_skb_refdst;
  	void			(*destructor)(struct sk_buff *skb);
-@@ -549,6 +555,9 @@ struct sk_buff {
+@@ -557,6 +563,9 @@ struct sk_buff {
  #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
  	struct nf_conntrack	*nfct;
  #endif
@@ -1173,7 +1178,7 @@ index f15154a..d76d31a 100644
  #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
  	struct nf_bridge_info	*nf_bridge;
  #endif
-@@ -616,6 +625,9 @@ struct sk_buff {
+@@ -624,6 +633,9 @@ struct sk_buff {
  	__u8			inner_protocol_type:1;
  	__u8			remcsum_offload:1;
  	/* 3 or 5 bit hole */
@@ -1183,7 +1188,7 @@ index f15154a..d76d31a 100644
  
  #ifdef CONFIG_NET_SCHED
  	__u16			tc_index;	/* traffic control index */
-@@ -766,6 +778,12 @@ void kfree_skb_list(struct sk_buff *segs);
+@@ -774,6 +786,12 @@ void kfree_skb_list(struct sk_buff *segs);
  void skb_tx_error(struct sk_buff *skb);
  void consume_skb(struct sk_buff *skb);
  void  __kfree_skb(struct sk_buff *skb);
@@ -1196,7 +1201,7 @@ index f15154a..d76d31a 100644
  extern struct kmem_cache *skbuff_head_cache;
  
  void kfree_skb_partial(struct sk_buff *skb, bool head_stolen);
-@@ -3216,6 +3234,10 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src,
+@@ -3232,6 +3250,10 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src,
  	if (copy)
  		dst->nfctinfo = src->nfctinfo;
  #endif
@@ -1208,10 +1213,10 @@ index f15154a..d76d31a 100644
  	dst->nf_bridge  = src->nf_bridge;
  	nf_bridge_get(src->nf_bridge);
 diff --git a/include/net/netfilter/nf_queue.h b/include/net/netfilter/nf_queue.h
-index d81d584..1adc20d 100644
+index e863585..40904cb 100644
 --- a/include/net/netfilter/nf_queue.h
 +++ b/include/net/netfilter/nf_queue.h
-@@ -29,6 +29,12 @@ struct nf_queue_handler {
+@@ -31,6 +31,12 @@ struct nf_queue_handler {
  void nf_register_queue_handler(const struct nf_queue_handler *qh);
  void nf_unregister_queue_handler(void);
  void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict);
@@ -1237,11 +1242,28 @@ index 2342bf1..149dec9 100644
  static inline void qdisc_run(struct Qdisc *q)
  {
  	if (qdisc_run_begin(q))
+diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
+index 2738f6f..cc0af3e 100644
+--- a/include/net/sch_generic.h
++++ b/include/net/sch_generic.h
+@@ -501,6 +501,12 @@ static inline int qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch)
+ 	return sch->enqueue(skb, sch);
+ }
+ 
++static inline int qdisc_enqueue_root(struct sk_buff *skb, struct Qdisc *sch)
++{
++    qdisc_skb_cb(skb)->pkt_len = skb->len;
++    return qdisc_enqueue(skb, sch) & NET_XMIT_MASK;
++}
++
+ static inline bool qdisc_is_percpu_stats(const struct Qdisc *q)
+ {
+ 	return q->flags & TCQ_F_CPUSTATS;
 diff --git a/include/uapi/linux/netfilter.h b/include/uapi/linux/netfilter.h
-index ef1b1f8..079e5ff 100644
+index d93f949..23fb6d1 100644
 --- a/include/uapi/linux/netfilter.h
 +++ b/include/uapi/linux/netfilter.h
-@@ -13,7 +13,8 @@
+@@ -14,7 +14,8 @@
  #define NF_QUEUE 3
  #define NF_REPEAT 4
  #define NF_STOP 5
@@ -1252,20 +1274,20 @@ index ef1b1f8..079e5ff 100644
  /* we overload the higher bits for encoding auxiliary data such as the queue
   * number or errno values. Not nice, but better than additional function
 diff --git a/net/core/dev.c b/net/core/dev.c
-index aa82f9a..c931d04 100644
+index a8e4dd4..f84cd5a 100644
 --- a/net/core/dev.c
 +++ b/net/core/dev.c
-@@ -135,6 +135,9 @@
- #include <linux/if_macvlan.h>
+@@ -136,6 +136,9 @@
  #include <linux/errqueue.h>
  #include <linux/hrtimer.h>
+ #include <linux/netfilter_ingress.h>
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +#include <linux/imq.h>
 +#endif
  
  #include "net-sysfs.h"
  
-@@ -2646,7 +2649,12 @@ static int xmit_one(struct sk_buff *skb, struct net_device *dev,
+@@ -2675,7 +2678,12 @@ static int xmit_one(struct sk_buff *skb, struct net_device *dev,
  	unsigned int len;
  	int rc;
  
@@ -1278,7 +1300,7 @@ index aa82f9a..c931d04 100644
  		dev_queue_xmit_nit(skb, dev);
  
  	len = skb->len;
-@@ -2684,6 +2692,7 @@ out:
+@@ -2713,6 +2721,7 @@ out:
  	*ret = rc;
  	return skb;
  }
@@ -1286,7 +1308,7 @@ index aa82f9a..c931d04 100644
  
  static struct sk_buff *validate_xmit_vlan(struct sk_buff *skb,
  					  netdev_features_t features)
-@@ -2772,6 +2781,7 @@ struct sk_buff *validate_xmit_skb_list(struct sk_buff *skb, struct net_device *d
+@@ -2801,6 +2810,7 @@ struct sk_buff *validate_xmit_skb_list(struct sk_buff *skb, struct net_device *d
  	}
  	return head;
  }
@@ -1295,10 +1317,10 @@ index aa82f9a..c931d04 100644
  static void qdisc_pkt_len_init(struct sk_buff *skb)
  {
 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
-index 41ec022..307f02d 100644
+index 7b84330..a313d22 100644
 --- a/net/core/skbuff.c
 +++ b/net/core/skbuff.c
-@@ -79,6 +79,86 @@
+@@ -79,6 +79,87 @@
  
  struct kmem_cache *skbuff_head_cache __read_mostly;
  static struct kmem_cache *skbuff_fclone_cache __read_mostly;
@@ -1361,6 +1383,7 @@ index 41ec022..307f02d 100644
 +}
 +EXPORT_SYMBOL(skb_restore_cb);
 +
++static void skb_copy_stored_cb(struct sk_buff *   , const struct sk_buff *     ) __attribute__ ((unused));
 +static void skb_copy_stored_cb(struct sk_buff *new, const struct sk_buff *__old)
 +{
 +	struct skb_cb_table *next;
@@ -1385,7 +1408,7 @@ index 41ec022..307f02d 100644
  
  /**
   *	skb_panic - private function for out-of-line support
-@@ -691,6 +771,28 @@ static void skb_release_head_state(struct sk_buff *skb)
+@@ -643,6 +724,28 @@ static void skb_release_head_state(struct sk_buff *skb)
  		WARN_ON(in_irq());
  		skb->destructor(skb);
  	}
@@ -1397,7 +1420,7 @@ index 41ec022..307f02d 100644
 +	while (skb->cb_next != NULL) {
 +		if (net_ratelimit())
 +			pr_warn("IMQ: kfree_skb: skb->cb_next: %08x\n",
-+				(unsigned int)skb->cb_next);
++				(unsigned int)(uintptr_t)skb->cb_next);
 +
 +		skb_restore_cb(skb);
 +	}
@@ -1414,7 +1437,7 @@ index 41ec022..307f02d 100644
  #if IS_ENABLED(CONFIG_NF_CONNTRACK)
  	nf_conntrack_put(skb->nfct);
  #endif
-@@ -813,6 +915,10 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
+@@ -765,6 +868,10 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
  	new->sp			= secpath_get(old->sp);
  #endif
  	__nf_copy(new, old, false);
@@ -1425,7 +1448,7 @@ index 41ec022..307f02d 100644
  
  	/* Note : this field could be in headers_start/headers_end section
  	 * It is not yet because we do not want to have a 16 bit hole
-@@ -3342,6 +3448,13 @@ void __init skb_init(void)
+@@ -3324,6 +3431,13 @@ void __init skb_init(void)
  						0,
  						SLAB_HWCACHE_ALIGN|SLAB_PANIC,
  						NULL);
@@ -1440,7 +1463,7 @@ index 41ec022..307f02d 100644
  
  /**
 diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
-index bc09cb9..9b6ef9f 100644
+index d5f7716..dd12857 100644
 --- a/net/ipv6/ip6_output.c
 +++ b/net/ipv6/ip6_output.c
 @@ -64,9 +64,6 @@ static int ip6_finish_output2(struct sock *sk, struct sk_buff *skb)
@@ -1468,10 +1491,10 @@ index bc09cb9..9b6ef9f 100644
  			    NULL, dev,
  			    ip6_finish_output,
 diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
-index a0f3e6a3..64239c0 100644
+index 6eae69a..ca3b763 100644
 --- a/net/netfilter/Kconfig
 +++ b/net/netfilter/Kconfig
-@@ -771,6 +771,18 @@ config NETFILTER_XT_TARGET_LOG
+@@ -784,6 +784,18 @@ config NETFILTER_XT_TARGET_LOG
  
  	  To compile it as a module, choose M here.  If unsure, say N.
  
@@ -1491,10 +1514,10 @@ index a0f3e6a3..64239c0 100644
  	tristate '"MARK" target support'
  	depends on NETFILTER_ADVANCED
 diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile
-index a87d8b8..d1080ff 100644
+index 70d026d..5469b14 100644
 --- a/net/netfilter/Makefile
 +++ b/net/netfilter/Makefile
-@@ -109,6 +109,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CT) += xt_CT.o
+@@ -110,6 +110,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CT) += xt_CT.o
  obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
  obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o
  obj-$(CONFIG_NETFILTER_XT_TARGET_HMARK) += xt_HMARK.o
@@ -1503,10 +1526,10 @@ index a87d8b8..d1080ff 100644
  obj-$(CONFIG_NETFILTER_XT_TARGET_LOG) += xt_LOG.o
  obj-$(CONFIG_NETFILTER_XT_TARGET_NETMAP) += xt_NETMAP.o
 diff --git a/net/netfilter/core.c b/net/netfilter/core.c
-index e616301..302798c 100644
+index a0e5497..a24276c 100644
 --- a/net/netfilter/core.c
 +++ b/net/netfilter/core.c
-@@ -178,9 +178,11 @@ next_hook:
+@@ -206,9 +206,11 @@ next_hook:
  		ret = NF_DROP_GETERR(verdict);
  		if (ret == 0)
  			ret = -EPERM;
@@ -1521,7 +1544,7 @@ index e616301..302798c 100644
  			if (err == -ECANCELED)
  				goto next_hook;
 diff --git a/net/netfilter/nf_internals.h b/net/netfilter/nf_internals.h
-index ea7f367..06fe0d6 100644
+index 3992106..35cbc7b 100644
 --- a/net/netfilter/nf_internals.h
 +++ b/net/netfilter/nf_internals.h
 @@ -18,7 +18,7 @@ unsigned int nf_iterate(struct list_head *head, struct sk_buff *skb,
@@ -1530,11 +1553,11 @@ index ea7f367..06fe0d6 100644
  int nf_queue(struct sk_buff *skb, struct nf_hook_ops *elem,
 -	     struct nf_hook_state *state, unsigned int queuenum);
 +	     struct nf_hook_state *state, unsigned int queuenum, unsigned int queuetype);
+ void nf_queue_nf_hook_drop(struct nf_hook_ops *ops);
  int __init netfilter_queue_init(void);
  
- /* nf_log.c */
 diff --git a/net/netfilter/nf_queue.c b/net/netfilter/nf_queue.c
-index 2e88032..8524715 100644
+index 8a8b2ab..91ba768 100644
 --- a/net/netfilter/nf_queue.c
 +++ b/net/netfilter/nf_queue.c
 @@ -28,6 +28,23 @@
@@ -1561,7 +1584,7 @@ index 2e88032..8524715 100644
  /* return EBUSY when somebody else is registered, return EEXIST if the
   * same handler is registered, return 0 in case of success. */
  void nf_register_queue_handler(const struct nf_queue_handler *qh)
-@@ -112,7 +129,8 @@ EXPORT_SYMBOL_GPL(nf_queue_entry_get_refs);
+@@ -129,7 +146,8 @@ void nf_queue_nf_hook_drop(struct nf_hook_ops *ops)
  int nf_queue(struct sk_buff *skb,
  	     struct nf_hook_ops *elem,
  	     struct nf_hook_state *state,
@@ -1571,7 +1594,7 @@ index 2e88032..8524715 100644
  {
  	int status = -ENOENT;
  	struct nf_queue_entry *entry = NULL;
-@@ -122,7 +140,17 @@ int nf_queue(struct sk_buff *skb,
+@@ -139,7 +157,17 @@ int nf_queue(struct sk_buff *skb,
  	/* QUEUE == DROP if no one is waiting, to be safe. */
  	rcu_read_lock();
  
@@ -1590,7 +1613,7 @@ index 2e88032..8524715 100644
  	if (!qh) {
  		status = -ESRCH;
  		goto err_unlock;
-@@ -208,8 +236,10 @@ void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict)
+@@ -225,8 +253,10 @@ void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict)
  		local_bh_enable();
  		break;
  	case NF_QUEUE:
diff --git a/kernel-multiarch.config b/kernel-multiarch.config
index 704068d..48b4fa4 100644
--- a/kernel-multiarch.config
+++ b/kernel-multiarch.config
@@ -7,6 +7,7 @@ CC_STACKPROTECTOR all=y
 CC_STACKPROTECTOR_NONE all=n
 CC_STACKPROTECTOR_REGULAR all=n
 CC_STACKPROTECTOR_STRONG all=y
+DEBUG_ENTRY all=n
 EARLY_PRINTK_EFI all=n
 EFI_MIXED all=y
 IOSF_MBI all=m
@@ -16,7 +17,9 @@ KEXEC_VERIFY_SIG all=n
 KVM_DEBUG_FS all=n
 KVM_DEVICE_ASSIGNMENT all=y
 PHYSICAL_ALIGN all=0x1000000
+PUNIT_ATOM_DEBUG all=m
 X86_AMD_PLATFORM_DEVICE all=y
+X86_DEBUG_FPU all=n
 X86_DEBUG_STATIC_CPU_HAS all=n
 X86_SYSFB all=y
 XEN_PVH all=y
@@ -88,6 +91,7 @@ CRYPTO_ALGAPI all=y
 CRYPTO_AEAD all=m
 CRYPTO_BLKCIPHER all=m
 CRYPTO_HASH all=y
+CRYPTO_RSA all=m
 CRYPTO_MANAGER all=y
 CRYPTO_USER all=m
 CRYPTO_MANAGER_DISABLE_TESTS all=y
@@ -101,7 +105,9 @@ CRYPTO_TEST all=m
 #- Authenticated Encryption with Associated Data
 CRYPTO_CCM all=m
 CRYPTO_GCM all=m
+CRYPTO_CHACHA20POLY1305 all=m
 CRYPTO_SEQIV all=m
+CRYPTO_ECHAINIV all=m
 #- Block modes
 CRYPTO_CBC all=m
 CRYPTO_CTR all=m
@@ -123,6 +129,7 @@ CRYPTO_CRC32_PCLMUL all=m
 CRYPTO_CRCT10DIF all=m
 CRYPTO_CRCT10DIF_PCLMUL all=m
 CRYPTO_GHASH all=m
+CRYPTO_POLY1305 all=m
 CRYPTO_MD4 all=m
 CRYPTO_MD5 all=y
 CRYPTO_MICHAEL_MIC all=m
@@ -164,6 +171,7 @@ CRYPTO_KHAZAD all=m
 CRYPTO_SALSA20 all=m
 CRYPTO_SALSA20_586 all=m
 CRYPTO_SALSA20_X86_64 x86_64=m
+CRYPTO_CHACHA20 all=m
 CRYPTO_SEED all=m
 CRYPTO_SERPENT all=m
 CRYPTO_SERPENT_SSE2_X86_64 all=m
@@ -180,6 +188,7 @@ CRYPTO_TWOFISH_AVX_X86_64 all=m
 CRYPTO_DEFLATE all=m
 CRYPTO_ZLIB all=m
 CRYPTO_LZO all=y
+CRYPTO_842 all=m
 CRYPTO_LZ4 all=m
 CRYPTO_LZ4HC all=m
 #- Random Number Generation
@@ -188,9 +197,11 @@ CRYPTO_DRBG_MENU all=m
 CRYPTO_DRBG_HMAC all=y
 CRYPTO_DRBG_HASH all=y
 CRYPTO_DRBG_CTR all=y
+CRYPTO_JITTERENTROPY all=m
 CRYPTO_USER_API_HASH all=m
 CRYPTO_USER_API_SKCIPHER all=m
 CRYPTO_USER_API_RNG all=m
+CRYPTO_USER_API_AEAD all=m
 #- file drivers/crypto/Kconfig goes here
 #- file crypto/asymmetric_keys/Kconfig goes here
 
@@ -216,6 +227,7 @@ A11Y_BRAILLE_CONSOLE=y
 ACPI ia64=y x86=y
 ACPI_SLEEP x86=y
 ACPI_PROCFS_POWER ia64=y x86=y
+ACPI_REV_OVERRIDE_POSSIBLE all=y
 ACPI_EC_DEBUGFS all=m
 ACPI_AC x86=m
 ACPI_BATTERY x86=m
@@ -239,6 +251,7 @@ ACPI_HOTPLUG_MEMORY all=y
 ACPI_SBS x86=m
 ACPI_CUSTOM_METHOD all=m
 ACPI_BGRT all=y
+ACPI_NFIT all=m
 #- file drivers/acpi/apei/Kconfig goes here
 ACPI_EXTLOG all=m
 PMIC_OPREGION all=y
@@ -472,7 +485,6 @@ BLK_DEV_RAM all=y
 BLK_DEV_RAM_COUNT all=16
 BLK_DEV_RAM_SIZE all=16384
 BLK_DEV_RAM_DAX all=y
-BLK_DEV_PMEM all=m
 CDROM_PKTCDVD all=m
 CDROM_PKTCDVD_BUFFERS all=8
 CDROM_PKTCDVD_WCACHE all=y
@@ -530,13 +542,13 @@ PARIDE_ON26 all=m
 #-
 ZRAM all=m
 ZRAM_LZ4_COMPRESS all=y
-ZRAM_DEBUG all=n
 
 #-
 #- *** FILE: drivers/bluetooth/Kconfig ***
 #-
 BT_HCIBTUSB all=m
 BT_HCIBTUSB_BCM all=y
+BT_HCIBTUSB_RTL all=y
 BT_HCIBTSDIO all=m
 BT_HCIUART all=m
 BT_HCIUART_H4 all=y
@@ -705,10 +717,12 @@ COMMON_CLK_WM831X all=m
 COMMON_CLK_SI5351 all=m
 COMMON_CLK_PWM all=m
 COMMON_CLK_CDCE706 all=m
-#- file drivers/clk/qcom/Kconfig goes here
 #- file drivers/clk/bcm/Kconfig goes here
+#- file drivers/clk/hisilicon/Kconfig goes here
+#- file drivers/clk/qcom/Kconfig goes here
 #- file drivers/clk/mvebu/Kconfig goes here
 #- file drivers/clk/samsung/Kconfig goes here
+#- file drivers/clk/tegra/Kconfig goes here
 
 #-
 #- *** FILE: drivers/connector/Kconfig ***
@@ -907,6 +921,7 @@ DMIID all=y
 DMI_SYSFS all=m
 ISCSI_IBFT_FIND all=y
 ISCSI_IBFT all=m
+#- file drivers/firmware/broadcom/Kconfig goes here
 #- file drivers/firmware/google/Kconfig goes here
 #- file drivers/firmware/efi/Kconfig goes here
 
@@ -993,6 +1008,8 @@ DRM_TDFX all=m
 DRM_R128 all=m
 DRM_RADEON all=m
 #- file drivers/gpu/drm/radeon/Kconfig goes here
+DRM_AMDGPU all=m
+#- file drivers/gpu/drm/amd/amdgpu/Kconfig goes here
 #- file drivers/gpu/drm/nouveau/Kconfig goes here
 DRM_I810 i386=m x86_64=m
 #- file drivers/gpu/drm/i915/Kconfig goes here
@@ -1017,6 +1034,7 @@ DRM_VGEM all=m
 #- file drivers/gpu/drm/tilcdc/Kconfig goes here
 #- file drivers/gpu/drm/qxl/Kconfig goes here
 #- file drivers/gpu/drm/bochs/Kconfig goes here
+#- file drivers/gpu/drm/virtio/Kconfig goes here
 #- file drivers/gpu/drm/msm/Kconfig goes here
 #- file drivers/gpu/drm/tegra/Kconfig goes here
 #- file drivers/gpu/drm/panel/Kconfig goes here
@@ -1025,6 +1043,12 @@ DRM_VGEM all=m
 #- file drivers/gpu/drm/imx/Kconfig goes here
 
 #-
+#- *** FILE: drivers/gpu/drm/amd/amdgpu/Kconfig ***
+#-
+DRM_AMDGPU_CIK all=y
+DRM_AMDGPU_USERPTR all=y
+
+#-
 #- *** FILE: drivers/gpu/drm/amd/amdkfd/Kconfig ***
 #-
 HSA_AMD all=m
@@ -1102,6 +1126,11 @@ DRM_RADEON_UMS all=n
 DRM_UDL all=m
 
 #-
+#- *** FILE: drivers/gpu/drm/virtio/Kconfig ***
+#-
+DRM_VIRTIO_GPU all=m
+
+#-
 #- *** FILE: drivers/gpu/drm/vmwgfx/Kconfig ***
 #-
 DRM_VMWGFX all=m
@@ -1364,6 +1393,7 @@ SENSORS_ADS7871 all=m
 SENSORS_AMC6821 all=m
 SENSORS_INA209 all=m
 SENSORS_INA2XX all=m
+SENSORS_TC74 all=m
 SENSORS_THMC50 all=m
 SENSORS_TMP102 all=m
 SENSORS_TMP103 all=m
@@ -1613,6 +1643,8 @@ MMA8452 all=m
 KXCJK1013 all=m
 MMA9551 all=m
 MMA9553 all=m
+STK8312 all=m
+STK8BA50 all=m
 
 #-
 #- *** FILE: drivers/iio/adc/Kconfig ***
@@ -1667,6 +1699,7 @@ AD5755 all=m
 AD5764 all=m
 AD5791 all=m
 AD7303 all=m
+M62332 all=m
 MAX517 all=m
 MCP4725 all=m
 MCP4922 all=m
@@ -1713,9 +1746,11 @@ INV_MPU6050_IIO all=m
 #-
 #- *** FILE: drivers/iio/light/Kconfig ***
 #-
+ACPI_ALS all=m
 ADJD_S311 all=m
 AL3320A all=m
 APDS9300 all=m
+BH1750 all=m
 CM32181 all=m
 CM3232 all=m
 CM3323 all=m
@@ -1727,6 +1762,7 @@ HID_SENSOR_PROX all=m
 JSA1212 all=m
 SENSORS_LM3533 all=m
 LTR501 all=m
+STK3310 all=m
 TCS3414 all=m
 TCS3472 all=m
 SENSORS_TSL2563 all=m
@@ -1740,7 +1776,9 @@ AK8975 all=m
 AK09911 all=m
 MAG3110 all=m
 HID_SENSOR_MAGNETOMETER_3D all=m
+MMC35240 all=m
 IIO_ST_MAGN_3AXIS all=m
+BMC150_MAGN all=m
 
 #-
 #- *** FILE: drivers/iio/orientation/Kconfig ***
@@ -1897,6 +1935,7 @@ INFINIBAND_SRPT all=m
 #- *** FILE: drivers/input/Kconfig ***
 #-
 INPUT all=y
+INPUT_LEDS all=m
 INPUT_FF_MEMLESS all=m
 INPUT_POLLDEV all=m
 INPUT_SPARSEKMAP all=m
@@ -2050,6 +2089,7 @@ INPUT_XEN_KBDDEV_FRONTEND all=m
 INPUT_IDEAPAD_SLIDEBAR all=m
 INPUT_SOC_BUTTON_ARRAY all=m
 INPUT_DRV260X_HAPTICS all=m
+INPUT_DRV2665_HAPTICS all=m
 INPUT_DRV2667_HAPTICS all=m
 
 #-
@@ -2158,6 +2198,7 @@ TOUCHSCREEN_TOUCHWIN all=m
 TOUCHSCREEN_TI_AM335X_TSC all=m
 TOUCHSCREEN_UCB1400 all=m sparc=n
 TOUCHSCREEN_PIXCIR all=m
+TOUCHSCREEN_WDT87XX_I2C all=m
 TOUCHSCREEN_WM831X all=m
 TOUCHSCREEN_WM97XX all=m
 TOUCHSCREEN_WM9705 all=y
@@ -2391,6 +2432,7 @@ LEDS_LT3593 all=m
 LEDS_DELL_NETBOOKS all=m
 LEDS_MC13783 all=m
 LEDS_TCA6507 all=m
+LEDS_TLC591XX all=m
 LEDS_LM355x all=m
 LEDS_OT200 all=m
 LEDS_MENF21BMC all=m
@@ -2483,6 +2525,7 @@ DM_SNAPSHOT all=m
 DM_THIN_PROVISIONING all=m
 DM_CACHE all=m
 DM_CACHE_MQ all=m
+DM_CACHE_SMQ all=m
 DM_CACHE_CLEANER all=m
 DM_ERA all=m
 DM_MIRROR all=m
@@ -2742,6 +2785,7 @@ MEDIA_PCI_SUPPORT all=y
 #- file drivers/media/pci/saa7146/Kconfig goes here
 #- file drivers/media/pci/solo6x10/Kconfig goes here
 #- file drivers/media/pci/tw68/Kconfig goes here
+#- file drivers/media/pci/dt3155/Kconfig goes here
 #- Media capture/analog/hybrid TV support
 #- file drivers/media/pci/cx18/Kconfig goes here
 #- file drivers/media/pci/cx23885/Kconfig goes here
@@ -2750,6 +2794,7 @@ MEDIA_PCI_SUPPORT all=y
 #- file drivers/media/pci/bt8xx/Kconfig goes here
 #- file drivers/media/pci/saa7134/Kconfig goes here
 #- file drivers/media/pci/saa7164/Kconfig goes here
+#- file drivers/media/pci/cobalt/Kconfig goes here
 #- Media digital TV PCI Adapters
 #- file drivers/media/pci/ttpci/Kconfig goes here
 #- file drivers/media/pci/b2c2/Kconfig goes here
@@ -2775,6 +2820,11 @@ VIDEO_BT848 all=m sparc=n
 DVB_BT8XX all=m
 
 #-
+#- *** FILE: drivers/media/pci/cobalt/Kconfig ***
+#-
+VIDEO_COBALT all=m
+
+#-
 #- *** FILE: drivers/media/pci/cx18/Kconfig ***
 #-
 VIDEO_CX18 all=m sparc=n
@@ -2813,6 +2863,11 @@ DVB_DDBRIDGE all=m
 DVB_DM1105 all=m
 
 #-
+#- *** FILE: drivers/media/pci/dt3155/Kconfig ***
+#-
+VIDEO_DT3155 all=m
+
+#-
 #- *** FILE: drivers/media/pci/ivtv/Kconfig ***
 #-
 VIDEO_IVTV all=m sparc=n
@@ -3364,6 +3419,7 @@ VIDEO_V4L2 all=m
 VIDEO_ADV_DEBUG all=n
 VIDEO_FIXED_MINOR_RANGES all=n
 VIDEO_TUNER all=m sparc=
+V4L2_FLASH_LED_CLASS all=m
 VIDEOBUF2_CORE all=m
 VIDEOBUF2_MEMOPS all=m
 VIDEOBUF2_VMALLOC all=m
@@ -3526,7 +3582,6 @@ SRAM all=n
 #- file drivers/misc/cb710/Kconfig goes here
 #- file drivers/misc/ti-st/Kconfig goes here
 #- file drivers/misc/lis3lv02d/Kconfig goes here
-#- file drivers/misc/carma/Kconfig goes here
 #- file drivers/misc/altera-stapl/Kconfig goes here
 #- file drivers/misc/mei/Kconfig goes here
 #- file drivers/misc/vmw_vmci/Kconfig goes here
@@ -3592,10 +3647,14 @@ INTEL_MEI_TXE all=m
 #-
 #- Intel MIC Bus Driver
 INTEL_MIC_BUS all=m
+#- SCIF Bus Driver
+SCIF_BUS all=m
 #- Intel MIC Host Driver
 INTEL_MIC_HOST all=m
 #- Intel MIC Card Driver
 INTEL_MIC_CARD all=m
+#- SCIF Driver
+SCIF all=m
 
 #-
 #- *** FILE: drivers/misc/ti-st/Kconfig ***
@@ -3654,6 +3713,7 @@ MMC_USDHI6ROL0 all=m
 MMC_REALTEK_PCI all=m
 MMC_REALTEK_USB all=m
 MMC_TOSHIBA_PCI all=m
+MMC_MTK all=m
 
 #-
 #- *** FILE: drivers/mtd/Kconfig ***
@@ -3844,6 +3904,7 @@ MACVLAN all=m
 MACVTAP all=m
 IPVLAN all=m
 VXLAN all=m
+GENEVE all=m
 NETCONSOLE all=m
 NETCONSOLE_DYNAMIC all=y
 NTB_NETDEV all=m
@@ -3851,6 +3912,7 @@ RIONET all=m
 RIONET_TX_SIZE all=128
 RIONET_RX_SIZE all=128
 TUN all=m
+TUN_VNET_CROSS_LE all=n
 VETH all=m
 VIRTIO_NET all=m
 NLMON all=m
@@ -4043,6 +4105,7 @@ WD80x3 alpha=m i386=m
 #- file drivers/net/ethernet/broadcom/Kconfig goes here
 #- file drivers/net/ethernet/brocade/Kconfig goes here
 #- file drivers/net/ethernet/calxeda/Kconfig goes here
+#- file drivers/net/ethernet/cavium/Kconfig goes here
 #- file drivers/net/ethernet/chelsio/Kconfig goes here
 #- file drivers/net/ethernet/cirrus/Kconfig goes here
 #- file drivers/net/ethernet/cisco/Kconfig goes here
@@ -4052,6 +4115,7 @@ DNET all=m
 #- file drivers/net/ethernet/dec/Kconfig goes here
 #- file drivers/net/ethernet/dlink/Kconfig goes here
 #- file drivers/net/ethernet/emulex/Kconfig goes here
+#- file drivers/net/ethernet/ezchip/Kconfig goes here
 #- file drivers/net/ethernet/neterion/Kconfig goes here
 #- file drivers/net/ethernet/faraday/Kconfig goes here
 #- file drivers/net/ethernet/freescale/Kconfig goes here
@@ -4204,6 +4268,14 @@ MACB all=m
 NET_CALXEDA_XGMAC all=m
 
 #-
+#- *** FILE: drivers/net/ethernet/cavium/Kconfig ***
+#-
+NET_VENDOR_CAVIUM all=m
+THUNDER_NIC_PF all=m
+THUNDER_NIC_VF all=m
+LIQUIDIO all=m
+
+#-
 #- *** FILE: drivers/net/ethernet/chelsio/Kconfig ***
 #-
 CHELSIO_T1 all=m sparc=n
@@ -4271,9 +4343,15 @@ NET_VENDOR_EMULEX all=y
 #- *** FILE: drivers/net/ethernet/emulex/benet/Kconfig ***
 #-
 BE2NET all=m
+BE2NET_HWMON all=y
 BE2NET_VXLAN all=y
 
 #-
+#- *** FILE: drivers/net/ethernet/ezchip/Kconfig ***
+#-
+NET_VENDOR_EZCHIP all=y
+
+#-
 #- *** FILE: drivers/net/ethernet/freescale/Kconfig ***
 #-
 FEC_MPC52xx ppc=m
@@ -4356,6 +4434,12 @@ MLX4_EN_VXLAN all=y
 MLX4_CORE all=m
 
 #-
+#- *** FILE: drivers/net/ethernet/mellanox/mlx5/core/Kconfig ***
+#-
+MLX5_CORE all=m
+MLX5_CORE_EN all=y
+
+#-
 #- *** FILE: drivers/net/ethernet/micrel/Kconfig ***
 #-
 NET_VENDOR_MICREL all=y
@@ -4462,6 +4546,7 @@ R8169 all=m sparc=n
 #-
 #- *** FILE: drivers/net/ethernet/renesas/Kconfig ***
 #-
+NET_VENDOR_RENESAS all=y
 SH_ETH all=m
 
 #-
@@ -4488,6 +4573,7 @@ SFC all=m sparc=n
 SFC_MTD all=y
 SFC_MCDI_MON all=y
 SFC_SRIOV all=y
+SFC_MCDI_LOGGING all=y
 
 #-
 #- *** FILE: drivers/net/ethernet/silan/Kconfig ***
@@ -4630,6 +4716,7 @@ IEEE802154_FAKELB all=m
 IEEE802154_AT86RF230 all=m
 IEEE802154_MRF24J40 all=m
 IEEE802154_CC2520 all=m
+IEEE802154_ATUSB all=m
 
 #-
 #- *** FILE: drivers/net/irda/Kconfig ***
@@ -4670,7 +4757,6 @@ PHYLIB all=y
 #- MII PHY device drivers
 AT803X_PHY all=m
 AMD_PHY all=m
-AMD_XGBE_PHY all=m
 MARVELL_PHY all=m
 DAVICOM_PHY all=m
 QSEMI_PHY all=m
@@ -4688,6 +4774,7 @@ NATIONAL_PHY all=m
 STE10XP all=m
 LSI_ET1011C_PHY all=m
 MICREL_PHY all=m
+DP83867_PHY all=m
 FIXED_PHY all=y
 MDIO_BITBANG all=m
 MDIO_GPIO all=m
@@ -4853,6 +4940,7 @@ MWL8K all=m
 #- file drivers/net/wireless/orinoco/Kconfig goes here
 #- file drivers/net/wireless/p54/Kconfig goes here
 #- file drivers/net/wireless/rt2x00/Kconfig goes here
+#- file drivers/net/wireless/mediatek/Kconfig goes here
 #- file drivers/net/wireless/rtlwifi/Kconfig goes here
 #- file drivers/net/wireless/ti/Kconfig goes here
 #- file drivers/net/wireless/zd1211rw/Kconfig goes here
@@ -5040,6 +5128,17 @@ LIBERTAS_DEBUG all=n
 LIBERTAS_MESH all=y
 
 #-
+#- *** FILE: drivers/net/wireless/mediatek/Kconfig ***
+#-
+WL_MEDIATEK all=y
+#- file drivers/net/wireless/mediatek/mt7601u/Kconfig goes here
+
+#-
+#- *** FILE: drivers/net/wireless/mediatek/mt7601u/Kconfig ***
+#-
+MT7601U all=m
+
+#-
 #- *** FILE: drivers/net/wireless/mwifiex/Kconfig ***
 #-
 MWIFIEX all=m
@@ -5177,7 +5276,7 @@ NFC_PORT100 all=m
 #- file drivers/nfc/microread/Kconfig goes here
 #- file drivers/nfc/nfcmrvl/Kconfig goes here
 #- file drivers/nfc/st21nfca/Kconfig goes here
-#- file drivers/nfc/st21nfcb/Kconfig goes here
+#- file drivers/nfc/st-nci/Kconfig goes here
 #- file drivers/nfc/nxp-nci/Kconfig goes here
 
 #-
@@ -5192,6 +5291,7 @@ NFC_MICROREAD_MEI all=m
 #-
 NFC_MRVL all=m
 NFC_MRVL_USB all=m
+NFC_MRVL_UART all=m
 
 #-
 #- *** FILE: drivers/nfc/nxp-nci/Kconfig ***
@@ -5207,21 +5307,47 @@ NFC_PN544_I2C all=m
 NFC_PN544_MEI all=m
 
 #-
+#- *** FILE: drivers/nfc/st-nci/Kconfig ***
+#-
+NFC_ST_NCI all=m
+NFC_ST_NCI_I2C all=m
+
+#-
 #- *** FILE: drivers/nfc/st21nfca/Kconfig ***
 #-
 NFC_ST21NFCA all=m
 NFC_ST21NFCA_I2C all=m
 
 #-
-#- *** FILE: drivers/nfc/st21nfcb/Kconfig ***
+#- *** FILE: drivers/ntb/Kconfig ***
 #-
-NFC_ST21NFCB all=m
-NFC_ST21NFCB_I2C all=m
+NTB all=m
+#- file drivers/ntb/hw/Kconfig goes here
+#- file drivers/ntb/test/Kconfig goes here
+NTB_TRANSPORT all=m
 
 #-
-#- *** FILE: drivers/ntb/Kconfig ***
+#- *** FILE: drivers/ntb/hw/intel/Kconfig ***
 #-
-NTB all=m
+NTB_INTEL all=m
+
+#-
+#- *** FILE: drivers/ntb/test/Kconfig ***
+#-
+NTB_PINGPONG all=m
+NTB_TOOL all=m
+
+#-
+#- *** FILE: drivers/nvdimm/Kconfig ***
+#-
+BLK_DEV_PMEM all=m
+ND_BLK all=m
+BTT all=y
+
+#-
+#- *** FILE: drivers/of/Kconfig ***
+#-
+OF all=n
 
 #-
 #- *** FILE: drivers/parisc/Kconfig ***
@@ -5330,10 +5456,13 @@ PCCARD_NONSTATIC all=y
 #-
 GENERIC_PHY all=y
 PHY_EXYNOS_MIPI_VIDEO all=m
+PHY_PXA_28NM_HSIC all=m
+PHY_PXA_28NM_USB2 all=m
 OMAP_USB2 all=m
 TWL4030_USB all=m
 BCM_KONA_USB2_PHY all=m
 PHY_SAMSUNG_USB2 all=m
+PHY_TUSB1210 all=m
 
 #-
 #- *** FILE: drivers/pinctrl/Kconfig ***
@@ -5385,6 +5514,7 @@ DELL_LAPTOP all=m
 DELL_WMI all=m
 DELL_WMI_AIO all=m
 DELL_SMO8800 all=m
+DELL_RBTN all=m
 FUJITSU_LAPTOP all=m
 FUJITSU_LAPTOP_DEBUG all=n
 FUJITSU_TABLET all=m
@@ -5432,6 +5562,7 @@ APPLE_GMUX all=m
 INTEL_RST all=m
 INTEL_SMARTCONNECT all=m
 PVPANIC all=m
+INTEL_PMC_IPC all=m
 
 #-
 #- *** FILE: drivers/pnp/Kconfig ***
@@ -5494,11 +5625,14 @@ CHARGER_GPIO all=m
 CHARGER_MANAGER all=y
 CHARGER_BQ2415X all=m
 CHARGER_BQ24190 all=m
+CHARGER_BQ24257 all=m
 CHARGER_BQ24735 all=m
+CHARGER_BQ25890 all=m
 CHARGER_SMB347 all=m
 BATTERY_GAUGE_LTC2941 all=m
 AB8500_BM all=n
 BATTERY_GOLDFISH all=m
+CHARGER_RT9455 all=m
 #- file drivers/power/reset/Kconfig goes here
 #- file drivers/power/avs/Kconfig goes here
 
@@ -5616,6 +5750,7 @@ REGULATOR_PCAP all=m
 REGULATOR_PCF50633 all=m
 REGULATOR_PFUZE100 all=m
 REGULATOR_PWM all=m
+REGULATOR_QCOM_SPMI all=m
 REGULATOR_RN5T618 all=m
 REGULATOR_SKY81452 all=m
 REGULATOR_TPS51632 all=m
@@ -5650,8 +5785,9 @@ RESET_CONTROLLER all=y
 RTC_LIB all=y
 RTC_CLASS all=y
 RTC_HCTOSYS all=y
-RTC_SYSTOHC all=y
 RTC_HCTOSYS_DEVICE all="rtc0"
+RTC_SYSTOHC all=y
+RTC_SYSTOHC_DEVICE all="rtc0"
 RTC_DEBUG all=n
 #- RTC interfaces
 RTC_INTF_SYSFS all=y
@@ -5738,6 +5874,7 @@ RTC_DRV_PS3 ppc64=m
 RTC_DRV_PCAP all=m
 RTC_DRV_MC13XXX all=m
 RTC_DRV_MOXART all=m
+RTC_DRV_MT6397 all=m
 RTC_DRV_XGENE all=m
 #- HID Sensor RTC drivers
 RTC_DRV_HID_SENSOR_TIME all=m
@@ -5820,6 +5957,8 @@ LIBFC all=m
 LIBFCOE all=m
 FCOE all=m
 FCOE_FNIC all=m
+SCSI_SNIC all=m
+SCSI_SNIC_DEBUG_FS all=y
 SCSI_DMX3191D all=m
 SCSI_DTC3280 alpha=m i386=m
 SCSI_EATA all=m
@@ -6073,6 +6212,7 @@ SPI_SC18IS602 all=m
 SPI_TOPCLIFF_PCH all=m
 SPI_XCOMM all=m
 SPI_XILINX all=m
+SPI_ZYNQMP_GQSPI all=m
 SPI_DESIGNWARE all=y
 SPI_DW_PCI all=m
 SPI_DW_MID_DMA all=y
@@ -6142,8 +6282,8 @@ STAGING all=y
 #- file drivers/staging/unisys/Kconfig goes here
 #- file drivers/staging/clocking-wizard/Kconfig goes here
 #- file drivers/staging/fbtft/Kconfig goes here
-#- file drivers/staging/i2o/Kconfig goes here
 #- file drivers/staging/fsl-mc/Kconfig goes here
+#- file drivers/staging/wilc1000/Kconfig goes here
 
 #-
 #- *** FILE: drivers/staging/comedi/Kconfig ***
@@ -6268,6 +6408,7 @@ COMEDI_USBDUX all=m
 COMEDI_USBDUXFAST all=m
 COMEDI_USBDUXSIGMA all=m
 COMEDI_VMK80XX all=m
+COMEDI_8255_SA all=m
 COMEDI_KCOMEDILIB all=m
 COMEDI_AMPLC_DIO200 all=m
 COMEDI_AMPLC_PC236 all=m
@@ -6293,6 +6434,7 @@ FB_TFT_BD663474 all=m
 FB_TFT_HX8340BN all=m
 FB_TFT_HX8347D all=m
 FB_TFT_HX8353D all=m
+FB_TFT_HX8357D all=m
 FB_TFT_ILI9163 all=m
 FB_TFT_ILI9320 all=m
 FB_TFT_ILI9325 all=m
@@ -6353,20 +6495,6 @@ WIMAX_GDM72XX_USB_PM all=y
 GS_FPGABOOT all=m
 
 #-
-#- *** FILE: drivers/staging/i2o/Kconfig ***
-#-
-I2O all=m sparc=n
-I2O_LCT_NOTIFY_ON_CHANGES all=y
-I2O_EXT_ADAPTEC all=y
-I2O_EXT_ADAPTEC_DMA64 all=y
-I2O_CONFIG all=m sparc64=n
-I2O_CONFIG_OLD_IOCTL all=y x86_64=n
-I2O_BUS all=m
-I2O_BLOCK all=m
-I2O_SCSI all=m
-I2O_PROC all=m
-
-#-
 #- *** FILE: drivers/staging/iio/Kconfig ***
 #-
 #- file drivers/staging/iio/accel/Kconfig goes here
@@ -6499,7 +6627,6 @@ STAGING_MEDIA all=y
 #- file drivers/staging/media/bcm2048/Kconfig goes here
 #- file drivers/staging/media/cxd2099/Kconfig goes here
 #- file drivers/staging/media/davinci_vpfe/Kconfig goes here
-#- file drivers/staging/media/dt3155v4l/Kconfig goes here
 #- file drivers/staging/media/mn88472/Kconfig goes here
 #- file drivers/staging/media/mn88473/Kconfig goes here
 #- file drivers/staging/media/omap4iss/Kconfig goes here
@@ -6516,13 +6643,6 @@ I2C_BCM2048 all=m
 DVB_CXD2099 all=m
 
 #-
-#- *** FILE: drivers/staging/media/dt3155v4l/Kconfig ***
-#-
-VIDEO_DT3155 all=m
-DT3155_CCIR all=y
-DT3155_STREAMING all=y
-
-#-
 #- *** FILE: drivers/staging/media/lirc/Kconfig ***
 #-
 LIRC_STAGING all=y
@@ -6655,42 +6775,18 @@ TOUCHSCREEN_SYNAPTICS_I2C_RMI4 all=m
 #- *** FILE: drivers/staging/unisys/Kconfig ***
 #-
 UNISYSSPAR all=y
-#- file drivers/staging/unisys/visorutil/Kconfig goes here
-#- file drivers/staging/unisys/visorchannel/Kconfig goes here
-#- file drivers/staging/unisys/visorchipset/Kconfig goes here
-#- file drivers/staging/unisys/uislib/Kconfig goes here
-#- file drivers/staging/unisys/virtpci/Kconfig goes here
-#- file drivers/staging/unisys/virthba/Kconfig goes here
+#- file drivers/staging/unisys/visorbus/Kconfig goes here
+#- file drivers/staging/unisys/visornic/Kconfig goes here
 
 #-
-#- *** FILE: drivers/staging/unisys/uislib/Kconfig ***
+#- *** FILE: drivers/staging/unisys/visorbus/Kconfig ***
 #-
-UNISYS_UISLIB all=m
+UNISYS_VISORBUS all=m
 
 #-
-#- *** FILE: drivers/staging/unisys/virthba/Kconfig ***
+#- *** FILE: drivers/staging/unisys/visornic/Kconfig ***
 #-
-UNISYS_VIRTHBA all=m
-
-#-
-#- *** FILE: drivers/staging/unisys/virtpci/Kconfig ***
-#-
-UNISYS_VIRTPCI all=m
-
-#-
-#- *** FILE: drivers/staging/unisys/visorchannel/Kconfig ***
-#-
-UNISYS_VISORCHANNEL all=m
-
-#-
-#- *** FILE: drivers/staging/unisys/visorchipset/Kconfig ***
-#-
-UNISYS_VISORCHIPSET all=m
-
-#-
-#- *** FILE: drivers/staging/unisys/visorutil/Kconfig ***
-#-
-UNISYS_VISORUTIL all=m
+UNISYS_VISORNIC all=m
 
 #-
 #- *** FILE: drivers/staging/vme/devices/Kconfig ***
@@ -6756,12 +6852,15 @@ TCM_FC all=m
 #- *** FILE: drivers/thermal/Kconfig ***
 #-
 THERMAL all=y
+THERMAL_WRITABLE_TRIPS all=y
 THERMAL_DEFAULT_GOV_STEP_WISE all=y
 THERMAL_DEFAULT_GOV_FAIR_SHARE all=n
 THERMAL_DEFAULT_GOV_USER_SPACE all=n
+THERMAL_DEFAULT_GOV_POWER_ALLOCATOR all=n
 THERMAL_GOV_FAIR_SHARE all=y
 THERMAL_GOV_BANG_BANG all=y
 THERMAL_GOV_USER_SPACE all=y
+THERMAL_GOV_POWER_ALLOCATOR all=y
 CPU_THERMAL all=y
 THERMAL_EMULATION all=n
 INTEL_POWERCLAMP all=m
@@ -6811,7 +6910,6 @@ TRACE_SINK all=m
 HVC_DRIVER ppc64=y
 HVC_CONSOLE ppc64=n
 HVC_RTAS ppc=y ppc64=y
-HVC_BEAT ppc64=n
 HVC_XEN all=y
 HVC_XEN_FRONTEND all=y
 HVC_UDBG all=n
@@ -6876,6 +6974,8 @@ SERIAL_OF_PLATFORM ppc=m ppc64=m
 SERIAL_OF_PLATFORM_NWPSERIAL powerpc=m
 SERIAL_SCCNXP all=m
 SERIAL_SC16IS7XX all=m
+SERIAL_SC16IS7XX_I2C all=y
+SERIAL_SC16IS7XX_SPI all=y
 SERIAL_TIMBERDALE all=m
 SERIAL_ALTERA_JTAGUART all=m
 SERIAL_ALTERA_UART all=m
@@ -6903,6 +7003,7 @@ UIO_AEC all=m
 UIO_SERCOS3 all=m
 UIO_PCI_GENERIC all=m
 UIO_NETX all=m
+UIO_PRUSS all=m
 UIO_MF624 all=m
 
 #-
@@ -6975,6 +7076,7 @@ USB_OTG all=y
 USB_OTG_WHITELIST all=y
 USB_OTG_BLACKLIST_HUB all=n
 USB_OTG_FSM all=m
+USB_ULPI_BUS all=m
 
 #-
 #- *** FILE: drivers/usb/dwc2/Kconfig ***
@@ -6988,6 +7090,7 @@ USB_DWC2_TRACK_MISSED_SOFS all=n
 #- *** FILE: drivers/usb/dwc3/Kconfig ***
 #-
 USB_DWC3 all=m
+USB_DWC3_ULPI all=y
 USB_DWC3_HOST all=n
 USB_DWC3_GADGET all=n
 USB_DWC3_DUAL_ROLE all=y
@@ -7347,6 +7450,7 @@ VFIO_PCI_INTX all=y
 #-
 VHOST_NET all=m
 VHOST_SCSI all=m
+VHOST_CROSS_ENDIAN_LEGACY all=n
 
 #-
 #- *** FILE: drivers/video/Kconfig ***
@@ -7666,6 +7770,7 @@ CADENCE_WATCHDOG all=m
 DW_WATCHDOG all=m
 RN5T618_WATCHDOG all=m
 TWL4030_WATCHDOG powerpc=m
+MAX63XX_WATCHDOG all=m
 RETU_WATCHDOG all=m
 ACQUIRE_WDT i386=m x86_64=m
 ADVANTECH_WDT i386=m x86_64=m
@@ -7766,7 +7871,6 @@ FS_MBCACHE all=m
 #- file fs/btrfs/Kconfig goes here
 #- file fs/nilfs2/Kconfig goes here
 #- file fs/f2fs/Kconfig goes here
-#- file fs/aufs/Kconfig goes here
 FS_DAX all=y
 FS_POSIX_ACL all=y
 FILE_LOCKING all=y
@@ -7815,6 +7919,7 @@ MISC_FILESYSTEMS all=y
 #- file fs/sysv/Kconfig goes here
 #- file fs/ufs/Kconfig goes here
 #- file fs/exofs/Kconfig goes here
+#- file fs/aufs/Kconfig goes here
 #- file fs/exofs/Kconfig.ore goes here
 NETWORK_FILESYSTEMS all=y
 #- file fs/nfs/Kconfig goes here
@@ -7921,6 +8026,7 @@ CIFS_DEBUG all=y
 CIFS_DEBUG2 all=n
 CIFS_DFS_UPCALL all=n
 CIFS_SMB2 all=y
+CIFS_SMB311 all=y
 CIFS_FSCACHE all=y
 
 #-
@@ -8002,6 +8108,7 @@ F2FS_FS_XATTR all=y
 F2FS_FS_POSIX_ACL all=y
 F2FS_FS_SECURITY all=y
 F2FS_CHECK_FS all=y
+F2FS_FS_ENCRYPTION all=y
 F2FS_IO_TRACE all=y
 
 #-
@@ -8261,6 +8368,7 @@ OVERLAY_FS all=m
 PROC_FS all=y
 PROC_KCORE all=y
 PROC_SYSCTL all=y
+PROC_CHILDREN all=y
 
 #-
 #- *** FILE: fs/pstore/Kconfig ***
@@ -8406,11 +8514,11 @@ TASK_DELAY_ACCT all=y
 TASK_XACCT all=y
 TASK_IO_ACCOUNTING all=y
 TREE_RCU all=y
+RCU_EXPERT all=n
 TASKS_RCU all=n
 RCU_USER_QS all=n
 RCU_FANOUT all=32 alpha=64 ia64=64 ppc64=64 sparc64=64 x86_64=64
 RCU_FANOUT_LEAF all=16
-RCU_FANOUT_EXACT all=n
 RCU_FAST_NO_HZ all=y
 RCU_KTHREAD_PRIO all=0
 RCU_NOCB_CPU all=n
@@ -8717,10 +8825,13 @@ DEBUG_NOTIFIERS all=n
 DEBUG_CREDENTIALS all=n
 SPARSE_RCU_POINTER all=n
 RCU_TORTURE_TEST all=m
+RCU_TORTURE_TEST_SLOW_PREINIT all=n
 RCU_TORTURE_TEST_SLOW_INIT all=n
+RCU_TORTURE_TEST_SLOW_CLEANUP all=n
 RCU_CPU_STALL_TIMEOUT all=60
 RCU_CPU_STALL_INFO all=n
 RCU_TRACE all=n
+RCU_EQS_DEBUG all=n
 DEBUG_BLOCK_EXT_DEVT all=n
 NOTIFIER_ERROR_INJECTION all=m
 CPU_NOTIFIER_ERROR_INJECT all=m
@@ -8836,6 +8947,7 @@ ZBUD all=m
 ZSMALLOC all=y
 PGTABLE_MAPPING all=n
 ZSMALLOC_STAT all=y
+DEFERRED_STRUCT_PAGE_INIT all=n
 
 #-
 #- *** FILE: mm/Kconfig.debug ***
@@ -9164,7 +9276,7 @@ SYN_COOKIES all=y
 NET_IPVTI all=m
 NET_FOU all=m
 NET_FOU_IP_TUNNELS all=y
-GENEVE all=m
+GENEVE_CORE all=m
 INET_AH all=m
 INET_ESP all=m
 INET_IPCOMP all=m
@@ -9191,6 +9303,7 @@ TCP_CONG_VENO all=m
 TCP_CONG_YEAH all=m
 TCP_CONG_ILLINOIS all=m
 TCP_CONG_DCTCP all=m
+TCP_CONG_CDG all=m
 DEFAULT_BIC all=n
 DEFAULT_CUBIC all=y
 DEFAULT_HTCP all=n
@@ -9385,6 +9498,7 @@ MPLS_ROUTING all=m
 #-
 #- *** FILE: net/netfilter/Kconfig ***
 #-
+NETFILTER_INGRESS all=y
 NETFILTER_NETLINK_ACCT all=m
 NETFILTER_NETLINK_QUEUE all=m
 NETFILTER_NETLINK_LOG all=m
@@ -9418,6 +9532,7 @@ NF_NAT all=m
 NF_NAT_REDIRECT all=m
 NF_TABLES all=m
 NF_TABLES_INET all=m
+NF_TABLES_NETDEV all=m
 NFT_EXTHDR all=m
 NFT_META all=m
 NFT_CT all=m
@@ -9595,6 +9710,7 @@ NFC_SHDLC all=y
 #-
 NFC_NCI all=m
 NFC_NCI_SPI all=y
+NFC_NCI_UART all=m
 
 #-
 #- *** FILE: net/openvswitch/Kconfig ***
@@ -9682,6 +9798,7 @@ NET_CLS_RSVP6 all=m
 NET_CLS_FLOW all=m
 NET_CLS_CGROUP all=y
 NET_CLS_BPF all=m
+NET_CLS_FLOWER all=m
 NET_EMATCH all=y
 NET_EMATCH_STACK all=32
 NET_EMATCH_CMP all=m
@@ -9726,8 +9843,7 @@ SUNRPC all=m
 SUNRPC_GSS all=m
 RPCSEC_GSS_KRB5 all=m
 SUNRPC_DEBUG all=y
-SUNRPC_XPRT_RDMA_CLIENT all=m
-SUNRPC_XPRT_RDMA_SERVER all=m
+SUNRPC_XPRT_RDMA all=m
 
 #-
 #- *** FILE: net/switchdev/Kconfig ***
@@ -10007,6 +10123,11 @@ SND_FIREWORKS all=m
 SND_BEBOB all=m
 
 #-
+#- *** FILE: sound/hda/Kconfig ***
+#-
+SND_HDA_PREALLOC_SIZE all=2048
+
+#-
 #- *** FILE: sound/isa/Kconfig ***
 #-
 SND_SB_COMMON alpha=m i386=m ppc=m x86_64=m
@@ -10161,12 +10282,10 @@ SND_YMFPCI all=m
 #- *** FILE: sound/pci/hda/Kconfig ***
 #-
 SND_HDA_INTEL all=m sparc=n
-SND_HDA_PREALLOC_SIZE all=2048
 SND_HDA_HWDEP all=y
 SND_HDA_RECONFIG all=y
 SND_HDA_INPUT_BEEP all=y
 SND_HDA_INPUT_BEEP_MODE all=1
-SND_HDA_INPUT_JACK all=y
 SND_HDA_PATCH_LOADER all=y
 SND_HDA_CODEC_REALTEK all=m
 #- Set to Y if you want auto-loading the codec driver
@@ -10229,6 +10348,7 @@ SND_SOC all=m
 #- file sound/soc/omap/Kconfig goes here
 #- file sound/soc/kirkwood/Kconfig goes here
 #- file sound/soc/intel/Kconfig goes here
+#- file sound/soc/mediatek/Kconfig goes here
 #- file sound/soc/mxs/Kconfig goes here
 #- file sound/soc/pxa/Kconfig goes here
 #- file sound/soc/qcom/Kconfig goes here
@@ -10241,6 +10361,7 @@ SND_SOC all=m
 #- file sound/soc/txx9/Kconfig goes here
 #- file sound/soc/ux500/Kconfig goes here
 #- file sound/soc/xtensa/Kconfig goes here
+#- file sound/soc/zte/Kconfig goes here
 #- file sound/soc/codecs/Kconfig goes here
 #- file sound/soc/generic/Kconfig goes here
 
@@ -10253,6 +10374,7 @@ SND_ATMEL_SOC all=m
 #- *** FILE: sound/soc/codecs/Kconfig ***
 #-
 SND_SOC_ALL_CODECS all=m
+SND_SOC_AC97_CODEC all=m
 SND_SOC_ADAU1701 all=m
 SND_SOC_AK4104 all=m
 SND_SOC_AK4554 all=m
@@ -10294,6 +10416,7 @@ SND_SOC_STA32X all=m
 SND_SOC_STA350 all=m
 SND_SOC_TAS2552 all=m
 SND_SOC_TAS5086 all=m
+SND_SOC_TAS571X all=m
 SND_SOC_TFA9879 all=m
 SND_SOC_TLV320AIC23 all=m
 SND_SOC_TLV320AIC23_I2C all=m
@@ -10365,6 +10488,7 @@ SND_SOC_INTEL_BROADWELL_MACH all=m
 SND_SOC_INTEL_BYTCR_RT5640_MACH all=m
 SND_SOC_INTEL_CHT_BSW_RT5672_MACH all=m
 SND_SOC_INTEL_CHT_BSW_RT5645_MACH all=m
+SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH all=m
 
 #-
 #- *** FILE: sound/soc/qcom/Kconfig ***
@@ -10428,28 +10552,54 @@ RD_LZ4 all=y
 #-
 #- *** PROBABLY REMOVED OPTIONS ***
 #-
+AMD_XGBE_PHY all=m
 ARM_AT91_ETHER all=m
 BLK_DEV_CELLEB ppc64=m
 BLK_DEV_XIP all=y
+DT3155_CCIR all=y
+DT3155_STREAMING all=y
 DWC3_HOST_USB3_LPM_ENABLE all=y
 EXT2_FS_XIP all=y
 FS_XIP all=y
 HID_HUION all=m
+HVC_BEAT ppc64=n
+I2O all=m sparc=n
+I2O_BLOCK all=m
+I2O_BUS all=m
+I2O_CONFIG all=m sparc64=n
+I2O_CONFIG_OLD_IOCTL all=y x86_64=n
+I2O_EXT_ADAPTEC all=y
+I2O_EXT_ADAPTEC_DMA64 all=y
+I2O_LCT_NOTIFY_ON_CHANGES all=y
+I2O_PROC all=m
+I2O_SCSI all=m
 INIT_FALLBACK all=y
 INTEL_MID_DMAC all=m
 KEYS_DEBUG_PROC_KEYS all=n
 LINE6_USB all=m
 LINE6_USB_IMPULSE_RESPONSE all=n
 MEDIA_PARPORT_SUPPORT all=y
+NFC_ST21NFCB all=m
+NFC_ST21NFCB_I2C all=m
 PATA_SCC ppc64=m
+RCU_FANOUT_EXACT all=n
 SERIAL_MFD_HSU all=m
 SERIAL_MRST_MAX3110 all=m
+SND_HDA_INPUT_JACK all=y
+SUNRPC_XPRT_RDMA_CLIENT all=m
+SUNRPC_XPRT_RDMA_SERVER all=m
 TCG_ST33_I2C all=m
 TCG_TIS_I2C_ST33 all=m
 TCM_USER all=m
 TIPC_PORTS all=8191
 TOUCHSCREEN_CLEARPAD_TM1217 all=m
 UNISYS_CHANNELSTUB all=m
+UNISYS_UISLIB all=m
+UNISYS_VIRTHBA all=m
+UNISYS_VIRTPCI all=m
+UNISYS_VISORCHANNEL all=m
+UNISYS_VISORCHIPSET all=m
+UNISYS_VISORUTIL all=m
 VIDEO_BTCX all=m sparc=
 VIDEO_BWQCAM all=m
 VIDEO_CQCAM all=m
@@ -10457,3 +10607,4 @@ VIDEO_PMS all=m
 VIDEO_SAA7191 all=m
 VIDEO_TLG2300 all=m
 VIDEO_W9966 all=m
+ZRAM_DEBUG all=n
diff --git a/kernel-virtio-gl-accel.patch b/kernel-virtio-gl-accel.patch
index 03fd001..c539b57 100644
--- a/kernel-virtio-gl-accel.patch
+++ b/kernel-virtio-gl-accel.patch
@@ -52,7 +52,6 @@ index 0000000..8882bda
 + * along with this program; if not, write to the Free Software
 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 + */
-+
 +#include <linux/kernel.h>
 +#include <linux/module.h>
 +#include <linux/fs.h>
@@ -60,6 +59,7 @@ index 0000000..8882bda
 +#include <linux/sched.h>
 +#include <linux/slab.h>
 +#include <linux/miscdevice.h>
++#include <linux/vmalloc.h>
 +#include <linux/virtio.h>
 +#include <linux/virtio_ids.h>
 +#include <linux/virtio_config.h>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/kernel.git/commitdiff/c2c0f25cba50bfcba203019d305e6b97eaebe9ed



More information about the pld-cvs-commit mailing list