diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-12-23 06:59:19 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-12-23 06:59:19 -0500 |
commit | 749e4121d6ee7fd4495779730fbc6ae800d0317c (patch) | |
tree | 9270ebabd9e3b57ef0427495ec9228f52454b608 /fs/xfs/xfs_bmap_util.c | |
parent | tty: serial: 21285: stop using the unused[] variable from struct uart_port (diff) | |
parent | Linux 5.5-rc3 (diff) | |
download | linux-dev-749e4121d6ee7fd4495779730fbc6ae800d0317c.tar.xz linux-dev-749e4121d6ee7fd4495779730fbc6ae800d0317c.zip |
Merge 5.5-rc3 into tty-next
We need the tty/serial fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/xfs/xfs_bmap_util.c')
-rw-r--r-- | fs/xfs/xfs_bmap_util.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 2efd78a9719e..e62fb5216341 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c @@ -992,6 +992,7 @@ xfs_prepare_shift( struct xfs_inode *ip, loff_t offset) { + struct xfs_mount *mp = ip->i_mount; int error; /* @@ -1005,6 +1006,17 @@ xfs_prepare_shift( } /* + * Shift operations must stabilize the start block offset boundary along + * with the full range of the operation. If we don't, a COW writeback + * completion could race with an insert, front merge with the start + * extent (after split) during the shift and corrupt the file. Start + * with the block just prior to the start to stabilize the boundary. + */ + offset = round_down(offset, 1 << mp->m_sb.sb_blocklog); + if (offset) + offset -= (1 << mp->m_sb.sb_blocklog); + + /* * Writeback and invalidate cache for the remainder of the file as we're * about to shift down every extent from offset to EOF. */ |