From: Darrick J. Wong <djwong@xxxxxxxxxx> Hoist the AG iteration loop logic out of xfs_ioc_trim and into a separate function. No functional changes. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- fs/xfs/xfs_discard.c | 50 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/fs/xfs/xfs_discard.c b/fs/xfs/xfs_discard.c index 44658cc7d3f2..7459c5205a6b 100644 --- a/fs/xfs/xfs_discard.c +++ b/fs/xfs/xfs_discard.c @@ -140,6 +140,35 @@ xfs_trim_extents( return error; } +static int +xfs_trim_ddev_extents( + struct xfs_mount *mp, + xfs_daddr_t start, + xfs_daddr_t end, + xfs_daddr_t minlen, + uint64_t *blocks_trimmed) +{ + xfs_agnumber_t start_agno, end_agno, agno; + int error, last_error = 0; + + if (end > XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks) - 1) + end = XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks) - 1; + + start_agno = xfs_daddr_to_agno(mp, start); + end_agno = xfs_daddr_to_agno(mp, end); + + for (agno = start_agno; agno <= end_agno; agno++) { + error = xfs_trim_extents(mp, agno, start, end, minlen, + blocks_trimmed); + if (error == -ERESTARTSYS) + return error; + if (error) + last_error = error; + } + + return last_error; +} + /* * trim a range of the filesystem. * @@ -158,7 +187,6 @@ xfs_ioc_trim( unsigned int granularity = bdev_discard_granularity(bdev); struct fstrim_range range; xfs_daddr_t start, end, minlen; - xfs_agnumber_t start_agno, end_agno, agno; uint64_t blocks_trimmed = 0; int error, last_error = 0; @@ -194,21 +222,11 @@ xfs_ioc_trim( start = BTOBB(range.start); end = start + BTOBBT(range.len) - 1; - if (end > XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks) - 1) - end = XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks)- 1; - - start_agno = xfs_daddr_to_agno(mp, start); - end_agno = xfs_daddr_to_agno(mp, end); - - for (agno = start_agno; agno <= end_agno; agno++) { - error = xfs_trim_extents(mp, agno, start, end, minlen, - &blocks_trimmed); - if (error) { - last_error = error; - if (error == -ERESTARTSYS) - break; - } - } + error = xfs_trim_ddev_extents(mp, start, end, minlen, &blocks_trimmed); + if (error == -ERESTARTSYS) + return error; + if (error) + last_error = error; if (last_error) return last_error;