On Mon, May 04, 2020 at 06:10:22PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > Bail out if there's something not right with either file's fork > mappings. > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > --- > fs/xfs/xfs_bmap_util.c | 31 +++++++++++++++++++++++-------- > 1 file changed, 23 insertions(+), 8 deletions(-) > > > diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c > index cc23a3e23e2d..2774939e176d 100644 > --- a/fs/xfs/xfs_bmap_util.c > +++ b/fs/xfs/xfs_bmap_util.c > @@ -1342,8 +1342,16 @@ xfs_swap_extent_rmap( > &nimaps, 0); > if (error) > goto out; > - ASSERT(nimaps == 1); > - ASSERT(tirec.br_startblock != DELAYSTARTBLOCK); > + if (nimaps != 1 || tirec.br_startblock == DELAYSTARTBLOCK) { > + /* > + * We should never get no mapping or a delalloc extent > + * since the donor file should have been flushed by the > + * caller. > + */ > + ASSERT(0); > + error = -EINVAL; > + goto out; > + } I'm not even sure the !nimaps case still exists. Usually this will return a hole extent, which we don't seem to handle here? In general I think this code would be improved quite a bit by using xfs_iext_lookup_extent instead of xfs_bmapi_read. Same for the second hunk.