diff options
author | Christoph Hellwig <hch@infradead.org> | 2011-05-11 11:04:09 -0400 |
---|---|---|
committer | Alex Elder <aelder@sgi.com> | 2011-05-25 11:48:37 -0400 |
commit | f1c63b73cf60dc4800cde5ce7fd9466c419e5e36 (patch) | |
tree | df9250617bbf4e7521c9b25a2d7b3a0ffb09c969 /fs | |
parent | 00239acf36d3bba8e7c0609e6c473d6e408a2135 (diff) |
xfs: do not do pointer arithmetic on extent records
We need to call xfs_iext_get_ext for the previous extent to get a
valid pointer, and can't just do pointer arithmetics as they might
be in different pages.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Lachlan McIlroy <lmcilroy@redhat.com>
Signed-off-by: Alex Elder <aelder@sgi.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/xfs_bmap.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index ebcd45203c3d..896e16f08ed9 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c | |||
@@ -5143,9 +5143,12 @@ xfs_bunmapi( | |||
5143 | */ | 5143 | */ |
5144 | ASSERT(bno >= del.br_blockcount); | 5144 | ASSERT(bno >= del.br_blockcount); |
5145 | bno -= del.br_blockcount; | 5145 | bno -= del.br_blockcount; |
5146 | if (bno < got.br_startoff) { | 5146 | if (got.br_startoff > bno) { |
5147 | if (--lastx >= 0) | 5147 | if (--lastx >= 0) { |
5148 | xfs_bmbt_get_all(--ep, &got); | 5148 | ep = xfs_iext_get_ext(ifp, |
5149 | lastx); | ||
5150 | xfs_bmbt_get_all(ep, &got); | ||
5151 | } | ||
5149 | } | 5152 | } |
5150 | continue; | 5153 | continue; |
5151 | } else if (del.br_state == XFS_EXT_UNWRITTEN) { | 5154 | } else if (del.br_state == XFS_EXT_UNWRITTEN) { |