On Tue, Aug 27, 2024 at 08:50:48AM +0200, Christoph Hellwig wrote: > 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@xxxxxx> > --- > fs/xfs/xfs_bmap_util.c | 8 ++++++++ > fs/xfs/xfs_file.c | 21 --------------------- > 2 files changed, 8 insertions(+), 21 deletions(-) > > diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c > index fe2e2c93097550..187a0dbda24fc4 100644 > --- a/fs/xfs/xfs_bmap_util.c > +++ b/fs/xfs/xfs_bmap_util.c > @@ -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); Ok, so if we ever change the zeroing implementation to not punch a hole first, we're going to have to make sure we add this to whatever new zeroing implementation we have. Can you leave a comment in the FALLOC_FL_ZERO_RANGE implementation code that notes it currently relies on the xfs_flush_unmap_range() in xfs_free_file_space() for correct operation? -Dave. -- Dave Chinner david@xxxxxxxxxxxxx