aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_aops.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-08-07 13:57:12 -0400
committerDarrick J. Wong <darrick.wong@oracle.com>2018-08-07 13:57:12 -0400
commit2ba090d521c5e09f32316c179d25bb6f699d3568 (patch)
tree1171512eca076f1e10fea00dcf8e07766486c1a4 /fs/xfs/xfs_aops.c
parenta0e336ba3e3d1c7ec0f738a2e2e203434c00b08e (diff)
xfs: use WRITE_ONCE to update if_seq
This adds ordering of the updates and makes sure we always see the if_seq update before the extent tree is modified. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'fs/xfs/xfs_aops.c')
-rw-r--r--fs/xfs/xfs_aops.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
index 235b4ddcd324..49f5f5896a43 100644
--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -351,7 +351,7 @@ xfs_map_blocks(
351 if (imap_valid && 351 if (imap_valid &&
352 (!xfs_inode_has_cow_data(ip) || 352 (!xfs_inode_has_cow_data(ip) ||
353 wpc->io_type == XFS_IO_COW || 353 wpc->io_type == XFS_IO_COW ||
354 wpc->cow_seq == ip->i_cowfp->if_seq)) 354 wpc->cow_seq == READ_ONCE(ip->i_cowfp->if_seq)))
355 return 0; 355 return 0;
356 356
357 if (XFS_FORCED_SHUTDOWN(mp)) 357 if (XFS_FORCED_SHUTDOWN(mp))
@@ -380,7 +380,7 @@ xfs_map_blocks(
380 xfs_iext_lookup_extent(ip, ip->i_cowfp, offset_fsb, &icur, &imap)) 380 xfs_iext_lookup_extent(ip, ip->i_cowfp, offset_fsb, &icur, &imap))
381 cow_fsb = imap.br_startoff; 381 cow_fsb = imap.br_startoff;
382 if (cow_fsb != NULLFILEOFF && cow_fsb <= offset_fsb) { 382 if (cow_fsb != NULLFILEOFF && cow_fsb <= offset_fsb) {
383 wpc->cow_seq = ip->i_cowfp->if_seq; 383 wpc->cow_seq = READ_ONCE(ip->i_cowfp->if_seq);
384 xfs_iunlock(ip, XFS_ILOCK_SHARED); 384 xfs_iunlock(ip, XFS_ILOCK_SHARED);
385 /* 385 /*
386 * Truncate can race with writeback since writeback doesn't 386 * Truncate can race with writeback since writeback doesn't