Commit b271b314 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Chandan Babu R
Browse files

xfs: split xfs_rtmodify_summary_int



Inline the logic of xfs_rtmodify_summary_int into xfs_rtmodify_summary
and xfs_rtget_summary instead of having a somewhat awkward helper to
share a little bit of code.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
parent c2adcfa3
Loading
Loading
Loading
Loading
+25 −51
Original line number Diff line number Diff line
@@ -452,47 +452,28 @@ xfs_trans_log_rtsummary(
}

/*
 * Read and/or modify the summary information for a given extent size,
 * bitmap block combination.
 * Keeps track of a current summary block, so we don't keep reading
 * it from the buffer cache.
 *
 * Summary information is returned in *sum if specified.
 * If no delta is specified, returns summary only.
 * Modify the summary information for a given extent size, bitmap block
 * combination.
 */
int
xfs_rtmodify_summary_int(
xfs_rtmodify_summary(
	struct xfs_rtalloc_args	*args,
	int			log,	/* log2 of extent size */
	xfs_fileoff_t		bbno,	/* bitmap block number */
	int			delta,	/* change to make to summary info */
	xfs_suminfo_t		*sum)	/* out: summary info for this block */
	int			delta)	/* in/out: summary block number */
{
	struct xfs_mount	*mp = args->mp;
	int			error;
	xfs_fileoff_t		sb;	/* summary fsblock */
	xfs_rtsumoff_t		so;	/* index into the summary file */
	xfs_rtsumoff_t		so = xfs_rtsumoffs(mp, log, bbno);
	unsigned int		infoword;
	xfs_suminfo_t		val;
	int			error;

	/*
	 * Compute entry number in the summary file.
	 */
	so = xfs_rtsumoffs(mp, log, bbno);
	/*
	 * Compute the block number in the summary file.
	 */
	sb = xfs_rtsumoffs_to_block(mp, so);

	error = xfs_rtsummary_read_buf(args, sb);
	error = xfs_rtsummary_read_buf(args, xfs_rtsumoffs_to_block(mp, so));
	if (error)
		return error;

	/*
	 * Point to the summary information, modify/log it, and/or copy it out.
	 */
	infoword = xfs_rtsumoffs_to_infoword(mp, so);
	if (delta) {
		xfs_suminfo_t	val = xfs_suminfo_add(args, infoword, delta);
	val = xfs_suminfo_add(args, infoword, delta);

	if (mp->m_rsum_cache) {
		if (val == 0 && log + 1 == mp->m_rsum_cache[bbno])
@@ -500,25 +481,11 @@ xfs_rtmodify_summary_int(
		if (val != 0 && log >= mp->m_rsum_cache[bbno])
			mp->m_rsum_cache[bbno] = log + 1;
	}

	xfs_trans_log_rtsummary(args, infoword);
		if (sum)
			*sum = val;
	} else if (sum) {
		*sum = xfs_suminfo_get(args, infoword);
	}
	return 0;
}

int
xfs_rtmodify_summary(
	struct xfs_rtalloc_args	*args,
	int			log,	/* log2 of extent size */
	xfs_fileoff_t		bbno,	/* bitmap block number */
	int			delta)	/* in/out: summary block number */
{
	return xfs_rtmodify_summary_int(args, log, bbno, delta, NULL);
}

/*
 * Read and return the summary information for a given extent size, bitmap block
 * combination.
@@ -530,7 +497,14 @@ xfs_rtget_summary(
	xfs_fileoff_t		bbno,	/* bitmap block number */
	xfs_suminfo_t		*sum)	/* out: summary info for this block */
{
	return xfs_rtmodify_summary_int(args, log, bbno, 0, sum);
	struct xfs_mount	*mp = args->mp;
	xfs_rtsumoff_t		so = xfs_rtsumoffs(mp, log, bbno);
	int			error;

	error = xfs_rtsummary_read_buf(args, xfs_rtsumoffs_to_block(mp, so));
	if (!error)
		*sum = xfs_suminfo_get(args, xfs_rtsumoffs_to_infoword(mp, so));
	return error;
}

/* Log rtbitmap block from the word @from to the byte before @next. */