Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 722e2517 authored by Darrick J. Wong's avatar Darrick J. Wong Committed by Dave Chinner
Browse files

xfs: remove the extents array from the rmap update done log item



Nothing ever uses the extent array in the rmap update done redo
item, so remove it before it is fixed in the on-disk log format.

Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
parent c1d22ae8
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -658,9 +658,8 @@ struct xfs_rui_log_format {
struct xfs_rud_log_format {
	__uint16_t		rud_type;	/* rud log item type */
	__uint16_t		rud_size;	/* size of this item */
	__uint32_t		rud_nextents;	/* # of extents freed */
	__uint32_t		__pad;
	__uint64_t		rud_rui_id;	/* id of corresponding rui */
	struct xfs_map_extent	rud_extents[1];	/* array of extents rmapped */
};

/*
+1 −3
Original line number Diff line number Diff line
@@ -3482,9 +3482,7 @@ xlog_recover_rud_pass2(
	struct xfs_ail			*ailp = log->l_ailp;

	rud_formatp = item->ri_buf[0].i_addr;
	ASSERT(item->ri_buf[0].i_len == (sizeof(struct xfs_rud_log_format) +
			((rud_formatp->rud_nextents - 1) *
			sizeof(struct xfs_map_extent))));
	ASSERT(item->ri_buf[0].i_len == sizeof(struct xfs_rud_log_format));
	rui_id = rud_formatp->rud_rui_id;

	/*
+7 −43
Original line number Diff line number Diff line
@@ -272,29 +272,6 @@ static inline struct xfs_rud_log_item *RUD_ITEM(struct xfs_log_item *lip)
	return container_of(lip, struct xfs_rud_log_item, rud_item);
}

STATIC void
xfs_rud_item_free(struct xfs_rud_log_item *rudp)
{
	if (rudp->rud_format.rud_nextents > XFS_RUD_MAX_FAST_EXTENTS)
		kmem_free(rudp);
	else
		kmem_zone_free(xfs_rud_zone, rudp);
}

/*
 * This returns the number of iovecs needed to log the given rud item.
 * We only need 1 iovec for an rud item.  It just logs the rud_log_format
 * structure.
 */
static inline int
xfs_rud_item_sizeof(
	struct xfs_rud_log_item	*rudp)
{
	return sizeof(struct xfs_rud_log_format) +
			(rudp->rud_format.rud_nextents - 1) *
			sizeof(struct xfs_map_extent);
}

STATIC void
xfs_rud_item_size(
	struct xfs_log_item	*lip,
@@ -302,7 +279,7 @@ xfs_rud_item_size(
	int			*nbytes)
{
	*nvecs += 1;
	*nbytes += xfs_rud_item_sizeof(RUD_ITEM(lip));
	*nbytes += sizeof(struct xfs_rud_log_format);
}

/*
@@ -320,13 +297,11 @@ xfs_rud_item_format(
	struct xfs_rud_log_item	*rudp = RUD_ITEM(lip);
	struct xfs_log_iovec	*vecp = NULL;

	ASSERT(rudp->rud_next_extent == rudp->rud_format.rud_nextents);

	rudp->rud_format.rud_type = XFS_LI_RUD;
	rudp->rud_format.rud_size = 1;

	xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_RUD_FORMAT, &rudp->rud_format,
			xfs_rud_item_sizeof(rudp));
			sizeof(struct xfs_rud_log_format));
}

/*
@@ -374,7 +349,7 @@ xfs_rud_item_unlock(

	if (lip->li_flags & XFS_LI_ABORTED) {
		xfs_rui_release(rudp->rud_ruip);
		xfs_rud_item_free(rudp);
		kmem_zone_free(xfs_rud_zone, rudp);
	}
}

@@ -398,7 +373,7 @@ xfs_rud_item_committed(
	 * aborted due to log I/O error).
	 */
	xfs_rui_release(rudp->rud_ruip);
	xfs_rud_item_free(rudp);
	kmem_zone_free(xfs_rud_zone, rudp);

	return (xfs_lsn_t)-1;
}
@@ -437,25 +412,14 @@ static const struct xfs_item_ops xfs_rud_item_ops = {
struct xfs_rud_log_item *
xfs_rud_init(
	struct xfs_mount		*mp,
	struct xfs_rui_log_item		*ruip,
	uint				nextents)
	struct xfs_rui_log_item		*ruip)

{
	struct xfs_rud_log_item	*rudp;
	uint			size;

	ASSERT(nextents > 0);
	if (nextents > XFS_RUD_MAX_FAST_EXTENTS) {
		size = (uint)(sizeof(struct xfs_rud_log_item) +
			((nextents - 1) * sizeof(struct xfs_map_extent)));
		rudp = kmem_zalloc(size, KM_SLEEP);
	} else {
	rudp = kmem_zone_zalloc(xfs_rud_zone, KM_SLEEP);
	}

	xfs_log_item_init(mp, &rudp->rud_item, XFS_LI_RUD, &xfs_rud_item_ops);
	rudp->rud_ruip = ruip;
	rudp->rud_format.rud_nextents = nextents;
	rudp->rud_format.rud_rui_id = ruip->rui_format.rui_id;

	return rudp;
@@ -523,7 +487,7 @@ xfs_rui_recover(
	error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, 0, 0, 0, &tp);
	if (error)
		return error;
	rudp = xfs_trans_get_rud(tp, ruip, ruip->rui_format.rui_nextents);
	rudp = xfs_trans_get_rud(tp, ruip);

	for (i = 0; i < ruip->rui_format.rui_nextents; i++) {
		rmap = &(ruip->rui_format.rui_extents[i]);
+1 −7
Original line number Diff line number Diff line
@@ -77,21 +77,15 @@ struct xfs_rui_log_item {
struct xfs_rud_log_item {
	struct xfs_log_item		rud_item;
	struct xfs_rui_log_item		*rud_ruip;
	uint				rud_next_extent;
	struct xfs_rud_log_format	rud_format;
};

/*
 * Max number of extents in fast allocation path.
 */
#define	XFS_RUD_MAX_FAST_EXTENTS	16

extern struct kmem_zone	*xfs_rui_zone;
extern struct kmem_zone	*xfs_rud_zone;

struct xfs_rui_log_item *xfs_rui_init(struct xfs_mount *, uint);
struct xfs_rud_log_item *xfs_rud_init(struct xfs_mount *,
		struct xfs_rui_log_item *, uint);
		struct xfs_rui_log_item *);
int xfs_rui_copy_format(struct xfs_log_iovec *buf,
		struct xfs_rui_log_format *dst_rui_fmt);
void xfs_rui_item_free(struct xfs_rui_log_item *);
+1 −3
Original line number Diff line number Diff line
@@ -1770,9 +1770,7 @@ xfs_init_zones(void)
	if (!xfs_icreate_zone)
		goto out_destroy_ili_zone;

	xfs_rud_zone = kmem_zone_init((sizeof(struct xfs_rud_log_item) +
			((XFS_RUD_MAX_FAST_EXTENTS - 1) *
				 sizeof(struct xfs_map_extent))),
	xfs_rud_zone = kmem_zone_init(sizeof(struct xfs_rud_log_item),
			"xfs_rud_item");
	if (!xfs_rud_zone)
		goto out_destroy_icreate_zone;
Loading