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: Kaixu Xia <kaixuxia@tencent.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
74af4c1770
commit
d6b8fc6c7a
|
@ -2465,13 +2465,6 @@ xlog_finish_defer_ops(
|
||||||
return xfs_trans_commit(tp);
|
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
|
* 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
|
* corresponding log done items should be in the AIL. What we do now
|
||||||
|
|
|
@ -959,7 +959,7 @@ xfs_trans_cancel(
|
||||||
struct xfs_log_item *lip;
|
struct xfs_log_item *lip;
|
||||||
|
|
||||||
list_for_each_entry(lip, &tp->t_items, li_trans)
|
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
|
#endif
|
||||||
xfs_trans_unreserve_and_mod_sb(tp);
|
xfs_trans_unreserve_and_mod_sb(tp);
|
||||||
|
|
|
@ -78,6 +78,22 @@ struct xfs_item_ops {
|
||||||
bool (*iop_match)(struct xfs_log_item *item, uint64_t id);
|
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
|
* Release the log item as soon as committed. This is for items just logging
|
||||||
* intents that never need to be written back in place.
|
* intents that never need to be written back in place.
|
||||||
|
|
Loading…
Reference in New Issue