mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
xfs: call xfs_flush_unmap_range from xfs_free_file_space
Call xfs_flush_unmap_range from xfs_free_file_space so that xfs_file_fallocate doesn't have to predict which mode will call it. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20240827065123.1762168-5-hch@lst.de Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
57413d8e17
commit
1df1d3b2dc
@ -848,6 +848,14 @@ xfs_free_file_space(
|
||||
if (len <= 0) /* if nothing being freed */
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Now AIO and DIO has drained we flush and (if necessary) invalidate
|
||||
* the cached range over the first operation we are about to run.
|
||||
*/
|
||||
error = xfs_flush_unmap_range(ip, offset, len);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
startoffset_fsb = XFS_B_TO_FSB(mp, offset);
|
||||
endoffset_fsb = XFS_B_TO_FSBT(mp, offset + len);
|
||||
|
||||
|
@ -890,27 +890,6 @@ xfs_file_fallocate(
|
||||
*/
|
||||
inode_dio_wait(inode);
|
||||
|
||||
/*
|
||||
* Now AIO and DIO has drained we flush and (if necessary) invalidate
|
||||
* the cached range over the first operation we are about to run.
|
||||
*
|
||||
* We care about zero and collapse here because they both run a hole
|
||||
* punch over the range first. Because that can zero data, and the range
|
||||
* of invalidation for the shift operations is much larger, we still do
|
||||
* the required flush for collapse in xfs_prepare_shift().
|
||||
*
|
||||
* Insert has the same range requirements as collapse, and we extend the
|
||||
* file first which can zero data. Hence insert has the same
|
||||
* flush/invalidate requirements as collapse and so they are both
|
||||
* handled at the right time by xfs_prepare_shift().
|
||||
*/
|
||||
if (mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE |
|
||||
FALLOC_FL_COLLAPSE_RANGE)) {
|
||||
error = xfs_flush_unmap_range(ip, offset, len);
|
||||
if (error)
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
error = file_modified(file);
|
||||
if (error)
|
||||
goto out_unlock;
|
||||
|
Loading…
Reference in New Issue
Block a user