Commit d6b8fc6c authored by Kaixu Xia's avatar Kaixu Xia Committed by Darrick J. Wong
Browse files

xfs: do the assert for all the log done items in xfs_trans_cancel



We should do the assert for all the log intent-done items if they appear
here. This patch detect intent-done items by the fact that their item ops
don't have iop_unpin and iop_push methods and also move the helper
xlog_item_is_intent to xfs_trans.h.

Signed-off-by: default avatarKaixu Xia <kaixuxia@tencent.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 74af4c17
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -2465,13 +2465,6 @@ xlog_finish_defer_ops(
	return xfs_trans_commit(tp);
}

/* Is this log item a deferred action intent? */
static inline bool xlog_item_is_intent(struct xfs_log_item *lip)
{
	return lip->li_ops->iop_recover != NULL &&
	       lip->li_ops->iop_match != NULL;
}

/*
 * When this is called, all of the log intent items which did not have
 * corresponding log done items should be in the AIL.  What we do now
+1 −1
Original line number Diff line number Diff line
@@ -959,7 +959,7 @@ xfs_trans_cancel(
		struct xfs_log_item *lip;

		list_for_each_entry(lip, &tp->t_items, li_trans)
			ASSERT(!(lip->li_type == XFS_LI_EFD));
			ASSERT(!xlog_item_is_intent_done(lip));
	}
#endif
	xfs_trans_unreserve_and_mod_sb(tp);
+16 −0
Original line number Diff line number Diff line
@@ -78,6 +78,22 @@ struct xfs_item_ops {
	bool (*iop_match)(struct xfs_log_item *item, uint64_t id);
};

/* Is this log item a deferred action intent? */
static inline bool
xlog_item_is_intent(struct xfs_log_item *lip)
{
	return lip->li_ops->iop_recover != NULL &&
	       lip->li_ops->iop_match != NULL;
}

/* Is this a log intent-done item? */
static inline bool
xlog_item_is_intent_done(struct xfs_log_item *lip)
{
	return lip->li_ops->iop_unpin == NULL &&
	       lip->li_ops->iop_push == NULL;
}

/*
 * Release the log item as soon as committed.  This is for items just logging
 * intents that never need to be written back in place.