summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2012-01-18 14:41:45 -0600
committerGreg Kroah-Hartman <gregkh@suse.de>2012-01-25 16:13:55 -0800
commitafa2f5f83ea3ab46e90206e39578eaa61daf49f0 (patch)
treec78fef3f0f70d3eb4410d7f6228b92e100b7d640
parente9651ec2db7b69a2e41a76d1fdd7932aeef04aae (diff)
downloadlinux-stable-afa2f5f83ea3ab46e90206e39578eaa61daf49f0.tar.gz
linux-stable-afa2f5f83ea3ab46e90206e39578eaa61daf49f0.tar.bz2
linux-stable-afa2f5f83ea3ab46e90206e39578eaa61daf49f0.zip
xfs: fix endian conversion issue in discard code
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. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ben Myers <bpm@sgi.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--fs/xfs/xfs_discard.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/xfs/xfs_discard.c b/fs/xfs/xfs_discard.c
index 8a24f0c6c860..286a051f12cf 100644
--- a/fs/xfs/xfs_discard.c
+++ b/fs/xfs/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.