Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 229051
b: refs/heads/master
c: 9552e7f
h: refs/heads/master
i:
  229049: 07e0d87
  229047: 75a7ab8
v: v3
  • Loading branch information
Dave Chinner authored and Dave Chinner committed Dec 20, 2010
1 parent ec836d2 commit 77ea2e7
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 73 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e60599492990d1b52c70e9ed2f8e062fe11ca937
refs/heads/master: 9552e7f2f3dd13a7580e488a7a3582332daad4f5
65 changes: 0 additions & 65 deletions trunk/fs/xfs/xfs_trans_ail.c
Original file line number Diff line number Diff line change
Expand Up @@ -522,70 +522,6 @@ xfs_trans_ail_update_bulk(
xfs_log_move_tail(ailp->xa_mount, tail_lsn);
}

/*
* Delete the given item from the AIL. It must already be in
* the AIL.
*
* Wakeup anyone with an lsn less than item's lsn. If the item
* we delete in the AIL is the minimum one, update the tail lsn in the
* log manager.
*
* Clear the IN_AIL flag from the item, reset its lsn to 0, and
* bump the AIL's generation count to indicate that the tree
* has changed.
*
* This function must be called with the AIL lock held. The lock
* is dropped before returning.
*/
void
xfs_trans_ail_delete(
struct xfs_ail *ailp,
xfs_log_item_t *lip) __releases(ailp->xa_lock)
{
xfs_log_item_t *mlip;
xfs_lsn_t tail_lsn;

if (lip->li_flags & XFS_LI_IN_AIL) {
mlip = xfs_ail_min(ailp);
xfs_ail_delete(ailp, lip);


lip->li_flags &= ~XFS_LI_IN_AIL;
lip->li_lsn = 0;

if (mlip == lip) {
mlip = xfs_ail_min(ailp);
/*
* It is not safe to access mlip after the AIL lock
* is dropped, so we must get a copy of li_lsn
* before we do so. This is especially important
* on 32-bit platforms where accessing and updating
* 64-bit values like li_lsn is not atomic.
*/
tail_lsn = mlip ? mlip->li_lsn : 0;
spin_unlock(&ailp->xa_lock);
xfs_log_move_tail(ailp->xa_mount, tail_lsn);
} else {
spin_unlock(&ailp->xa_lock);
}
}
else {
/*
* If the file system is not being shutdown, we are in
* serious trouble if we get to this stage.
*/
struct xfs_mount *mp = ailp->xa_mount;

spin_unlock(&ailp->xa_lock);
if (!XFS_FORCED_SHUTDOWN(mp)) {
xfs_cmn_err(XFS_PTAG_AILDELETE, CE_ALERT, mp,
"%s: attempting to delete a log item that is not in the AIL",
__func__);
xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
}
}
}

/*
* xfs_trans_ail_delete_bulk - remove multiple log items from the AIL
*
Expand Down Expand Up @@ -660,7 +596,6 @@ xfs_trans_ail_delete_bulk(
xfs_log_move_tail(ailp->xa_mount, tail_lsn);
}


/*
* The active item list (AIL) is a doubly linked list of log
* items sorted by ascending lsn. The base of the list is
Expand Down
18 changes: 11 additions & 7 deletions trunk/fs/xfs/xfs_trans_priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,17 @@ xfs_trans_ail_update(
xfs_trans_ail_update_bulk(ailp, &lip, 1, lsn);
}

void xfs_trans_ail_delete(struct xfs_ail *ailp,
struct xfs_log_item *lip)
__releases(ailp->xa_lock);
void xfs_trans_ail_delete_bulk(struct xfs_ail *ailp,
struct xfs_log_item **log_items,
int nr_items)
__releases(ailp->xa_lock);
void xfs_trans_ail_delete_bulk(struct xfs_ail *ailp,
struct xfs_log_item **log_items, int nr_items)
__releases(ailp->xa_lock);
static inline void
xfs_trans_ail_delete(
struct xfs_ail *ailp,
xfs_log_item_t *lip) __releases(ailp->xa_lock)
{
xfs_trans_ail_delete_bulk(ailp, &lip, 1);
}

void xfs_trans_ail_push(struct xfs_ail *, xfs_lsn_t);
void xfs_trans_unlocked_item(struct xfs_ail *,
xfs_log_item_t *);
Expand Down

0 comments on commit 77ea2e7

Please sign in to comment.