|
@@ -777,7 +777,8 @@ xfs_iflush_done(
|
|
|
ASSERT(i <= need_ail);
|
|
|
}
|
|
|
/* xfs_trans_ail_delete_bulk() drops the AIL lock. */
|
|
|
- xfs_trans_ail_delete_bulk(ailp, log_items, i);
|
|
|
+ xfs_trans_ail_delete_bulk(ailp, log_items, i,
|
|
|
+ SHUTDOWN_CORRUPT_INCORE);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -798,16 +799,15 @@ xfs_iflush_done(
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * This is the inode flushing abort routine. It is called
|
|
|
- * from xfs_iflush when the filesystem is shutting down to clean
|
|
|
- * up the inode state.
|
|
|
- * It is responsible for removing the inode item
|
|
|
- * from the AIL if it has not been re-logged, and unlocking the inode's
|
|
|
- * flush lock.
|
|
|
+ * This is the inode flushing abort routine. It is called from xfs_iflush when
|
|
|
+ * the filesystem is shutting down to clean up the inode state. It is
|
|
|
+ * responsible for removing the inode item from the AIL if it has not been
|
|
|
+ * re-logged, and unlocking the inode's flush lock.
|
|
|
*/
|
|
|
void
|
|
|
xfs_iflush_abort(
|
|
|
- xfs_inode_t *ip)
|
|
|
+ xfs_inode_t *ip,
|
|
|
+ bool stale)
|
|
|
{
|
|
|
xfs_inode_log_item_t *iip = ip->i_itemp;
|
|
|
|
|
@@ -817,7 +817,10 @@ xfs_iflush_abort(
|
|
|
spin_lock(&ailp->xa_lock);
|
|
|
if (iip->ili_item.li_flags & XFS_LI_IN_AIL) {
|
|
|
/* xfs_trans_ail_delete() drops the AIL lock. */
|
|
|
- xfs_trans_ail_delete(ailp, (xfs_log_item_t *)iip);
|
|
|
+ xfs_trans_ail_delete(ailp, &iip->ili_item,
|
|
|
+ stale ?
|
|
|
+ SHUTDOWN_LOG_IO_ERROR :
|
|
|
+ SHUTDOWN_CORRUPT_INCORE);
|
|
|
} else
|
|
|
spin_unlock(&ailp->xa_lock);
|
|
|
}
|
|
@@ -844,7 +847,7 @@ xfs_istale_done(
|
|
|
struct xfs_buf *bp,
|
|
|
struct xfs_log_item *lip)
|
|
|
{
|
|
|
- xfs_iflush_abort(INODE_ITEM(lip)->ili_inode);
|
|
|
+ xfs_iflush_abort(INODE_ITEM(lip)->ili_inode, true);
|
|
|
}
|
|
|
|
|
|
/*
|