xfs: update got in xfs_bmap_shift_update_extent
This way the caller gets the proper updated extent returned in got. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
bf8062800a
commit
11f75b3bba
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue