[packages/kernel] - partial 3.10 update

arekm arekm at pld-linux.org
Mon Jul 1 13:26:05 CEST 2013


commit c06a8ce3c653ae31d4fe4fdbc34a86037ca55bbf
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Mon Jul 1 13:26:00 2013 +0200

    - partial 3.10 update

 kernel-aufs3.patch                                 | 478 +++++++++++----------
 kernel-multiarch.config                            | 334 +++++++++-----
 kernel-small_fixes.patch                           | 171 --------
 kernel-x86.config                                  |  13 +-
 kernel-zph.patch                                   |   3 +-
 kernel.spec                                        |  30 +-
 ovl02-vfs-export-do_splice_direct-to-modules.patch |  41 +-
 ...03-vfs-export-inode_permission-to-modules.patch |  22 +-
 ...> ovl04-vfs-introduce-clone_private_mount.patch |  35 +-
 ...esystem.patch => ovl05-overlay-filesystem.patch | 134 +++---
 ...tch => ovl06-overlayfs-add-statfs-support.patch |  16 +-
 ...=> ovl07-overlayfs-implement-show_options.patch |  16 +-
 ...-overlay-overlay-filesystem-documentation.patch |  15 +-
 ... ovl09-fs-limit-filesystem-stacking-depth.patch |  30 +-
 ...rlayfs-fix-possible-leak-in-ovl_new_inode.patch |  27 --
 ovl10-overlayfs-create-new-inode-in-ovl_link.patch |  74 ----
 ovl12-ovl-switch-to-__inode_permission.patch       |  45 --
 ...opy-up-i_uid-i_gid-from-the-underlying-in.patch |  96 -----
 18 files changed, 665 insertions(+), 915 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index 8aaf519..1c797c2 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -66,9 +66,9 @@
 %define		have_pcmcia	0
 %endif
 
-%define		rel		1
-%define		basever		3.9
-%define		postver		.8
+%define		rel		0.1
+%define		basever		3.10
+%define		postver		.0
 
 # __alt_kernel is list of features, empty string if none set
 # _alt kernel is defined as: %{nil}%{?alt_kernel:-%{?alt_kernel}} (defined in rpm.macros)
@@ -108,7 +108,7 @@ Epoch:		3
 License:	GPL v2
 Group:		Base/Kernel
 Source0:	http://www.kernel.org/pub/linux/kernel/v3.x/linux-%{basever}.tar.xz
-# Source0-md5:	4348c9b6b2eb3144d601e87c19d5d909
+# Source0-md5:	4f25cd5bec5f8d5a7d935b3f2ccb8481
 %if "%{postver}" != ".0"
 Patch0:		http://www.kernel.org/pub/linux/kernel/v3.x/patch-%{version}.xz
 # Patch0-md5:	c5f2166686a913abf550bfed8b77df27
@@ -198,17 +198,13 @@ Patch101:	kernel-vserver-fixes.patch
 # patches.suse/ovl*
 Patch110:	ovl01-vfs-add-i_op-dentry_open.patch
 Patch111:	ovl02-vfs-export-do_splice_direct-to-modules.patch
-Patch112:	ovl03-vfs-introduce-clone_private_mount.patch
-Patch113:	ovl04-overlay-filesystem.patch
-Patch114:	ovl05-overlayfs-add-statfs-support.patch
-Patch115:	ovl06-overlayfs-implement-show_options.patch
-Patch116:	ovl07-overlay-overlay-filesystem-documentation.patch
-Patch117:	ovl08-fs-limit-filesystem-stacking-depth.patch
-Patch118:	ovl09-overlayfs-fix-possible-leak-in-ovl_new_inode.patch
-Patch119:	ovl10-overlayfs-create-new-inode-in-ovl_link.patch
-Patch120:	ovl11-vfs-export-__inode_permission-to-modules.patch
-Patch121:	ovl12-ovl-switch-to-__inode_permission.patch
-Patch122:	ovl13-overlayfs-copy-up-i_uid-i_gid-from-the-underlying-in.patch
+Patch112:	ovl03-vfs-export-inode_permission-to-modules.patch
+Patch113:	ovl04-vfs-introduce-clone_private_mount.patch
+Patch114:	ovl05-overlay-filesystem.patch
+Patch115:	ovl06-overlayfs-add-statfs-support.patch
+Patch116:	ovl07-overlayfs-implement-show_options.patch
+Patch117:	ovl08-overlay-overlay-filesystem-documentation.patch
+Patch118:	ovl09-fs-limit-filesystem-stacking-depth.patch
 
 # git://aufs.git.sourceforge.net/gitroot/aufs/aufs3-standalone.git, read README
 # Patch creation:
@@ -691,10 +687,6 @@ cd linux-%{basever}
 %patch116 -p1
 %patch117 -p1
 %patch118 -p1
-%patch119 -p1
-%patch120 -p1
-%patch121 -p1
-%patch122 -p1
 
 # aufs3
 %patch145 -p1
diff --git a/kernel-aufs3.patch b/kernel-aufs3.patch
index e01d1db..c47b8f3 100644
--- a/kernel-aufs3.patch
+++ b/kernel-aufs3.patch
@@ -1,13 +1,13 @@
-aufs3.8 kbuild patch
+aufs3.x-rcN kbuild patch
 
 diff --git a/fs/Kconfig b/fs/Kconfig
 index 780725a..d460c05 100644
 --- a/fs/Kconfig
 +++ b/fs/Kconfig
-@@ -211,6 +211,7 @@ source "fs/sysv/Kconfig"
- source "fs/ufs/Kconfig"
+@@ -213,6 +213,7 @@ source "fs/ufs/Kconfig"
  source "fs/exofs/Kconfig"
  source "fs/f2fs/Kconfig"
+ source "fs/efivarfs/Kconfig"
 +source "fs/aufs/Kconfig"
  
  endif # MISC_FILESYSTEMS
@@ -16,15 +16,27 @@ diff --git a/fs/Makefile b/fs/Makefile
 index 9d53192..e70f08f 100644
 --- a/fs/Makefile
 +++ b/fs/Makefile
-@@ -127,3 +127,4 @@ obj-$(CONFIG_F2FS_FS)		+= f2fs/
- obj-y				+= exofs/ # Multiple modules
+@@ -127,3 +127,4 @@ obj-y				+= exofs/ # Multiple modules
  obj-$(CONFIG_CEPH_FS)		+= ceph/
  obj-$(CONFIG_PSTORE)		+= pstore/
-+obj-$(CONFIG_AUFS_FS)           += aufs/
-aufs3.8 base patch
+ obj-$(CONFIG_EFIVAR_FS)		+= efivarfs/
++obj-$(CONFIG_AUFS_FS)		+= aufs/
+diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild
+index 5c8a1d2..fea7572 100644
+--- a/include/uapi/linux/Kbuild
++++ b/include/uapi/linux/Kbuild
+@@ -56,6 +56,7 @@ header-y += atmppp.h
+ header-y += atmsap.h
+ header-y += atmsvc.h
+ header-y += audit.h
++header-y += aufs_type.h
+ header-y += auto_fs.h
+ header-y += auto_fs4.h
+ header-y += auxvec.h
+aufs3.x-rcN base patch
 
 diff --git a/fs/file_table.c b/fs/file_table.c
-index de9e965..e73287a 100644
+index cd4d87a..ca5948f 100644
 --- a/fs/file_table.c
 +++ b/fs/file_table.c
 @@ -36,7 +36,7 @@ struct files_stat_struct files_stat = {
@@ -37,10 +49,10 @@ index de9e965..e73287a 100644
  /* SLAB cache for file structures */
  static struct kmem_cache *filp_cachep __read_mostly;
 diff --git a/fs/inode.c b/fs/inode.c
-index 14084b7..ece87ed 100644
+index f5f7c06..0b99538 100644
 --- a/fs/inode.c
 +++ b/fs/inode.c
-@@ -1503,7 +1503,7 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
+@@ -1498,7 +1498,7 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
   * This does the actual work of updating an inodes time or version.  Must have
   * had called mnt_want_write() before calling this.
   */
@@ -50,10 +62,10 @@ index 14084b7..ece87ed 100644
  	if (inode->i_op->update_time)
  		return inode->i_op->update_time(inode, time, flags);
 diff --git a/fs/splice.c b/fs/splice.c
-index 6909d89..020c7bc 100644
+index 718bd00..c717dbb 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
-@@ -1092,8 +1092,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
+@@ -1093,8 +1093,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
  /*
   * Attempt to initiate a splice from pipe to file.
   */
@@ -64,7 +76,7 @@ index 6909d89..020c7bc 100644
  {
  	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
  				loff_t *, size_t, unsigned int);
-@@ -1120,9 +1120,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+@@ -1121,9 +1121,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
  /*
   * Attempt to initiate a splice from a file to a pipe.
   */
@@ -78,10 +90,10 @@ index 6909d89..020c7bc 100644
  	ssize_t (*splice_read)(struct file *, loff_t *,
  			       struct pipe_inode_info *, size_t, unsigned int);
 diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 7617ee0..1a39c33 100644
+index 2c28271..5c49108 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -2551,6 +2551,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *);
+@@ -2558,6 +2558,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *);
  extern int inode_newsize_ok(const struct inode *, loff_t offset);
  extern void setattr_copy(struct inode *inode, const struct iattr *attr);
  
@@ -104,10 +116,10 @@ index 09a545a..1ac5727 100644
 +			 struct pipe_inode_info *pipe, size_t len,
 +			 unsigned int flags);
  #endif
-aufs3.8 standalone patch
+aufs3.x-rcN standalone patch
 
 diff --git a/fs/file_table.c b/fs/file_table.c
-index e73287a..b33aebe 100644
+index ca5948f..b553610 100644
 --- a/fs/file_table.c
 +++ b/fs/file_table.c
 @@ -37,6 +37,7 @@ struct files_stat_struct files_stat = {
@@ -118,7 +130,7 @@ index e73287a..b33aebe 100644
  
  /* SLAB cache for file structures */
  static struct kmem_cache *filp_cachep __read_mostly;
-@@ -403,6 +404,8 @@ void file_sb_list_del(struct file *file)
+@@ -404,6 +405,8 @@ void file_sb_list_del(struct file *file)
  	}
  }
  
@@ -128,7 +140,7 @@ index e73287a..b33aebe 100644
  
  /*
 diff --git a/fs/inode.c b/fs/inode.c
-index ece87ed..38f7bc8 100644
+index 0b99538..46a6995 100644
 --- a/fs/inode.c
 +++ b/fs/inode.c
 @@ -56,6 +56,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
@@ -139,7 +151,7 @@ index ece87ed..38f7bc8 100644
  
  /*
   * Empty aops. Can be used for the cases where the user does not
-@@ -1519,6 +1520,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags)
+@@ -1514,6 +1515,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags)
  	mark_inode_dirty_sync(inode);
  	return 0;
  }
@@ -148,7 +160,7 @@ index ece87ed..38f7bc8 100644
  /**
   *	touch_atime	-	update the access time
 diff --git a/fs/namespace.c b/fs/namespace.c
-index 55605c5..aed7607 100644
+index 50ca17d..1548ce4 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
 @@ -52,6 +52,7 @@ EXPORT_SYMBOL_GPL(fs_kobj);
@@ -159,7 +171,15 @@ index 55605c5..aed7607 100644
  
  static inline unsigned long hash(struct vfsmount *mnt, struct dentry *dentry)
  {
-@@ -1424,6 +1425,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
+@@ -425,6 +426,7 @@ void __mnt_drop_write(struct vfsmount *mnt)
+ 	mnt_dec_writers(real_mount(mnt));
+ 	preempt_enable();
+ }
++EXPORT_SYMBOL_GPL(__mnt_drop_write);
+ 
+ /**
+  * mnt_drop_write - give up write access to a mount
+@@ -1413,6 +1415,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
  	}
  	return 0;
  }
@@ -240,10 +260,10 @@ index fc6b49b..a6bb87d 100644
  static int fsnotify_mark_destroy(void *ignored)
  {
 diff --git a/fs/open.c b/fs/open.c
-index 9b33c0c..e3365035 100644
+index 6835446..df2262a 100644
 --- a/fs/open.c
 +++ b/fs/open.c
-@@ -60,6 +60,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
+@@ -61,6 +61,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
  	mutex_unlock(&dentry->d_inode->i_mutex);
  	return ret;
  }
@@ -252,10 +272,10 @@ index 9b33c0c..e3365035 100644
  long vfs_truncate(struct path *path, loff_t length)
  {
 diff --git a/fs/splice.c b/fs/splice.c
-index 020c7bc..a622ade 100644
+index c717dbb..f9c3c18 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
-@@ -1116,6 +1116,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+@@ -1117,6 +1117,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
  
  	return splice_write(pipe, out, ppos, len, flags);
  }
@@ -263,7 +283,7 @@ index 020c7bc..a622ade 100644
  
  /*
   * Attempt to initiate a splice from a file to a pipe.
-@@ -1142,6 +1143,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
+@@ -1143,6 +1144,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
  
  	return splice_read(in, ppos, pipe, len, flags);
  }
@@ -272,7 +292,7 @@ index 020c7bc..a622ade 100644
  /**
   * splice_direct_to_actor - splices data directly between two non-pipes
 diff --git a/security/commoncap.c b/security/commoncap.c
-index 7ee08c7..176edf1 100644
+index c44b6fe..d78b003 100644
 --- a/security/commoncap.c
 +++ b/security/commoncap.c
 @@ -988,9 +988,11 @@ int cap_mmap_addr(unsigned long addr)
@@ -288,7 +308,7 @@ index 7ee08c7..176edf1 100644
  }
 +EXPORT_SYMBOL(cap_mmap_file);
 diff --git a/security/device_cgroup.c b/security/device_cgroup.c
-index d794abc..a20f167 100644
+index 1c69e38..7392d19 100644
 --- a/security/device_cgroup.c
 +++ b/security/device_cgroup.c
 @@ -7,6 +7,7 @@
@@ -299,7 +319,7 @@ index d794abc..a20f167 100644
  #include <linux/list.h>
  #include <linux/uaccess.h>
  #include <linux/seq_file.h>
-@@ -631,6 +632,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask)
+@@ -634,6 +635,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask)
  	return __devcgroup_check_permission(type, imajor(inode), iminor(inode),
  			access);
  }
@@ -1439,8 +1459,8 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/99plan.txt linu
 +Otherwise from /new.
 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	2013-03-14 20:07:40.574775374 +0100
-@@ -0,0 +1,333 @@
++++ linux/Documentation/filesystems/aufs/README	2013-07-01 12:54:21.039493094 +0200
+@@ -0,0 +1,339 @@
 +
 +Aufs3 -- advanced multi layered unification filesystem version 3.x
 +http://aufs.sf.net
@@ -1602,7 +1622,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +Make sure you have git-checkout'ed the correct branch.
 +
 +For aufs3-linux tree,
-+- enable CONFIG_EXPERIMENTAL and CONFIG_AUFS_FS.
++- enable CONFIG_AUFS_FS.
 +- set other aufs configurations if necessary.
 +
 +For aufs3-standalone tree,
@@ -1618,10 +1638,13 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +  CONFIG_AUFS_FS=m. otherwise you don't need ./aufs3-standalone.patch.
 +- copy ./{Documentation,fs,include/uapi/linux/aufs_type.h} files to your
 +  kernel source tree. Never copy $PWD/include/uapi/linux/Kbuild.
-+- enable CONFIG_EXPERIMENTAL and CONFIG_AUFS_FS, you can select either
++- enable CONFIG_AUFS_FS, you can select either
 +  =m or =y.
 +- and build your kernel as usual.
 +- install the built kernel.
++  Note: Since linux-3.9, every filesystem module requires an alias
++  "fs-<fsname>". You should make sure that "fs-aufs" is listed in your
++  modules.aliases file if you set CONFIG_AUFS_FS=m.
 +- install the header files too by "make headers_install" to the
 +  directory where you specify. By default, it is $PWD/usr.
 +  "make help" shows a brief note for headers_install.
@@ -1639,6 +1662,9 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta
 +  Note: You should read $PWD/fs/aufs/Kconfig carefully which describes
 +  every aufs configurations.
 +- build the module by simple "make".
++  Note: Since linux-3.9, every filesystem module requires an alias
++  "fs-<fsname>". You should make sure that "fs-aufs" is listed in your
++  modules.aliases file.
 +- you can specify ${KDIR} make variable which points to your kernel
 +  source tree.
 +- install the files
@@ -1840,7 +1866,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	2013-03-14 20:07:41.038119650 +0100
++++ linux/fs/aufs/branch.c	2013-07-01 12:54:21.039493094 +0200
 @@ -0,0 +1,1172 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
@@ -2816,7 +2842,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 +	do_file_list_for_each_entry(sb, f) {
 +		if (au_fi(f)
 +		    && file_count(f)
-+		    && !special_file(f->f_dentry->d_inode->i_mode)) {
++		    && !special_file(file_inode(f)->i_mode)) {
 +			get_file(f);
 +			*p++ = f;
 +			n++;
@@ -2881,7 +2907,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 +			goto out_array;
 +		}
 +
-+		inode = file->f_dentry->d_inode;
++		inode = file_inode(file);
 +		hfile = &au_fi(file)->fi_htop;
 +		hf = hfile->hf_file;
 +		if (!S_ISREG(inode->i_mode)
@@ -2918,8 +2944,8 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
 +		hf->f_mode &= ~FMODE_WRITE;
 +		spin_unlock(&hf->f_lock);
 +		if (!file_check_writeable(hf)) {
++			__mnt_drop_write(hf->f_path.mnt);
 +			file_release_write(hf);
-+			vfsub_mnt_drop_write(hf->f_vfsmnt);
 +		}
 +	}
 +
@@ -3298,7 +3324,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	2013-03-14 20:07:41.038119650 +0100
++++ linux/fs/aufs/cpup.c	2013-07-01 12:54:18.772748151 +0200
 @@ -0,0 +1,1085 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
@@ -3576,7 +3602,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
 +			ia->ia_size = dst->f_pos;
 +			ia->ia_valid = ATTR_SIZE | ATTR_FILE;
 +			ia->ia_file = dst;
-+			h_mtx = &dst->f_dentry->d_inode->i_mutex;
++			h_mtx = &file_inode(dst)->i_mutex;
 +			mutex_lock_nested(h_mtx, AuLsc_I_CHILD2);
 +			err = vfsub_notify_change(&dst->f_path, ia);
 +			mutex_unlock(h_mtx);
@@ -4472,8 +4498,8 @@ 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	2013-03-14 20:07:41.038119650 +0100
-@@ -0,0 +1,334 @@
++++ linux/fs/aufs/dbgaufs.c	2013-07-01 12:54:21.039493094 +0200
+@@ -0,0 +1,332 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -4539,7 +4565,7 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c
 +	if (!xf)
 +		goto out;
 +
-+	err = vfs_getattr(xf->f_vfsmnt, xf->f_dentry, &st);
++	err = vfs_getattr(&xf->f_path, &st);
 +	if (!err) {
 +		if (do_fcnt)
 +			p->n = snprintf
@@ -4651,10 +4677,8 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c
 +	for (; bindex <= bend; bindex++) {
 +		br = au_sbr(sb, bindex);
 +		xi = &br->br_xino;
-+		if (xi->xi_dbgaufs) {
-+			debugfs_remove(xi->xi_dbgaufs);
-+			xi->xi_dbgaufs = NULL;
-+		}
++		debugfs_remove(xi->xi_dbgaufs);
++		xi->xi_dbgaufs = NULL;
 +	}
 +}
 +
@@ -5208,8 +5232,8 @@ 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	2013-03-14 20:07:41.038119650 +0100
-@@ -0,0 +1,490 @@
++++ linux/fs/aufs/debug.c	2013-07-01 12:54:21.039493094 +0200
+@@ -0,0 +1,491 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -5253,17 +5277,16 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c
 +{
 +	unsigned long ul, n;
 +	struct hlist_head *head;
-+	struct au_vdir_wh *tpos;
-+	struct hlist_node *pos;
++	struct au_vdir_wh *pos;
 +
 +	n = whlist->nh_num;
 +	head = whlist->nh_head;
 +	for (ul = 0; ul < n; ul++) {
-+		hlist_for_each_entry(tpos, pos, head, wh_hash)
++		hlist_for_each_entry(pos, head, wh_hash)
 +			dpri("b%d, %.*s, %d\n",
-+			     tpos->wh_bindex,
-+			     tpos->wh_str.len, tpos->wh_str.name,
-+			     tpos->wh_str.len);
++			     pos->wh_bindex,
++			     pos->wh_str.len, pos->wh_str.name,
++			     pos->wh_str.len);
 +		head++;
 +	}
 +}
@@ -5350,10 +5373,9 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c
 +void au_dpri_dalias(struct inode *inode)
 +{
 +	struct dentry *d;
-+	struct hlist_node *p;
 +
 +	spin_lock(&inode->i_lock);
-+	hlist_for_each_entry(d, p, &inode->i_dentry, d_alias)
++	hlist_for_each_entry(d, &inode->i_dentry, d_alias)
 +		au_dpri_dentry(d);
 +	spin_unlock(&inode->i_lock);
 +}
@@ -5540,8 +5562,11 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c
 +
 +void au_dbg_iattr(struct iattr *ia)
 +{
-+#define AuBit(name)	if (ia->ia_valid & ATTR_ ## name) \
-+				dpri(#name "\n")
++#define AuBit(name)					\
++	do {						\
++		if (ia->ia_valid & ATTR_ ## name)	\
++			dpri(#name "\n");		\
++	} while (0)
 +	AuBit(MODE);
 +	AuBit(UID);
 +	AuBit(GID);
@@ -5948,8 +5973,8 @@ 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	2013-03-14 20:07:41.038119650 +0100
-@@ -0,0 +1,1060 @@
++++ linux/fs/aufs/dentry.c	2013-07-01 12:54:18.772748151 +0200
+@@ -0,0 +1,1061 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -7007,8 +7032,9 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
 +}
 +
 +const struct dentry_operations aufs_dop = {
-+	.d_revalidate	= aufs_d_revalidate,
-+	.d_release	= aufs_d_release
++	.d_revalidate		= aufs_d_revalidate,
++	.d_weak_revalidate	= aufs_d_revalidate,
++	.d_release		= aufs_d_release
 +};
 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
@@ -7797,8 +7823,8 @@ 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	2013-03-14 20:07:41.038119650 +0100
-@@ -0,0 +1,633 @@
++++ linux/fs/aufs/dir.c	2013-07-01 12:54:18.776081600 +0200
+@@ -0,0 +1,630 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -7861,19 +7887,16 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c
 +
 +	sz = 0;
 +	if (file) {
-+		AuDebugOn(!file->f_dentry);
-+		AuDebugOn(!file->f_dentry->d_inode);
-+		AuDebugOn(!S_ISDIR(file->f_dentry->d_inode->i_mode));
++		AuDebugOn(!file_inode(file));
++		AuDebugOn(!S_ISDIR(file_inode(file)->i_mode));
 +
 +		bend = au_fbend_dir(file);
 +		for (bindex = au_fbstart(file);
 +		     bindex <= bend && sz < KMALLOC_MAX_SIZE;
 +		     bindex++) {
 +			h_file = au_hf_dir(file, bindex);
-+			if (h_file
-+			    && h_file->f_dentry
-+			    && h_file->f_dentry->d_inode)
-+				sz += i_size_read(h_file->f_dentry->d_inode);
++			if (h_file && file_inode(h_file))
++				sz += vfsub_f_size_read(h_file);
 +		}
 +	} else {
 +		AuDebugOn(!dentry);
@@ -8111,7 +8134,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c
 +		goto out;
 +
 +	sb = file->f_dentry->d_sb;
-+	inode = file->f_dentry->d_inode;
++	inode = file_inode(file);
 +	bend = au_fbend_dir(file);
 +	for (bindex = au_fbstart(file); !err && bindex <= bend; bindex++) {
 +		h_file = au_hf_dir(file, bindex);
@@ -8284,7 +8307,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c
 +
 +	err = 0;
 +	if (!au_opt_test(au_mntflags(dentry->d_sb), UDBA_NONE)
-+	    && !h_file->f_dentry->d_inode->i_nlink)
++	    && !file_inode(h_file)->i_nlink)
 +		goto out_put;
 +
 +	do {
@@ -9038,8 +9061,8 @@ 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	2013-03-14 20:07:41.038119650 +0100
-@@ -0,0 +1,827 @@
++++ linux/fs/aufs/export.c	2013-07-01 12:54:18.776081600 +0200
+@@ -0,0 +1,826 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -9204,7 +9227,7 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c
 +	file = sbinfo->si_xigen;
 +	BUG_ON(!file);
 +
-+	if (i_size_read(file->f_dentry->d_inode)
++	if (vfsub_f_size_read(file)
 +	    < pos + sizeof(inode->i_generation)) {
 +		inode->i_generation = atomic_inc_return(&sbinfo->si_xigen_next);
 +		sz = xino_fwrite(sbinfo->si_xwrite, file, &inode->i_generation,
@@ -9268,7 +9291,6 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c
 +	struct dentry *dentry, *d;
 +	struct inode *inode;
 +	unsigned int sigen;
-+	struct hlist_node *p;
 +
 +	dentry = NULL;
 +	inode = ilookup(sb, ino);
@@ -9287,7 +9309,7 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c
 +		dentry = d_find_alias(inode);
 +	else {
 +		spin_lock(&inode->i_lock);
-+		hlist_for_each_entry(d, p, &inode->i_dentry, d_alias) {
++		hlist_for_each_entry(d, &inode->i_dentry, d_alias) {
 +			spin_lock(&d->d_lock);
 +			if (!au_test_anon(d)
 +			    && d->d_parent->d_inode->i_ino == dir_ino) {
@@ -9869,8 +9891,8 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.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	2013-03-14 20:07:41.041453062 +0100
-@@ -0,0 +1,683 @@
++++ linux/fs/aufs/file.c	2013-07-01 12:54:18.776081600 +0200
+@@ -0,0 +1,679 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -10211,13 +10233,11 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
 +		int (*flush)(struct file *file, fl_owner_t id))
 +{
 +	int err;
-+	struct dentry *dentry;
 +	struct super_block *sb;
 +	struct inode *inode;
 +
-+	dentry = file->f_dentry;
-+	sb = dentry->d_sb;
-+	inode = dentry->d_inode;
++	inode = file_inode(file);
++	sb = inode->i_sb;
 +	si_noflush_read_lock(sb);
 +	fi_read_lock(file);
 +	ii_read_lock_child(inode);
@@ -10342,8 +10362,7 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
 +		for (finfo->fi_btop = 0; finfo->fi_btop <= bend;
 +		     finfo->fi_btop++, p++)
 +			if (p->hf_file) {
-+				if (p->hf_file->f_dentry
-+				    && p->hf_file->f_dentry->d_inode)
++				if (file_inode(p->hf_file))
 +					break;
 +				else
 +					au_hfput(p, file);
@@ -10361,8 +10380,7 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
 +	for (fidir->fd_bbot = bend; fidir->fd_bbot >= finfo->fi_btop;
 +	     fidir->fd_bbot--, p--)
 +		if (p->hf_file) {
-+			if (p->hf_file->f_dentry
-+			    && p->hf_file->f_dentry->d_inode)
++			if (file_inode(p->hf_file))
 +				break;
 +			else
 +				au_hfput(p, file);
@@ -11019,8 +11037,8 @@ 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	2013-03-14 20:07:41.041453062 +0100
-@@ -0,0 +1,723 @@
++++ linux/fs/aufs/f_op.c	2013-07-01 12:54:18.776081600 +0200
+@@ -0,0 +1,720 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -11166,7 +11184,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +	/* todo: necessary? */
 +	/* file->f_ra = h_file->f_ra; */
 +	/* update without lock, I don't think it a problem */
-+	fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode);
++	fsstack_copy_attr_atime(dentry->d_inode, file_inode(h_file));
 +	fput(h_file);
 +
 +out:
@@ -11233,7 +11251,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +	err = vfsub_write_u(h_file, buf, count, ppos);
 +	ii_write_lock_child(inode);
 +	au_cpup_attr_timesizes(inode);
-+	inode->i_mode = h_file->f_dentry->d_inode->i_mode;
++	inode->i_mode = file_inode(h_file)->i_mode;
 +	ii_write_unlock(inode);
 +	fput(h_file);
 +
@@ -11301,7 +11319,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +	/* todo: necessary? */
 +	/* file->f_ra = h_file->f_ra; */
 +	/* update without lock, I don't think it a problem */
-+	fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode);
++	fsstack_copy_attr_atime(dentry->d_inode, file_inode(h_file));
 +	fput(h_file);
 +
 +out:
@@ -11346,7 +11364,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +	err = au_do_aio(h_file, MAY_WRITE, kio, iov, nv, pos);
 +	ii_write_lock_child(inode);
 +	au_cpup_attr_timesizes(inode);
-+	inode->i_mode = h_file->f_dentry->d_inode->i_mode;
++	inode->i_mode = file_inode(h_file)->i_mode;
 +	ii_write_unlock(inode);
 +	fput(h_file);
 +
@@ -11389,7 +11407,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +	/* todo: necessasry? */
 +	/* file->f_ra = h_file->f_ra; */
 +	/* update without lock, I don't think it a problem */
-+	fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode);
++	fsstack_copy_attr_atime(dentry->d_inode, file_inode(h_file));
 +	fput(h_file);
 +
 +out:
@@ -11434,7 +11452,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +	err = vfsub_splice_from(pipe, h_file, ppos, len, flags);
 +	ii_write_lock_child(inode);
 +	au_cpup_attr_timesizes(inode);
-+	inode->i_mode = h_file->f_dentry->d_inode->i_mode;
++	inode->i_mode = file_inode(h_file)->i_mode;
 +	ii_write_unlock(inode);
 +	fput(h_file);
 +
@@ -11550,8 +11568,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +
 +	au_vm_prfile_set(vma, file);
 +	/* update without lock, I don't think it a problem */
-+	fsstack_copy_attr_atime(file->f_dentry->d_inode,
-+				h_file->f_dentry->d_inode);
++	fsstack_copy_attr_atime(file_inode(file), file_inode(h_file));
 +	goto out_fput; /* success */
 +
 +out_reset:
@@ -11646,11 +11663,9 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +	err = -ENOSYS;
 +	h_file = au_hf_top(file);
 +	if (h_file->f_op && h_file->f_op->aio_fsync) {
-+		struct dentry *h_d;
 +		struct mutex *h_mtx;
 +
-+		h_d = h_file->f_dentry;
-+		h_mtx = &h_d->d_inode->i_mutex;
++		h_mtx = &file_inode(h_file)->i_mutex;
 +		if (!is_sync_kiocb(kio)) {
 +			get_file(h_file);
 +			fput(file);
@@ -11746,7 +11761,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
 +};
 diff -urN /usr/share/empty/fs/aufs/f_op_sp.c linux/fs/aufs/f_op_sp.c
 --- /usr/share/empty/fs/aufs/f_op_sp.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/f_op_sp.c	2013-03-14 20:07:41.041453062 +0100
++++ linux/fs/aufs/f_op_sp.c	2013-07-01 12:54:18.776081600 +0200
 @@ -0,0 +1,295 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
@@ -11979,12 +11994,12 @@ diff -urN /usr/share/empty/fs/aufs/f_op_sp.c linux/fs/aufs/f_op_sp.c
 +
 +	sb = dentry->d_sb;
 +	h_file = au_hf_top(file);
-+	h_inode = h_file->f_dentry->d_inode;
++	h_inode = file_inode(h_file);
 +	di_read_unlock(dentry, AuLock_IR);
 +	fi_write_unlock(file);
 +	si_read_unlock(sb);
 +	/* open this fifo in aufs */
-+	err = h_inode->i_fop->open(file->f_dentry->d_inode, file);
++	err = h_inode->i_fop->open(file_inode(file), file);
 +	si_noflush_read_lock(sb);
 +	fi_write_lock(file);
 +	di_read_lock_child(dentry, AuLock_IR);
@@ -12530,8 +12545,8 @@ 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	2013-02-19 08:40:03.946892891 +0100
-@@ -0,0 +1,293 @@
++++ linux/fs/aufs/hfsnotify.c	2013-07-01 12:54:21.039493094 +0200
+@@ -0,0 +1,296 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -12650,8 +12665,11 @@ diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c
 +static char *au_hfsn_name(u32 mask)
 +{
 +#ifdef CONFIG_AUFS_DEBUG
-+#define test_ret(flag)	if (mask & flag) \
-+				return #flag;
++#define test_ret(flag)				\
++	do {					\
++		if (mask & flag)		\
++			return #flag;		\
++	} while (0)
 +	test_ret(FS_ACCESS);
 +	test_ret(FS_MODIFY);
 +	test_ret(FS_ATTRIB);
@@ -12888,8 +12906,8 @@ 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	2013-03-14 20:07:41.041453062 +0100
-@@ -0,0 +1,713 @@
++++ linux/fs/aufs/hnotify.c	2013-07-01 12:54:18.776081600 +0200
+@@ -0,0 +1,712 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -13092,7 +13110,6 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c
 +	int err;
 +	struct dentry *d;
 +	struct qstr *dname;
-+	struct hlist_node *p;
 +
 +	err = 1;
 +	if (unlikely(inode->i_ino == AUFS_ROOT_INO)) {
@@ -13105,7 +13122,7 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c
 +		AuDebugOn(!name);
 +		au_iigen_dec(inode);
 +		spin_lock(&inode->i_lock);
-+		hlist_for_each_entry(d, p, &inode->i_dentry, d_alias) {
++		hlist_for_each_entry(d, &inode->i_dentry, d_alias) {
 +			spin_lock(&d->d_lock);
 +			dname = &d->d_name;
 +			if (dname->len != nlen
@@ -15890,7 +15907,7 @@ 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	2013-03-14 20:07:41.041453062 +0100
++++ linux/fs/aufs/i_op.c	2013-07-01 12:54:18.776081600 +0200
 @@ -0,0 +1,1030 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
@@ -16690,8 +16707,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +	unsigned char udba_none, positive;
 +	struct super_block *sb, *h_sb;
 +	struct inode *inode;
-+	struct vfsmount *h_mnt;
-+	struct dentry *h_dentry;
++	struct path h_path;
 +
 +	sb = dentry->d_sb;
 +	inode = dentry->d_inode;
@@ -16724,30 +16740,31 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
 +		di_read_lock_child(dentry, AuLock_IR);
 +
 +	bindex = au_ibstart(inode);
-+	h_mnt = au_sbr_mnt(sb, bindex);
-+	h_sb = h_mnt->mnt_sb;
++	h_path.mnt = au_sbr_mnt(sb, bindex);
++	h_sb = h_path.mnt->mnt_sb;
 +	if (!au_test_fs_bad_iattr(h_sb) && udba_none)
 +		goto out_fill; /* success */
 +
-+	h_dentry = NULL;
++	h_path.dentry = NULL;
 +	if (au_dbstart(dentry) == bindex)
-+		h_dentry = dget(au_h_dptr(dentry, bindex));
++		h_path.dentry = dget(au_h_dptr(dentry, bindex));
 +	else if (au_opt_test(mnt_flags, PLINK) && au_plink_test(inode)) {
-+		h_dentry = au_plink_lkup(inode, bindex);
-+		if (IS_ERR(h_dentry))
++		h_path.dentry = au_plink_lkup(inode, bindex);
++		if (IS_ERR(h_path.dentry))
 +			goto out_fill; /* pretending success */
 +	}
 +	/* illegally overlapped or something */
-+	if (unlikely(!h_dentry))
++	if (unlikely(!h_path.dentry))
 +		goto out_fill; /* pretending success */
 +
-+	positive = !!h_dentry->d_inode;
++	positive = !!h_path.dentry->d_inode;
 +	if (positive)
-+		err = vfs_getattr(h_mnt, h_dentry, st);
-+	dput(h_dentry);
++		err = vfs_getattr(&h_path, st);
++	dput(h_path.dentry);
 +	if (!err) {
 +		if (positive)
-+			au_refresh_iattr(inode, st, h_dentry->d_inode->i_nlink);
++			au_refresh_iattr(inode, st,
++					 h_path.dentry->d_inode->i_nlink);
 +		goto out_fill; /* success */
 +	}
 +	AuTraceErr(err);
@@ -18435,11 +18452,10 @@ 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	2013-03-14 20:07:41.038119650 +0100
-@@ -0,0 +1,203 @@
++++ linux/fs/aufs/Kconfig	2013-07-01 12:54:18.772748151 +0200
+@@ -0,0 +1,202 @@
 +config AUFS_FS
 +	tristate "Aufs (Advanced multi layered unification filesystem) support"
-+	depends on EXPERIMENTAL
 +	help
 +	Aufs is a stackable unification filesystem such as Unionfs,
 +	which unifies several directories and provides a merged single
@@ -18939,8 +18955,8 @@ 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	2013-02-19 08:40:03.950226347 +0100
-@@ -0,0 +1,202 @@
++++ linux/fs/aufs/module.c	2013-07-01 12:54:21.042826542 +0200
+@@ -0,0 +1,203 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -19046,6 +19062,7 @@ diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c
 +MODULE_DESCRIPTION(AUFS_NAME
 +	" -- Advanced multi layered unification filesystem");
 +MODULE_VERSION(AUFS_VERSION);
++MODULE_ALIAS_FS(AUFS_NAME);
 +
 +/* this module parameter has no meaning when SYSFS is disabled */
 +int sysaufs_brs = 1;
@@ -22890,8 +22907,8 @@ 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	2013-03-14 20:07:41.221457313 +0100
-@@ -0,0 +1,993 @@
++++ linux/fs/aufs/super.c	2013-07-01 12:54:18.776081600 +0200
+@@ -0,0 +1,992 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -23877,9 +23894,8 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
 +
 +struct file_system_type aufs_fs_type = {
 +	.name		= AUFS_FSTYPE,
-+	.fs_flags	=
-+		FS_RENAME_DOES_D_MOVE	/* a race between rename and others */
-+		| FS_REVAL_DOT,		/* for NFS branch and udba */
++	/* a race between rename and others */
++	.fs_flags	= FS_RENAME_DOES_D_MOVE,
 +	.mount		= aufs_mount,
 +	.kill_sb	= aufs_kill_sb,
 +	/* no need to __module_get() and module_put(). */
@@ -24907,8 +24923,8 @@ 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	2013-03-14 20:07:41.221457313 +0100
-@@ -0,0 +1,148 @@
++++ linux/fs/aufs/sysrq.c	2013-07-01 12:54:21.042826542 +0200
+@@ -0,0 +1,151 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -24946,16 +24962,18 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c
 +	plevel = au_plevel;
 +	au_plevel = KERN_WARNING;
 +
-+	sbinfo = au_sbi(sb);
 +	/* since we define pr_fmt, call printk directly */
++#define pr(str) printk(KERN_WARNING AUFS_NAME ": " str)
++
++	sbinfo = au_sbi(sb);
 +	printk(KERN_WARNING "si=%lx\n", sysaufs_si_id(sbinfo));
-+	printk(KERN_WARNING AUFS_NAME ": superblock\n");
++	pr("superblock\n");
 +	au_dpri_sb(sb);
 +
 +#if 0
-+	printk(KERN_WARNING AUFS_NAME ": root dentry\n");
++	pr("root dentry\n");
 +	au_dpri_dentry(sb->s_root);
-+	printk(KERN_WARNING AUFS_NAME ": root inode\n");
++	pr("root inode\n");
 +	au_dpri_inode(sb->s_root->d_inode);
 +#endif
 +
@@ -24983,7 +25001,7 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c
 +#if 1
 +	{
 +		struct inode *i;
-+		printk(KERN_WARNING AUFS_NAME ": isolated inode\n");
++		pr("isolated inode\n");
 +		spin_lock(&inode_sb_list_lock);
 +		list_for_each_entry(i, &sb->s_inodes, i_sb_list) {
 +			spin_lock(&i->i_lock);
@@ -24994,17 +25012,18 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c
 +		spin_unlock(&inode_sb_list_lock);
 +	}
 +#endif
-+	printk(KERN_WARNING AUFS_NAME ": files\n");
++	pr("files\n");
 +	lg_global_lock(&files_lglock);
 +	do_file_list_for_each_entry(sb, file) {
 +		umode_t mode;
-+		mode = file->f_dentry->d_inode->i_mode;
++		mode = file_inode(file)->i_mode;
 +		if (!special_file(mode) || au_special_file(mode))
 +			au_dpri_file(file);
 +	} while_file_list_for_each_entry;
 +	lg_global_unlock(&files_lglock);
-+	printk(KERN_WARNING AUFS_NAME ": done\n");
++	pr("done\n");
 +
++#undef pr
 +	au_plevel = plevel;
 +}
 +
@@ -25059,8 +25078,8 @@ 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	2013-03-14 20:07:41.221457313 +0100
-@@ -0,0 +1,885 @@
++++ linux/fs/aufs/vdir.c	2013-07-01 12:54:18.776081600 +0200
+@@ -0,0 +1,878 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -25168,24 +25187,20 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +
 +static void au_nhash_wh_do_free(struct hlist_head *head)
 +{
-+	struct au_vdir_wh *tpos;
-+	struct hlist_node *pos, *node;
++	struct au_vdir_wh *pos;
++	struct hlist_node *node;
 +
-+	hlist_for_each_entry_safe(tpos, pos, node, head, wh_hash) {
-+		/* hlist_del(pos); */
-+		kfree(tpos);
-+	}
++	hlist_for_each_entry_safe(pos, node, head, wh_hash)
++		kfree(pos);
 +}
 +
 +static void au_nhash_de_do_free(struct hlist_head *head)
 +{
-+	struct au_vdir_dehstr *tpos;
-+	struct hlist_node *pos, *node;
++	struct au_vdir_dehstr *pos;
++	struct hlist_node *node;
 +
-+	hlist_for_each_entry_safe(tpos, pos, node, head, hash) {
-+		/* hlist_del(pos); */
-+		au_cache_free_vdir_dehstr(tpos);
-+	}
++	hlist_for_each_entry_safe(pos, node, head, hash)
++		au_cache_free_vdir_dehstr(pos);
 +}
 +
 +static void au_nhash_do_free(struct au_nhash *nhash,
@@ -25224,15 +25239,14 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +	int num;
 +	unsigned int u, n;
 +	struct hlist_head *head;
-+	struct au_vdir_wh *tpos;
-+	struct hlist_node *pos;
++	struct au_vdir_wh *pos;
 +
 +	num = 0;
 +	n = whlist->nh_num;
 +	head = whlist->nh_head;
 +	for (u = 0; u < n; u++, head++)
-+		hlist_for_each_entry(tpos, pos, head, wh_hash)
-+			if (tpos->wh_bindex == btgt && ++num > limit)
++		hlist_for_each_entry(pos, head, wh_hash)
++			if (pos->wh_bindex == btgt && ++num > limit)
 +				return 1;
 +	return 0;
 +}
@@ -25264,13 +25278,12 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +int au_nhash_test_known_wh(struct au_nhash *whlist, char *name, int nlen)
 +{
 +	struct hlist_head *head;
-+	struct au_vdir_wh *tpos;
-+	struct hlist_node *pos;
++	struct au_vdir_wh *pos;
 +	struct au_vdir_destr *str;
 +
 +	head = au_name_hash(whlist, name, nlen);
-+	hlist_for_each_entry(tpos, pos, head, wh_hash) {
-+		str = &tpos->wh_str;
++	hlist_for_each_entry(pos, head, wh_hash) {
++		str = &pos->wh_str;
 +		AuDbg("%.*s\n", str->len, str->name);
 +		if (au_nhash_test_name(str, name, nlen))
 +			return 1;
@@ -25282,13 +25295,12 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +static int test_known(struct au_nhash *delist, char *name, int nlen)
 +{
 +	struct hlist_head *head;
-+	struct au_vdir_dehstr *tpos;
-+	struct hlist_node *pos;
++	struct au_vdir_dehstr *pos;
 +	struct au_vdir_destr *str;
 +
 +	head = au_name_hash(delist, name, nlen);
-+	hlist_for_each_entry(tpos, pos, head, hash) {
-+		str = tpos->str;
++	hlist_for_each_entry(pos, head, hash) {
++		str = pos->str;
 +		AuDbg("%.*s\n", str->len, str->name);
 +		if (au_nhash_test_name(str, name, nlen))
 +			return 1;
@@ -25577,8 +25589,8 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +	int err;
 +	unsigned int nh, u;
 +	struct hlist_head *head;
-+	struct au_vdir_wh *tpos;
-+	struct hlist_node *pos, *n;
++	struct au_vdir_wh *pos;
++	struct hlist_node *n;
 +	char *p, *o;
 +	struct au_vdir_destr *destr;
 +
@@ -25595,11 +25607,11 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +	p += AUFS_WH_PFX_LEN;
 +	for (u = 0; u < nh; u++) {
 +		head = whlist->nh_head + u;
-+		hlist_for_each_entry_safe(tpos, pos, n, head, wh_hash) {
-+			destr = &tpos->wh_str;
++		hlist_for_each_entry_safe(pos, n, head, wh_hash) {
++			destr = &pos->wh_str;
 +			memcpy(p, destr->name, destr->len);
 +			err = append_de(vdir, o, destr->len + AUFS_WH_PFX_LEN,
-+					tpos->wh_ino, tpos->wh_type, delist);
++					pos->wh_ino, pos->wh_type, delist);
 +			if (unlikely(err))
 +				break;
 +		}
@@ -25695,7 +25707,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +	struct au_vdir *vdir, *allocated;
 +
 +	err = 0;
-+	inode = file->f_dentry->d_inode;
++	inode = file_inode(file);
 +	IMustLock(inode);
 +	SiMustAnyLock(inode->i_sb);
 +
@@ -25819,7 +25831,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
 +	} else
 +		return 0; /* success */
 +
-+	inode = file->f_dentry->d_inode;
++	inode = file_inode(file);
 +	err = copy_vdir(vdir_cache, au_ivdir(inode));
 +	if (!err) {
 +		file->f_version = inode->i_version;
@@ -25948,8 +25960,8 @@ 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	2013-03-14 20:07:41.221457313 +0100
-@@ -0,0 +1,777 @@
++++ linux/fs/aufs/vfsub.c	2013-07-01 12:54:21.042826542 +0200
+@@ -0,0 +1,769 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -25993,7 +26005,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +	h_sb = h_path->dentry->d_sb;
 +	*did = (!au_test_fs_remote(h_sb) && au_test_fs_refresh_iattr(h_sb));
 +	if (*did)
-+		err = vfs_getattr(h_path->mnt, h_path->dentry, &st);
++		err = vfs_getattr(h_path, &st);
 +
 +	return err;
 +}
@@ -26492,23 +26504,18 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +{
 +	int err;
 +	struct inode *h_inode;
++	struct super_block *h_sb;
 +
-+	h_inode = h_path->dentry->d_inode;
 +	if (!h_file) {
-+		err = vfsub_mnt_want_write(h_path->mnt);
-+		if (err)
-+			goto out;
-+		err = inode_permission(h_inode, MAY_WRITE);
-+		if (err)
-+			goto out_mnt;
-+		err = get_write_access(h_inode);
-+		if (err)
-+			goto out_mnt;
-+		err = break_lease(h_inode, O_WRONLY);
-+		if (err)
-+			goto out_inode;
++		err = vfsub_truncate(h_path, length);
++		goto out;
 +	}
 +
++	h_inode = h_path->dentry->d_inode;
++	h_sb = h_inode->i_sb;
++	lockdep_off();
++	sb_start_write(h_sb);
++	lockdep_on();
 +	err = locks_verify_truncate(h_inode, h_file, length);
 +	if (!err)
 +		err = security_path_truncate(h_path);
@@ -26517,13 +26524,10 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
 +		err = do_truncate(h_path->dentry, length, attr, h_file);
 +		lockdep_on();
 +	}
++	lockdep_off();
++	sb_end_write(h_sb);
++	lockdep_on();
 +
-+out_inode:
-+	if (!h_file)
-+		put_write_access(h_inode);
-+out_mnt:
-+	if (!h_file)
-+		vfsub_mnt_drop_write(h_path->mnt);
 +out:
 +	return err;
 +}
@@ -26729,8 +26733,8 @@ 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	2013-03-14 20:07:41.224790724 +0100
-@@ -0,0 +1,284 @@
++++ linux/fs/aufs/vfsub.h	2013-07-01 12:54:21.042826542 +0200
+@@ -0,0 +1,307 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -26766,6 +26770,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 +/* copied from linux/fs/internal.h */
 +/* todo: BAD approach!! */
 +extern struct lglock vfsmount_lock;
++extern void __mnt_drop_write(struct vfsmount *);
 +extern spinlock_t inode_sb_list_lock;
 +
 +/* copied from linux/fs/file_table.c */
@@ -26888,6 +26893,13 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 +	lockdep_on();
 +}
 +
++static inline void vfsub_mnt_drop_write_file(struct file *file)
++{
++	lockdep_off();
++	mnt_drop_write_file(file);
++	lockdep_on();
++}
++
 +/* ---------------------------------------------------------------------- */
 +
 +struct au_hinode;
@@ -26921,6 +26933,11 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 +int vfsub_flush(struct file *file, fl_owner_t id);
 +int vfsub_readdir(struct file *file, filldir_t filldir, void *arg);
 +
++static inline loff_t vfsub_f_size_read(struct file *file)
++{
++	return i_size_read(file_inode(file));
++}
++
 +static inline unsigned int vfsub_file_flags(struct file *file)
 +{
 +	unsigned int flags;
@@ -26961,6 +26978,16 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
 +		     unsigned int flags);
 +long vfsub_splice_from(struct pipe_inode_info *pipe, struct file *out,
 +		       loff_t *ppos, size_t len, unsigned int flags);
++
++static inline long vfsub_truncate(struct path *path, loff_t length)
++{
++	long err;
++	lockdep_off();
++	err = vfs_truncate(path, length);
++	lockdep_on();
++	return err;
++}
++
 +int vfsub_trunc(struct path *h_path, loff_t length, unsigned int attr,
 +		struct file *h_file);
 +int vfsub_fsync(struct file *file, struct path *path, int datasync);
@@ -27721,8 +27748,8 @@ 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	2013-03-14 20:07:41.224790724 +0100
-@@ -0,0 +1,1042 @@
++++ linux/fs/aufs/whout.c	2013-07-01 12:54:18.776081600 +0200
+@@ -0,0 +1,1041 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -28535,8 +28562,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +	struct qstr wh_name;
 +	char *p;
 +	struct hlist_head *head;
-+	struct au_vdir_wh *tpos;
-+	struct hlist_node *pos;
++	struct au_vdir_wh *pos;
 +	struct au_vdir_destr *str;
 +
 +	err = -ENOMEM;
@@ -28551,11 +28577,11 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c
 +	n = whlist->nh_num;
 +	head = whlist->nh_head;
 +	for (ul = 0; !err && ul < n; ul++, head++) {
-+		hlist_for_each_entry(tpos, pos, head, wh_hash) {
-+			if (tpos->wh_bindex != bindex)
++		hlist_for_each_entry(pos, head, wh_hash) {
++			if (pos->wh_bindex != bindex)
 +				continue;
 +
-+			str = &tpos->wh_str;
++			str = &pos->wh_str;
 +			if (str->len + AUFS_WH_PFX_LEN <= PATH_MAX) {
 +				memcpy(p, str->name, str->len);
 +				wh_name.len = AUFS_WH_PFX_LEN + str->len;
@@ -29173,8 +29199,8 @@ 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/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	2013-03-14 20:07:41.224790724 +0100
-@@ -0,0 +1,1265 @@
++++ linux/fs/aufs/xino.c	2013-07-01 12:54:18.782748496 +0200
+@@ -0,0 +1,1264 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
 + *
@@ -29342,7 +29368,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +		goto out_dput;
 +	}
 +
-+	path.mnt = base_file->f_vfsmnt;
++	path.mnt = base_file->f_path.mnt;
 +	file = vfsub_dentry_open(&path,
 +				 O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE
 +				 /* | __FMODE_NONOTIFY */);
@@ -29359,8 +29385,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +
 +	if (copy_src) {
 +		/* no one can touch copy_src xino */
-+		err = au_copy_file(file, copy_src,
-+				   i_size_read(copy_src->f_dentry->d_inode));
++		err = au_copy_file(file, copy_src, vfsub_f_size_read(copy_src));
 +		if (unlikely(err)) {
 +			pr_err("%.*s copy err %d\n", AuLNPair(name), err);
 +			goto out_fput;
@@ -29487,7 +29512,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +	bindex = au_br_index(sb, br->br_id);
 +	err = au_xino_trunc(sb, bindex);
 +	if (!err
-+	    && br->br_xino.xi_file->f_dentry->d_inode->i_blocks
++	    && file_inode(br->br_xino.xi_file)->i_blocks
 +	    >= br->br_xino_upper)
 +		br->br_xino_upper += AUFS_XINO_TRUNC_STEP;
 +
@@ -29507,7 +29532,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +	struct xino_do_trunc_args *args;
 +	int wkq_err;
 +
-+	if (br->br_xino.xi_file->f_dentry->d_inode->i_blocks
++	if (file_inode(br->br_xino.xi_file)->i_blocks
 +	    < br->br_xino_upper)
 +		return;
 +
@@ -29644,7 +29669,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +
 +	pos = pindex;
 +	pos *= PAGE_SIZE;
-+	if (i_size_read(xib->f_dentry->d_inode) >= pos + PAGE_SIZE)
++	if (vfsub_f_size_read(xib) >= pos + PAGE_SIZE)
 +		sz = xino_fread(sbinfo->si_xread, xib, p, PAGE_SIZE, &pos);
 +	else {
 +		memset(p, 0, PAGE_SIZE);
@@ -29777,7 +29802,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +	}
 +
 +	file = sbinfo->si_xib;
-+	pend = i_size_read(file->f_dentry->d_inode) / PAGE_SIZE;
++	pend = vfsub_f_size_read(file) / PAGE_SIZE;
 +	for (ul = pindex + 1; ul <= pend; ul++) {
 +		err = xib_pindex(sb, ul);
 +		if (unlikely(err))
@@ -29830,7 +29855,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +	pos *= sizeof(*ino);
 +
 +	file = au_sbr(sb, bindex)->br_xino.xi_file;
-+	if (i_size_read(file->f_dentry->d_inode) < pos + sizeof(*ino))
++	if (vfsub_f_size_read(file) < pos + sizeof(*ino))
 +		return 0; /* no ino */
 +
 +	sz = xino_fread(sbinfo->si_xread, file, ino, sizeof(*ino), &pos);
@@ -30005,7 +30030,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +	MtxMustLock(&sbinfo->si_xib_mtx);
 +	p = sbinfo->si_xib_buf;
 +	func = sbinfo->si_xread;
-+	pend = i_size_read(file->f_dentry->d_inode);
++	pend = vfsub_f_size_read(file);
 +	pos = 0;
 +	while (pos < pend) {
 +		sz = xino_fread(func, file, page, PAGE_SIZE, &pos);
@@ -30075,7 +30100,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +		goto out;
 +
 +	file = sbinfo->si_xib;
-+	if (i_size_read(file->f_dentry->d_inode) <= PAGE_SIZE)
++	if (vfsub_f_size_read(file) <= PAGE_SIZE)
 +		goto out;
 +
 +	au_xino_lock_dir(sb, file, &ldir);
@@ -30185,7 +30210,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
 +
 +	sbinfo->si_xib_last_pindex = 0;
 +	sbinfo->si_xib_next_bit = 0;
-+	if (i_size_read(file->f_dentry->d_inode) < PAGE_SIZE) {
++	if (vfsub_f_size_read(file) < PAGE_SIZE) {
 +		pos = 0;
 +		err = xino_fwrite(sbinfo->si_xwrite, file, sbinfo->si_xib_buf,
 +				  PAGE_SIZE, &pos);
@@ -30465,7 +30490,7 @@ diff -urN /usr/share/empty/include/linux/aufs_type.h linux/include/linux/aufs_ty
 +#include <uapi/linux/aufs_type.h>
 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	2013-03-14 20:07:41.224790724 +0100
++++ linux/include/uapi/linux/aufs_type.h	2013-07-01 12:54:21.042826542 +0200
 @@ -0,0 +1,234 @@
 +/*
 + * Copyright (C) 2005-2013 Junjiro R. Okajima
@@ -30509,7 +30534,7 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
 +
 +#include <linux/limits.h>
 +
-+#define AUFS_VERSION	"3.8-20130311"
++#define AUFS_VERSION	"3.x-rcN-20130325"
 +
 +/* todo? move this to linux-2.6.19/include/magic.h */
 +#define AUFS_SUPER_MAGIC	('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
@@ -30701,4 +30726,3 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
 +#define AUFS_CTL_IBUSY		_IOWR(AuCtlType, AuCtl_IBUSY, struct aufs_ibusy)
 +
 +#endif /* __AUFS_TYPE_H__ */
-
diff --git a/kernel-multiarch.config b/kernel-multiarch.config
index c7d230c..2079a61 100644
--- a/kernel-multiarch.config
+++ b/kernel-multiarch.config
@@ -1,5 +1,10 @@
 
 #-
+#- *** FILE: arch/* - ARCH SPECIFIC OPTIONS ***
+#-
+KVM_DEVICE_ASSIGNMENT all=y
+
+#-
 #- *** FILE: block/Kconfig ***
 #-
 BLOCK all=y
@@ -85,6 +90,7 @@ CRYPTO_LRW all=m
 CRYPTO_PCBC all=m
 CRYPTO_XTS all=m
 #- Hash modes
+CRYPTO_CMAC all=m
 CRYPTO_HMAC all=y
 CRYPTO_XCBC all=m
 CRYPTO_VMAC all=m
@@ -103,6 +109,8 @@ CRYPTO_RMD256 all=m
 CRYPTO_RMD320 all=m
 CRYPTO_SHA1 all=y
 CRYPTO_SHA1_SSSE3 all=m
+CRYPTO_SHA256_SSSE3 all=m
+CRYPTO_SHA512_SSSE3 all=m
 CRYPTO_SHA256 all=y
 CRYPTO_SHA512 all=m
 CRYPTO_TGR192 all=m
@@ -120,6 +128,7 @@ CRYPTO_BLOWFISH_X86_64 all=m
 CRYPTO_CAMELLIA all=m
 CRYPTO_CAMELLIA_X86_64 all=m
 CRYPTO_CAMELLIA_AESNI_AVX_X86_64 all=m
+CRYPTO_CAMELLIA_AESNI_AVX2_X86_64 all=m
 CRYPTO_CAST5 all=m
 CRYPTO_CAST5_AVX_X86_64 all=m
 CRYPTO_CAST6 all=m
@@ -134,6 +143,7 @@ CRYPTO_SEED all=m
 CRYPTO_SERPENT all=m
 CRYPTO_SERPENT_SSE2_X86_64 all=m
 CRYPTO_SERPENT_AVX_X86_64 all=m
+CRYPTO_SERPENT_AVX2_X86_64 all=m
 CRYPTO_TEA all=m
 CRYPTO_TWOFISH all=m
 CRYPTO_TWOFISH_COMMON all=m
@@ -194,7 +204,7 @@ ACPI_BLACKLIST_YEAR all=0
 ACPI_DEBUG all=n
 ACPI_PCI_SLOT all=y
 X86_PM_TIMER x86=y
-ACPI_HOTPLUG_MEMORY all=m
+ACPI_HOTPLUG_MEMORY all=y
 ACPI_SBS x86=m
 ACPI_CUSTOM_METHOD all=m
 ACPI_BGRT all=y
@@ -631,6 +641,7 @@ CPU_FREQ_GOV_CONSERVATIVE all=m
 #- *** FILE: drivers/cpufreq/Kconfig.x86 ***
 #-
 X86_INTEL_PSTATE all=y
+X86_AMD_FREQ_SENSITIVITY all=m
 #- shared options
 
 #-
@@ -677,6 +688,7 @@ DW_DMAC all=m
 DW_DMAC_BIG_ENDIAN_IO all=n
 FSL_DMA ppc=y ppc64=y
 #- file drivers/dma/bestcomm/Kconfig goes here
+#- file drivers/dma/sh/Kconfig goes here
 TIMB_DMA all=m
 PCH_DMA all=m
 DMA_ENGINE all=y
@@ -748,9 +760,6 @@ FIREWIRE_NOSY all=m
 EDD i386=m x86_64=m
 EDD_OFF all=n
 FIRMWARE_MEMMAP all=y
-EFI_VARS all=m
-EFI_VARS_PSTORE all=y
-EFI_VARS_PSTORE_DEFAULT_DISABLE all=n
 EFI_PCDP ia64=y
 DELL_RBU i386=m x86_64=m
 DCDBAS i386=m x86_64=m
@@ -759,6 +768,14 @@ DMI_SYSFS all=m
 ISCSI_IBFT_FIND all=y
 ISCSI_IBFT all=m
 #- file drivers/firmware/google/Kconfig goes here
+#- file drivers/firmware/efi/Kconfig goes here
+
+#-
+#- *** FILE: drivers/firmware/efi/Kconfig ***
+#-
+EFI_VARS all=m
+EFI_VARS_PSTORE all=y
+EFI_VARS_PSTORE_DEFAULT_DISABLE all=n
 
 #-
 #- *** FILE: drivers/firmware/google/Kconfig ***
@@ -842,9 +859,9 @@ DRM_SAVAGE all=m
 #- file drivers/gpu/drm/mgag200/Kconfig goes here
 #- file drivers/gpu/drm/cirrus/Kconfig goes here
 #- file drivers/gpu/drm/shmobile/Kconfig goes here
-#- file drivers/gpu/drm/tegra/Kconfig goes here
 #- file drivers/gpu/drm/omapdrm/Kconfig goes here
 #- file drivers/gpu/drm/tilcdc/Kconfig goes here
+#- file drivers/gpu/drm/qxl/Kconfig goes here
 
 #-
 #- *** FILE: drivers/gpu/drm/ast/Kconfig ***
@@ -884,6 +901,11 @@ NOUVEAU_DEBUG_DEFAULT all=3
 DRM_NOUVEAU_BACKLIGHT all=y
 
 #-
+#- *** FILE: drivers/gpu/drm/qxl/Kconfig ***
+#-
+DRM_QXL all=m
+
+#-
 #- *** FILE: drivers/gpu/drm/radeon/Kconfig ***
 #-
 DRM_RADEON_UMS all=n
@@ -917,6 +939,7 @@ HID_A4TECH all=m
 HID_ACRUX all=m
 HID_ACRUX_FF all=y
 HID_APPLE all=m
+HID_APPLEIR all=m
 HID_AUREAL all=m
 HID_BELKIN all=m
 HID_CHERRY all=m
@@ -1042,6 +1065,7 @@ SENSORS_ADM1026 all=m
 SENSORS_ADM1029 all=m
 SENSORS_ADM1031 all=m
 SENSORS_ADM9240 all=m
+SENSORS_ADT7310 all=m
 SENSORS_ADT7410 all=m
 SENSORS_ADT7411 all=m
 SENSORS_ADT7462 all=m
@@ -1069,6 +1093,7 @@ SENSORS_HIH6130 all=m
 SENSORS_CORETEMP all=m
 SENSORS_IBMAEM all=m
 SENSORS_IBMPEX all=m
+SENSORS_IIO_HWMON all=m
 SENSORS_IT87 all=m
 SENSORS_JC42 all=m
 SENSORS_LINEAGE all=m
@@ -1089,6 +1114,7 @@ SENSORS_LTC4151 all=m
 SENSORS_LTC4215 all=m
 SENSORS_LTC4245 all=m
 SENSORS_LTC4261 all=m
+SENSORS_LM95234 all=m
 SENSORS_LM95241 all=m
 SENSORS_LM95245 all=m
 SENSORS_MAX1111 all=m
@@ -1101,6 +1127,7 @@ SENSORS_MAX6642 all=m
 SENSORS_MAX6650 all=m
 SENSORS_MAX6697 all=m
 SENSORS_MCP3021 all=m
+SENSORS_NCT6775 all=m
 SENSORS_NTC_THERMISTOR all=m
 SENSORS_PC87360 all=m
 SENSORS_PC87427 all=m
@@ -1365,6 +1392,7 @@ IIO_ST_ACCEL_3AXIS all=m
 #-
 AD7266 all=m
 AD7298 all=m
+AD7923 all=m
 AD7791 all=m
 AD7793 all=m
 AD7476 all=m
@@ -1442,6 +1470,7 @@ HID_SENSOR_ALS all=m
 #-
 #- *** FILE: drivers/iio/magnetometer/Kconfig ***
 #-
+AK8975 all=m
 HID_SENSOR_MAGNETOMETER_3D all=m
 IIO_ST_MAGN_3AXIS all=m
 
@@ -1467,6 +1496,7 @@ INFINIBAND_ADDR_TRANS all=y sparc=
 #- file drivers/infiniband/ulp/srp/Kconfig goes here
 #- file drivers/infiniband/ulp/srpt/Kconfig goes here
 #- file drivers/infiniband/ulp/iser/Kconfig goes here
+#- file drivers/infiniband/ulp/isert/Kconfig goes here
 
 #-
 #- *** FILE: drivers/infiniband/hw/amso1100/Kconfig ***
@@ -1530,6 +1560,11 @@ INFINIBAND_IPOIB_DEBUG_DATA all=n sparc=
 INFINIBAND_ISER all=m sparc=
 
 #-
+#- *** FILE: drivers/infiniband/ulp/isert/Kconfig ***
+#-
+INFINIBAND_ISERT all=m
+
+#-
 #- *** FILE: drivers/infiniband/ulp/srp/Kconfig ***
 #-
 INFINIBAND_SRP all=m sparc=
@@ -1643,6 +1678,7 @@ KEYBOARD_STMPE all=m
 KEYBOARD_OMAP4 all=m
 KEYBOARD_TWL4030 powerpc=m
 KEYBOARD_XTKBD all=m
+KEYBOARD_CROS_EC all=m
 
 #-
 #- *** FILE: drivers/input/misc/Kconfig ***
@@ -1684,6 +1720,7 @@ INPUT_PCAP all=m
 INPUT_ADXL34X all=m
 INPUT_ADXL34X_I2C all=m
 INPUT_ADXL34X_SPI all=m
+INPUT_IMS_PCU all=m
 INPUT_CMA3000 all=m
 INPUT_CMA3000_I2C all=m
 INPUT_XEN_KBDDEV_FRONTEND all=m
@@ -1995,6 +2032,7 @@ LEDS_GPIO all=m
 LEDS_LP3944 all=m
 LEDS_LP5521 all=m
 LEDS_LP5523 all=m
+LEDS_LP5562 all=m
 LEDS_CLEVO_MAIL all=m
 LEDS_PCA955X all=m
 LEDS_PCA9633 all=m
@@ -2015,8 +2053,13 @@ LEDS_TCA6507 all=m
 LEDS_LM355x all=m
 LEDS_OT200 all=m
 LEDS_BLINKM all=m
-LEDS_TRIGGERS all=y
 #- LED Triggers
+#- file drivers/leds/trigger/Kconfig goes here
+
+#-
+#- *** FILE: drivers/leds/trigger/Kconfig ***
+#-
+LEDS_TRIGGERS all=y
 LEDS_TRIGGER_TIMER all=m
 LEDS_TRIGGER_ONESHOT all=m
 LEDS_TRIGGER_IDE_DISK all=y
@@ -2027,6 +2070,7 @@ LEDS_TRIGGER_GPIO all=m
 LEDS_TRIGGER_DEFAULT_ON all=m
 #- iptables trigger is under Netfilter config (LED target)
 LEDS_TRIGGER_TRANSIENT all=m
+LEDS_TRIGGER_CAMERA all=m
 
 #-
 #- *** FILE: drivers/lguest/Kconfig ***
@@ -2077,6 +2121,7 @@ MD_RAID10 all=m
 MD_RAID456 all=m
 MD_MULTIPATH all=m
 MD_FAULTY all=m
+#- file drivers/md/bcache/Kconfig goes here
 BLK_DEV_DM all=m
 DM_DEBUG all=n
 #- file drivers/md/persistent-data/Kconfig goes here
@@ -2100,6 +2145,14 @@ DM_FLAKEY all=m
 DM_VERITY all=m
 
 #-
+#- *** FILE: drivers/md/bcache/Kconfig ***
+#-
+BCACHE all=m
+BCACHE_DEBUG all=n
+BCACHE_EDEBUG all=n
+BCACHE_CLOSURES_DEBUG all=n
+
+#-
 #- *** FILE: drivers/media/Kconfig ***
 #-
 MEDIA_SUPPORT all=m
@@ -2129,6 +2182,7 @@ DVB_NET all=y
 #- file drivers/media/common/Kconfig goes here
 #- Media ancillary drivers (tuners, sensors, i2c, frontends)
 MEDIA_SUBDRV_AUTOSELECT all=y
+MEDIA_ATTACH all=y
 #- file drivers/media/i2c/Kconfig goes here
 #- file drivers/media/tuners/Kconfig goes here
 #- file drivers/media/dvb-frontends/Kconfig goes here
@@ -2161,6 +2215,7 @@ VIDEO_SAA7146_VV all=m
 #-
 SMS_SIANO_MDTV all=m
 SMS_SIANO_RC all=y
+SMS_SIANO_DEBUGFS all=y
 
 #-
 #- *** FILE: drivers/media/dvb-core/Kconfig ***
@@ -2486,7 +2541,7 @@ VIDEO_VIA_CAMERA all=m
 #- file drivers/media/platform/blackfin/Kconfig goes here
 VIDEO_TIMBERDALE all=m
 #- file drivers/media/platform/soc_camera/Kconfig goes here
-#- file drivers/media/platform/s5p-fimc/Kconfig goes here
+#- file drivers/media/platform/exynos4-is/Kconfig goes here
 #- file drivers/media/platform/s5p-tv/Kconfig goes here
 V4L_MEM2MEM_DRIVERS all=y
 VIDEO_MEM2MEM_DEINTERLACE all=m
@@ -2514,6 +2569,7 @@ VIDEO_SH_MOBILE_CEU all=m
 RADIO_ADAPTERS all=y
 RADIO_SI470X all=y
 #- file drivers/media/radio/si470x/Kconfig goes here
+RADIO_SI476X all=m
 USB_MR800 all=m
 USB_DSBR all=m
 RADIO_MAXIRADIO all=m
@@ -2593,7 +2649,6 @@ RC_MAP all=m
 #-
 #- *** FILE: drivers/media/tuners/Kconfig ***
 #-
-MEDIA_ATTACH all=y
 MEDIA_TUNER_TDA18212 all=m
 
 #-
@@ -2930,23 +2985,52 @@ I2O_PROC all=m
 #-
 #- *** FILE: drivers/mfd/Kconfig ***
 #-
+MFD_CS5535 all=m
+MFD_CROS_EC all=m
+MFD_CROS_EC_I2C all=m
+MFD_CROS_EC_SPI all=m
+PMIC_DA903X powerpc=y
+MFD_DA9052_SPI all=y
+MFD_MC13783 all=m
+MFD_MC13XXX all=m
+MFD_MC13XXX_SPI all=m
+MFD_MC13XXX_I2C all=m
+HTC_PASIC3 all=m
+LPC_ICH all=m
+LPC_SCH all=m
+MFD_JANZ_CMODIO all=m
+EZX_PCAP all=y
+MFD_VIPERBOARD all=m
+MFD_RETU all=m
+MFD_PCF50633 all=m
+PCF50633_ADC all=m
+PCF50633_GPIO all=m
+UCB1400_CORE all=m
+MFD_RDC321X all=m
+MFD_RTSX_PCI all=m
+MFD_SI476X_CORE all=m
 MFD_SM501 all=m
 MFD_SM501_GPIO all=y
-MFD_RTSX_PCI all=m
+ABX500_CORE all=y
+AB3100_CORE all=y
+AB3100_OTP all=m
+AB8500_CORE all=y
+AB8500_DEBUG all=n
+AB8500_GPADC all=y
+MFD_STMPE all=y
+STMPE_SPI all=y
+MFD_SYSCON all=y
 MFD_TI_AM335X_TSCADC all=m
-HTC_PASIC3 all=m
-UCB1400_CORE all=m
-MFD_LM3533 all=m
 TPS6105X all=m
 TPS65010 all=m
 TPS6507X all=m
 MFD_TPS65217 all=m
 MFD_TPS65912_SPI all=y
 TWL4030_CORE powerpc=y
-MFD_STMPE all=y
-STMPE_SPI all=y
-PMIC_DA903X powerpc=y
-MFD_DA9052_SPI all=y
+MFD_WL1273_CORE all=m
+MFD_LM3533 all=m
+MFD_TIMBERDALE all=m
+MFD_VX855 all=m
 MFD_ARIZONA_I2C all=m
 MFD_ARIZONA_SPI all=m
 MFD_WM5102 all=y
@@ -2955,30 +3039,6 @@ MFD_WM831X all=y
 MFD_WM831X_SPI all=y
 MFD_WM8350_I2C all=y
 MFD_WM8994 all=y
-MFD_PCF50633 all=m
-PCF50633_ADC all=m
-PCF50633_GPIO all=m
-MFD_MC13783 all=m
-MFD_MC13XXX all=m
-MFD_MC13XXX_SPI all=m
-MFD_MC13XXX_I2C all=m
-ABX500_CORE all=y
-AB3100_CORE all=y
-AB3100_OTP all=m
-EZX_PCAP all=y
-AB8500_CORE all=y
-AB8500_DEBUG all=n
-AB8500_GPADC all=y
-MFD_CS5535 all=m
-MFD_TIMBERDALE all=m
-LPC_SCH all=m
-LPC_ICH all=m
-MFD_RDC321X all=m
-MFD_JANZ_CMODIO all=m
-MFD_VX855 all=m
-MFD_WL1273_CORE all=m
-MFD_VIPERBOARD all=m
-MFD_RETU all=m
 
 #-
 #- *** FILE: drivers/misc/Kconfig ***
@@ -2988,6 +3048,7 @@ AD525X_DPOT all=m
 AD525X_DPOT_I2C all=m
 AD525X_DPOT_SPI all=m
 ATMEL_PWM all=m
+DUMMY_IRQ all=m
 IBM_ASM i386=m x86_64=m
 PHANTOM all=m
 INTEL_MID_PTI all=m
@@ -3019,6 +3080,7 @@ BMP085_SPI all=m
 PCH_PHUB all=m
 USB_SWITCH_FSA9480 all=m
 LATTICE_ECP3_CONFIG all=m
+SRAM all=n
 #- file drivers/misc/c2port/Kconfig goes here
 #- file drivers/misc/eeprom/Kconfig goes here
 #- file drivers/misc/cb710/Kconfig goes here
@@ -3138,7 +3200,6 @@ MTD_CMDLINE_PARTS all=m
 MTD_OF_PARTS ppc=m ppc64=m
 MTD_AR7_PARTS all=m
 #- User Modules And Translation Layers
-MTD_CHAR all=m
 MTD_BLKDEVS all=m
 MTD_BLOCK all=m
 MTD_BLOCK_RO all=m
@@ -3208,9 +3269,6 @@ MTDRAM_TOTAL_SIZE all=4096
 MTDRAM_ERASE_SIZE all=128
 MTD_BLOCK2MTD all=m
 #- Disk-On-Chip Device Drivers
-MTD_DOC2000 all=m
-MTD_DOC2001 all=m
-MTD_DOC2001PLUS all=m
 MTD_DOCG3 all=m
 MTD_DOCPROBE all=m
 MTD_DOCECC all=m
@@ -3244,8 +3302,6 @@ MTD_ESB2ROM i386=m x86_64=m
 MTD_CK804XROM i386=m x86_64=m
 MTD_SCB2_FLASH i386=m x86_64=m
 MTD_NETtel i386=m x86_64=m
-MTD_DILNETPC i386=m x86_64=m
-MTD_DILNETPC_BOOTSIZE i386=0x80000 x86_64=0x80000
 MTD_L440GX i386=m x86_64=m
 MTD_PCI all=m
 MTD_PCMCIA all=m
@@ -3262,7 +3318,6 @@ MTD_NAND_ECC_SMC all=y
 MTD_NAND all=m
 MTD_NAND_BCH all=m
 MTD_NAND_ECC_BCH all=y
-MTD_NAND_MUSEUM_IDS all=y sparc=n
 MTD_NAND_DENALI all=m
 MTD_NAND_DENALI_PCI all=m
 MTD_NAND_DENALI_DT all=m
@@ -3290,7 +3345,6 @@ MTD_ONENAND_VERIFY_WRITE all=n sparc=y sparc64=y
 MTD_ONENAND_GENERIC all=m
 MTD_ONENAND_OTP all=n alpha=y i386=y x86_64=y
 MTD_ONENAND_2X_PROGRAM all=y
-MTD_ONENAND_SIM all=m
 
 #-
 #- *** FILE: drivers/mtd/ubi/Kconfig ***
@@ -3359,7 +3413,6 @@ COPS_DAYNA alpha=y i386=y
 COPS_TANGENT alpha=y i386=y
 IPDDP all=m
 IPDDP_ENCAP all=y
-IPDDP_DECAP all=y
 
 #-
 #- *** FILE: drivers/net/arcnet/Kconfig ***
@@ -3385,6 +3438,8 @@ CAIF_TTY all=m
 CAIF_SPI_SLAVE all=m
 CAIF_SPI_SYNC all=y
 CAIF_HSI all=m
+CAIF_VIRTIO all=m
+#- file drivers/vhost/Kconfig goes here
 
 #-
 #- *** FILE: drivers/net/can/Kconfig ***
@@ -3590,6 +3645,7 @@ ATL2 all=m
 ATL1 all=m sparc=n
 ATL1E all=m
 ATL1C all=m
+ALX all=m
 
 #-
 #- *** FILE: drivers/net/ethernet/broadcom/Kconfig ***
@@ -3837,6 +3893,7 @@ PASEMI_MAC ppc64=m
 NET_VENDOR_QLOGIC all=y
 QLA3XXX all=m sparc=n
 QLCNIC all=m
+QLCNIC_SRIOV all=y
 QLGE all=m
 NETXEN_NIC all=m sparc=n
 
@@ -3908,8 +3965,6 @@ STMMAC_PLATFORM all=n
 STMMAC_PCI all=n
 STMMAC_DEBUG_FS all=y
 STMMAC_DA all=y
-STMMAC_RING all=y
-STMMAC_CHAINED all=n
 
 #-
 #- *** FILE: drivers/net/ethernet/sun/Kconfig ***
@@ -4112,6 +4167,7 @@ SLIP_MODE_SLIP6 all=y
 NET_TEAM all=m
 NET_TEAM_MODE_BROADCAST all=m
 NET_TEAM_MODE_ROUNDROBIN all=m
+NET_TEAM_MODE_RANDOM all=m
 NET_TEAM_MODE_ACTIVEBACKUP all=m
 NET_TEAM_MODE_LOADBALANCE all=m
 
@@ -4123,6 +4179,7 @@ USB_CATC all=m
 USB_KAWETH all=m
 USB_PEGASUS all=m
 USB_RTL8150 all=m
+USB_RTL8152 all=m
 USB_USBNET all=m
 USB_NET_AX8817X all=m
 USB_NET_AX88179_178A all=m
@@ -4267,6 +4324,7 @@ ATH6KL all=m
 ATH6KL_SDIO all=m
 ATH6KL_USB all=m
 ATH6KL_DEBUG all=n
+ATH6KL_TRACING all=y
 
 #-
 #- *** FILE: drivers/net/wireless/ath/ath9k/Kconfig ***
@@ -4322,7 +4380,6 @@ BRCMUTIL all=m
 BRCMSMAC all=m
 BRCMFMAC all=m
 BRCMFMAC_SDIO all=y
-BRCMFMAC_SDIO_OOB all=y
 BRCMFMAC_USB all=y
 BRCM_TRACING all=y
 BRCMDBG all=n
@@ -4362,7 +4419,9 @@ IWLEGACY_DEBUG all=n
 #- *** FILE: drivers/net/wireless/iwlwifi/Kconfig ***
 #-
 IWLWIFI all=m
+IWLDVM all=m
 IWLMVM all=m
+#- WARNING: iwlwifi is useless without IWLDVM or IWLMVM
 IWLWIFI_DEBUG all=y
 IWLWIFI_DEBUG_EXPERIMENTAL_UCODE all=y
 IWLWIFI_DEVICE_TRACING all=n
@@ -4429,6 +4488,7 @@ RT2800USB all=m
 RT2800USB_RT33XX all=y
 RT2800USB_RT35XX all=y
 RT2800USB_RT53XX all=y
+RT2800USB_RT55XX all=y
 RT2800USB_UNKNOWN all=y
 RT2X00_DEBUG all=n
 
@@ -4447,6 +4507,7 @@ RTL8192CE all=m
 RTL8192SE all=m
 RTL8192DE all=m
 RTL8723AE all=m
+RTL8188EE all=m
 RTL8192CU all=m
 RTL8192C_COMMON all=m
 
@@ -4494,6 +4555,7 @@ ZD1211RW_DEBUG all=n
 #-
 NFC_PN533 all=m
 NFC_WILINK all=m
+NFC_MEI_PHY all=m
 #- file drivers/nfc/pn544/Kconfig goes here
 #- file drivers/nfc/microread/Kconfig goes here
 
@@ -4502,12 +4564,14 @@ NFC_WILINK all=m
 #-
 NFC_MICROREAD all=m
 NFC_MICROREAD_I2C all=m
+NFC_MICROREAD_MEI all=m
 
 #-
 #- *** FILE: drivers/nfc/pn544/Kconfig ***
 #-
 NFC_PN544 all=m
 NFC_PN544_I2C all=m
+NFC_PN544_MEI all=m
 
 #-
 #- *** FILE: drivers/ntb/Kconfig ***
@@ -4670,6 +4734,7 @@ MXM_WMI all=m
 INTEL_OAKTRAIL all=m
 SAMSUNG_Q10 all=m
 APPLE_GMUX all=m
+PVPANIC all=m
 
 #-
 #- *** FILE: drivers/pnp/Kconfig ***
@@ -4784,6 +4849,7 @@ RAPIDIO_DISC_TIMEOUT all=30
 RAPIDIO_ENABLE_RX_TX_PORTS all=y
 RAPIDIO_DMA_ENGINE all=y
 RAPIDIO_DEBUG all=n
+RAPIDIO_ENUM_BASIC all=m
 #- file drivers/rapidio/switches/Kconfig goes here
 
 #-
@@ -4815,6 +4881,7 @@ REGULATOR_ARIZONA all=m
 REGULATOR_DA903X all=m
 REGULATOR_DA9052 all=m
 REGULATOR_FAN53555 all=m
+REGULATOR_ANATOP all=m
 REGULATOR_MC13783 all=m
 REGULATOR_MC13892 all=m
 REGULATOR_ISL6271A all=m
@@ -4851,6 +4918,11 @@ REGULATOR_WM8994 all=m
 STE_MODEM_RPROC all=m
 
 #-
+#- *** FILE: drivers/reset/Kconfig ***
+#-
+RESET_CONTROLLER all=n
+
+#-
 #- *** FILE: drivers/rtc/Kconfig ***
 #-
 RTC_LIB all=y
@@ -5218,6 +5290,7 @@ SCSI_QLA_ISCSI all=m sparc=n
 #-
 SCSI_UFSHCD all=m
 SCSI_UFSHCD_PCI all=m
+SCSI_UFSHCD_PLATFORM all=m
 
 #-
 #- *** FILE: drivers/sfi/Kconfig ***
@@ -5267,6 +5340,11 @@ SSB_DEBUG all=n
 SSB_DRIVER_GPIO all=y
 
 #-
+#- *** FILE: drivers/ssbi/Kconfig ***
+#-
+SSBI all=n
+
+#-
 #- *** FILE: drivers/staging/Kconfig ***
 #-
 STAGING all=y
@@ -5294,8 +5372,8 @@ STAGING all=y
 #- file drivers/staging/vt6656/Kconfig goes here
 #- file drivers/staging/sep/Kconfig goes here
 #- file drivers/staging/iio/Kconfig goes here
-#- file drivers/staging/zram/Kconfig goes here
 #- file drivers/staging/zsmalloc/Kconfig goes here
+#- file drivers/staging/zram/Kconfig goes here
 #- file drivers/staging/wlags49_h2/Kconfig goes here
 #- file drivers/staging/wlags49_h25/Kconfig goes here
 #- file drivers/staging/sm7xxfb/Kconfig goes here
@@ -5313,13 +5391,11 @@ STAGING all=y
 #- file drivers/staging/ste_rmi4/Kconfig goes here
 #- file drivers/staging/nvec/Kconfig goes here
 #- file drivers/staging/media/Kconfig goes here
-#- file drivers/staging/net/Kconfig goes here
 #- file drivers/staging/android/Kconfig goes here
 #- file drivers/staging/ozwpan/Kconfig goes here
-#- file drivers/staging/ccg/Kconfig goes here
 #- file drivers/staging/gdm72xx/Kconfig goes here
 #- file drivers/staging/csr/Kconfig goes here
-#- file drivers/staging/omap-thermal/Kconfig goes here
+#- file drivers/staging/ti-soc-thermal/Kconfig goes here
 #- file drivers/staging/silicom/Kconfig goes here
 #- file drivers/staging/ced1401/Kconfig goes here
 #- file drivers/staging/imx-drm/Kconfig goes here
@@ -5328,6 +5404,8 @@ STAGING all=y
 #- file drivers/staging/fwserial/Kconfig goes here
 #- file drivers/staging/zcache/Kconfig goes here
 #- file drivers/staging/goldfish/Kconfig goes here
+#- file drivers/staging/netlogic/Kconfig goes here
+#- file drivers/staging/dwc2/Kconfig goes here
 
 #-
 #- *** FILE: drivers/staging/android/Kconfig ***
@@ -5424,6 +5502,7 @@ COMEDI_ADL_PCI9111 all=m
 COMEDI_ADL_PCI9118 all=m
 COMEDI_ADV_PCI1710 all=m
 COMEDI_ADV_PCI1723 all=m
+COMEDI_ADV_PCI1724 all=m
 COMEDI_ADV_PCI_DIO all=m
 COMEDI_AMPLC_DIO200_PCI all=m
 COMEDI_AMPLC_PC236_PCI all=m
@@ -5452,7 +5531,7 @@ COMEDI_NI_6527 all=m
 COMEDI_NI_65XX all=m
 COMEDI_NI_660X all=m
 COMEDI_NI_670X all=m
-COMEDI_NI_LABPC all=m
+COMEDI_NI_LABPC_PCI all=m
 COMEDI_NI_PCIDIO all=m
 COMEDI_NI_PCIMIO all=m
 COMEDI_RTD520 all=m
@@ -5476,6 +5555,7 @@ COMEDI_USBDUXSIGMA all=m
 COMEDI_VMK80XX all=m
 COMEDI_AMPLC_DIO200 all=m
 COMEDI_AMPLC_PC236 all=m
+COMEDI_NI_LABPC all=m
 COMEDI_NI_TIO all=m
 
 #-
@@ -5505,6 +5585,13 @@ SBE_PMCC4_NCOMM all=y
 DGRP all=m
 
 #-
+#- *** FILE: drivers/staging/dwc2/Kconfig ***
+#-
+USB_DWC2 all=m
+USB_DWC2_DEBUG all=n
+USB_DWC2_TRACK_MISSED_SOFS all=n
+
+#-
 #- *** FILE: drivers/staging/echo/Kconfig ***
 #-
 ECHO all=m
@@ -5545,7 +5632,6 @@ WIMAX_GDM72XX_USB_PM all=y
 #-
 #- *** FILE: drivers/staging/iio/Kconfig ***
 #-
-IIO_ST_HWMON all=m
 #- file drivers/staging/iio/accel/Kconfig goes here
 #- file drivers/staging/iio/adc/Kconfig goes here
 #- file drivers/staging/iio/addac/Kconfig goes here
@@ -5585,7 +5671,6 @@ AD799X all=m
 AD7780 all=m
 AD7816 all=m
 AD7192 all=m
-ADT7410 all=m
 AD7280 all=m
 
 #-
@@ -5636,7 +5721,6 @@ TSL2x7x all=m
 #-
 #- *** FILE: drivers/staging/iio/magnetometer/Kconfig ***
 #-
-SENSORS_AK8975 all=m
 SENSORS_HMC5843 all=m
 
 #-
@@ -5710,14 +5794,8 @@ DT3155_STREAMING all=y
 #-
 VIDEO_GO7007 all=m
 VIDEO_GO7007_USB all=m
+VIDEO_GO7007_LOADER all=m
 VIDEO_GO7007_USB_S2250_BOARD all=m
-VIDEO_GO7007_OV7640 all=m
-VIDEO_GO7007_SAA7113 all=m
-VIDEO_GO7007_SAA7115 all=m
-VIDEO_GO7007_TW9903 all=m
-VIDEO_GO7007_UDA1342 all=m
-VIDEO_GO7007_SONY_TUNER all=m
-VIDEO_GO7007_TW2804 all=m
 
 #-
 #- *** FILE: drivers/staging/media/lirc/Kconfig ***
@@ -5739,14 +5817,6 @@ LIRC_ZILOG all=m
 SOLO6X10 all=m
 
 #-
-#- *** FILE: drivers/staging/net/Kconfig ***
-#-
-PC300 all=m sparc=n
-PC300_MLPPP all=y
-#- Cyclades-PC300 MLPPP support is disabled.
-#- Refer to the file README.mlppp, provided by PC300 package.
-
-#-
 #- *** FILE: drivers/staging/ozwpan/Kconfig ***
 #-
 USB_WPAN_HCD all=m
@@ -5920,6 +5990,7 @@ FB_XGI all=m
 #- *** FILE: drivers/staging/zcache/Kconfig ***
 #-
 ZCACHE all=y
+ZCACHE_DEBUG all=y
 
 #-
 #- *** FILE: drivers/staging/zram/Kconfig ***
@@ -6111,24 +6182,23 @@ USB_SUPPORT all=y sparc=n
 USB_ARCH_HAS_HCD all=y
 USB all=m sparc=n
 #- file drivers/usb/core/Kconfig goes here
-#- file drivers/usb/dwc3/Kconfig goes here
 #- file drivers/usb/mon/Kconfig goes here
 #- file drivers/usb/wusbcore/Kconfig goes here
 #- file drivers/usb/host/Kconfig goes here
 #- file drivers/usb/musb/Kconfig goes here
-#- file drivers/usb/chipidea/Kconfig goes here
 #- file drivers/usb/renesas_usbhs/Kconfig goes here
 #- file drivers/usb/class/Kconfig goes here
 #- file drivers/usb/storage/Kconfig goes here
 #- file drivers/usb/image/Kconfig goes here
+#- file drivers/usb/dwc3/Kconfig goes here
+#- file drivers/usb/chipidea/Kconfig goes here
 #- USB port drivers
 USB_USS720 all=m
 #- file drivers/usb/serial/Kconfig goes here
 #- file drivers/usb/misc/Kconfig goes here
-#- file drivers/usb/phy/Kconfig goes here
 #- file drivers/usb/atm/Kconfig goes here
+#- file drivers/usb/phy/Kconfig goes here
 #- file drivers/usb/gadget/Kconfig goes here
-#- file drivers/usb/otg/Kconfig goes here
 
 #-
 #- *** FILE: drivers/usb/atm/Kconfig ***
@@ -6162,8 +6232,8 @@ USB_TMC all=m
 USB_DEBUG all=n
 USB_ANNOUNCE_NEW_DEVICES all=y
 #- Miscellaneous USB options
+USB_DEFAULT_PERSIST all=y
 USB_DYNAMIC_MINORS all=y sparc64=n
-USB_SUSPEND all=y
 USB_OTG all=n
 USB_OTG_WHITELIST all=y
 USB_OTG_BLACKLIST_HUB all=n
@@ -6188,7 +6258,9 @@ USB_GADGET_VBUS_DRAW all=2
 USB_GADGET_STORAGE_NUM_BUFFERS all=2
 USB_R8A66597 all=m
 USB_RENESAS_USBHS_UDC all=m
+USB_PXA27X all=n
 USB_MV_UDC all=m
+USB_MV_U3D all=m
 USB_GADGET_MUSB_HDRC all=n
 USB_M66592 all=m
 USB_AMD5536UDC all=m
@@ -6318,23 +6390,21 @@ USB_MON all=m
 USB_MUSB_HDRC all=n
 
 #-
-#- *** FILE: drivers/usb/otg/Kconfig ***
-#-
-#- OTG and related infrastructure
-USB_GPIO_VBUS all=m
-TWL4030_USB all=m
-NOP_USB_XCEIV all=m
-AB8500_USB all=m
-USB_MV_OTG all=m
-
-#-
 #- *** FILE: drivers/usb/phy/Kconfig ***
 #-
-#- USB Physical Layer drivers
+USB_PHY all=y
+AB8500_USB all=m
+NOP_USB_XCEIV all=m
+OMAP_CONTROL_USB all=m
 OMAP_USB2 all=m
 OMAP_USB3 all=m
-OMAP_CONTROL_USB all=m
+SAMSUNG_USBPHY all=m
+SAMSUNG_USB2PHY all=m
+SAMSUNG_USB3PHY all=m
+TWL4030_USB all=m
+USB_GPIO_VBUS all=m
 USB_ISP1301 all=m
+USB_MV_OTG all=m
 USB_RCAR_PHY all=m
 
 #-
@@ -6410,6 +6480,7 @@ USB_SERIAL_OPTICON all=m
 USB_SERIAL_VIVOPAY_SERIAL all=m
 USB_SERIAL_XSENS_MT all=m
 USB_SERIAL_ZIO all=m
+USB_SERIAL_WISHBONE all=m
 USB_SERIAL_ZTE all=m
 USB_SERIAL_SSU100 all=m
 USB_SERIAL_QT2 all=m
@@ -6468,12 +6539,7 @@ VFIO_PCI_VGA all=y
 #- *** FILE: drivers/vhost/Kconfig ***
 #-
 VHOST_NET all=m
-#- file drivers/vhost/Kconfig.tcm goes here
-
-#-
-#- *** FILE: drivers/vhost/Kconfig.tcm ***
-#-
-TCM_VHOST all=m
+VHOST_SCSI all=m
 
 #-
 #- *** FILE: drivers/video/Kconfig ***
@@ -6482,6 +6548,7 @@ TCM_VHOST all=m
 #- file drivers/gpu/vga/Kconfig goes here
 #- file drivers/gpu/drm/Kconfig goes here
 #- file drivers/gpu/misc/Kconfig goes here
+#- file drivers/gpu/host1x/Kconfig goes here
 VGASTATE all=m
 VIDEO_OUTPUT_CONTROL all=m
 FB all=y
@@ -6609,6 +6676,7 @@ FB_BROADSHEET all=m
 FB_AUO_K190X all=m
 FB_AUO_K1900 all=m
 FB_AUO_K1901 all=m
+FB_HYPERV all=m
 #- file drivers/video/omap/Kconfig goes here
 #- file drivers/video/omap2/Kconfig goes here
 #- file drivers/video/exynos/Kconfig goes here
@@ -6625,6 +6693,7 @@ LCD_CLASS_DEVICE all=m
 LCD_L4F00242T03 all=m
 LCD_LMS283GF05 all=m
 LCD_LTV350QV all=m
+LCD_ILI922X all=m
 LCD_TDO24M all=m
 LCD_VGG2432A4 all=m
 LCD_PLATFORM all=m
@@ -6757,6 +6826,7 @@ HDQ_MASTER_OMAP all=m
 W1_SLAVE_THERM all=m
 W1_SLAVE_SMEM all=m
 W1_SLAVE_DS2408 all=m
+W1_SLAVE_DS2408_READBACK all=y
 W1_SLAVE_DS2413 all=m
 W1_SLAVE_DS2423 all=m
 W1_SLAVE_DS2431 all=m
@@ -6924,6 +6994,7 @@ MISC_FILESYSTEMS all=y
 #- file fs/ufs/Kconfig goes here
 #- file fs/exofs/Kconfig goes here
 #- file fs/f2fs/Kconfig goes here
+#- file fs/efivarfs/Kconfig goes here
 #- file fs/aufs/Kconfig goes here
 #- file fs/exofs/Kconfig.ore goes here
 NETWORK_FILESYSTEMS all=y
@@ -6948,6 +7019,7 @@ NFS_COMMON all=y
 #-
 BINFMT_ELF all=y
 CORE_DUMP_DEFAULT_ELF_HEADERS all=y
+BINFMT_SCRIPT all=y
 BINFMT_AOUT alpha=m i386=m sparc=y
 OSF4_COMPAT alpha=n
 BINFMT_EM86 alpha=m
@@ -6993,6 +7065,8 @@ BFS_FS all=m
 BTRFS_FS all=m
 BTRFS_FS_POSIX_ACL all=y
 BTRFS_FS_CHECK_INTEGRITY all=n
+BTRFS_FS_RUN_SANITY_TESTS all=y
+BTRFS_DEBUG all=n
 
 #-
 #- *** FILE: fs/cachefiles/Kconfig ***
@@ -7050,6 +7124,11 @@ ECRYPT_FS all=m
 ECRYPT_FS_MESSAGING all=y
 
 #-
+#- *** FILE: fs/efivarfs/Kconfig ***
+#-
+EFIVAR_FS all=m
+
+#-
 #- *** FILE: fs/efs/Kconfig ***
 #-
 EFS_FS all=m
@@ -7438,6 +7517,7 @@ XFS_FS all=m
 XFS_QUOTA all=y
 XFS_POSIX_ACL all=y
 XFS_RT all=n
+XFS_WARN all=n
 XFS_DEBUG all=n
 
 #-
@@ -7481,7 +7561,10 @@ 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_NOCB_CPU all=y
+RCU_NOCB_CPU all=n
+RCU_NOCB_CPU_NONE all=y
+RCU_NOCB_CPU_ZERO all=n
+RCU_NOCB_CPU_ALL all=n
 IKCONFIG all=m
 IKCONFIG_PROC all=y
 LOG_BUF_SHIFT all=18
@@ -7522,11 +7605,11 @@ BLK_DEV_INITRD all=y
 CC_OPTIMIZE_FOR_SIZE all=n
 SYSCTL all=y
 ANON_INODES all=y
+HOTPLUG all=y
 EXPERT all=n
 UID16 all=y
 KALLSYMS all=y
 KALLSYMS_ALL all=y
-HOTPLUG all=y
 PRINTK all=y
 BUG all=y
 ELF_CORE all=y
@@ -7539,11 +7622,11 @@ TIMERFD all=y
 EVENTFD all=y
 SHMEM all=y
 AIO all=y
+PCI_QUIRKS all=y
 EMBEDDED all=n
 PERF_EVENTS all=y
 DEBUG_PERF_USE_VMALLOC all=n
 VM_EVENT_COUNTERS all=y
-PCI_QUIRKS all=y
 COMPAT_BRK all=n
 SLAB all=n
 SLUB all=y
@@ -7616,6 +7699,9 @@ APM_EMULATION ppc=m
 #- *** FILE: kernel/time/Kconfig ***
 #-
 TICK_ONESHOT i386=y sparc64=y
+HZ_PERIODIC all=n
+NO_HZ_IDLE all=y
+NO_HZ_FULL all=n
 NO_HZ all=y alpha= ia64=
 HIGH_RES_TIMERS all=y alpha= ia64=
 
@@ -7630,6 +7716,7 @@ SCHED_TRACER all=n
 ENABLE_DEFAULT_TRACERS all=n
 FTRACE_SYSCALLS all=n
 TRACER_SNAPSHOT all=y
+TRACER_SNAPSHOT_PER_CPU_SWAP all=y
 TRACE_BRANCH_PROFILING all=n
 BRANCH_PROFILE_NONE all=y
 PROFILE_ANNOTATED_BRANCHES all=n
@@ -7641,6 +7728,7 @@ UPROBE_EVENT all=y
 FTRACE_STARTUP_TEST all=n
 MMIOTRACE x86=n
 RING_BUFFER_BENCHMARK all=m
+RING_BUFFER_STARTUP_TEST all=n
 
 #-
 #- *** FILE: lib/Kconfig ***
@@ -7769,6 +7857,7 @@ ASYNC_RAID6_TEST all=m
 #- file samples/Kconfig goes here
 #- file lib/Kconfig.kgdb goes here
 #- file lib/Kconfig.kmemcheck goes here
+TEST_STRING_HELPERS all=m
 TEST_KSTRTOX all=m
 
 #-
@@ -7814,6 +7903,7 @@ BALLOON_COMPACTION all=y
 COMPACTION all=y
 MIGRATION all=y
 ZONE_DMA_FLAG all=1 sparc64=0
+BOUNCE all=y
 NR_QUICK sparc64=1
 KSM all=y
 DEFAULT_MMAP_MIN_ADDR all=0 x86_64=65536 i386=65536 sparc64=8192 ppc=65536
@@ -7895,6 +7985,7 @@ BRIDGE_NETFILTER all=y
 #- file net/batman-adv/Kconfig goes here
 #- file net/openvswitch/Kconfig goes here
 #- file net/vmw_vsock/Kconfig goes here
+#- file net/netlink/Kconfig goes here
 RFS_ACCEL all=y
 NETPRIO_CGROUP all=m
 BPF_JIT all=y
@@ -7946,6 +8037,7 @@ ROSE all=m
 BATMAN_ADV all=m
 BATMAN_ADV_BLA all=y
 BATMAN_ADV_DAT all=y
+BATMAN_ADV_NC all=y
 BATMAN_ADV_DEBUG all=n
 
 #-
@@ -8465,12 +8557,17 @@ IP_VS_PE_SIP all=m
 NETLABEL all=y
 
 #-
+#- *** FILE: net/netlink/Kconfig ***
+#-
+NETLINK_MMAP all=y
+NETLINK_DIAG all=m
+
+#-
 #- *** FILE: net/nfc/Kconfig ***
 #-
 NFC all=m
 #- file net/nfc/nci/Kconfig goes here
 #- file net/nfc/hci/Kconfig goes here
-#- file net/nfc/llcp/Kconfig goes here
 #- file drivers/nfc/Kconfig goes here
 
 #-
@@ -8480,11 +8577,6 @@ NFC_HCI all=m
 NFC_SHDLC all=y
 
 #-
-#- *** FILE: net/nfc/llcp/Kconfig ***
-#-
-NFC_LLCP all=y
-
-#-
 #- *** FILE: net/nfc/nci/Kconfig ***
 #-
 NFC_NCI all=m
@@ -8617,6 +8709,7 @@ SUNRPC_DEBUG all=y
 #-
 TIPC all=m
 TIPC_PORTS all=8191
+TIPC_MEDIA_IB all=y
 
 #-
 #- *** FILE: net/unix/Kconfig ***
@@ -9171,6 +9264,7 @@ AD2S1210_GPIO_OUTPUT all=n
 AD7314 all=m
 AD7745 all=m
 ADT7310 all=m
+ADT7410 all=m
 ADT75 all=m
 APRICOT alpha=m i386=m
 AT1700 alpha=m i386=m
@@ -9179,6 +9273,7 @@ BACKLIGHT_PROGEAR i386=m x86_64=m
 BATTERY_BQ20Z75 all=m
 BLK_DEV_UB all=n
 BLK_DEV_XD alpha=m i386=m
+BRCMFMAC_SDIO_OOB all=y
 BRIQ_PANEL ppc=m
 BT_L2CAP all=y
 BT_SCO all=y
@@ -9271,10 +9366,12 @@ IBM_NEW_EMAC_RX_SKB_HEADROOM ppc64=0
 IBM_NEW_EMAC_TXB ppc64=64
 IGB_PTP all=y
 IIO_RING_BUFFER all=y
+IIO_ST_HWMON all=m
 IIO_SW_RING all=m
 INPUT_ATI_REMOTE all=m sparc=n
 IP6_NF_QUEUE all=m
 IP6_NF_TARGET_LOG all=m
+IPDDP_DECAP all=y
 IP_NF_QUEUE all=m
 IP_NF_TARGET_LOG all=m
 IRQ_TIME_ACCOUN all=y
@@ -9319,8 +9416,16 @@ MEDIA_TUNER_CUSTOMISE all=n
 MFD_SUPPORT all=y
 MISC_DEVICES all=y
 MMC_SDHCI_OF powerpc=m
+MTD_CHAR all=m
 MTD_DEBUG all=n
+MTD_DILNETPC i386=m x86_64=m
+MTD_DILNETPC_BOOTSIZE i386=0x80000 x86_64=0x80000
+MTD_DOC2000 all=m
+MTD_DOC2001 all=m
+MTD_DOC2001PLUS all=m
+MTD_NAND_MUSEUM_IDS all=y sparc=n
 MTD_NAND_VERIFY_WRITE all=y
+MTD_ONENAND_SIM all=m
 MTD_UBI_BEB_RESERVE all=1
 MTD_UBI_DEBUG all=n
 MULTICORE_RAID456 all=n
@@ -9337,11 +9442,14 @@ NET_POCKET all=y
 NET_VENDOR_RACAL alpha=y i386=y
 NET_VENDOR_SMC alpha=y i386=y
 NFC_DEVICES all=y
+NFC_LLCP all=y
 NFSD_DEPRECATED all=n
 NFS_USE_NEW_IDMAPPER all=y
 NF_CONNTRACK_RTSP all=m
 NI5010 i386=m
 NI52 alpha=m i386=m
+PC300 all=m sparc=n
+PC300_MLPPP all=y
 PCH_PTP all=y
 PCMCIA_IBMTR all=m ppc=n
 PERF_COUNTERS all=y
@@ -9371,6 +9479,7 @@ SCTP_HMAC_MD5 all=y
 SCTP_HMAC_NONE all=n
 SCTP_HMAC_SHA1 all=n
 SEEQ8005 all=m
+SENSORS_AK8975 all=m
 SERIAL_8250_MCA i386=m
 SERIAL_MAX3107 all=m
 SERIAL_MAX3107_AAVA all=m
@@ -9391,10 +9500,13 @@ SPECTRA_EMU all=n
 SPECTRA_MRST_HW all=n
 SPECTRA_MTD all=y
 STALLION all=m
+STMMAC_CHAINED all=n
 STMMAC_DUAL_MAC all=y
+STMMAC_RING all=y
 STUB_POULSBO all=m
 SX all=m
 SYSCTL_SYSCALL_CHECK all=n
+TCM_VHOST all=m
 TIPC_ADVANCED all=n
 TIPC_DEBUG all=n
 TMS380TR all=m sparc=
@@ -9434,12 +9546,20 @@ USB_LANGWELL_OTG all=m
 USB_LIBUSUAL all=y
 USB_OHCI_HCD_PPC_SOC ppc=y
 USB_SERIAL_QUATECH_USB2 all=m
+USB_SUSPEND all=y
 USER_SPACE all=y
 V4L_ISA_PARPORT_DRIVERS all=y
 V4L_PCI_DRIVERS all=y
 V4L_USB_DRIVERS all=y sparc=n
 VIDEO_BT848_DVB all=y
 VIDEO_CAPTURE_DRIVERS all=y
+VIDEO_GO7007_OV7640 all=m
+VIDEO_GO7007_SAA7113 all=m
+VIDEO_GO7007_SAA7115 all=m
+VIDEO_GO7007_SONY_TUNER all=m
+VIDEO_GO7007_TW2804 all=m
+VIDEO_GO7007_TW9903 all=m
+VIDEO_GO7007_UDA1342 all=m
 VIDEO_HELPER_CHIPS_AUTO all=y
 VIDEO_V4L2_COMMON all=m
 VIRTIO_RING all=m
diff --git a/kernel-small_fixes.patch b/kernel-small_fixes.patch
index a59aaaf..392d121 100644
--- a/kernel-small_fixes.patch
+++ b/kernel-small_fixes.patch
@@ -46,174 +46,3 @@ index 7a0c800..ec5ebbb 100644
  	SET_ETHTOOL_OPS(dev, &rtl8169_ethtool_ops);
  	dev->watchdog_timeo = RTL8169_TX_TIMEOUT;
  
-commit 03bbcb2e7e292838bb0244f5a7816d194c911d62
-Author: Neil Horman <nhorman at tuxdriver.com>
-Date:   Tue Apr 16 16:38:32 2013 -0400
-
-    iommu/vt-d: add quirk for broken interrupt remapping on 55XX chipsets
-    
-    A few years back intel published a spec update:
-    http://www.intel.com/content/dam/doc/specification-update/5520-and-5500-chipset-ioh-specification-update.pdf
-    
-    For the 5520 and 5500 chipsets which contained an errata (specificially errata
-    53), which noted that these chipsets can't properly do interrupt remapping, and
-    as a result the recommend that interrupt remapping be disabled in bios.  While
-    many vendors have a bios update to do exactly that, not all do, and of course
-    not all users update their bios to a level that corrects the problem.  As a
-    result, occasionally interrupts can arrive at a cpu even after affinity for that
-    interrupt has be moved, leading to lost or spurrious interrupts (usually
-    characterized by the message:
-    kernel: do_IRQ: 7.71 No irq handler for vector (irq -1)
-    
-    There have been several incidents recently of people seeing this error, and
-    investigation has shown that they have system for which their BIOS level is such
-    that this feature was not properly turned off.  As such, it would be good to
-    give them a reminder that their systems are vulnurable to this problem.  For
-    details of those that reported the problem, please see:
-    https://bugzilla.redhat.com/show_bug.cgi?id=887006
-    
-    [ Joerg: Removed CONFIG_IRQ_REMAP ifdef from early-quirks.c ]
-    
-    Signed-off-by: Neil Horman <nhorman at tuxdriver.com>
-    CC: Prarit Bhargava <prarit at redhat.com>
-    CC: Don Zickus <dzickus at redhat.com>
-    CC: Don Dutile <ddutile at redhat.com>
-    CC: Bjorn Helgaas <bhelgaas at google.com>
-    CC: Asit Mallick <asit.k.mallick at intel.com>
-    CC: David Woodhouse <dwmw2 at infradead.org>
-    CC: linux-pci at vger.kernel.org
-    CC: Joerg Roedel <joro at 8bytes.org>
-    CC: Konrad Rzeszutek Wilk <konrad.wilk at oracle.com>
-    CC: Arkadiusz Miśkiewicz <arekm at maven.pl>
-    Signed-off-by: Joerg Roedel <joro at 8bytes.org>
-
-diff --git a/arch/x86/include/asm/irq_remapping.h b/arch/x86/include/asm/irq_remapping.h
-index 95fd352..aca6aa2 100644
---- a/arch/x86/include/asm/irq_remapping.h
-+++ b/arch/x86/include/asm/irq_remapping.h
-@@ -28,6 +28,7 @@
- 
- extern void setup_irq_remapping_ops(void);
- extern int irq_remapping_supported(void);
-+extern void set_irq_remapping_broken(void);
- extern int irq_remapping_prepare(void);
- extern int irq_remapping_enable(void);
- extern void irq_remapping_disable(void);
-@@ -54,6 +55,7 @@ void irq_remap_modify_chip_defaults(struct irq_chip *chip);
- 
- static inline void setup_irq_remapping_ops(void) { }
- static inline int irq_remapping_supported(void) { return 0; }
-+static inline void set_irq_remapping_broken(void) { }
- static inline int irq_remapping_prepare(void) { return -ENODEV; }
- static inline int irq_remapping_enable(void) { return -ENODEV; }
- static inline void irq_remapping_disable(void) { }
-diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
-index 3755ef4..94ab6b9 100644
---- a/arch/x86/kernel/early-quirks.c
-+++ b/arch/x86/kernel/early-quirks.c
-@@ -18,6 +18,7 @@
- #include <asm/apic.h>
- #include <asm/iommu.h>
- #include <asm/gart.h>
-+#include <asm/irq_remapping.h>
- 
- static void __init fix_hypertransport_config(int num, int slot, int func)
- {
-@@ -192,6 +193,21 @@ static void __init ati_bugs_contd(int num, int slot, int func)
- }
- #endif
- 
-+static void __init intel_remapping_check(int num, int slot, int func)
-+{
-+	u8 revision;
-+
-+	revision = read_pci_config_byte(num, slot, func, PCI_REVISION_ID);
-+
-+	/*
-+	 * Revision 0x13 of this chipset supports irq remapping
-+	 * but has an erratum that breaks its behavior, flag it as such
-+	 */
-+	if (revision == 0x13)
-+		set_irq_remapping_broken();
-+
-+}
-+
- #define QFLAG_APPLY_ONCE 	0x1
- #define QFLAG_APPLIED		0x2
- #define QFLAG_DONE		(QFLAG_APPLY_ONCE|QFLAG_APPLIED)
-@@ -221,6 +237,10 @@ static struct chipset early_qrk[] __initdata = {
- 	  PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs },
- 	{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS,
- 	  PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs_contd },
-+	{ PCI_VENDOR_ID_INTEL, 0x3403, PCI_CLASS_BRIDGE_HOST,
-+	  PCI_BASE_CLASS_BRIDGE, 0, intel_remapping_check },
-+	{ PCI_VENDOR_ID_INTEL, 0x3406, PCI_CLASS_BRIDGE_HOST,
-+	  PCI_BASE_CLASS_BRIDGE, 0, intel_remapping_check },
- 	{}
- };
- 
-diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
-index f3b8f23..5b19b2d 100644
---- a/drivers/iommu/intel_irq_remapping.c
-+++ b/drivers/iommu/intel_irq_remapping.c
-@@ -524,6 +524,16 @@ static int __init intel_irq_remapping_supported(void)
- 
- 	if (disable_irq_remap)
- 		return 0;
-+	if (irq_remap_broken) {
-+		WARN_TAINT(1, TAINT_FIRMWARE_WORKAROUND,
-+			   "This system BIOS has enabled interrupt remapping\n"
-+			   "on a chipset that contains an erratum making that\n"
-+			   "feature unstable.  To maintain system stability\n"
-+			   "interrupt remapping is being disabled.  Please\n"
-+			   "contact your BIOS vendor for an update\n");
-+		disable_irq_remap = 1;
-+		return 0;
-+	}
- 
- 	if (!dmar_ir_support())
- 		return 0;
-diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c
-index d56f8c1..3c11043 100644
---- a/drivers/iommu/irq_remapping.c
-+++ b/drivers/iommu/irq_remapping.c
-@@ -19,6 +19,7 @@
- int irq_remapping_enabled;
- 
- int disable_irq_remap;
-+int irq_remap_broken;
- int disable_sourceid_checking;
- int no_x2apic_optout;
- 
-@@ -211,6 +212,11 @@ void __init setup_irq_remapping_ops(void)
- #endif
- }
- 
-+void set_irq_remapping_broken(void)
-+{
-+	irq_remap_broken = 1;
-+}
-+
- int irq_remapping_supported(void)
- {
- 	if (disable_irq_remap)
-diff --git a/drivers/iommu/irq_remapping.h b/drivers/iommu/irq_remapping.h
-index ecb6376..90c4dae 100644
---- a/drivers/iommu/irq_remapping.h
-+++ b/drivers/iommu/irq_remapping.h
-@@ -32,6 +32,7 @@ struct pci_dev;
- struct msi_msg;
- 
- extern int disable_irq_remap;
-+extern int irq_remap_broken;
- extern int disable_sourceid_checking;
- extern int no_x2apic_optout;
- extern int irq_remapping_enabled;
-@@ -89,6 +90,7 @@ extern struct irq_remap_ops amd_iommu_irq_ops;
- 
- #define irq_remapping_enabled 0
- #define disable_irq_remap     1
-+#define irq_remap_broken      0
- 
- #endif /* CONFIG_IRQ_REMAP */
- 
diff --git a/kernel-x86.config b/kernel-x86.config
index a02b11d..f9b9405 100644
--- a/kernel-x86.config
+++ b/kernel-x86.config
@@ -35,14 +35,14 @@ X86_SUMMIT i386=n
 X86_ES7000 i386=n
 X86_32_IRIS i486=y i586=y i686=y
 SCHED_OMIT_FRAME_POINTER i386=y x86_64=y
-PARAVIRT_GUEST x86=y
-PARAVIRT_TIME_ACCOUNTING x86=y
+HYPERVISOR_GUEST all=y
+PARAVIRT x86=y
+PARAVIRT_DEBUG x86=n
+PARAVIRT_SPINLOCKS x86=n
 #- file arch/x86/xen/Kconfig goes here
 KVM_GUEST x86=y
 #- file arch/x86/lguest/Kconfig goes here
-PARAVIRT x86=y
-PARAVIRT_SPINLOCKS x86=n
-PARAVIRT_DEBUG x86=n
+PARAVIRT_TIME_ACCOUNTING x86=y
 NO_BOOTMEM x86=y
 MEMTEST x86=n
 #- file arch/x86/Kconfig.cpu goes here
@@ -220,7 +220,6 @@ IO_DELAY_NONE x86=n
 DEBUG_BOOT_PARAMS x86=n
 CPA_DEBUG x86=n
 OPTIMIZE_INLINING x86=n
-DEBUG_STRICT_USER_COPY_CHECKS x86=n
 DEBUG_NMI_SELFTEST all=y
 
 #-
@@ -356,6 +355,7 @@ SPARSE_IRQ i386=y x86_64=y
 #-
 DEBUG_STACK_USAGE x86=n
 DEBUG_PER_CPU_MAPS x86=n
+DEBUG_STRICT_USER_COPY_CHECKS x86=n
 #- file mm/Kconfig.debug goes here
 #- file kernel/trace/Kconfig goes here
 #- file samples/Kconfig goes here
@@ -369,4 +369,5 @@ EARLY_PRINTK_MRST x86=n
 KVM_CLOCK x86=y
 M386 i386=y i486=n i586=n i686=n pentium3=n pentium4=n athlon=n
 MCA i386=y
+PARAVIRT_GUEST x86=y
 X86_MRST i386=y
diff --git a/kernel-zph.patch b/kernel-zph.patch
index 6527719..e61e33b 100644
--- a/kernel-zph.patch
+++ b/kernel-zph.patch
@@ -48,10 +48,9 @@ diff -Nur linux-2.6.26.3/net/ipv4/tcp_input.c linux-2.6.26.3-zph/net/ipv4/tcp_in
  	/*  Queue data for delivery to the user.
  	 *  Packets in sequence go to the receive queue.
  	 *  Out of sequence packets to the out_of_order_queue.
-@@ -4915,6 +4923,8 @@
+@@ -4915,5 +4923,7 @@
  	struct inet_connection_sock *icsk = inet_csk(sk);
  	struct tcp_sock *tp = tcp_sk(sk);
- 	struct tcp_cookie_values *cvp = tp->cookie_values;
 +	struct inet_sock *inet = inet_sk(sk);
 +	struct iphdr *iph = ip_hdr(skb);
  	struct tcp_fastopen_cookie foc = { .len = -1 };
diff --git a/ovl02-vfs-export-do_splice_direct-to-modules.patch b/ovl02-vfs-export-do_splice_direct-to-modules.patch
index 312baea..5667bb0 100644
--- a/ovl02-vfs-export-do_splice_direct-to-modules.patch
+++ b/ovl02-vfs-export-do_splice_direct-to-modules.patch
@@ -8,14 +8,14 @@ Export do_splice_direct() to modules.  Needed by overlay filesystem.
 
 Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 ---
- fs/splice.c |    1 +
- 1 file changed, 1 insertion(+)
+ fs/internal.h      |    6 ------
+ fs/splice.c        |    1 +
+ include/linux/fs.h |    3 +++
+ 3 files changed, 4 insertions(+), 6 deletions(-)
 
-Index: linux-3.6-rc7-master/fs/splice.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/splice.c	2012-09-24 03:10:57.000000000 +0200
-+++ linux-3.6-rc7-master/fs/splice.c	2012-09-28 13:36:49.000000000 +0200
-@@ -1308,6 +1308,7 @@ long do_splice_direct(struct file *in, l
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -1312,6 +1312,7 @@ long do_splice_direct(struct file *in, l
  
  	return ret;
  }
@@ -23,3 +23,30 @@ Index: linux-3.6-rc7-master/fs/splice.c
  
  static int splice_pipe_to_pipe(struct pipe_inode_info *ipipe,
  			       struct pipe_inode_info *opipe,
+--- a/fs/internal.h
++++ b/fs/internal.h
+@@ -132,12 +132,6 @@ extern struct dentry *__d_alloc(struct s
+ extern ssize_t __kernel_write(struct file *, const char *, size_t, loff_t *);
+ 
+ /*
+- * splice.c
+- */
+-extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
+-		loff_t *opos, size_t len, unsigned int flags);
+-
+-/*
+  * pipe.c
+  */
+ extern const struct file_operations pipefifo_fops;
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -2427,6 +2427,9 @@ extern ssize_t generic_file_splice_write
+ 		struct file *, loff_t *, size_t, unsigned int);
+ extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
+ 		struct file *out, loff_t *, size_t len, unsigned int flags);
++extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
++		loff_t *opos, size_t len, unsigned int flags);
++
+ 
+ extern void
+ file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
diff --git a/ovl11-vfs-export-__inode_permission-to-modules.patch b/ovl03-vfs-export-inode_permission-to-modules.patch
similarity index 58%
rename from ovl11-vfs-export-__inode_permission-to-modules.patch
rename to ovl03-vfs-export-inode_permission-to-modules.patch
index cdbde96..1a0f1e0 100644
--- a/ovl11-vfs-export-__inode_permission-to-modules.patch
+++ b/ovl03-vfs-export-inode_permission-to-modules.patch
@@ -14,10 +14,8 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
  include/linux/fs.h |    1 +
  3 files changed, 2 insertions(+), 5 deletions(-)
 
-Index: linux-3.6-rc7-master/fs/internal.h
-===================================================================
---- linux-3.6-rc7-master.orig/fs/internal.h	2012-09-24 03:10:57.000000000 +0200
-+++ linux-3.6-rc7-master/fs/internal.h	2012-09-28 13:37:06.000000000 +0200
+--- a/fs/internal.h
++++ b/fs/internal.h
 @@ -42,11 +42,6 @@ static inline int __sync_blockdev(struct
  extern void __init chrdev_init(void);
  
@@ -30,11 +28,9 @@ Index: linux-3.6-rc7-master/fs/internal.h
   * namespace.c
   */
  extern int copy_mount_options(const void __user *, unsigned long *);
-Index: linux-3.6-rc7-master/fs/namei.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/namei.c	2012-09-28 13:36:47.000000000 +0200
-+++ linux-3.6-rc7-master/fs/namei.c	2012-09-28 13:37:06.000000000 +0200
-@@ -348,6 +348,7 @@ int __inode_permission(struct inode *ino
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -402,6 +402,7 @@ int __inode_permission(struct inode *ino
  
  	return security_inode_permission(inode, mask);
  }
@@ -42,11 +38,9 @@ Index: linux-3.6-rc7-master/fs/namei.c
  
  /**
   * sb_permission - Check superblock-level permissions
-Index: linux-3.6-rc7-master/include/linux/fs.h
-===================================================================
---- linux-3.6-rc7-master.orig/include/linux/fs.h	2012-09-28 13:37:00.000000000 +0200
-+++ linux-3.6-rc7-master/include/linux/fs.h	2012-09-28 13:37:06.000000000 +0200
-@@ -2427,6 +2427,7 @@ extern sector_t bmap(struct inode *, sec
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -2221,6 +2221,7 @@ extern sector_t bmap(struct inode *, sec
  #endif
  extern int notify_change(struct dentry *, struct iattr *);
  extern int inode_permission(struct inode *, int);
diff --git a/ovl03-vfs-introduce-clone_private_mount.patch b/ovl04-vfs-introduce-clone_private_mount.patch
similarity index 59%
rename from ovl03-vfs-introduce-clone_private_mount.patch
rename to ovl04-vfs-introduce-clone_private_mount.patch
index 587047d..3a875fb 100644
--- a/ovl03-vfs-introduce-clone_private_mount.patch
+++ b/ovl04-vfs-introduce-clone_private_mount.patch
@@ -9,18 +9,25 @@ this and export to modules.
 
 Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 ---
- fs/namespace.c        |   18 ++++++++++++++++++
+ fs/namespace.c        |   27 +++++++++++++++++++++++++++
  include/linux/mount.h |    3 +++
- 2 files changed, 21 insertions(+)
+ 2 files changed, 30 insertions(+)
 
-Index: linux-3.6-rc7-master/fs/namespace.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/namespace.c	2012-09-24 03:10:57.000000000 +0200
-+++ linux-3.6-rc7-master/fs/namespace.c	2012-09-28 13:36:51.000000000 +0200
-@@ -1387,6 +1387,24 @@ void drop_collected_mounts(struct vfsmou
- 	release_mounts(&umount_list);
+--- a/fs/namespace.c
++++ b/fs/namespace.c
+@@ -1442,6 +1442,33 @@ void drop_collected_mounts(struct vfsmou
+ 	namespace_unlock();
  }
  
++/**
++ * clone_private_mount - create a private clone of a path
++ *
++ * This creates a new vfsmount, which will be the clone of @path.  The new will
++ * not be attached anywhere in the namespace and will be private (i.e. changes
++ * to the originating mount won't be propagated into this).
++ *
++ * Release with mntput().
++ */
 +struct vfsmount *clone_private_mount(struct path *path)
 +{
 +	struct mount *old_mnt = real_mount(path->mnt);
@@ -32,8 +39,8 @@ Index: linux-3.6-rc7-master/fs/namespace.c
 +	down_read(&namespace_sem);
 +	new_mnt = clone_mnt(old_mnt, path->dentry, CL_PRIVATE);
 +	up_read(&namespace_sem);
-+	if (!new_mnt)
-+		return ERR_PTR(-ENOMEM);
++	if (IS_ERR(new_mnt))
++		return ERR_CAST(new_mnt);
 +
 +	return &new_mnt->mnt;
 +}
@@ -42,11 +49,9 @@ Index: linux-3.6-rc7-master/fs/namespace.c
  int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
  		   struct vfsmount *root)
  {
-Index: linux-3.6-rc7-master/include/linux/mount.h
-===================================================================
---- linux-3.6-rc7-master.orig/include/linux/mount.h	2012-09-24 03:10:57.000000000 +0200
-+++ linux-3.6-rc7-master/include/linux/mount.h	2012-09-28 13:36:51.000000000 +0200
-@@ -66,6 +66,9 @@ extern void mnt_pin(struct vfsmount *mnt
+--- a/include/linux/mount.h
++++ b/include/linux/mount.h
+@@ -68,6 +68,9 @@ extern void mnt_pin(struct vfsmount *mnt
  extern void mnt_unpin(struct vfsmount *mnt);
  extern int __mnt_is_readonly(struct vfsmount *mnt);
  
diff --git a/ovl04-overlay-filesystem.patch b/ovl05-overlay-filesystem.patch
similarity index 96%
rename from ovl04-overlay-filesystem.patch
rename to ovl05-overlay-filesystem.patch
index cde166b..f37efbc 100644
--- a/ovl04-overlay-filesystem.patch
+++ b/ovl05-overlay-filesystem.patch
@@ -30,15 +30,15 @@ underlying filesystem.  This makes the behavior very similar to union
 mounts (with the same limitations vs. fchmod/fchown on O_RDONLY file
 descriptors).
 
-Usage: 
+Usage:
 
   mount -t overlay -olowerdir=/lower,upperdir=/upper overlay /mnt
 
-Supported: 
+Supported:
 
  - all operations
 
-Missing: 
+Missing:
 
  - Currently a crash in the middle of copy-up, rename, unlink, rmdir or create
    over a whiteout may result in filesystem corruption on the overlay level.
@@ -64,6 +64,14 @@ Erez Zadok <ezk at fsl.cs.sunysb.edu>
 Sedat Dilek <sedat.dilek at googlemail.com>
  - fix up permission to confirm to new API
 
+Robin Dong <hao.bigrat at gmail.com>
+ - fix possible leak in ovl_new_inode
+ - create new inode in ovl_link
+
+Andy Whitcroft <apw at canonical.com>
+ - switch to __inode_permission()
+ - copy up i_uid/i_gid from the underlying inode
+
 Also thanks to the following people for testing and reporting bugs:
 
   Jordi Pujol <jordipujolp at gmail.com>
@@ -77,23 +85,15 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 ---
  fs/Kconfig               |    1 
  fs/Makefile              |    1 
- fs/overlayfs/Kconfig     |    4 
+ fs/overlayfs/Kconfig     |   10 
  fs/overlayfs/Makefile    |    7 
  fs/overlayfs/copy_up.c   |  385 +++++++++++++++++++++++++++++
- fs/overlayfs/dir.c       |  597 +++++++++++++++++++++++++++++++++++++++++++++
- fs/overlayfs/inode.c     |  379 +++++++++++++++++++++++++++++
- fs/overlayfs/overlayfs.h |   64 ++++
+ fs/overlayfs/dir.c       |  605 ++++++++++++++++++++++++++++++++++++++++++++++
+ fs/overlayfs/inode.c     |  372 ++++++++++++++++++++++++++++
+ fs/overlayfs/overlayfs.h |   70 +++++
  fs/overlayfs/readdir.c   |  566 +++++++++++++++++++++++++++++++++++++++++++
- fs/overlayfs/super.c     |  611 +++++++++++++++++++++++++++++++++++++++++++++++
- 10 files changed, 2615 insertions(+)
- create mode 100644 fs/overlayfs/Kconfig
- create mode 100644 fs/overlayfs/Makefile
- create mode 100644 fs/overlayfs/copy_up.c
- create mode 100644 fs/overlayfs/dir.c
- create mode 100644 fs/overlayfs/inode.c
- create mode 100644 fs/overlayfs/overlayfs.h
- create mode 100644 fs/overlayfs/readdir.c
- create mode 100644 fs/overlayfs/super.c
+ fs/overlayfs/super.c     |  612 +++++++++++++++++++++++++++++++++++++++++++++++
+ 10 files changed, 2629 insertions(+)
 
 --- a/fs/Kconfig
 +++ b/fs/Kconfig
@@ -107,7 +107,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
  	bool
 --- a/fs/Makefile
 +++ b/fs/Makefile
-@@ -110,6 +110,7 @@ obj-$(CONFIG_QNX6FS_FS)		+= qnx6/
+@@ -108,6 +108,7 @@ obj-$(CONFIG_QNX6FS_FS)		+= qnx6/
  obj-$(CONFIG_AUTOFS4_FS)	+= autofs4/
  obj-$(CONFIG_ADFS_FS)		+= adfs/
  obj-$(CONFIG_FUSE_FS)		+= fuse/
@@ -117,11 +117,17 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
  obj-$(CONFIG_OMFS_FS)		+= omfs/
 --- /dev/null
 +++ b/fs/overlayfs/Kconfig
-@@ -0,0 +1,4 @@
+@@ -0,0 +1,10 @@
 +config OVERLAYFS_FS
 +	tristate "Overlay filesystem support"
 +	help
-+	  Add support for overlay filesystem.
++	  An overlay filesystem combines two filesystems - an 'upper' filesystem
++	  and a 'lower' filesystem.  When a name exists in both filesystems, the
++	  object in the 'upper' filesystem is visible while the object in the
++	  'lower' filesystem is either hidden or, in the case of directories,
++	  merged with the 'upper' object.
++
++	  For more information see Documentation/filesystems/overlayfs.txt
 --- /dev/null
 +++ b/fs/overlayfs/Makefile
 @@ -0,0 +1,7 @@
@@ -134,7 +140,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +overlayfs-objs := super.o inode.o dir.o readdir.o copy_up.o
 --- /dev/null
 +++ b/fs/overlayfs/copy_up.c
-@@ -0,0 +1,385 @@
+@@ -0,0 +1,387 @@
 +/*
 + *
 + * Copyright (C) 2011 Novell Inc.
@@ -210,6 +216,8 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +{
 +	struct file *old_file;
 +	struct file *new_file;
++	loff_t old_pos = 0;
++	loff_t new_pos = 0;
 +	int error = 0;
 +
 +	if (len == 0)
@@ -227,7 +235,6 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +
 +	/* FIXME: copy up sparse files efficiently */
 +	while (len) {
-+		loff_t offset = new_file->f_pos;
 +		size_t this_len = OVL_COPY_UP_CHUNK_SIZE;
 +		long bytes;
 +
@@ -239,8 +246,9 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +			break;
 +		}
 +
-+		bytes = do_splice_direct(old_file, &offset, new_file, this_len,
-+				 SPLICE_F_MOVE);
++		bytes = do_splice_direct(old_file, &old_pos,
++					 new_file, &new_pos,
++					 this_len, SPLICE_F_MOVE);
 +		if (bytes <= 0) {
 +			error = bytes;
 +			break;
@@ -522,7 +530,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +}
 --- /dev/null
 +++ b/fs/overlayfs/dir.c
-@@ -0,0 +1,597 @@
+@@ -0,0 +1,605 @@
 +/*
 + *
 + * Copyright (C) 2011 Novell Inc.
@@ -597,7 +605,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +		 * There's no way to recover from failure to whiteout.
 +		 * What should we do?  Log a big fat error and... ?
 +		 */
-+		printk(KERN_ERR "overlayfs: ERROR - failed to whiteout '%s'\n",
++		pr_err("overlayfs: ERROR - failed to whiteout '%s'\n",
 +		       dentry->d_name.name);
 +	}
 +
@@ -829,6 +837,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +		}
 +	}
 +	ovl_dentry_update(dentry, newdentry);
++	ovl_copyattr(newdentry->d_inode, inode);
 +	d_instantiate(dentry, inode);
 +	inode = NULL;
 +	newdentry = NULL;
@@ -942,6 +951,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +	struct dentry *olddentry;
 +	struct dentry *newdentry;
 +	struct dentry *upperdir;
++	struct inode *newinode;
 +
 +	err = ovl_copy_up(old);
 +	if (err)
@@ -966,13 +976,20 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +			err = -ENOENT;
 +			goto out_unlock;
 +		}
++		newinode = ovl_new_inode(old->d_sb, newdentry->d_inode->i_mode,
++				new->d_fsdata);
++		if (!newinode) {
++			err = -ENOMEM;
++			goto link_fail;
++		}
++		ovl_copyattr(upperdir->d_inode, newinode);
 +
 +		ovl_dentry_version_inc(new->d_parent);
 +		ovl_dentry_update(new, newdentry);
 +
-+		ihold(old->d_inode);
-+		d_instantiate(new, old->d_inode);
++		d_instantiate(new, newinode);
 +	} else {
++link_fail:
 +		if (ovl_dentry_is_opaque(new))
 +			ovl_whiteout(upperdir, new);
 +		dput(newdentry);
@@ -981,7 +998,6 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +	mutex_unlock(&upperdir->d_inode->i_mutex);
 +out:
 +	return err;
-+
 +}
 +
 +static int ovl_rename(struct inode *olddir, struct dentry *old,
@@ -1122,7 +1138,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +};
 --- /dev/null
 +++ b/fs/overlayfs/inode.c
-@@ -0,0 +1,379 @@
+@@ -0,0 +1,372 @@
 +/*
 + *
 + * Copyright (C) 2011 Novell Inc.
@@ -1156,6 +1172,8 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +
 +	mutex_lock(&upperdentry->d_inode->i_mutex);
 +	err = notify_change(upperdentry, attr);
++	if (!err)
++		ovl_copyattr(upperdentry->d_inode, dentry->d_inode);
 +	mutex_unlock(&upperdentry->d_inode->i_mutex);
 +
 +	return err;
@@ -1225,19 +1243,9 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +		if (is_upper && !IS_RDONLY(inode) && IS_RDONLY(realinode) &&
 +		    (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
 +			goto out_dput;
-+
-+		/*
-+		 * Nobody gets write access to an immutable file.
-+		 */
-+		err = -EACCES;
-+		if (IS_IMMUTABLE(realinode))
-+			goto out_dput;
 +	}
 +
-+	if (realinode->i_op->permission)
-+		err = realinode->i_op->permission(realinode, mask);
-+	else
-+		err = generic_permission(realinode, mask);
++	err = __inode_permission(realinode, mask);
 +out_dput:
 +	dput(alias);
 +	return err;
@@ -1496,6 +1504,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +
 +	default:
 +		WARN(1, "illegal file type: %i\n", mode);
++		iput(inode);
 +		inode = NULL;
 +	}
 +
@@ -1504,7 +1513,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +}
 --- /dev/null
 +++ b/fs/overlayfs/overlayfs.h
-@@ -0,0 +1,64 @@
+@@ -0,0 +1,70 @@
 +/*
 + *
 + * Copyright (C) 2011 Novell Inc.
@@ -1563,6 +1572,12 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +
 +struct inode *ovl_new_inode(struct super_block *sb, umode_t mode,
 +			    struct ovl_entry *oe);
++static inline void ovl_copyattr(struct inode *from, struct inode *to)
++{
++	to->i_uid = from->i_uid;
++	to->i_gid = from->i_gid;
++}
++
 +/* dir.c */
 +extern const struct inode_operations ovl_dir_inode_operations;
 +
@@ -1928,7 +1943,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +	loff_t res;
 +	struct ovl_dir_file *od = file->private_data;
 +
-+	mutex_lock(&file->f_dentry->d_inode->i_mutex);
++	mutex_lock(&file_inode(file)->i_mutex);
 +	if (!file->f_pos)
 +		ovl_dir_reset(file);
 +
@@ -1958,7 +1973,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +		res = offset;
 +	}
 +out_unlock:
-+	mutex_unlock(&file->f_dentry->d_inode->i_mutex);
++	mutex_unlock(&file_inode(file)->i_mutex);
 +
 +	return res;
 +}
@@ -2104,7 +2119,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +
 +		dentry = lookup_one_len(p->name, upperdir, p->len);
 +		if (IS_ERR(dentry)) {
-+			printk(KERN_WARNING
++			pr_warn(
 +			    "overlayfs: failed to lookup whiteout %.*s: %li\n",
 +			    p->len, p->name, PTR_ERR(dentry));
 +			continue;
@@ -2112,7 +2127,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +		ret = vfs_unlink(upperdir->d_inode, dentry);
 +		dput(dentry);
 +		if (ret)
-+			printk(KERN_WARNING
++			pr_warn(
 +			    "overlayfs: failed to unlink whiteout %.*s: %i\n",
 +			    p->len, p->name, ret);
 +	}
@@ -2140,7 +2155,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +}
 --- /dev/null
 +++ b/fs/overlayfs/super.c
-@@ -0,0 +1,611 @@
+@@ -0,0 +1,612 @@
 +/*
 + *
 + * Copyright (C) 2011 Novell Inc.
@@ -2476,6 +2491,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +				      oe);
 +		if (!inode)
 +			goto out_dput;
++		ovl_copyattr(realdentry->d_inode, inode);
 +	}
 +
 +	if (upperdentry)
@@ -2513,7 +2529,6 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +
 +struct file *ovl_path_open(struct path *path, int flags)
 +{
-+	path_get(path);
 +	return dentry_open(path, flags, current_cred());
 +}
 +
@@ -2560,15 +2575,15 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +};
 +
 +enum {
-+	Opt_lowerdir,
-+	Opt_upperdir,
-+	Opt_err,
++	OPT_LOWERDIR,
++	OPT_UPPERDIR,
++	OPT_ERR,
 +};
 +
 +static const match_table_t ovl_tokens = {
-+	{Opt_lowerdir,			"lowerdir=%s"},
-+	{Opt_upperdir,			"upperdir=%s"},
-+	{Opt_err,			NULL}
++	{OPT_LOWERDIR,			"lowerdir=%s"},
++	{OPT_UPPERDIR,			"upperdir=%s"},
++	{OPT_ERR,			NULL}
 +};
 +
 +static int ovl_parse_opt(char *opt, struct ovl_config *config)
@@ -2587,14 +2602,14 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +
 +		token = match_token(p, ovl_tokens, args);
 +		switch (token) {
-+		case Opt_upperdir:
++		case OPT_UPPERDIR:
 +			kfree(config->upperdir);
 +			config->upperdir = match_strdup(&args[0]);
 +			if (!config->upperdir)
 +				return -ENOMEM;
 +			break;
 +
-+		case Opt_lowerdir:
++		case OPT_LOWERDIR:
 +			kfree(config->lowerdir);
 +			config->lowerdir = match_strdup(&args[0]);
 +			if (!config->lowerdir)
@@ -2625,7 +2640,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +
 +	err = -EINVAL;
 +	if (!config.upperdir || !config.lowerdir) {
-+		printk(KERN_ERR "overlayfs: missing upperdir or lowerdir\n");
++		pr_err("overlayfs: missing upperdir or lowerdir\n");
 +		goto out_free_config;
 +	}
 +
@@ -2654,14 +2669,14 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +	ufs->upper_mnt = clone_private_mount(&upperpath);
 +	err = PTR_ERR(ufs->upper_mnt);
 +	if (IS_ERR(ufs->upper_mnt)) {
-+		printk(KERN_ERR "overlayfs: failed to clone upperpath\n");
++		pr_err("overlayfs: failed to clone upperpath\n");
 +		goto out_put_lowerpath;
 +	}
 +
 +	ufs->lower_mnt = clone_private_mount(&lowerpath);
 +	err = PTR_ERR(ufs->lower_mnt);
 +	if (IS_ERR(ufs->lower_mnt)) {
-+		printk(KERN_ERR "overlayfs: failed to clone lowerpath\n");
++		pr_err("overlayfs: failed to clone lowerpath\n");
 +		goto out_put_upper_mnt;
 +	}
 +
@@ -2739,6 +2754,7 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
 +	.mount		= ovl_mount,
 +	.kill_sb	= kill_anon_super,
 +};
++MODULE_ALIAS_FS("overlayfs");
 +
 +static int __init ovl_init(void)
 +{
diff --git a/ovl05-overlayfs-add-statfs-support.patch b/ovl06-overlayfs-add-statfs-support.patch
similarity index 82%
rename from ovl05-overlayfs-add-statfs-support.patch
rename to ovl06-overlayfs-add-statfs-support.patch
index 67d370f..ccc1b4b 100644
--- a/ovl05-overlayfs-add-statfs-support.patch
+++ b/ovl06-overlayfs-add-statfs-support.patch
@@ -19,10 +19,8 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
  fs/overlayfs/super.c |   40 ++++++++++++++++++++++++++++++++++++++++
  1 file changed, 40 insertions(+)
 
-Index: linux-3.6-rc7-master/fs/overlayfs/super.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/overlayfs/super.c	2012-09-28 13:36:53.000000000 +0200
-+++ linux-3.6-rc7-master/fs/overlayfs/super.c	2012-09-28 13:36:55.000000000 +0200
+--- a/fs/overlayfs/super.c
++++ b/fs/overlayfs/super.c
 @@ -17,15 +17,19 @@
  #include <linux/module.h>
  #include <linux/cred.h>
@@ -43,7 +41,7 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
  };
  
  struct ovl_entry {
-@@ -406,9 +410,36 @@ static int ovl_remount_fs(struct super_b
+@@ -407,9 +411,36 @@ static int ovl_remount_fs(struct super_b
  		return mnt_want_write(ufs->upper_mnt);
  }
  
@@ -80,7 +78,7 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
  };
  
  struct ovl_config {
-@@ -474,6 +505,7 @@ static int ovl_fill_super(struct super_b
+@@ -475,6 +506,7 @@ static int ovl_fill_super(struct super_b
  	struct ovl_entry *oe;
  	struct ovl_fs *ufs;
  	struct ovl_config config;
@@ -88,13 +86,13 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
  	int err;
  
  	err = ovl_parse_opt((char *) data, &config);
-@@ -508,6 +540,13 @@ static int ovl_fill_super(struct super_b
+@@ -509,6 +541,13 @@ static int ovl_fill_super(struct super_b
  	    !S_ISDIR(lowerpath.dentry->d_inode->i_mode))
  		goto out_put_lowerpath;
  
 +	err = vfs_statfs(&lowerpath, &statfs);
 +	if (err) {
-+		printk(KERN_ERR "overlayfs: statfs failed on lowerpath\n");
++		pr_err("overlayfs: statfs failed on lowerpath\n");
 +		goto out_put_lowerpath;
 +	}
 +	ufs->lower_namelen = statfs.f_namelen;
@@ -102,7 +100,7 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
  	ufs->upper_mnt = clone_private_mount(&upperpath);
  	err = PTR_ERR(ufs->upper_mnt);
  	if (IS_ERR(ufs->upper_mnt)) {
-@@ -556,6 +595,7 @@ static int ovl_fill_super(struct super_b
+@@ -557,6 +596,7 @@ static int ovl_fill_super(struct super_b
  	root_dentry->d_fsdata = oe;
  	root_dentry->d_op = &ovl_dentry_operations;
  
diff --git a/ovl06-overlayfs-implement-show_options.patch b/ovl07-overlayfs-implement-show_options.patch
similarity index 85%
rename from ovl06-overlayfs-implement-show_options.patch
rename to ovl07-overlayfs-implement-show_options.patch
index 7e17c12..f1a684f 100644
--- a/ovl06-overlayfs-implement-show_options.patch
+++ b/ovl07-overlayfs-implement-show_options.patch
@@ -14,10 +14,8 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
  fs/overlayfs/super.c |   63 ++++++++++++++++++++++++++++++++++-----------------
  1 file changed, 43 insertions(+), 20 deletions(-)
 
-Index: linux-3.6-rc7-master/fs/overlayfs/super.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/overlayfs/super.c	2012-09-28 13:36:55.000000000 +0200
-+++ linux-3.6-rc7-master/fs/overlayfs/super.c	2012-09-28 13:36:57.000000000 +0200
+--- a/fs/overlayfs/super.c
++++ b/fs/overlayfs/super.c
 @@ -18,6 +18,7 @@
  #include <linux/cred.h>
  #include <linux/sched.h>
@@ -48,7 +46,7 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
  struct ovl_entry {
  	/*
  	 * Keep "double reference" on upper dentries, so that
-@@ -388,6 +398,8 @@ static void ovl_put_super(struct super_b
+@@ -389,6 +399,8 @@ static void ovl_put_super(struct super_b
  	mntput(ufs->upper_mnt);
  	mntput(ufs->lower_mnt);
  
@@ -57,7 +55,7 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
  	kfree(ufs);
  }
  
-@@ -436,15 +448,27 @@ static int ovl_statfs(struct dentry *den
+@@ -437,15 +449,27 @@ static int ovl_statfs(struct dentry *den
  	return err;
  }
  
@@ -90,7 +88,7 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
  };
  
  enum {
-@@ -504,34 +528,33 @@ static int ovl_fill_super(struct super_b
+@@ -505,34 +529,33 @@ static int ovl_fill_super(struct super_b
  	struct dentry *root_dentry;
  	struct ovl_entry *oe;
  	struct ovl_fs *ufs;
@@ -112,7 +110,7 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
  	err = -EINVAL;
 -	if (!config.upperdir || !config.lowerdir) {
 +	if (!ufs->config.upperdir || !ufs->config.lowerdir) {
- 		printk(KERN_ERR "overlayfs: missing upperdir or lowerdir\n");
+ 		pr_err("overlayfs: missing upperdir or lowerdir\n");
  		goto out_free_config;
  	}
  
@@ -136,7 +134,7 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
  	if (err)
  		goto out_put_upperpath;
  
-@@ -615,11 +638,11 @@ static int ovl_fill_super(struct super_b
+@@ -616,11 +639,11 @@ static int ovl_fill_super(struct super_b
  	path_put(&upperpath);
  out_free_oe:
  	kfree(oe);
diff --git a/ovl07-overlay-overlay-filesystem-documentation.patch b/ovl08-overlay-overlay-filesystem-documentation.patch
similarity index 93%
rename from ovl07-overlay-overlay-filesystem-documentation.patch
rename to ovl08-overlay-overlay-filesystem-documentation.patch
index 4a15832..6e66d75 100644
--- a/ovl07-overlay-overlay-filesystem-documentation.patch
+++ b/ovl08-overlay-overlay-filesystem-documentation.patch
@@ -11,12 +11,9 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
  Documentation/filesystems/overlayfs.txt |  199 ++++++++++++++++++++++++++++++++
  MAINTAINERS                             |    7 +
  2 files changed, 206 insertions(+)
- create mode 100644 Documentation/filesystems/overlayfs.txt
 
-Index: linux-3.6-rc7-master/Documentation/filesystems/overlayfs.txt
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-3.6-rc7-master/Documentation/filesystems/overlayfs.txt	2012-09-28 13:36:58.000000000 +0200
+--- /dev/null
++++ b/Documentation/filesystems/overlayfs.txt
 @@ -0,0 +1,199 @@
 +Written by: Neil Brown <neilb at suse.de>
 +
@@ -217,11 +214,9 @@ Index: linux-3.6-rc7-master/Documentation/filesystems/overlayfs.txt
 +filesystem are not allowed.  If the underlying filesystem is changed,
 +the behavior of the overlay is undefined, though it will not result in
 +a crash or deadlock.
-Index: linux-3.6-rc7-master/MAINTAINERS
-===================================================================
---- linux-3.6-rc7-master.orig/MAINTAINERS	2012-09-24 03:10:57.000000000 +0200
-+++ linux-3.6-rc7-master/MAINTAINERS	2012-09-28 13:36:58.000000000 +0200
-@@ -5104,6 +5104,13 @@ F:	drivers/scsi/osd/
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -6009,6 +6009,13 @@ F:	drivers/scsi/osd/
  F:	include/scsi/osd_*
  F:	fs/exofs/
  
diff --git a/ovl08-fs-limit-filesystem-stacking-depth.patch b/ovl09-fs-limit-filesystem-stacking-depth.patch
similarity index 63%
rename from ovl08-fs-limit-filesystem-stacking-depth.patch
rename to ovl09-fs-limit-filesystem-stacking-depth.patch
index 274dd34..bc6b60d 100644
--- a/ovl08-fs-limit-filesystem-stacking-depth.patch
+++ b/ovl09-fs-limit-filesystem-stacking-depth.patch
@@ -22,11 +22,9 @@ Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
  include/linux/fs.h   |   11 +++++++++++
  3 files changed, 28 insertions(+)
 
-Index: linux-3.6-rc7-master/fs/ecryptfs/main.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/ecryptfs/main.c	2012-09-24 03:10:57.000000000 +0200
-+++ linux-3.6-rc7-master/fs/ecryptfs/main.c	2012-09-28 13:37:00.000000000 +0200
-@@ -566,6 +566,13 @@ static struct dentry *ecryptfs_mount(str
+--- a/fs/ecryptfs/main.c
++++ b/fs/ecryptfs/main.c
+@@ -567,6 +567,13 @@ static struct dentry *ecryptfs_mount(str
  	s->s_maxbytes = path.dentry->d_sb->s_maxbytes;
  	s->s_blocksize = path.dentry->d_sb->s_blocksize;
  	s->s_magic = ECRYPTFS_SUPER_MAGIC;
@@ -34,17 +32,15 @@ Index: linux-3.6-rc7-master/fs/ecryptfs/main.c
 +
 +	rc = -EINVAL;
 +	if (s->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
-+		printk(KERN_ERR "eCryptfs: maximum fs stacking depth exceeded\n");
++		pr_err("eCryptfs: maximum fs stacking depth exceeded\n");
 +		goto out_free;
 +	}
  
  	inode = ecryptfs_get_inode(path.dentry->d_inode, s);
  	rc = PTR_ERR(inode);
-Index: linux-3.6-rc7-master/fs/overlayfs/super.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/overlayfs/super.c	2012-09-28 13:36:57.000000000 +0200
-+++ linux-3.6-rc7-master/fs/overlayfs/super.c	2012-09-28 13:37:00.000000000 +0200
-@@ -570,6 +570,16 @@ static int ovl_fill_super(struct super_b
+--- a/fs/overlayfs/super.c
++++ b/fs/overlayfs/super.c
+@@ -571,6 +571,16 @@ static int ovl_fill_super(struct super_b
  	}
  	ufs->lower_namelen = statfs.f_namelen;
  
@@ -53,7 +49,7 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
 +
 +	err = -EINVAL;
 +	if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
-+		printk(KERN_ERR "overlayfs: maximum fs stacking depth exceeded\n");
++		pr_err("overlayfs: maximum fs stacking depth exceeded\n");
 +		goto out_put_lowerpath;
 +	}
 +
@@ -61,11 +57,9 @@ Index: linux-3.6-rc7-master/fs/overlayfs/super.c
  	ufs->upper_mnt = clone_private_mount(&upperpath);
  	err = PTR_ERR(ufs->upper_mnt);
  	if (IS_ERR(ufs->upper_mnt)) {
-Index: linux-3.6-rc7-master/include/linux/fs.h
-===================================================================
---- linux-3.6-rc7-master.orig/include/linux/fs.h	2012-09-28 13:36:47.000000000 +0200
-+++ linux-3.6-rc7-master/include/linux/fs.h	2012-09-28 13:37:00.000000000 +0200
-@@ -513,6 +513,12 @@ struct iattr {
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -244,6 +244,12 @@ struct iattr {
   */
  #include <linux/quota.h>
  
@@ -78,7 +72,7 @@ Index: linux-3.6-rc7-master/include/linux/fs.h
  /** 
   * enum positive_aop_returns - aop return codes with specific semantics
   *
-@@ -1586,6 +1592,11 @@ struct super_block {
+@@ -1322,6 +1328,11 @@ struct super_block {
  
  	/* Being remounted read-only */
  	int s_readonly_remount;
diff --git a/ovl09-overlayfs-fix-possible-leak-in-ovl_new_inode.patch b/ovl09-overlayfs-fix-possible-leak-in-ovl_new_inode.patch
deleted file mode 100644
index 412b93e..0000000
--- a/ovl09-overlayfs-fix-possible-leak-in-ovl_new_inode.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 4bda74a61de9494ec76a7d5bf6f491a8284680d8 Mon Sep 17 00:00:00 2001
-From: Robin Dong <hao.bigrat at gmail.com>
-Date: Mon, 12 Mar 2012 13:44:58 +0800
-Subject: [PATCH 09/13] overlayfs: fix possible leak in ovl_new_inode
-Patch-mainline: not yet
-
-After allocating a new inode, if the mode of inode is incorrect, we should
-release it by iput().
-
-Signed-off-by: Robin Dong <sanbai at taobao.com>
-Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
----
- fs/overlayfs/inode.c |    1 +
- 1 file changed, 1 insertion(+)
-
-Index: linux-3.6-rc7-master/fs/overlayfs/inode.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/overlayfs/inode.c	2012-09-28 13:36:53.000000000 +0200
-+++ linux-3.6-rc7-master/fs/overlayfs/inode.c	2012-09-28 13:37:02.000000000 +0200
-@@ -371,6 +371,7 @@ struct inode *ovl_new_inode(struct super
- 
- 	default:
- 		WARN(1, "illegal file type: %i\n", mode);
-+		iput(inode);
- 		inode = NULL;
- 	}
- 
diff --git a/ovl10-overlayfs-create-new-inode-in-ovl_link.patch b/ovl10-overlayfs-create-new-inode-in-ovl_link.patch
deleted file mode 100644
index 2801a51..0000000
--- a/ovl10-overlayfs-create-new-inode-in-ovl_link.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From cb0b868591b574eb344e9c564a44e2f9b5e923eb Mon Sep 17 00:00:00 2001
-From: Robin Dong <hao.bigrat at gmail.com>
-Date: Mon, 12 Mar 2012 13:44:59 +0800
-Subject: [PATCH 10/13] overlayfs: create new inode in ovl_link
-Patch-mainline: not yet
-
-Imaging using ext4 as upperdir which has a file "hello" and lowdir is
-totally empty.
-
-1. mount -t overlayfs overlayfs -o lowerdir=/lower,upperdir=/upper /overlay
-2. cd /overlay
-3. ln hello bye
-
-then the overlayfs code will call vfs_link to create a real ext4
-dentry for "bye" and create
-a new overlayfs dentry point to overlayfs inode (which standed for
-"hello"). That means:
-	two overlayfs dentries and only one overlayfs inode.
-
-and then
-
-4. umount /overlay
-5. mount -t overlayfs overlayfs -o lowerdir=/lower,upperdir=/upper
-/overlay (again)
-6. cd /overlay
-7. ls hello bye
-
-the overlayfs will create two inodes(one for the "hello", another
-for the "bye") and two dentries (each point a inode).That means:
-	two dentries and two inodes.
-
-As above, with different order of "create link" and "mount", the
-result is not the same.
-
-In order to make the behavior coherent, we need to create inode in ovl_link.
-
-Signed-off-by: Robin Dong <sanbai at taobao.com>
-Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
----
- fs/overlayfs/dir.c |    9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
-Index: linux-3.6-rc7-master/fs/overlayfs/dir.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/overlayfs/dir.c	2012-09-28 13:36:53.000000000 +0200
-+++ linux-3.6-rc7-master/fs/overlayfs/dir.c	2012-09-28 13:37:04.000000000 +0200
-@@ -417,6 +417,7 @@ static int ovl_link(struct dentry *old,
- 	struct dentry *olddentry;
- 	struct dentry *newdentry;
- 	struct dentry *upperdir;
-+	struct inode *newinode;
- 
- 	err = ovl_copy_up(old);
- 	if (err)
-@@ -441,13 +442,17 @@ static int ovl_link(struct dentry *old,
- 			err = -ENOENT;
- 			goto out_unlock;
- 		}
-+		newinode = ovl_new_inode(old->d_sb, newdentry->d_inode->i_mode,
-+				new->d_fsdata);
-+		if (!newinode)
-+			goto link_fail;
- 
- 		ovl_dentry_version_inc(new->d_parent);
- 		ovl_dentry_update(new, newdentry);
- 
--		ihold(old->d_inode);
--		d_instantiate(new, old->d_inode);
-+		d_instantiate(new, newinode);
- 	} else {
-+link_fail:
- 		if (ovl_dentry_is_opaque(new))
- 			ovl_whiteout(upperdir, new);
- 		dput(newdentry);
diff --git a/ovl12-ovl-switch-to-__inode_permission.patch b/ovl12-ovl-switch-to-__inode_permission.patch
deleted file mode 100644
index 19074da..0000000
--- a/ovl12-ovl-switch-to-__inode_permission.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 8b0d519c119a64887df868e7f821e8a714da3d71 Mon Sep 17 00:00:00 2001
-From: Andy Whitcroft <apw at canonical.com>
-Date: Tue, 1 May 2012 16:17:52 +0100
-Subject: [PATCH 12/13] ovl: switch to __inode_permission()
-Patch-mainline: not yet
-
-When checking permissions on an overlayfs inode we do not take into
-account either device cgroup restrictions nor security permissions.
-This allows a user to mount an overlayfs layer over a restricted device
-directory and by pass those permissions to open otherwise restricted
-files.
-
-Switch over to __inode_permissions.
-
-Signed-off-by: Andy Whitcroft <apw at canonical.com>
-Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
----
- fs/overlayfs/inode.c |   12 +-----------
- 1 file changed, 1 insertion(+), 11 deletions(-)
-
-Index: linux-3.6-rc7-master/fs/overlayfs/inode.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/overlayfs/inode.c	2012-09-28 13:37:02.000000000 +0200
-+++ linux-3.6-rc7-master/fs/overlayfs/inode.c	2012-09-28 13:37:08.000000000 +0200
-@@ -100,19 +100,9 @@ int ovl_permission(struct inode *inode,
- 		if (is_upper && !IS_RDONLY(inode) && IS_RDONLY(realinode) &&
- 		    (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
- 			goto out_dput;
--
--		/*
--		 * Nobody gets write access to an immutable file.
--		 */
--		err = -EACCES;
--		if (IS_IMMUTABLE(realinode))
--			goto out_dput;
- 	}
- 
--	if (realinode->i_op->permission)
--		err = realinode->i_op->permission(realinode, mask);
--	else
--		err = generic_permission(realinode, mask);
-+	err = __inode_permission(realinode, mask);
- out_dput:
- 	dput(alias);
- 	return err;
diff --git a/ovl13-overlayfs-copy-up-i_uid-i_gid-from-the-underlying-in.patch b/ovl13-overlayfs-copy-up-i_uid-i_gid-from-the-underlying-in.patch
deleted file mode 100644
index 3eece5d..0000000
--- a/ovl13-overlayfs-copy-up-i_uid-i_gid-from-the-underlying-in.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From 3d5a6482fd89423b94d8bb3a0a303f0b40bb4279 Mon Sep 17 00:00:00 2001
-From: Andy Whitcroft <apw at canonical.com>
-Date: Thu, 9 Aug 2012 16:47:21 +0100
-Subject: [PATCH 13/13] overlayfs: copy up i_uid/i_gid from the underlying
- inode
-Patch-mainline: not yet
-
-YAMA et al rely on on i_uid/i_gid to be populated in order to perform
-their checks.  While these really cannot be guarenteed as the underlying
-filesystem may not even have the concept, they are expected to be filled
-when possible.  To quote Al Viro:
-
-    "Ideally, yes, we'd want to have ->i_uid used only by fs-specific
-     code and helpers used by that fs (including those that are
-     implicit defaults). [...]   In practice we have enough places
-     where uid/gid is used directly to make setting them practically
-     a requirement - places like /proc/<pid>/ can get away with
-     not doing that, but only because shitloads of syscalls are
-     not allowed on those anyway, permissions or no permissions.
-     In anything general-purpose you really need to set it."
-
-Copy up the underlying filesystem information into the overlayfs inode
-when we create it.
-
-Buglink: http://bugs.launchpad.net/bugs/944386
-Signed-off-by: Andy Whitcroft <apw at canonical.com>
-Signed-off-by: Miklos Szeredi <mszeredi at suse.cz>
----
- fs/overlayfs/dir.c       |    2 ++
- fs/overlayfs/inode.c     |    2 ++
- fs/overlayfs/overlayfs.h |    6 ++++++
- fs/overlayfs/super.c     |    1 +
- 4 files changed, 11 insertions(+)
-
-Index: linux-3.6-rc7-master/fs/overlayfs/dir.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/overlayfs/dir.c	2012-09-28 13:37:04.000000000 +0200
-+++ linux-3.6-rc7-master/fs/overlayfs/dir.c	2012-09-28 13:37:10.000000000 +0200
-@@ -304,6 +304,7 @@ static int ovl_create_object(struct dent
- 		}
- 	}
- 	ovl_dentry_update(dentry, newdentry);
-+	ovl_copyattr(newdentry->d_inode, inode);
- 	d_instantiate(dentry, inode);
- 	inode = NULL;
- 	newdentry = NULL;
-@@ -446,6 +447,7 @@ static int ovl_link(struct dentry *old,
- 				new->d_fsdata);
- 		if (!newinode)
- 			goto link_fail;
-+		ovl_copyattr(upperdir->d_inode, newinode);
- 
- 		ovl_dentry_version_inc(new->d_parent);
- 		ovl_dentry_update(new, newdentry);
-Index: linux-3.6-rc7-master/fs/overlayfs/inode.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/overlayfs/inode.c	2012-09-28 13:37:08.000000000 +0200
-+++ linux-3.6-rc7-master/fs/overlayfs/inode.c	2012-09-28 13:37:10.000000000 +0200
-@@ -31,6 +31,8 @@ int ovl_setattr(struct dentry *dentry, s
- 
- 	mutex_lock(&upperdentry->d_inode->i_mutex);
- 	err = notify_change(upperdentry, attr);
-+	if (!err)
-+		ovl_copyattr(upperdentry->d_inode, dentry->d_inode);
- 	mutex_unlock(&upperdentry->d_inode->i_mutex);
- 
- 	return err;
-Index: linux-3.6-rc7-master/fs/overlayfs/overlayfs.h
-===================================================================
---- linux-3.6-rc7-master.orig/fs/overlayfs/overlayfs.h	2012-09-28 13:36:53.000000000 +0200
-+++ linux-3.6-rc7-master/fs/overlayfs/overlayfs.h	2012-09-28 13:37:10.000000000 +0200
-@@ -56,6 +56,12 @@ int ovl_removexattr(struct dentry *dentr
- 
- struct inode *ovl_new_inode(struct super_block *sb, umode_t mode,
- 			    struct ovl_entry *oe);
-+static inline void ovl_copyattr(struct inode *from, struct inode *to)
-+{
-+	to->i_uid = from->i_uid;
-+	to->i_gid = from->i_gid;
-+}
-+
- /* dir.c */
- extern const struct inode_operations ovl_dir_inode_operations;
- 
-Index: linux-3.6-rc7-master/fs/overlayfs/super.c
-===================================================================
---- linux-3.6-rc7-master.orig/fs/overlayfs/super.c	2012-09-28 13:37:00.000000000 +0200
-+++ linux-3.6-rc7-master/fs/overlayfs/super.c	2012-09-28 13:37:10.000000000 +0200
-@@ -347,6 +347,7 @@ static int ovl_do_lookup(struct dentry *
- 				      oe);
- 		if (!inode)
- 			goto out_dput;
-+		ovl_copyattr(realdentry->d_inode, inode);
- 	}
- 
- 	if (upperdentry)
================================================================

---- gitweb:

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



More information about the pld-cvs-commit mailing list