mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 18:56:24 +00:00
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…
x
Reference in New Issue
Block a user