summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarrick J. Wong <djwong@kernel.org>2022-08-17 15:40:36 -0700
committerDarrick J. Wong <djwong@kernel.org>2022-11-09 19:07:54 -0800
commitb70273e0d4dbe0ff1430eb197fb410e47f5140f0 (patch)
tree8b3b86c4381934feda35fff2cf79121e2c77a314
parent9d1ecd69544965dac383edb1cc497f4931e3d054 (diff)
xfs: create helpers to convert rt block numbers to rt extent numbers
Create helpers to do unit conversions of rt block numbers to rt extent numbers. There are two variations -- the suffix "t" denotes the one that returns only the truncated extent number; the other one also returns the misalignment. Signed-off-by: Darrick J. Wong <djwong@kernel.org>
-rw-r--r--fs/xfs/libxfs/xfs_bmap.c7
-rw-r--r--fs/xfs/libxfs/xfs_rtbitmap.c4
-rw-r--r--fs/xfs/libxfs/xfs_rtbitmap.h17
-rw-r--r--fs/xfs/libxfs/xfs_swapext.c7
-rw-r--r--fs/xfs/xfs_rtalloc.c8
5 files changed, 30 insertions, 13 deletions
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
index e0daaf0cc3af..9ed6604d5e5a 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -5363,7 +5363,6 @@ __xfs_bunmapi(
int tmp_logflags; /* partial logging flags */
int wasdel; /* was a delayed alloc extent */
int whichfork; /* data or attribute fork */
- xfs_fsblock_t sum;
xfs_filblks_t len = *rlen; /* length to unmap in file */
xfs_fileoff_t end;
struct xfs_iext_cursor icur;
@@ -5460,8 +5459,7 @@ __xfs_bunmapi(
if (!isrt || (flags & XFS_BMAPI_REMAP))
goto delete;
- sum = del.br_startblock + del.br_blockcount;
- div_u64_rem(sum, mp->m_sb.sb_rextsize, &mod);
+ xfs_rtb_to_rtx(mp, del.br_startblock + del.br_blockcount, &mod);
if (mod) {
/*
* Realtime extent not lined up at the end.
@@ -5508,7 +5506,8 @@ __xfs_bunmapi(
goto error0;
goto nodelete;
}
- div_u64_rem(del.br_startblock, mp->m_sb.sb_rextsize, &mod);
+
+ xfs_rtb_to_rtx(mp, del.br_startblock, &mod);
if (mod) {
xfs_extlen_t off = mp->m_sb.sb_rextsize - mod;
diff --git a/fs/xfs/libxfs/xfs_rtbitmap.c b/fs/xfs/libxfs/xfs_rtbitmap.c
index ce1443681131..de54386cf52f 100644
--- a/fs/xfs/libxfs/xfs_rtbitmap.c
+++ b/fs/xfs/libxfs/xfs_rtbitmap.c
@@ -1031,13 +1031,13 @@ xfs_rtfree_blocks(
ASSERT(rtlen <= XFS_MAX_BMBT_EXTLEN);
- len = div_u64_rem(rtlen, mp->m_sb.sb_rextsize, &mod);
+ len = xfs_rtb_to_rtx(mp, rtlen, &mod);
if (mod) {
ASSERT(mod == 0);
return -EIO;
}
- start = div_u64_rem(rtbno, mp->m_sb.sb_rextsize, &mod);
+ start = xfs_rtb_to_rtx(mp, rtbno, &mod);
if (mod) {
ASSERT(mod == 0);
return -EIO;
diff --git a/fs/xfs/libxfs/xfs_rtbitmap.h b/fs/xfs/libxfs/xfs_rtbitmap.h
index 3b755d1580f0..689f0a7a56ee 100644
--- a/fs/xfs/libxfs/xfs_rtbitmap.h
+++ b/fs/xfs/libxfs/xfs_rtbitmap.h
@@ -39,6 +39,23 @@ xfs_extlen_to_rtxlen(
return len / mp->m_sb.sb_rextsize;
}
+static inline xfs_rtxnum_t
+xfs_rtb_to_rtx(
+ struct xfs_mount *mp,
+ xfs_rtblock_t rtbno,
+ xfs_extlen_t *mod)
+{
+ return div_u64_rem(rtbno, mp->m_sb.sb_rextsize, mod);
+}
+
+static inline xfs_rtxnum_t
+xfs_rtb_to_rtxt(
+ struct xfs_mount *mp,
+ xfs_rtblock_t rtbno)
+{
+ return div_u64(rtbno, mp->m_sb.sb_rextsize);
+}
+
/*
* Functions for walking free space rtextents in the realtime bitmap.
*/
diff --git a/fs/xfs/libxfs/xfs_swapext.c b/fs/xfs/libxfs/xfs_swapext.c
index 42df372d1a89..36f03b0bf4ed 100644
--- a/fs/xfs/libxfs/xfs_swapext.c
+++ b/fs/xfs/libxfs/xfs_swapext.c
@@ -30,6 +30,7 @@
#include "xfs_dir2_priv.h"
#include "xfs_dir2.h"
#include "xfs_symlink_remote.h"
+#include "xfs_rtbitmap.h"
struct kmem_cache *xfs_swapext_intent_cache;
@@ -215,19 +216,19 @@ xfs_swapext_check_rt_extents(
irec2.br_blockcount);
/* Both mappings must be aligned to the realtime extent size. */
- div_u64_rem(irec1.br_startoff, mp->m_sb.sb_rextsize, &mod);
+ xfs_rtb_to_rtx(mp, irec1.br_startoff, &mod);
if (mod) {
ASSERT(mod == 0);
return -EINVAL;
}
- div_u64_rem(irec2.br_startoff, mp->m_sb.sb_rextsize, &mod);
+ xfs_rtb_to_rtx(mp, irec1.br_startoff, &mod);
if (mod) {
ASSERT(mod == 0);
return -EINVAL;
}
- div_u64_rem(irec1.br_blockcount, mp->m_sb.sb_rextsize, &mod);
+ xfs_rtb_to_rtx(mp, irec1.br_blockcount, &mod);
if (mod) {
ASSERT(mod == 0);
return -EINVAL;
diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c
index 40b6df0ad633..04a468f4cb8a 100644
--- a/fs/xfs/xfs_rtalloc.c
+++ b/fs/xfs/xfs_rtalloc.c
@@ -1494,16 +1494,16 @@ xfs_rtfile_want_conversion(
struct xfs_bmbt_irec *irec)
{
xfs_fileoff_t rext_next;
- uint32_t modoff, modcnt;
+ xfs_extlen_t modoff, modcnt;
if (irec->br_state != XFS_EXT_UNWRITTEN)
return false;
- div_u64_rem(irec->br_startoff, mp->m_sb.sb_rextsize, &modoff);
+ xfs_rtb_to_rtx(mp, irec->br_startoff, &modoff);
if (modoff == 0) {
- uint64_t rexts = div_u64_rem(irec->br_blockcount,
- mp->m_sb.sb_rextsize, &modcnt);
+ xfs_rtbxlen_t rexts;
+ rexts = xfs_rtb_to_rtx(mp, irec->br_blockcount, &modcnt);
if (rexts > 0) {
/*
* Unwritten mapping starts at an rt extent boundary