diff options
Diffstat (limited to 'fs/xfs/xfs_log_recover.c')
| -rw-r--r-- | fs/xfs/xfs_log_recover.c | 50 | 
1 files changed, 17 insertions, 33 deletions
| diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 96c997ed2ec8..7758a6706b8c 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -2519,21 +2519,22 @@ xlog_abort_defer_ops(  		xfs_defer_ops_capture_free(mp, dfc);  	}  } +  /*   * When this is called, all of the log intent items which did not have - * corresponding log done items should be in the AIL.  What we do now - * is update the data structures associated with each one. + * corresponding log done items should be in the AIL.  What we do now is update + * the data structures associated with each one.   * - * Since we process the log intent items in normal transactions, they - * will be removed at some point after the commit.  This prevents us - * from just walking down the list processing each one.  We'll use a - * flag in the intent item to skip those that we've already processed - * and use the AIL iteration mechanism's generation count to try to - * speed this up at least a bit. + * Since we process the log intent items in normal transactions, they will be + * removed at some point after the commit.  This prevents us from just walking + * down the list processing each one.  We'll use a flag in the intent item to + * skip those that we've already processed and use the AIL iteration mechanism's + * generation count to try to speed this up at least a bit.   * - * When we start, we know that the intents are the only things in the - * AIL.  As we process them, however, other items are added to the - * AIL. + * When we start, we know that the intents are the only things in the AIL. As we + * process them, however, other items are added to the AIL. Hence we know we + * have started recovery on all the pending intents when we find an non-intent + * item in the AIL.   */  STATIC int  xlog_recover_process_intents( @@ -2556,17 +2557,8 @@ xlog_recover_process_intents(  	for (lip = xfs_trans_ail_cursor_first(ailp, &cur, 0);  	     lip != NULL;  	     lip = xfs_trans_ail_cursor_next(ailp, &cur)) { -		/* -		 * We're done when we see something other than an intent. -		 * There should be no intents left in the AIL now. -		 */ -		if (!xlog_item_is_intent(lip)) { -#ifdef DEBUG -			for (; lip; lip = xfs_trans_ail_cursor_next(ailp, &cur)) -				ASSERT(!xlog_item_is_intent(lip)); -#endif +		if (!xlog_item_is_intent(lip))  			break; -		}  		/*  		 * We should never see a redo item with a LSN higher than @@ -2607,8 +2599,9 @@ err:  }  /* - * A cancel occurs when the mount has failed and we're bailing out. - * Release all pending log intent items so they don't pin the AIL. + * A cancel occurs when the mount has failed and we're bailing out.  Release all + * pending log intent items that we haven't started recovery on so they don't + * pin the AIL.   */  STATIC void  xlog_recover_cancel_intents( @@ -2622,17 +2615,8 @@ xlog_recover_cancel_intents(  	spin_lock(&ailp->ail_lock);  	lip = xfs_trans_ail_cursor_first(ailp, &cur, 0);  	while (lip != NULL) { -		/* -		 * We're done when we see something other than an intent. -		 * There should be no intents left in the AIL now. -		 */ -		if (!xlog_item_is_intent(lip)) { -#ifdef DEBUG -			for (; lip; lip = xfs_trans_ail_cursor_next(ailp, &cur)) -				ASSERT(!xlog_item_is_intent(lip)); -#endif +		if (!xlog_item_is_intent(lip))  			break; -		}  		spin_unlock(&ailp->ail_lock);  		lip->li_ops->iop_release(lip); | 
