fs/xfs/libxfs/xfs_rtbitmap.h

Source file repositories/reference/linux-study-clean/fs/xfs/libxfs/xfs_rtbitmap.h

File Facts

System
Linux kernel
Corpus path
fs/xfs/libxfs/xfs_rtbitmap.h
Extension
.h
Size
11863 bytes
Lines
454
Domain
Core OS
Bucket
VFS And Filesystem Core
Inferred role
Core OS: implementation source
Status
source implementation candidate

Why This File Exists

Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.

Dependency Surface

Detected Declarations

Annotated Snippet

struct xfs_rtalloc_args {
	struct xfs_rtgroup	*rtg;
	struct xfs_mount	*mp;
	struct xfs_trans	*tp;

	struct xfs_buf		*rbmbp;	/* bitmap block buffer */
	struct xfs_buf		*sumbp;	/* summary block buffer */

	xfs_fileoff_t		rbmoff;	/* bitmap block number */
	xfs_fileoff_t		sumoff;	/* summary block number */
};

static inline xfs_rtblock_t
xfs_rtx_to_rtb(
	struct xfs_rtgroup	*rtg,
	xfs_rtxnum_t		rtx)
{
	struct xfs_mount	*mp = rtg_mount(rtg);
	xfs_rtblock_t		start = xfs_group_start_fsb(rtg_group(rtg));

	if (mp->m_rtxblklog >= 0)
		return start + (rtx << mp->m_rtxblklog);
	return start + (rtx * mp->m_sb.sb_rextsize);
}

/* Convert an rgbno into an rt extent number. */
static inline xfs_rtxnum_t
xfs_rgbno_to_rtx(
	struct xfs_mount	*mp,
	xfs_rgblock_t		rgbno)
{
	if (likely(mp->m_rtxblklog >= 0))
		return rgbno >> mp->m_rtxblklog;
	return rgbno / mp->m_sb.sb_rextsize;
}

static inline uint64_t
xfs_rtbxlen_to_blen(
	struct xfs_mount	*mp,
	xfs_rtbxlen_t		rtbxlen)
{
	if (mp->m_rtxblklog >= 0)
		return rtbxlen << mp->m_rtxblklog;

	return rtbxlen * mp->m_sb.sb_rextsize;
}

static inline xfs_extlen_t
xfs_rtxlen_to_extlen(
	struct xfs_mount	*mp,
	xfs_rtxlen_t		rtxlen)
{
	if (mp->m_rtxblklog >= 0)
		return rtxlen << mp->m_rtxblklog;

	return rtxlen * mp->m_sb.sb_rextsize;
}

/* Compute the misalignment between an extent length and a realtime extent .*/
static inline unsigned int
xfs_extlen_to_rtxmod(
	struct xfs_mount	*mp,
	xfs_extlen_t		len)
{
	if (mp->m_rtxblklog >= 0)
		return len & mp->m_rtxblkmask;

	return len % mp->m_sb.sb_rextsize;
}

static inline xfs_rtxlen_t
xfs_extlen_to_rtxlen(
	struct xfs_mount	*mp,
	xfs_extlen_t		len)
{
	if (mp->m_rtxblklog >= 0)
		return len >> mp->m_rtxblklog;

	return len / mp->m_sb.sb_rextsize;
}

/* Convert an rt block count into an rt extent count. */
static inline xfs_rtbxlen_t
xfs_blen_to_rtbxlen(
	struct xfs_mount	*mp,
	uint64_t		blen)
{
	if (likely(mp->m_rtxblklog >= 0))
		return blen >> mp->m_rtxblklog;

Annotation

Implementation Notes