xfs: pass shutdown method into xfs_trans_ail_delete_bulk
xfs_trans_ail_delete_bulk() can be called from different contexts so if the item is not in the AIL we need different shutdown for each context. Pass in the shutdown method needed so the correct action can be taken. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
Šī revīzija ir iekļauta:

revīziju iesūtīja
Ben Myers

vecāks
a8569171ba
revīzija
04913fdd91
@@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user