Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11f75b3b authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong
Browse files

xfs: update got in xfs_bmap_shift_update_extent



This way the caller gets the proper updated extent returned in got.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent bf806280
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -5591,35 +5591,33 @@ xfs_bmap_shift_update_extent(
	xfs_fileoff_t		startoff)
{
	struct xfs_mount	*mp = ip->i_mount;
	struct xfs_bmbt_irec	new;
	struct xfs_bmbt_irec	prev = *got;
	int			error, i;

	*logflags |= XFS_ILOG_CORE;

	new = *got;
	new.br_startoff = startoff;
	got->br_startoff = startoff;

	if (cur) {
		error = xfs_bmbt_lookup_eq(cur, got, &i);
		error = xfs_bmbt_lookup_eq(cur, &prev, &i);
		if (error)
			return error;
		XFS_WANT_CORRUPTED_RETURN(mp, i == 1);

		error = xfs_bmbt_update(cur, &new);
		error = xfs_bmbt_update(cur, got);
		if (error)
			return error;
	} else {
		*logflags |= XFS_ILOG_DEXT;
	}

	xfs_iext_update_extent(ip, xfs_bmap_fork_to_state(whichfork), idx,
			&new);
	xfs_iext_update_extent(ip, xfs_bmap_fork_to_state(whichfork), idx, got);

	/* update reverse mapping */
	error = xfs_rmap_unmap_extent(mp, dfops, ip, whichfork, got);
	error = xfs_rmap_unmap_extent(mp, dfops, ip, whichfork, &prev);
	if (error)
		return error;
	return xfs_rmap_map_extent(mp, dfops, ip, whichfork, &new);
	return xfs_rmap_map_extent(mp, dfops, ip, whichfork, got);
}

int