]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: fix incorrect extent state in xfs_bmap_add_extent_unwritten_real
authorChristoph Hellwig <hch@lst.de>
Fri, 17 Nov 2017 04:08:59 +0000 (22:08 -0600)
committerEric Sandeen <sandeen@redhat.com>
Fri, 17 Nov 2017 04:08:59 +0000 (22:08 -0600)
Source kernel commit: 5e422f5e4fd71d18bc6b851eeb3864477b3d842e

There was one spot in xfs_bmap_add_extent_unwritten_real that didn't use the
passed in new extent state but always converted to normal, leading to wrong
behavior when converting from normal to unwritten.

Only found by code inspection, it seems like this code path to move partial
extent from written to unwritten while merging it with the next extent is
rarely exercised.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_bmap.c

index 9cdc52585ba373ac1e9cf64f0d8ceda335d7a490..1662f7dc0b3571d3f7ed44e7847bfe4d0aa45861 100644 (file)
@@ -2551,7 +2551,7 @@ xfs_bmap_add_extent_unwritten_real(
                                        &i)))
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
-                       cur->bc_rec.b.br_state = XFS_EXT_NORM;
+                       cur->bc_rec.b.br_state = new->br_state;
                        if ((error = xfs_btree_insert(cur, &i)))
                                goto done;
                        XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);