Commit 1dfde687 authored by Dave Chinner's avatar Dave Chinner Committed by Darrick J. Wong

xfs: remove logged flag from inode log item

This was used to track if the item had logged fields being flushed
to disk. We log everything in the inode these days, so this logic is
no longer needed. Remove it.
Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 96355d5a
...@@ -2679,7 +2679,6 @@ xfs_ifree_cluster( ...@@ -2679,7 +2679,6 @@ xfs_ifree_cluster(
list_for_each_entry(lip, &bp->b_li_list, li_bio_list) { list_for_each_entry(lip, &bp->b_li_list, li_bio_list) {
if (lip->li_type == XFS_LI_INODE) { if (lip->li_type == XFS_LI_INODE) {
iip = (struct xfs_inode_log_item *)lip; iip = (struct xfs_inode_log_item *)lip;
ASSERT(iip->ili_logged == 1);
lip->li_cb = xfs_istale_done; lip->li_cb = xfs_istale_done;
xfs_trans_ail_copy_lsn(mp->m_ail, xfs_trans_ail_copy_lsn(mp->m_ail,
&iip->ili_flush_lsn, &iip->ili_flush_lsn,
...@@ -2708,7 +2707,6 @@ xfs_ifree_cluster( ...@@ -2708,7 +2707,6 @@ xfs_ifree_cluster(
iip->ili_last_fields = iip->ili_fields; iip->ili_last_fields = iip->ili_fields;
iip->ili_fields = 0; iip->ili_fields = 0;
iip->ili_fsync_fields = 0; iip->ili_fsync_fields = 0;
iip->ili_logged = 1;
xfs_trans_ail_copy_lsn(mp->m_ail, &iip->ili_flush_lsn, xfs_trans_ail_copy_lsn(mp->m_ail, &iip->ili_flush_lsn,
&iip->ili_item.li_lsn); &iip->ili_item.li_lsn);
...@@ -3840,19 +3838,16 @@ xfs_iflush_int( ...@@ -3840,19 +3838,16 @@ xfs_iflush_int(
* *
* We can play with the ili_fields bits here, because the inode lock * We can play with the ili_fields bits here, because the inode lock
* must be held exclusively in order to set bits there and the flush * must be held exclusively in order to set bits there and the flush
* lock protects the ili_last_fields bits. Set ili_logged so the flush * lock protects the ili_last_fields bits. Store the current LSN of the
* done routine can tell whether or not to look in the AIL. Also, store * inode so that we can tell whether the item has moved in the AIL from
* the current LSN of the inode so that we can tell whether the item has * xfs_iflush_done(). In order to read the lsn we need the AIL lock,
* moved in the AIL from xfs_iflush_done(). In order to read the lsn we * because it is a 64 bit value that cannot be read atomically.
* need the AIL lock, because it is a 64 bit value that cannot be read
* atomically.
*/ */
error = 0; error = 0;
flush_out: flush_out:
iip->ili_last_fields = iip->ili_fields; iip->ili_last_fields = iip->ili_fields;
iip->ili_fields = 0; iip->ili_fields = 0;
iip->ili_fsync_fields = 0; iip->ili_fsync_fields = 0;
iip->ili_logged = 1;
xfs_trans_ail_copy_lsn(mp->m_ail, &iip->ili_flush_lsn, xfs_trans_ail_copy_lsn(mp->m_ail, &iip->ili_flush_lsn,
&iip->ili_item.li_lsn); &iip->ili_item.li_lsn);
......
...@@ -528,8 +528,6 @@ xfs_inode_item_push( ...@@ -528,8 +528,6 @@ xfs_inode_item_push(
} }
ASSERT(iip->ili_fields != 0 || XFS_FORCED_SHUTDOWN(ip->i_mount)); ASSERT(iip->ili_fields != 0 || XFS_FORCED_SHUTDOWN(ip->i_mount));
ASSERT(iip->ili_logged == 0 || XFS_FORCED_SHUTDOWN(ip->i_mount));
spin_unlock(&lip->li_ailp->ail_lock); spin_unlock(&lip->li_ailp->ail_lock);
error = xfs_iflush(ip, &bp); error = xfs_iflush(ip, &bp);
...@@ -690,30 +688,24 @@ xfs_iflush_done( ...@@ -690,30 +688,24 @@ xfs_iflush_done(
continue; continue;
list_move_tail(&blip->li_bio_list, &tmp); list_move_tail(&blip->li_bio_list, &tmp);
/*
* while we have the item, do the unlocked check for needing /* Do an unlocked check for needing the AIL lock. */
* the AIL lock.
*/
iip = INODE_ITEM(blip); iip = INODE_ITEM(blip);
if ((iip->ili_logged && blip->li_lsn == iip->ili_flush_lsn) || if (blip->li_lsn == iip->ili_flush_lsn ||
test_bit(XFS_LI_FAILED, &blip->li_flags)) test_bit(XFS_LI_FAILED, &blip->li_flags))
need_ail++; need_ail++;
} }
/* make sure we capture the state of the initial inode. */ /* make sure we capture the state of the initial inode. */
iip = INODE_ITEM(lip); iip = INODE_ITEM(lip);
if ((iip->ili_logged && lip->li_lsn == iip->ili_flush_lsn) || if (lip->li_lsn == iip->ili_flush_lsn ||
test_bit(XFS_LI_FAILED, &lip->li_flags)) test_bit(XFS_LI_FAILED, &lip->li_flags))
need_ail++; need_ail++;
/* /*
* We only want to pull the item from the AIL if it is * We only want to pull the item from the AIL if it is actually there
* actually there and its location in the log has not * and its location in the log has not changed since we started the
* changed since we started the flush. Thus, we only bother * flush. Thus, we only bother if the inode's lsn has not changed.
* if the ili_logged flag is set and the inode's lsn has not
* changed. First we check the lsn outside
* the lock since it's cheaper, and then we recheck while
* holding the lock before removing the inode from the AIL.
*/ */
if (need_ail) { if (need_ail) {
xfs_lsn_t tail_lsn = 0; xfs_lsn_t tail_lsn = 0;
...@@ -721,8 +713,7 @@ xfs_iflush_done( ...@@ -721,8 +713,7 @@ xfs_iflush_done(
/* this is an opencoded batch version of xfs_trans_ail_delete */ /* this is an opencoded batch version of xfs_trans_ail_delete */
spin_lock(&ailp->ail_lock); spin_lock(&ailp->ail_lock);
list_for_each_entry(blip, &tmp, li_bio_list) { list_for_each_entry(blip, &tmp, li_bio_list) {
if (INODE_ITEM(blip)->ili_logged && if (blip->li_lsn == INODE_ITEM(blip)->ili_flush_lsn) {
blip->li_lsn == INODE_ITEM(blip)->ili_flush_lsn) {
/* /*
* xfs_ail_update_finish() only cares about the * xfs_ail_update_finish() only cares about the
* lsn of the first tail item removed, any * lsn of the first tail item removed, any
...@@ -740,14 +731,13 @@ xfs_iflush_done( ...@@ -740,14 +731,13 @@ xfs_iflush_done(
} }
/* /*
* clean up and unlock the flush lock now we are done. We can clear the * Clean up and unlock the flush lock now we are done. We can clear the
* ili_last_fields bits now that we know that the data corresponding to * ili_last_fields bits now that we know that the data corresponding to
* them is safely on disk. * them is safely on disk.
*/ */
list_for_each_entry_safe(blip, n, &tmp, li_bio_list) { list_for_each_entry_safe(blip, n, &tmp, li_bio_list) {
list_del_init(&blip->li_bio_list); list_del_init(&blip->li_bio_list);
iip = INODE_ITEM(blip); iip = INODE_ITEM(blip);
iip->ili_logged = 0;
iip->ili_last_fields = 0; iip->ili_last_fields = 0;
xfs_ifunlock(iip->ili_inode); xfs_ifunlock(iip->ili_inode);
} }
...@@ -768,16 +758,11 @@ xfs_iflush_abort( ...@@ -768,16 +758,11 @@ xfs_iflush_abort(
if (iip) { if (iip) {
xfs_trans_ail_delete(&iip->ili_item, 0); xfs_trans_ail_delete(&iip->ili_item, 0);
iip->ili_logged = 0;
/*
* Clear the ili_last_fields bits now that we know that the
* data corresponding to them is safely on disk.
*/
iip->ili_last_fields = 0;
/* /*
* Clear the inode logging fields so no more flushes are * Clear the inode logging fields so no more flushes are
* attempted. * attempted.
*/ */
iip->ili_last_fields = 0;
iip->ili_fields = 0; iip->ili_fields = 0;
iip->ili_fsync_fields = 0; iip->ili_fsync_fields = 0;
} }
......
...@@ -19,7 +19,6 @@ struct xfs_inode_log_item { ...@@ -19,7 +19,6 @@ struct xfs_inode_log_item {
xfs_lsn_t ili_flush_lsn; /* lsn at last flush */ xfs_lsn_t ili_flush_lsn; /* lsn at last flush */
xfs_lsn_t ili_last_lsn; /* lsn at last transaction */ xfs_lsn_t ili_last_lsn; /* lsn at last transaction */
unsigned short ili_lock_flags; /* lock flags */ unsigned short ili_lock_flags; /* lock flags */
unsigned short ili_logged; /* flushed logged data */
unsigned int ili_last_fields; /* fields when flushed */ unsigned int ili_last_fields; /* fields when flushed */
unsigned int ili_fields; /* fields to be logged */ unsigned int ili_fields; /* fields to be logged */
unsigned int ili_fsync_fields; /* logged since last fsync */ unsigned int ili_fsync_fields; /* logged since last fsync */
......
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