From: Greg Kroah-Hartman Date: Fri, 27 Jan 2012 00:48:35 +0000 (-0800) Subject: 3.0-stable patches X-Git-Tag: v3.0.19~21 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4592017d0c829d222a087580baf9254373a16c71;p=thirdparty%2Fkernel%2Fstable-queue.git 3.0-stable patches added patches: xfs-fix-endian-conversion-issue-in-discard-code.patch --- diff --git a/queue-3.0/series b/queue-3.0/series index 0bd32ce916d..f82881fca61 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -13,3 +13,4 @@ ftrace-balance-records-when-updating-the-hash.patch ftrace-update-filter-when-tracing-enabled-in-set_ftrace_filter.patch ftrace-fix-unregister-ftrace_ops-accounting.patch ah-don-t-return-net_xmit_drop-on-input.patch +xfs-fix-endian-conversion-issue-in-discard-code.patch diff --git a/queue-3.0/xfs-fix-endian-conversion-issue-in-discard-code.patch b/queue-3.0/xfs-fix-endian-conversion-issue-in-discard-code.patch new file mode 100644 index 00000000000..0078b530730 --- /dev/null +++ b/queue-3.0/xfs-fix-endian-conversion-issue-in-discard-code.patch @@ -0,0 +1,50 @@ +From bpm@sgi.com Thu Jan 26 16:45:31 2012 +From: bpm@sgi.com +Date: Thu, 26 Jan 2012 13:47:42 -0600 +Subject: xfs: fix endian conversion issue in discard code +To: stable@vger.kernel.org, xfs@oss.sgi.com, bpm@sgi.com +Cc: Dave Chinner +Message-ID: <1327607262-3500-2-git-send-email-bpm@sgi.com> + + +From: Dave Chinner + +commit b1c770c273a4787069306fc82aab245e9ac72e9d upstream + +When finding the longest extent in an AG, we read the value directly +out of the AGF buffer without endian conversion. This will give an +incorrect length, resulting in FITRIM operations potentially not +trimming everything that it should. + +Note, for 3.0-stable this has been modified to apply to +fs/xfs/linux-2.6/xfs_discard.c instead of fs/xfs/xfs_discard.c. -bpm + +Signed-off-by: Dave Chinner +Reviewed-by: Christoph Hellwig +Signed-off-by: Ben Myers +Signed-off-by: Greg Kroah-Hartman + +--- + fs/xfs/linux-2.6/xfs_discard.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/fs/xfs/linux-2.6/xfs_discard.c ++++ b/fs/xfs/linux-2.6/xfs_discard.c +@@ -68,7 +68,7 @@ xfs_trim_extents( + * Look up the longest btree in the AGF and start with it. + */ + error = xfs_alloc_lookup_le(cur, 0, +- XFS_BUF_TO_AGF(agbp)->agf_longest, &i); ++ be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_longest), &i); + if (error) + goto out_del_cursor; + +@@ -84,7 +84,7 @@ xfs_trim_extents( + if (error) + goto out_del_cursor; + XFS_WANT_CORRUPTED_GOTO(i == 1, out_del_cursor); +- ASSERT(flen <= XFS_BUF_TO_AGF(agbp)->agf_longest); ++ ASSERT(flen <= be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_longest)); + + /* + * Too small? Give up.