@@ -1068,6 +1068,8 @@ DEFINE_LOG_ITEM_EVENT(xfs_ail_push);
DEFINE_LOG_ITEM_EVENT(xfs_ail_pinned);
DEFINE_LOG_ITEM_EVENT(xfs_ail_locked);
DEFINE_LOG_ITEM_EVENT(xfs_ail_flushing);
+DEFINE_LOG_ITEM_EVENT(xfs_relog_item);
+DEFINE_LOG_ITEM_EVENT(xfs_relog_item_cancel);
DECLARE_EVENT_CLASS(xfs_ail_class,
TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn),
@@ -651,6 +651,26 @@ xfs_trans_del_item(
list_del_init(&lip->li_trans);
}
+void
+xfs_trans_relog_item(
+ struct xfs_trans *tp,
+ struct xfs_log_item *lip)
+{
+ if (test_and_set_bit(XFS_LI_RELOG, &lip->li_flags))
+ return;
+ trace_xfs_relog_item(lip);
+}
+
+void
+xfs_trans_relog_item_cancel(
+ struct xfs_trans *tp,
+ struct xfs_log_item *lip)
+{
+ if (!test_and_clear_bit(XFS_LI_RELOG, &lip->li_flags))
+ return;
+ trace_xfs_relog_item_cancel(lip);
+}
+
/* Detach and unlock all of the items in a transaction */
static void
xfs_trans_free_items(
@@ -60,13 +60,15 @@ struct xfs_log_item {
#define XFS_LI_FAILED 2
#define XFS_LI_DIRTY 3 /* log item dirty in transaction */
#define XFS_LI_RECOVERED 4 /* log intent item has been recovered */
+#define XFS_LI_RELOG 5 /* automatically relog item */
#define XFS_LI_FLAGS \
{ (1 << XFS_LI_IN_AIL), "IN_AIL" }, \
{ (1 << XFS_LI_ABORTED), "ABORTED" }, \
{ (1 << XFS_LI_FAILED), "FAILED" }, \
{ (1 << XFS_LI_DIRTY), "DIRTY" }, \
- { (1 << XFS_LI_RECOVERED), "RECOVERED" }
+ { (1 << XFS_LI_RECOVERED), "RECOVERED" }, \
+ { (1 << XFS_LI_RELOG), "RELOG" }
struct xfs_item_ops {
unsigned flags;
@@ -16,6 +16,8 @@ struct xfs_log_vec;
void xfs_trans_init(struct xfs_mount *);
void xfs_trans_add_item(struct xfs_trans *, struct xfs_log_item *);
void xfs_trans_del_item(struct xfs_log_item *);
+void xfs_trans_relog_item(struct xfs_trans *, struct xfs_log_item *);
+void xfs_trans_relog_item_cancel(struct xfs_trans *, struct xfs_log_item *);
void xfs_trans_unreserve_and_mod_sb(struct xfs_trans *tp);
void xfs_trans_committed_bulk(struct xfs_ail *ailp, struct xfs_log_vec *lv,