xfs: correctly decrement the extent buffer index in xfs_bmap_del_extent
authorChristoph Hellwig <hch@infradead.org>
Wed, 11 May 2011 15:04:05 +0000 (15:04 +0000)
committerAlex Elder <aelder@sgi.com>
Wed, 25 May 2011 15:48:38 +0000 (10:48 -0500)
The code in xfs_bmap_del_extent does not correctly decrement the
extent buffer index when deleting a whole extent.  Most of the time
this gets caught by checks in xfs_bmapi that work around it and
decrement it manually and thus wasn't noticed so far.

Based on an earlier patch from Lachlan McIlroy.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Lachlan McIlroy <lmcilroy@redhat.com>
Signed-off-by: Alex Elder <aelder@sgi.com>
fs/xfs/xfs_bmap.c

index 896e16f..e546a33 100644 (file)
@@ -2916,8 +2916,10 @@ xfs_bmap_del_extent(
                 */
                xfs_iext_remove(ip, *idx, 1,
                                whichfork == XFS_ATTR_FORK ? BMAP_ATTRFORK : 0);
+               --*idx;
                if (delay)
                        break;
+
                XFS_IFORK_NEXT_SET(ip, whichfork,
                        XFS_IFORK_NEXTENTS(ip, whichfork) - 1);
                flags |= XFS_ILOG_CORE;