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 three variations -- one to compute the rt extent number from an rt block number; one to compute the offset of an rt block within an rt extent; and one to extract both. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
2c2b981b73
commit
5dc3a80d46
@ -5276,7 +5276,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;
|
||||
@ -5371,8 +5370,8 @@ __xfs_bunmapi(
|
||||
if (!isrt)
|
||||
goto delete;
|
||||
|
||||
sum = del.br_startblock + del.br_blockcount;
|
||||
div_u64_rem(sum, mp->m_sb.sb_rextsize, &mod);
|
||||
mod = xfs_rtb_to_rtxoff(mp,
|
||||
del.br_startblock + del.br_blockcount);
|
||||
if (mod) {
|
||||
/*
|
||||
* Realtime extent not lined up at the end.
|
||||
@ -5419,7 +5418,8 @@ __xfs_bunmapi(
|
||||
goto error0;
|
||||
goto nodelete;
|
||||
}
|
||||
div_u64_rem(del.br_startblock, mp->m_sb.sb_rextsize, &mod);
|
||||
|
||||
mod = xfs_rtb_to_rtxoff(mp, del.br_startblock);
|
||||
if (mod) {
|
||||
xfs_extlen_t off = mp->m_sb.sb_rextsize - mod;
|
||||
|
||||
|
@ -1024,13 +1024,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_rtxrem(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_rtxrem(mp, rtbno, &mod);
|
||||
if (mod) {
|
||||
ASSERT(mod == 0);
|
||||
return -EIO;
|
||||
|
@ -39,6 +39,37 @@ xfs_extlen_to_rtxlen(
|
||||
return len / mp->m_sb.sb_rextsize;
|
||||
}
|
||||
|
||||
/* Convert an rt block number into an rt extent number. */
|
||||
static inline xfs_rtxnum_t
|
||||
xfs_rtb_to_rtx(
|
||||
struct xfs_mount *mp,
|
||||
xfs_rtblock_t rtbno)
|
||||
{
|
||||
return div_u64(rtbno, mp->m_sb.sb_rextsize);
|
||||
}
|
||||
|
||||
/* Return the offset of an rt block number within an rt extent. */
|
||||
static inline xfs_extlen_t
|
||||
xfs_rtb_to_rtxoff(
|
||||
struct xfs_mount *mp,
|
||||
xfs_rtblock_t rtbno)
|
||||
{
|
||||
return do_div(rtbno, mp->m_sb.sb_rextsize);
|
||||
}
|
||||
|
||||
/*
|
||||
* Crack an rt block number into an rt extent number and an offset within that
|
||||
* rt extent. Returns the rt extent number directly and the offset in @off.
|
||||
*/
|
||||
static inline xfs_rtxnum_t
|
||||
xfs_rtb_to_rtxrem(
|
||||
struct xfs_mount *mp,
|
||||
xfs_rtblock_t rtbno,
|
||||
xfs_extlen_t *off)
|
||||
{
|
||||
return div_u64_rem(rtbno, mp->m_sb.sb_rextsize, off);
|
||||
}
|
||||
|
||||
/*
|
||||
* Functions for walking free space rtextents in the realtime bitmap.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user