aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGao Xiang <hsiangkao@linux.alibaba.com>2022-02-25 16:18:30 -0800
committerDarrick J. Wong <djwong@kernel.org>2022-03-09 10:32:06 -0800
commit1a39ae415c1be1e46f5b3f97d438c7c4adc22b63 (patch)
tree96647e38438a299b1234dcebc8e984f1d147512a
parentLinux 5.17-rc6 (diff)
downloadlinux-dev-1a39ae415c1be1e46f5b3f97d438c7c4adc22b63.tar.xz
linux-dev-1a39ae415c1be1e46f5b3f97d438c7c4adc22b63.zip
xfs: add missing cmap->br_state = XFS_EXT_NORM update
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>
-rw-r--r--fs/xfs/xfs_reflink.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c
index db70060e7bf6..54e68e5693fd 100644
--- a/fs/xfs/xfs_reflink.c
+++ b/fs/xfs/xfs_reflink.c
@@ -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);