Commit 6e9b3dd8 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong
Browse files

xfs: stop using bp naming for log recovery buffers



Now that we don't use struct xfs_buf to hold log recovery buffer rename
the related functions and variables to just talk of a buffer instead of
using the bp name that we usually use for xfs_buf related functionality.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 6ad5b325
Loading
Loading
Loading
Loading
+102 −99
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@ struct xfs_buf_cancel {
 * are valid, false otherwise.
 */
static inline bool
xlog_verify_bp(
xlog_verify_bno(
	struct xlog	*log,
	xfs_daddr_t	blk_no,
	int		bbcount)
@@ -96,7 +96,7 @@ xlog_verify_bp(
 * a range of nbblks basic blocks at any valid offset within the log.
 */
static char *
xlog_get_bp(
xlog_alloc_buffer(
	struct xlog	*log,
	int		nbblks)
{
@@ -104,7 +104,7 @@ xlog_get_bp(
	 * Pass log block 0 since we don't have an addr yet, buffer will be
	 * verified on read.
	 */
	if (!xlog_verify_bp(log, 0, nbblks)) {
	if (!xlog_verify_bno(log, 0, nbblks)) {
		xfs_warn(log->l_mp, "Invalid block length (0x%x) for buffer",
			nbblks);
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp);
@@ -153,7 +153,7 @@ xlog_do_io(
{
	int			error;

	if (!xlog_verify_bp(log, blk_no, nbblks)) {
	if (!xlog_verify_bno(log, blk_no, nbblks)) {
		xfs_warn(log->l_mp,
			 "Invalid log block/length (0x%llx, 0x%x) for buffer",
			 blk_no, nbblks);
@@ -327,7 +327,7 @@ xlog_recover_iodone(
STATIC int
xlog_find_cycle_start(
	struct xlog	*log,
	char		*bp,
	char		*buffer,
	xfs_daddr_t	first_blk,
	xfs_daddr_t	*last_blk,
	uint		cycle)
@@ -341,7 +341,7 @@ xlog_find_cycle_start(
	end_blk = *last_blk;
	mid_blk = BLK_AVG(first_blk, end_blk);
	while (mid_blk != first_blk && mid_blk != end_blk) {
		error = xlog_bread(log, mid_blk, 1, bp, &offset);
		error = xlog_bread(log, mid_blk, 1, buffer, &offset);
		if (error)
			return error;
		mid_cycle = xlog_get_cycle(offset);
@@ -377,7 +377,7 @@ xlog_find_verify_cycle(
{
	xfs_daddr_t	i, j;
	uint		cycle;
	char		*bp;
	char		*buffer;
	xfs_daddr_t	bufblks;
	char		*buf = NULL;
	int		error = 0;
@@ -391,7 +391,7 @@ xlog_find_verify_cycle(
	bufblks = 1 << ffs(nbblks);
	while (bufblks > log->l_logBBsize)
		bufblks >>= 1;
	while (!(bp = xlog_get_bp(log, bufblks))) {
	while (!(buffer = xlog_alloc_buffer(log, bufblks))) {
		bufblks >>= 1;
		if (bufblks < log->l_sectBBsize)
			return -ENOMEM;
@@ -402,7 +402,7 @@ xlog_find_verify_cycle(

		bcount = min(bufblks, (start_blk + nbblks - i));

		error = xlog_bread(log, i, bcount, bp, &buf);
		error = xlog_bread(log, i, bcount, buffer, &buf);
		if (error)
			goto out;

@@ -420,7 +420,7 @@ xlog_find_verify_cycle(
	*new_blk = -1;

out:
	kmem_free(bp);
	kmem_free(buffer);
	return error;
}

@@ -444,7 +444,7 @@ xlog_find_verify_log_record(
	int			extra_bblks)
{
	xfs_daddr_t		i;
	char			*bp;
	char			*buffer;
	char			*offset = NULL;
	xlog_rec_header_t	*head = NULL;
	int			error = 0;
@@ -454,12 +454,14 @@ xlog_find_verify_log_record(

	ASSERT(start_blk != 0 || *last_blk != start_blk);

	if (!(bp = xlog_get_bp(log, num_blks))) {
		if (!(bp = xlog_get_bp(log, 1)))
	buffer = xlog_alloc_buffer(log, num_blks);
	if (!buffer) {
		buffer = xlog_alloc_buffer(log, 1);
		if (!buffer)
			return -ENOMEM;
		smallmem = 1;
	} else {
		error = xlog_bread(log, start_blk, num_blks, bp, &offset);
		error = xlog_bread(log, start_blk, num_blks, buffer, &offset);
		if (error)
			goto out;
		offset += ((num_blks - 1) << BBSHIFT);
@@ -476,7 +478,7 @@ xlog_find_verify_log_record(
		}

		if (smallmem) {
			error = xlog_bread(log, i, 1, bp, &offset);
			error = xlog_bread(log, i, 1, buffer, &offset);
			if (error)
				goto out;
		}
@@ -529,7 +531,7 @@ xlog_find_verify_log_record(
		*last_blk = i;

out:
	kmem_free(bp);
	kmem_free(buffer);
	return error;
}

@@ -551,7 +553,7 @@ xlog_find_head(
	struct xlog	*log,
	xfs_daddr_t	*return_head_blk)
{
	char		*bp;
	char		*buffer;
	char		*offset;
	xfs_daddr_t	new_blk, first_blk, start_blk, last_blk, head_blk;
	int		num_scan_bblks;
@@ -581,20 +583,20 @@ xlog_find_head(
	}

	first_blk = 0;			/* get cycle # of 1st block */
	bp = xlog_get_bp(log, 1);
	if (!bp)
	buffer = xlog_alloc_buffer(log, 1);
	if (!buffer)
		return -ENOMEM;

	error = xlog_bread(log, 0, 1, bp, &offset);
	error = xlog_bread(log, 0, 1, buffer, &offset);
	if (error)
		goto bp_err;
		goto out_free_buffer;

	first_half_cycle = xlog_get_cycle(offset);

	last_blk = head_blk = log_bbnum - 1;	/* get cycle # of last block */
	error = xlog_bread(log, last_blk, 1, bp, &offset);
	error = xlog_bread(log, last_blk, 1, buffer, &offset);
	if (error)
		goto bp_err;
		goto out_free_buffer;

	last_half_cycle = xlog_get_cycle(offset);
	ASSERT(last_half_cycle != 0);
@@ -662,9 +664,10 @@ xlog_find_head(
		 *                           ^ we want to locate this spot
		 */
		stop_on_cycle = last_half_cycle;
		if ((error = xlog_find_cycle_start(log, bp, first_blk,
						&head_blk, last_half_cycle)))
			goto bp_err;
		error = xlog_find_cycle_start(log, buffer, first_blk, &head_blk,
				last_half_cycle);
		if (error)
			goto out_free_buffer;
	}

	/*
@@ -684,7 +687,7 @@ xlog_find_head(
		if ((error = xlog_find_verify_cycle(log,
						start_blk, num_scan_bblks,
						stop_on_cycle, &new_blk)))
			goto bp_err;
			goto out_free_buffer;
		if (new_blk != -1)
			head_blk = new_blk;
	} else {		/* need to read 2 parts of log */
@@ -721,7 +724,7 @@ xlog_find_head(
		if ((error = xlog_find_verify_cycle(log, start_blk,
					num_scan_bblks - (int)head_blk,
					(stop_on_cycle - 1), &new_blk)))
			goto bp_err;
			goto out_free_buffer;
		if (new_blk != -1) {
			head_blk = new_blk;
			goto validate_head;
@@ -737,7 +740,7 @@ xlog_find_head(
		if ((error = xlog_find_verify_cycle(log,
					start_blk, (int)head_blk,
					stop_on_cycle, &new_blk)))
			goto bp_err;
			goto out_free_buffer;
		if (new_blk != -1)
			head_blk = new_blk;
	}
@@ -756,13 +759,13 @@ validate_head:
		if (error == 1)
			error = -EIO;
		if (error)
			goto bp_err;
			goto out_free_buffer;
	} else {
		start_blk = 0;
		ASSERT(head_blk <= INT_MAX);
		error = xlog_find_verify_log_record(log, start_blk, &head_blk, 0);
		if (error < 0)
			goto bp_err;
			goto out_free_buffer;
		if (error == 1) {
			/* We hit the beginning of the log during our search */
			start_blk = log_bbnum - (num_scan_bblks - head_blk);
@@ -775,14 +778,14 @@ validate_head:
			if (error == 1)
				error = -EIO;
			if (error)
				goto bp_err;
				goto out_free_buffer;
			if (new_blk != log_bbnum)
				head_blk = new_blk;
		} else if (error)
			goto bp_err;
			goto out_free_buffer;
	}

	kmem_free(bp);
	kmem_free(buffer);
	if (head_blk == log_bbnum)
		*return_head_blk = 0;
	else
@@ -795,9 +798,8 @@ validate_head:
	 */
	return 0;

 bp_err:
	kmem_free(bp);

out_free_buffer:
	kmem_free(buffer);
	if (error)
		xfs_warn(log->l_mp, "failed to find log head");
	return error;
@@ -817,7 +819,7 @@ xlog_rseek_logrec_hdr(
	xfs_daddr_t		head_blk,
	xfs_daddr_t		tail_blk,
	int			count,
	char			*bp,
	char			*buffer,
	xfs_daddr_t		*rblk,
	struct xlog_rec_header	**rhead,
	bool			*wrapped)
@@ -836,7 +838,7 @@ xlog_rseek_logrec_hdr(
	 */
	end_blk = head_blk > tail_blk ? tail_blk : 0;
	for (i = (int) head_blk - 1; i >= end_blk; i--) {
		error = xlog_bread(log, i, 1, bp, &offset);
		error = xlog_bread(log, i, 1, buffer, &offset);
		if (error)
			goto out_error;

@@ -855,7 +857,7 @@ xlog_rseek_logrec_hdr(
	 */
	if (tail_blk >= head_blk && found != count) {
		for (i = log->l_logBBsize - 1; i >= (int) tail_blk; i--) {
			error = xlog_bread(log, i, 1, bp, &offset);
			error = xlog_bread(log, i, 1, buffer, &offset);
			if (error)
				goto out_error;

@@ -891,7 +893,7 @@ xlog_seek_logrec_hdr(
	xfs_daddr_t		head_blk,
	xfs_daddr_t		tail_blk,
	int			count,
	char			*bp,
	char			*buffer,
	xfs_daddr_t		*rblk,
	struct xlog_rec_header	**rhead,
	bool			*wrapped)
@@ -910,7 +912,7 @@ xlog_seek_logrec_hdr(
	 */
	end_blk = head_blk > tail_blk ? head_blk : log->l_logBBsize - 1;
	for (i = (int) tail_blk; i <= end_blk; i++) {
		error = xlog_bread(log, i, 1, bp, &offset);
		error = xlog_bread(log, i, 1, buffer, &offset);
		if (error)
			goto out_error;

@@ -928,7 +930,7 @@ xlog_seek_logrec_hdr(
	 */
	if (tail_blk > head_blk && found != count) {
		for (i = 0; i < (int) head_blk; i++) {
			error = xlog_bread(log, i, 1, bp, &offset);
			error = xlog_bread(log, i, 1, buffer, &offset);
			if (error)
				goto out_error;

@@ -991,22 +993,22 @@ xlog_verify_tail(
	int			hsize)
{
	struct xlog_rec_header	*thead;
	char			*bp;
	char			*buffer;
	xfs_daddr_t		first_bad;
	int			error = 0;
	bool			wrapped;
	xfs_daddr_t		tmp_tail;
	xfs_daddr_t		orig_tail = *tail_blk;

	bp = xlog_get_bp(log, 1);
	if (!bp)
	buffer = xlog_alloc_buffer(log, 1);
	if (!buffer)
		return -ENOMEM;

	/*
	 * Make sure the tail points to a record (returns positive count on
	 * success).
	 */
	error = xlog_seek_logrec_hdr(log, head_blk, *tail_blk, 1, bp,
	error = xlog_seek_logrec_hdr(log, head_blk, *tail_blk, 1, buffer,
			&tmp_tail, &thead, &wrapped);
	if (error < 0)
		goto out;
@@ -1035,8 +1037,8 @@ xlog_verify_tail(
			break;

		/* skip to the next record; returns positive count on success */
		error = xlog_seek_logrec_hdr(log, head_blk, first_bad, 2, bp,
				&tmp_tail, &thead, &wrapped);
		error = xlog_seek_logrec_hdr(log, head_blk, first_bad, 2,
				buffer, &tmp_tail, &thead, &wrapped);
		if (error < 0)
			goto out;

@@ -1051,7 +1053,7 @@ xlog_verify_tail(
		"Tail block (0x%llx) overwrite detected. Updated to 0x%llx",
			 orig_tail, *tail_blk);
out:
	kmem_free(bp);
	kmem_free(buffer);
	return error;
}

@@ -1073,13 +1075,13 @@ xlog_verify_head(
	struct xlog		*log,
	xfs_daddr_t		*head_blk,	/* in/out: unverified head */
	xfs_daddr_t		*tail_blk,	/* out: tail block */
	char			*bp,
	char			*buffer,
	xfs_daddr_t		*rhead_blk,	/* start blk of last record */
	struct xlog_rec_header	**rhead,	/* ptr to last record */
	bool			*wrapped)	/* last rec. wraps phys. log */
{
	struct xlog_rec_header	*tmp_rhead;
	char			*tmp_bp;
	char			*tmp_buffer;
	xfs_daddr_t		first_bad;
	xfs_daddr_t		tmp_rhead_blk;
	int			found;
@@ -1090,15 +1092,15 @@ xlog_verify_head(
	 * Check the head of the log for torn writes. Search backwards from the
	 * head until we hit the tail or the maximum number of log record I/Os
	 * that could have been in flight at one time. Use a temporary buffer so
	 * we don't trash the rhead/bp pointers from the caller.
	 * we don't trash the rhead/buffer pointers from the caller.
	 */
	tmp_bp = xlog_get_bp(log, 1);
	if (!tmp_bp)
	tmp_buffer = xlog_alloc_buffer(log, 1);
	if (!tmp_buffer)
		return -ENOMEM;
	error = xlog_rseek_logrec_hdr(log, *head_blk, *tail_blk,
				      XLOG_MAX_ICLOGS, tmp_bp, &tmp_rhead_blk,
				      &tmp_rhead, &tmp_wrapped);
	kmem_free(tmp_bp);
				      XLOG_MAX_ICLOGS, tmp_buffer,
				      &tmp_rhead_blk, &tmp_rhead, &tmp_wrapped);
	kmem_free(tmp_buffer);
	if (error < 0)
		return error;

@@ -1127,8 +1129,8 @@ xlog_verify_head(
		 * (i.e., the records with invalid CRC) if the cycle number
		 * matches the the current cycle.
		 */
		found = xlog_rseek_logrec_hdr(log, first_bad, *tail_blk, 1, bp,
					      rhead_blk, rhead, wrapped);
		found = xlog_rseek_logrec_hdr(log, first_bad, *tail_blk, 1,
				buffer, rhead_blk, rhead, wrapped);
		if (found < 0)
			return found;
		if (found == 0)		/* XXX: right thing to do here? */
@@ -1188,7 +1190,7 @@ xlog_check_unmount_rec(
	xfs_daddr_t		*tail_blk,
	struct xlog_rec_header	*rhead,
	xfs_daddr_t		rhead_blk,
	char			*bp,
	char			*buffer,
	bool			*clean)
{
	struct xlog_op_header	*op_head;
@@ -1231,7 +1233,7 @@ xlog_check_unmount_rec(
	if (*head_blk == after_umount_blk &&
	    be32_to_cpu(rhead->h_num_logops) == 1) {
		umount_data_blk = xlog_wrap_logbno(log, rhead_blk + hblks);
		error = xlog_bread(log, umount_data_blk, 1, bp, &offset);
		error = xlog_bread(log, umount_data_blk, 1, buffer, &offset);
		if (error)
			return error;

@@ -1310,7 +1312,7 @@ xlog_find_tail(
{
	xlog_rec_header_t	*rhead;
	char			*offset = NULL;
	char			*bp;
	char			*buffer;
	int			error;
	xfs_daddr_t		rhead_blk;
	xfs_lsn_t		tail_lsn;
@@ -1324,11 +1326,11 @@ xlog_find_tail(
		return error;
	ASSERT(*head_blk < INT_MAX);

	bp = xlog_get_bp(log, 1);
	if (!bp)
	buffer = xlog_alloc_buffer(log, 1);
	if (!buffer)
		return -ENOMEM;
	if (*head_blk == 0) {				/* special case */
		error = xlog_bread(log, 0, 1, bp, &offset);
		error = xlog_bread(log, 0, 1, buffer, &offset);
		if (error)
			goto done;

@@ -1344,7 +1346,7 @@ xlog_find_tail(
	 * block. This wraps all the way back around to the head so something is
	 * seriously wrong if we can't find it.
	 */
	error = xlog_rseek_logrec_hdr(log, *head_blk, *head_blk, 1, bp,
	error = xlog_rseek_logrec_hdr(log, *head_blk, *head_blk, 1, buffer,
				      &rhead_blk, &rhead, &wrapped);
	if (error < 0)
		return error;
@@ -1365,7 +1367,7 @@ xlog_find_tail(
	 * state to determine whether recovery is necessary.
	 */
	error = xlog_check_unmount_rec(log, head_blk, tail_blk, rhead,
				       rhead_blk, bp, &clean);
				       rhead_blk, buffer, &clean);
	if (error)
		goto done;

@@ -1382,7 +1384,7 @@ xlog_find_tail(
	if (!clean) {
		xfs_daddr_t	orig_head = *head_blk;

		error = xlog_verify_head(log, head_blk, tail_blk, bp,
		error = xlog_verify_head(log, head_blk, tail_blk, buffer,
					 &rhead_blk, &rhead, &wrapped);
		if (error)
			goto done;
@@ -1393,7 +1395,7 @@ xlog_find_tail(
				       wrapped);
			tail_lsn = atomic64_read(&log->l_tail_lsn);
			error = xlog_check_unmount_rec(log, head_blk, tail_blk,
						       rhead, rhead_blk, bp,
						       rhead, rhead_blk, buffer,
						       &clean);
			if (error)
				goto done;
@@ -1431,7 +1433,7 @@ xlog_find_tail(
		error = xlog_clear_stale_blocks(log, tail_lsn);

done:
	kmem_free(bp);
	kmem_free(buffer);

	if (error)
		xfs_warn(log->l_mp, "failed to locate log tail");
@@ -1459,7 +1461,7 @@ xlog_find_zeroed(
	struct xlog	*log,
	xfs_daddr_t	*blk_no)
{
	char		*bp;
	char		*buffer;
	char		*offset;
	uint	        first_cycle, last_cycle;
	xfs_daddr_t	new_blk, last_blk, start_blk;
@@ -1469,35 +1471,36 @@ xlog_find_zeroed(
	*blk_no = 0;

	/* check totally zeroed log */
	bp = xlog_get_bp(log, 1);
	if (!bp)
	buffer = xlog_alloc_buffer(log, 1);
	if (!buffer)
		return -ENOMEM;
	error = xlog_bread(log, 0, 1, bp, &offset);
	error = xlog_bread(log, 0, 1, buffer, &offset);
	if (error)
		goto bp_err;
		goto out_free_buffer;

	first_cycle = xlog_get_cycle(offset);
	if (first_cycle == 0) {		/* completely zeroed log */
		*blk_no = 0;
		kmem_free(bp);
		kmem_free(buffer);
		return 1;
	}

	/* check partially zeroed log */
	error = xlog_bread(log, log_bbnum-1, 1, bp, &offset);
	error = xlog_bread(log, log_bbnum-1, 1, buffer, &offset);
	if (error)
		goto bp_err;
		goto out_free_buffer;

	last_cycle = xlog_get_cycle(offset);
	if (last_cycle != 0) {		/* log completely written to */
		kmem_free(bp);
		kmem_free(buffer);
		return 0;
	}

	/* we have a partially zeroed log */
	last_blk = log_bbnum-1;
	if ((error = xlog_find_cycle_start(log, bp, 0, &last_blk, 0)))
		goto bp_err;
	error = xlog_find_cycle_start(log, buffer, 0, &last_blk, 0);
	if (error)
		goto out_free_buffer;

	/*
	 * Validate the answer.  Because there is no way to guarantee that
@@ -1520,7 +1523,7 @@ xlog_find_zeroed(
	 */
	if ((error = xlog_find_verify_cycle(log, start_blk,
					 (int)num_scan_bblks, 0, &new_blk)))
		goto bp_err;
		goto out_free_buffer;
	if (new_blk != -1)
		last_blk = new_blk;

@@ -1532,11 +1535,11 @@ xlog_find_zeroed(
	if (error == 1)
		error = -EIO;
	if (error)
		goto bp_err;
		goto out_free_buffer;

	*blk_no = last_blk;
bp_err:
	kmem_free(bp);
out_free_buffer:
	kmem_free(buffer);
	if (error)
		return error;
	return 1;
@@ -1579,7 +1582,7 @@ xlog_write_log_records(
	int		tail_block)
{
	char		*offset;
	char		*bp;
	char		*buffer;
	int		balign, ealign;
	int		sectbb = log->l_sectBBsize;
	int		end_block = start_block + blocks;
@@ -1596,7 +1599,7 @@ xlog_write_log_records(
	bufblks = 1 << ffs(blocks);
	while (bufblks > log->l_logBBsize)
		bufblks >>= 1;
	while (!(bp = xlog_get_bp(log, bufblks))) {
	while (!(buffer = xlog_alloc_buffer(log, bufblks))) {
		bufblks >>= 1;
		if (bufblks < sectbb)
			return -ENOMEM;
@@ -1608,9 +1611,9 @@ xlog_write_log_records(
	 */
	balign = round_down(start_block, sectbb);
	if (balign != start_block) {
		error = xlog_bread_noalign(log, start_block, 1, bp);
		error = xlog_bread_noalign(log, start_block, 1, buffer);
		if (error)
			goto out_put_bp;
			goto out_free_buffer;

		j = start_block - balign;
	}
@@ -1628,27 +1631,27 @@ xlog_write_log_records(
		ealign = round_down(end_block, sectbb);
		if (j == 0 && (start_block + endcount > ealign)) {
			error = xlog_bread_noalign(log, ealign, sectbb,
					bp + BBTOB(ealign - start_block));
					buffer + BBTOB(ealign - start_block));
			if (error)
				break;

		}

		offset = bp + xlog_align(log, start_block);
		offset = buffer + xlog_align(log, start_block);
		for (; j < endcount; j++) {
			xlog_add_record(log, offset, cycle, i+j,
					tail_cycle, tail_block);
			offset += BBSIZE;
		}
		error = xlog_bwrite(log, start_block, endcount, bp);
		error = xlog_bwrite(log, start_block, endcount, buffer);
		if (error)
			break;
		start_block += endcount;
		j = 0;
	}

 out_put_bp:
	kmem_free(bp);
out_free_buffer:
	kmem_free(buffer);
	return error;
}

@@ -5253,7 +5256,7 @@ xlog_do_recovery_pass(
		 * iclog header and extract the header size from it.  Get a
		 * new hbp that is the correct size.
		 */
		hbp = xlog_get_bp(log, 1);
		hbp = xlog_alloc_buffer(log, 1);
		if (!hbp)
			return -ENOMEM;

@@ -5296,20 +5299,20 @@ xlog_do_recovery_pass(
			if (h_size % XLOG_HEADER_CYCLE_SIZE)
				hblks++;
			kmem_free(hbp);
			hbp = xlog_get_bp(log, hblks);
			hbp = xlog_alloc_buffer(log, hblks);
		} else {
			hblks = 1;
		}
	} else {
		ASSERT(log->l_sectBBsize == 1);
		hblks = 1;
		hbp = xlog_get_bp(log, 1);
		hbp = xlog_alloc_buffer(log, 1);
		h_size = XLOG_BIG_RECORD_BSIZE;
	}

	if (!hbp)
		return -ENOMEM;
	dbp = xlog_get_bp(log, BTOBB(h_size));
	dbp = xlog_alloc_buffer(log, BTOBB(h_size));
	if (!dbp) {
		kmem_free(hbp);
		return -ENOMEM;