Commit 2d4521e4 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Carlos Maiolino
Browse files

xfs: add a xlog_write_one_vec helper



Add a wrapper for xlog_write for the two callers who need to build a
log_vec and add it to a single-entry chain instead of duplicating the
code.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
Signed-off-by: default avatarCarlos Maiolino <cem@kernel.org>
parent 24d479d2
Loading
Loading
Loading
Loading
+21 −14
Original line number Diff line number Diff line
@@ -848,6 +848,26 @@ xlog_wait_on_iclog(
	return 0;
}

int
xlog_write_one_vec(
	struct xlog		*log,
	struct xfs_cil_ctx	*ctx,
	struct xfs_log_iovec	*reg,
	struct xlog_ticket	*ticket)
{
	struct xfs_log_vec	lv = {
		.lv_niovecs	= 1,
		.lv_iovecp	= reg,
	};
	LIST_HEAD		(lv_chain);

	/* account for space used by record data */
	ticket->t_curr_res -= reg->i_len;

	list_add(&lv.lv_list, &lv_chain);
	return xlog_write(log, ctx, &lv_chain, ticket, reg->i_len);
}

/*
 * Write out an unmount record using the ticket provided. We have to account for
 * the data space used in the unmount ticket as this write is not done from a
@@ -876,21 +896,8 @@ xlog_write_unmount_record(
		.i_len = sizeof(unmount_rec),
		.i_type = XLOG_REG_TYPE_UNMOUNT,
	};
	struct xfs_log_vec vec = {
		.lv_niovecs = 1,
		.lv_iovecp = &reg,
	};
	LIST_HEAD(lv_chain);
	list_add(&vec.lv_list, &lv_chain);

	BUILD_BUG_ON((sizeof(struct xlog_op_header) +
		      sizeof(struct xfs_unmount_log_format)) !=
							sizeof(unmount_rec));

	/* account for space used by record data */
	ticket->t_curr_res -= sizeof(unmount_rec);

	return xlog_write(log, NULL, &lv_chain, ticket, reg.i_len);
	return xlog_write_one_vec(log, NULL, &reg, ticket);
}

/*
+1 −10
Original line number Diff line number Diff line
@@ -1098,13 +1098,7 @@ xlog_cil_write_commit_record(
		.i_len = sizeof(struct xlog_op_header),
		.i_type = XLOG_REG_TYPE_COMMIT,
	};
	struct xfs_log_vec	vec = {
		.lv_niovecs = 1,
		.lv_iovecp = &reg,
	};
	int			error;
	LIST_HEAD(lv_chain);
	list_add(&vec.lv_list, &lv_chain);

	if (xlog_is_shutdown(log))
		return -EIO;
@@ -1112,10 +1106,7 @@ xlog_cil_write_commit_record(
	error = xlog_cil_order_write(ctx->cil, ctx->sequence, _COMMIT_RECORD);
	if (error)
		return error;

	/* account for space used by record data */
	ctx->ticket->t_curr_res -= reg.i_len;
	error = xlog_write(log, ctx, &lv_chain, ctx->ticket, reg.i_len);
	error = xlog_write_one_vec(log, ctx, &reg, ctx->ticket);
	if (error)
		xlog_force_shutdown(log, SHUTDOWN_LOG_IO_ERROR);
	return error;
+2 −0
Original line number Diff line number Diff line
@@ -507,6 +507,8 @@ void xlog_print_trans(struct xfs_trans *);
int	xlog_write(struct xlog *log, struct xfs_cil_ctx *ctx,
		struct list_head *lv_chain, struct xlog_ticket *tic,
		uint32_t len);
int	xlog_write_one_vec(struct xlog *log, struct xfs_cil_ctx *ctx,
		struct xfs_log_iovec *reg, struct xlog_ticket *ticket);
void	xfs_log_ticket_ungrant(struct xlog *log, struct xlog_ticket *ticket);
void	xfs_log_ticket_regrant(struct xlog *log, struct xlog_ticket *ticket);