summaryrefslogtreecommitdiff
path: root/fs/xfs
diff options
context:
space:
mode:
authorCarlos Maiolino <cem@kernel.org>2024-11-12 11:00:16 +0100
committerCarlos Maiolino <cem@kernel.org>2024-11-12 11:00:16 +0100
commitcb288c9fb2aba9a5d71b8191dfcb6f2cced37f7a (patch)
tree971015f390ddc3b7f3e51b46112b44bc2c8952cb /fs/xfs
parent6b3582aca37180fa1270867d7964e4023a59302f (diff)
parent64c58d7c99343a910edf995e15d8037e19ec5777 (diff)
Merge tag 'rtgroups-prep-6.13_2024-11-05' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into staging-merge
xfs: preparation for realtime allocation groups [v5.5 05/10] Prepare for realtime groups by adding a few bug fixes and generic code that will be necessary. With a bit of luck, this should all go splendidly. Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Diffstat (limited to 'fs/xfs')
-rw-r--r--fs/xfs/xfs_discard.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/fs/xfs/xfs_discard.c b/fs/xfs/xfs_discard.c
index 4f3e4736f13e..42b8b5e0e931 100644
--- a/fs/xfs/xfs_discard.c
+++ b/fs/xfs/xfs_discard.c
@@ -480,7 +480,7 @@ xfs_discard_rtdev_extents(
trace_xfs_discard_rtextent(mp, busyp->bno, busyp->length);
error = __blkdev_issue_discard(bdev,
- XFS_FSB_TO_BB(mp, busyp->bno),
+ xfs_rtb_to_daddr(mp, busyp->bno),
XFS_FSB_TO_BB(mp, busyp->length),
GFP_NOFS, &bio);
if (error)
@@ -612,22 +612,25 @@ xfs_trim_rtdev_extents(
xfs_rtblock_t start_rtbno, end_rtbno;
xfs_rtxnum_t start_rtx, end_rtx;
xfs_rgnumber_t start_rgno, end_rgno;
+ xfs_daddr_t daddr_offset;
int last_error = 0, error;
struct xfs_rtgroup *rtg = NULL;
/* Shift the start and end downwards to match the rt device. */
- start_rtbno = xfs_daddr_to_rtb(mp, start);
- if (start_rtbno > mp->m_sb.sb_dblocks)
- start_rtbno -= mp->m_sb.sb_dblocks;
+ daddr_offset = XFS_FSB_TO_BB(mp, mp->m_sb.sb_dblocks);
+ if (start > daddr_offset)
+ start -= daddr_offset;
else
- start_rtbno = 0;
+ start = 0;
+ start_rtbno = xfs_daddr_to_rtb(mp, start);
start_rtx = xfs_rtb_to_rtx(mp, start_rtbno);
start_rgno = xfs_rtb_to_rgno(mp, start_rtbno);
- end_rtbno = xfs_daddr_to_rtb(mp, end);
- if (end_rtbno <= mp->m_sb.sb_dblocks)
+ if (end <= daddr_offset)
return 0;
- end_rtbno -= mp->m_sb.sb_dblocks;
+ else
+ end -= daddr_offset;
+ end_rtbno = xfs_daddr_to_rtb(mp, end);
end_rtx = xfs_rtb_to_rtx(mp, end_rtbno + mp->m_sb.sb_rextsize - 1);
end_rgno = xfs_rtb_to_rgno(mp, end_rtbno);