From: Greg Kroah-Hartman Date: Sat, 1 Mar 2014 01:13:27 +0000 (-0800) Subject: 3.13-stable patches X-Git-Tag: v3.10.33~38 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2dd2be91c8c359c8c971bfb3ce46671b73e4702d;p=thirdparty%2Fkernel%2Fstable-queue.git 3.13-stable patches added patches: export-declare-ksymtab-symbols.patch fs-fix-iversion-handling.patch --- diff --git a/queue-3.13/export-declare-ksymtab-symbols.patch b/queue-3.13/export-declare-ksymtab-symbols.patch new file mode 100644 index 00000000000..dae9c981d3e --- /dev/null +++ b/queue-3.13/export-declare-ksymtab-symbols.patch @@ -0,0 +1,39 @@ +From 7b4ec8dd7d4ac467e9eee4d49f2c9574d773efbb Mon Sep 17 00:00:00 2001 +From: Johannes Berg +Date: Thu, 16 Jan 2014 10:18:48 +1030 +Subject: export: declare ksymtab symbols + +From: Johannes Berg + +commit 7b4ec8dd7d4ac467e9eee4d49f2c9574d773efbb upstream. + +sparse complains about any __ksymtab symbols with the following: + + warning: symbol '__ksymtab_...' was not declared. Should it be static? + +due to Andi's patch making it non-static. + +Mollify sparse by declaring the symbol extern, otherwise we get +drowned in sparse warnings for anything that uses EXPORT_SYMBOL +in the sources, making it easy to miss real warnings. + +Fixes: e0f244c63fc9 ("asmlinkage, module: Make ksymtab [...] __visible") +Signed-off-by: Johannes Berg +Acked-by: Andi Kleen +Signed-off-by: Rusty Russell +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/export.h | 1 + + 1 file changed, 1 insertion(+) + +--- a/include/linux/export.h ++++ b/include/linux/export.h +@@ -59,6 +59,7 @@ extern struct module __this_module; + static const char __kstrtab_##sym[] \ + __attribute__((section("__ksymtab_strings"), aligned(1))) \ + = VMLINUX_SYMBOL_STR(sym); \ ++ extern const struct kernel_symbol __ksymtab_##sym; \ + __visible const struct kernel_symbol __ksymtab_##sym \ + __used \ + __attribute__((section("___ksymtab" sec "+" #sym), unused)) \ diff --git a/queue-3.13/fs-fix-iversion-handling.patch b/queue-3.13/fs-fix-iversion-handling.patch new file mode 100644 index 00000000000..a213be0aa93 --- /dev/null +++ b/queue-3.13/fs-fix-iversion-handling.patch @@ -0,0 +1,80 @@ +From dff6efc326a4d5f305797d4a6bba14f374fdd633 Mon Sep 17 00:00:00 2001 +From: Christoph Hellwig +Date: Tue, 19 Nov 2013 07:17:07 -0800 +Subject: fs: fix iversion handling + +From: Christoph Hellwig + +commit dff6efc326a4d5f305797d4a6bba14f374fdd633 upstream. + +Currently notify_change directly updates i_version for size updates, +which not only is counter to how all other fields are updated through +struct iattr, but also breaks XFS, which need inode updates to happen +under its own lock, and synchronized to the structure that gets written +to the log. + +Remove the update in the common code, and it to btrfs and ext4, +XFS already does a proper updaste internally and currently gets a +double update with the existing code. + +IMHO this is 3.13 and -stable material and should go in through the XFS +tree. + +Signed-off-by: Christoph Hellwig +Reviewed-by: Andreas Dilger +Acked-by: Jan Kara +Reviewed-by: Dave Chinner +Signed-off-by: Chris Mason +Signed-off-by: Ben Myers +Signed-off-by: Greg Kroah-Hartman + +--- + fs/attr.c | 5 ----- + fs/btrfs/inode.c | 8 ++++++-- + fs/ext4/inode.c | 4 ++++ + 3 files changed, 10 insertions(+), 7 deletions(-) + +--- a/fs/attr.c ++++ b/fs/attr.c +@@ -202,11 +202,6 @@ int notify_change(struct dentry * dentry + return -EPERM; + } + +- if ((ia_valid & ATTR_SIZE) && IS_I_VERSION(inode)) { +- if (attr->ia_size != inode->i_size) +- inode_inc_iversion(inode); +- } +- + if ((ia_valid & ATTR_MODE)) { + umode_t amode = attr->ia_mode; + /* Flag setting protected by i_mutex */ +--- a/fs/btrfs/inode.c ++++ b/fs/btrfs/inode.c +@@ -4354,8 +4354,12 @@ static int btrfs_setsize(struct inode *i + * these flags set. For all other operations the VFS set these flags + * explicitly if it wants a timestamp update. + */ +- if (newsize != oldsize && (!(mask & (ATTR_CTIME | ATTR_MTIME)))) +- inode->i_ctime = inode->i_mtime = current_fs_time(inode->i_sb); ++ if (newsize != oldsize) { ++ inode_inc_iversion(inode); ++ if (!(mask & (ATTR_CTIME | ATTR_MTIME))) ++ inode->i_ctime = inode->i_mtime = ++ current_fs_time(inode->i_sb); ++ } + + if (newsize > oldsize) { + truncate_pagecache(inode, newsize); +--- a/fs/ext4/inode.c ++++ b/fs/ext4/inode.c +@@ -4586,6 +4586,10 @@ int ext4_setattr(struct dentry *dentry, + if (attr->ia_size > sbi->s_bitmap_maxbytes) + return -EFBIG; + } ++ ++ if (IS_I_VERSION(inode) && attr->ia_size != inode->i_size) ++ inode_inc_iversion(inode); ++ + if (S_ISREG(inode->i_mode) && + (attr->ia_size < inode->i_size)) { + if (ext4_should_order_data(inode)) { diff --git a/queue-3.13/series b/queue-3.13/series index 9810e00c8d6..f54a6619227 100644 --- a/queue-3.13/series +++ b/queue-3.13/series @@ -75,3 +75,5 @@ cgroup-fix-error-return-value-in-cgroup_mount.patch cgroup-fix-error-return-from-cgroup_create.patch cgroup-fix-locking-in-cgroup_cfts_commit.patch cgroup-update-cgroup_enable_task_cg_lists-to-grab-siglock.patch +fs-fix-iversion-handling.patch +export-declare-ksymtab-symbols.patch