From c06a8ce3c653ae31d4fe4fdbc34a86037ca55bbf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Arkadiusz=20Mi=C5=9Bkiewicz?= Date: Mon, 1 Jul 2013 13:26:00 +0200 Subject: [PATCH] - 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 +- ...s-export-do_splice_direct-to-modules.patch | 41 +- ...s-export-inode_permission-to-modules.patch | 22 +- ...04-vfs-introduce-clone_private_mount.patch | 35 +- ...em.patch => ovl05-overlay-filesystem.patch | 134 ++--- ...> ovl06-overlayfs-add-statfs-support.patch | 16 +- ...l07-overlayfs-implement-show_options.patch | 16 +- ...lay-overlay-filesystem-documentation.patch | 15 +- ...9-fs-limit-filesystem-stacking-depth.patch | 30 +- ...s-fix-possible-leak-in-ovl_new_inode.patch | 27 - ...erlayfs-create-new-inode-in-ovl_link.patch | 74 --- ovl12-ovl-switch-to-__inode_permission.patch | 45 -- ...p-i_uid-i_gid-from-the-underlying-in.patch | 96 ---- 18 files changed, 665 insertions(+), 915 deletions(-) rename ovl11-vfs-export-__inode_permission-to-modules.patch => ovl03-vfs-export-inode_permission-to-modules.patch (58%) rename ovl03-vfs-introduce-clone_private_mount.patch => ovl04-vfs-introduce-clone_private_mount.patch (59%) rename ovl04-overlay-filesystem.patch => ovl05-overlay-filesystem.patch (96%) rename ovl05-overlayfs-add-statfs-support.patch => ovl06-overlayfs-add-statfs-support.patch (82%) rename ovl06-overlayfs-implement-show_options.patch => ovl07-overlayfs-implement-show_options.patch (85%) rename ovl07-overlay-overlay-filesystem-documentation.patch => ovl08-overlay-overlay-filesystem-documentation.patch (93%) rename ovl08-fs-limit-filesystem-stacking-depth.patch => ovl09-fs-limit-filesystem-stacking-depth.patch (63%) delete mode 100644 ovl09-overlayfs-fix-possible-leak-in-ovl_new_inode.patch delete mode 100644 ovl10-overlayfs-create-new-inode-in-ovl_link.patch delete mode 100644 ovl12-ovl-switch-to-__inode_permission.patch delete mode 100644 ovl13-overlayfs-copy-up-i_uid-i_gid-from-the-underlying-in.patch diff --git a/kernel-aufs3.patch b/kernel-aufs3.patch index e01d1dbe..c47b8f30 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 #include #include -@@ -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-". 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-". 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 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 + -+#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 c7d230c4..2079a613 100644 --- a/kernel-multiarch.config +++ b/kernel-multiarch.config @@ -1,4 +1,9 @@ +#- +#- *** FILE: arch/* - ARCH SPECIFIC OPTIONS *** +#- +KVM_DEVICE_ASSIGNMENT all=y + #- #- *** FILE: block/Kconfig *** #- @@ -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 *** @@ -883,6 +900,11 @@ NOUVEAU_DEBUG all=5 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 *** #- @@ -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 *** @@ -1529,6 +1559,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 *** #- @@ -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 @@ -2099,6 +2144,14 @@ DM_UEVENT all=y 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 *** #- @@ -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 @@ -4850,6 +4917,11 @@ REGULATOR_WM8994 all=m #- STE_MODEM_RPROC all=m +#- +#- *** FILE: drivers/reset/Kconfig *** +#- +RESET_CONTROLLER all=n + #- #- *** FILE: drivers/rtc/Kconfig *** #- @@ -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 *** @@ -5266,6 +5339,11 @@ SSB_SILENT all=n SSB_DEBUG all=n SSB_DRIVER_GPIO all=y +#- +#- *** FILE: drivers/ssbi/Kconfig *** +#- +SSBI all=n + #- #- *** FILE: drivers/staging/Kconfig *** #- @@ -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 #- @@ -5504,6 +5584,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 *** #- @@ -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 *** @@ -5738,14 +5816,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 *** #- @@ -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 @@ -6317,24 +6389,22 @@ 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 *** @@ -7049,6 +7123,11 @@ DLM_DEBUG all=n ECRYPT_FS all=m ECRYPT_FS_MESSAGING all=y +#- +#- *** FILE: fs/efivarfs/Kconfig *** +#- +EFIVAR_FS all=m + #- #- *** FILE: fs/efs/Kconfig *** #- @@ -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 #- @@ -8464,13 +8556,18 @@ 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 #- @@ -8479,11 +8576,6 @@ NFC all=m NFC_HCI all=m NFC_SHDLC all=y -#- -#- *** FILE: net/nfc/llcp/Kconfig *** -#- -NFC_LLCP all=y - #- #- *** FILE: net/nfc/nci/Kconfig *** #- @@ -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 a59aaafe..392d1212 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 -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 - CC: Prarit Bhargava - CC: Don Zickus - CC: Don Dutile - CC: Bjorn Helgaas - CC: Asit Mallick - CC: David Woodhouse - CC: linux-pci@vger.kernel.org - CC: Joerg Roedel - CC: Konrad Rzeszutek Wilk - CC: Arkadiusz Miśkiewicz - Signed-off-by: Joerg Roedel - -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 - #include - #include -+#include - - 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 a02b11d5..f9b9405d 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 6527719a..e61e33bc 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/kernel.spec b/kernel.spec index 8aaf519c..1c797c2e 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/ovl02-vfs-export-do_splice_direct-to-modules.patch b/ovl02-vfs-export-do_splice_direct-to-modules.patch index 312baea3..5667bb02 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 --- - 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 cdbde967..1a0f1e04 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 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 587047d2..3a875fb0 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 --- - 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 cde166b5..f37efbcf 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 Sedat Dilek - fix up permission to confirm to new API +Robin Dong + - fix possible leak in ovl_new_inode + - create new inode in ovl_link + +Andy Whitcroft + - 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 @@ -77,23 +85,15 @@ Signed-off-by: Miklos Szeredi --- 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 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 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 +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 +{ + 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 + + /* 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 + 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 +} --- /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 + * 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 + } + } + 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 + 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 + 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 + 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 +}; --- /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 + + 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 + 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 + + default: + WARN(1, "illegal file type: %i\n", mode); ++ iput(inode); + inode = NULL; + } + @@ -1504,7 +1513,7 @@ Signed-off-by: Miklos Szeredi +} --- /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 + +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 + 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 + 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 + + 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 + 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 +} --- /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 + oe); + if (!inode) + goto out_dput; ++ ovl_copyattr(realdentry->d_inode, inode); + } + + if (upperdentry) @@ -2513,7 +2529,6 @@ Signed-off-by: Miklos Szeredi + +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 +}; + +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 + + 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 + + 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 + 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 + .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 67d370f4..ccc1b4ba 100644 --- a/ovl05-overlayfs-add-statfs-support.patch +++ b/ovl06-overlayfs-add-statfs-support.patch @@ -19,10 +19,8 @@ Signed-off-by: Miklos Szeredi 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 #include @@ -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 7e17c12e..f1a684fd 100644 --- a/ovl06-overlayfs-implement-show_options.patch +++ b/ovl07-overlayfs-implement-show_options.patch @@ -14,10 +14,8 @@ Signed-off-by: Miklos Szeredi 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 #include @@ -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 4a158324..6e66d75d 100644 --- a/ovl07-overlay-overlay-filesystem-documentation.patch +++ b/ovl08-overlay-overlay-filesystem-documentation.patch @@ -11,12 +11,9 @@ Signed-off-by: Miklos Szeredi 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 + @@ -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 274dd34a..bc6b60d4 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 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 @@ -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 412b93e9..00000000 --- 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 -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 -Signed-off-by: Miklos Szeredi ---- - 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 2801a516..00000000 --- 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 -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 -Signed-off-by: Miklos Szeredi ---- - 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 19074da0..00000000 --- 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 -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 -Signed-off-by: Miklos Szeredi ---- - 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 3eece5da..00000000 --- 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 -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// 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 -Signed-off-by: Miklos Szeredi ---- - 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) -- 2.44.0