]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
xfs: add missing cmap->br_state = XFS_EXT_NORM update
authorGao Xiang <hsiangkao@linux.alibaba.com>
Thu, 16 Nov 2023 02:28:27 +0000 (18:28 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Nov 2023 16:56:26 +0000 (16:56 +0000)
[ Upstream commit 1a39ae415c1be1e46f5b3f97d438c7c4adc22b63 ]

COW extents are already converted into written real extents after
xfs_reflink_convert_cow_locked(), therefore cmap->br_state should
reflect it.

Otherwise, there is another necessary unwritten convertion
triggered in xfs_dio_write_end_io() for direct I/O cases.

Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Leah Rumancik <leah.rumancik@gmail.com>
Acked-by: Chandan Babu R <chandanbabu@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/xfs/xfs_reflink.c

index 36832e4bc803ca02efe314612c35d3e51daa7563..628ce65d02bb5550959c9bdfef78032cdfe8590b 100644 (file)
@@ -425,7 +425,10 @@ convert:
        if (!convert_now || cmap->br_state == XFS_EXT_NORM)
                return 0;
        trace_xfs_reflink_convert_cow(ip, cmap);
-       return xfs_reflink_convert_cow_locked(ip, offset_fsb, count_fsb);
+       error = xfs_reflink_convert_cow_locked(ip, offset_fsb, count_fsb);
+       if (!error)
+               cmap->br_state = XFS_EXT_NORM;
+       return error;
 
 out_trans_cancel:
        xfs_trans_cancel(tp);