[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