Commit 4165994a authored by Dave Chinner's avatar Dave Chinner Committed by Darrick J. Wong

xfs: factor common AIL item deletion code

Factor the common AIL deletion code that does all the wakeups into a
helper so we only have one copy of this somewhat tricky code to
interface with all the wakeups necessary when the LSN of the log
tail changes.
Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarAllison Collins <allison.henderson@oracle.com>
Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent d59eadae
...@@ -742,17 +742,7 @@ xfs_iflush_done( ...@@ -742,17 +742,7 @@ xfs_iflush_done(
xfs_clear_li_failed(blip); xfs_clear_li_failed(blip);
} }
} }
xfs_ail_update_finish(ailp, mlip_changed);
if (mlip_changed) {
if (!XFS_FORCED_SHUTDOWN(ailp->ail_mount))
xlog_assign_tail_lsn_locked(ailp->ail_mount);
if (list_empty(&ailp->ail_head))
wake_up_all(&ailp->ail_empty);
}
spin_unlock(&ailp->ail_lock);
if (mlip_changed)
xfs_log_space_wake(ailp->ail_mount);
} }
/* /*
......
...@@ -681,6 +681,27 @@ xfs_ail_push_all_sync( ...@@ -681,6 +681,27 @@ xfs_ail_push_all_sync(
finish_wait(&ailp->ail_empty, &wait); finish_wait(&ailp->ail_empty, &wait);
} }
void
xfs_ail_update_finish(
struct xfs_ail *ailp,
bool do_tail_update) __releases(ailp->ail_lock)
{
struct xfs_mount *mp = ailp->ail_mount;
if (!do_tail_update) {
spin_unlock(&ailp->ail_lock);
return;
}
if (!XFS_FORCED_SHUTDOWN(mp))
xlog_assign_tail_lsn_locked(mp);
if (list_empty(&ailp->ail_head))
wake_up_all(&ailp->ail_empty);
spin_unlock(&ailp->ail_lock);
xfs_log_space_wake(mp);
}
/* /*
* xfs_trans_ail_update - bulk AIL insertion operation. * xfs_trans_ail_update - bulk AIL insertion operation.
* *
...@@ -740,15 +761,7 @@ xfs_trans_ail_update_bulk( ...@@ -740,15 +761,7 @@ xfs_trans_ail_update_bulk(
if (!list_empty(&tmp)) if (!list_empty(&tmp))
xfs_ail_splice(ailp, cur, &tmp, lsn); xfs_ail_splice(ailp, cur, &tmp, lsn);
if (mlip_changed) { xfs_ail_update_finish(ailp, mlip_changed);
if (!XFS_FORCED_SHUTDOWN(ailp->ail_mount))
xlog_assign_tail_lsn_locked(ailp->ail_mount);
spin_unlock(&ailp->ail_lock);
xfs_log_space_wake(ailp->ail_mount);
} else {
spin_unlock(&ailp->ail_lock);
}
} }
bool bool
...@@ -792,10 +805,10 @@ void ...@@ -792,10 +805,10 @@ void
xfs_trans_ail_delete( xfs_trans_ail_delete(
struct xfs_ail *ailp, struct xfs_ail *ailp,
struct xfs_log_item *lip, struct xfs_log_item *lip,
int shutdown_type) __releases(ailp->ail_lock) int shutdown_type)
{ {
struct xfs_mount *mp = ailp->ail_mount; struct xfs_mount *mp = ailp->ail_mount;
bool mlip_changed; bool need_update;
if (!test_bit(XFS_LI_IN_AIL, &lip->li_flags)) { if (!test_bit(XFS_LI_IN_AIL, &lip->li_flags)) {
spin_unlock(&ailp->ail_lock); spin_unlock(&ailp->ail_lock);
...@@ -808,17 +821,8 @@ xfs_trans_ail_delete( ...@@ -808,17 +821,8 @@ xfs_trans_ail_delete(
return; return;
} }
mlip_changed = xfs_ail_delete_one(ailp, lip); need_update = xfs_ail_delete_one(ailp, lip);
if (mlip_changed) { xfs_ail_update_finish(ailp, need_update);
if (!XFS_FORCED_SHUTDOWN(mp))
xlog_assign_tail_lsn_locked(mp);
if (list_empty(&ailp->ail_head))
wake_up_all(&ailp->ail_empty);
}
spin_unlock(&ailp->ail_lock);
if (mlip_changed)
xfs_log_space_wake(ailp->ail_mount);
} }
int int
......
...@@ -92,8 +92,10 @@ xfs_trans_ail_update( ...@@ -92,8 +92,10 @@ xfs_trans_ail_update(
} }
bool xfs_ail_delete_one(struct xfs_ail *ailp, struct xfs_log_item *lip); bool xfs_ail_delete_one(struct xfs_ail *ailp, struct xfs_log_item *lip);
void xfs_ail_update_finish(struct xfs_ail *ailp, bool do_tail_update)
__releases(ailp->ail_lock);
void xfs_trans_ail_delete(struct xfs_ail *ailp, struct xfs_log_item *lip, void xfs_trans_ail_delete(struct xfs_ail *ailp, struct xfs_log_item *lip,
int shutdown_type) __releases(ailp->ail_lock); int shutdown_type);
static inline void static inline void
xfs_trans_ail_remove( xfs_trans_ail_remove(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment