xfs: convert raw ag walks to use for_each_perag
Convert the raw walks to an iterator, pulling the current AG out of pag->pag_agno instead of the loop iterator variable. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
		
							parent
							
								
									f250eedcf7
								
							
						
					
					
						commit
						934933c3ee
					
				| @ -11,6 +11,7 @@ | ||||
| #include "xfs_trans_resv.h" | ||||
| #include "xfs_bit.h" | ||||
| #include "xfs_mount.h" | ||||
| #include "xfs_ag.h" | ||||
| 
 | ||||
| /* Find the size of the AG, in blocks. */ | ||||
| inline xfs_agblock_t | ||||
| @ -222,12 +223,13 @@ xfs_icount_range( | ||||
| 	unsigned long long	*max) | ||||
| { | ||||
| 	unsigned long long	nr_inos = 0; | ||||
| 	struct xfs_perag	*pag; | ||||
| 	xfs_agnumber_t		agno; | ||||
| 
 | ||||
| 	/* root, rtbitmap, rtsum all live in the first chunk */ | ||||
| 	*min = XFS_INODES_PER_CHUNK; | ||||
| 
 | ||||
| 	for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) { | ||||
| 	for_each_perag(mp, agno, pag) { | ||||
| 		xfs_agino_t	first, last; | ||||
| 
 | ||||
| 		xfs_agino_range(mp, agno, &first, &last); | ||||
|  | ||||
| @ -22,6 +22,7 @@ | ||||
| #include "scrub/scrub.h" | ||||
| #include "scrub/common.h" | ||||
| #include "scrub/btree.h" | ||||
| #include "xfs_ag.h" | ||||
| 
 | ||||
| /* Set us up with an inode's bmap. */ | ||||
| int | ||||
| @ -575,6 +576,7 @@ xchk_bmap_check_rmaps( | ||||
| 	int			whichfork) | ||||
| { | ||||
| 	struct xfs_ifork	*ifp = XFS_IFORK_PTR(sc->ip, whichfork); | ||||
| 	struct xfs_perag	*pag; | ||||
| 	xfs_agnumber_t		agno; | ||||
| 	bool			zero_size; | ||||
| 	int			error; | ||||
| @ -607,15 +609,16 @@ xchk_bmap_check_rmaps( | ||||
| 	    (zero_size || ifp->if_nextents > 0)) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	for (agno = 0; agno < sc->mp->m_sb.sb_agcount; agno++) { | ||||
| 		error = xchk_bmap_check_ag_rmaps(sc, whichfork, agno); | ||||
| 	for_each_perag(sc->mp, agno, pag) { | ||||
| 		error = xchk_bmap_check_ag_rmaps(sc, whichfork, pag->pag_agno); | ||||
| 		if (error) | ||||
| 			return error; | ||||
| 			break; | ||||
| 		if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT) | ||||
| 			break; | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| 	if (pag) | ||||
| 		xfs_perag_put(pag); | ||||
| 	return error; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  | ||||
| @ -2742,21 +2742,17 @@ STATIC void | ||||
| xlog_recover_process_iunlinks( | ||||
| 	struct xlog	*log) | ||||
| { | ||||
| 	xfs_mount_t	*mp; | ||||
| 	xfs_agnumber_t	agno; | ||||
| 	xfs_agi_t	*agi; | ||||
| 	struct xfs_buf	*agibp; | ||||
| 	xfs_agino_t	agino; | ||||
| 	int		bucket; | ||||
| 	int		error; | ||||
| 	struct xfs_mount	*mp = log->l_mp; | ||||
| 	struct xfs_perag	*pag; | ||||
| 	xfs_agnumber_t		agno; | ||||
| 	struct xfs_agi		*agi; | ||||
| 	struct xfs_buf		*agibp; | ||||
| 	xfs_agino_t		agino; | ||||
| 	int			bucket; | ||||
| 	int			error; | ||||
| 
 | ||||
| 	mp = log->l_mp; | ||||
| 
 | ||||
| 	for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) { | ||||
| 		/*
 | ||||
| 		 * Find the agi for this ag. | ||||
| 		 */ | ||||
| 		error = xfs_read_agi(mp, NULL, agno, &agibp); | ||||
| 	for_each_perag(mp, agno, pag) { | ||||
| 		error = xfs_read_agi(mp, NULL, pag->pag_agno, &agibp); | ||||
| 		if (error) { | ||||
| 			/*
 | ||||
| 			 * AGI is b0rked. Don't process it. | ||||
| @ -2782,7 +2778,7 @@ xlog_recover_process_iunlinks( | ||||
| 			agino = be32_to_cpu(agi->agi_unlinked[bucket]); | ||||
| 			while (agino != NULLAGINO) { | ||||
| 				agino = xlog_recover_process_one_iunlink(mp, | ||||
| 							agno, agino, bucket); | ||||
| 						pag->pag_agno, agino, bucket); | ||||
| 				cond_resched(); | ||||
| 			} | ||||
| 		} | ||||
| @ -3494,27 +3490,28 @@ xlog_recover_cancel( | ||||
|  */ | ||||
| STATIC void | ||||
| xlog_recover_check_summary( | ||||
| 	struct xlog	*log) | ||||
| 	struct xlog		*log) | ||||
| { | ||||
| 	xfs_mount_t	*mp; | ||||
| 	struct xfs_buf	*agfbp; | ||||
| 	struct xfs_buf	*agibp; | ||||
| 	xfs_agnumber_t	agno; | ||||
| 	uint64_t	freeblks; | ||||
| 	uint64_t	itotal; | ||||
| 	uint64_t	ifree; | ||||
| 	int		error; | ||||
| 	struct xfs_mount	*mp = log->l_mp; | ||||
| 	struct xfs_perag	*pag; | ||||
| 	struct xfs_buf		*agfbp; | ||||
| 	struct xfs_buf		*agibp; | ||||
| 	xfs_agnumber_t		agno; | ||||
| 	uint64_t		freeblks; | ||||
| 	uint64_t		itotal; | ||||
| 	uint64_t		ifree; | ||||
| 	int			error; | ||||
| 
 | ||||
| 	mp = log->l_mp; | ||||
| 
 | ||||
| 	freeblks = 0LL; | ||||
| 	itotal = 0LL; | ||||
| 	ifree = 0LL; | ||||
| 	for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) { | ||||
| 		error = xfs_read_agf(mp, NULL, agno, 0, &agfbp); | ||||
| 	for_each_perag(mp, agno, pag) { | ||||
| 		error = xfs_read_agf(mp, NULL, pag->pag_agno, 0, &agfbp); | ||||
| 		if (error) { | ||||
| 			xfs_alert(mp, "%s agf read failed agno %d error %d", | ||||
| 						__func__, agno, error); | ||||
| 						__func__, pag->pag_agno, error); | ||||
| 		} else { | ||||
| 			struct xfs_agf	*agfp = agfbp->b_addr; | ||||
| 
 | ||||
| @ -3523,10 +3520,10 @@ xlog_recover_check_summary( | ||||
| 			xfs_buf_relse(agfbp); | ||||
| 		} | ||||
| 
 | ||||
| 		error = xfs_read_agi(mp, NULL, agno, &agibp); | ||||
| 		error = xfs_read_agi(mp, NULL, pag->pag_agno, &agibp); | ||||
| 		if (error) { | ||||
| 			xfs_alert(mp, "%s agi read failed agno %d error %d", | ||||
| 						__func__, agno, error); | ||||
| 						__func__, pag->pag_agno, error); | ||||
| 		} else { | ||||
| 			struct xfs_agi	*agi = agibp->b_addr; | ||||
| 
 | ||||
|  | ||||
| @ -755,16 +755,19 @@ int | ||||
| xfs_reflink_recover_cow( | ||||
| 	struct xfs_mount	*mp) | ||||
| { | ||||
| 	struct xfs_perag	*pag; | ||||
| 	xfs_agnumber_t		agno; | ||||
| 	int			error = 0; | ||||
| 
 | ||||
| 	if (!xfs_sb_version_hasreflink(&mp->m_sb)) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) { | ||||
| 		error = xfs_refcount_recover_cow_leftovers(mp, agno); | ||||
| 		if (error) | ||||
| 	for_each_perag(mp, agno, pag) { | ||||
| 		error = xfs_refcount_recover_cow_leftovers(mp, pag->pag_agno); | ||||
| 		if (error) { | ||||
| 			xfs_perag_put(pag); | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return error; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user