diff options
author | Christoph Hellwig <hch@lst.de> | 2018-08-07 13:57:12 -0400 |
---|---|---|
committer | Darrick J. Wong <darrick.wong@oracle.com> | 2018-08-07 13:57:12 -0400 |
commit | 2ba090d521c5e09f32316c179d25bb6f699d3568 (patch) | |
tree | 1171512eca076f1e10fea00dcf8e07766486c1a4 /fs/xfs/xfs_aops.c | |
parent | a0e336ba3e3d1c7ec0f738a2e2e203434c00b08e (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.c | 4 |
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 |