Lines Matching defs:pag
252 struct xfs_perag *pag = cur->bc_ag.pag;
258 if (!xfs_verify_agbext(pag, irec->ar_startblock, irec->ar_blockcount))
275 cur->bc_ag.pag->pag_agno, fa);
460 ASSERT(args->pag->pagf_freeblks + args->pag->pagf_flcount >=
748 struct xfs_perag *pag,
752 struct xfs_mount *mp = pag->pag_mount;
758 XFS_AG_DADDR(mp, pag->pag_agno, XFS_AGFL_DADDR(mp)),
834 args->agbp, args->pag, XFS_BTNUM_CNT);
844 args->agbp, args->pag, XFS_BTNUM_BNO);
847 args->agbp, args->pag, XFS_BTNUM_BNO);
1114 error = xfs_alloc_get_freelist(args->pag, args->tp, args->agbp,
1121 xfs_extent_busy_reuse(args->mp, args->pag, fbno, 1,
1147 error = xfs_rmap_free(args->tp, args->agbp, args->pag, fbno, 1,
1203 args->pag, XFS_BTNUM_BNO);
1263 args->pag, XFS_BTNUM_CNT);
1624 error = xfs_extent_busy_flush(args->tp, args->pag,
1676 args->pag, XFS_BTNUM_CNT);
1739 error = xfs_extent_busy_flush(args->tp, args->pag,
1834 error = xfs_extent_busy_flush(args->tp, args->pag,
1856 args->pag, XFS_BTNUM_BNO);
1915 struct xfs_perag *pag = agbp->b_pag;
1921 error = xfs_rmap_free(tp, agbp, pag, bno, len, oinfo);
1929 bno_cur = xfs_allocbt_init_cursor(mp, tp, agbp, pag, XFS_BTNUM_BNO);
1999 cnt_cur = xfs_allocbt_init_cursor(mp, tp, agbp, pag, XFS_BTNUM_CNT);
2229 struct xfs_perag *pag,
2239 if (need > pag->pagf_flcount)
2240 delta = need - pag->pagf_flcount;
2247 if (pag->pagf_freeblks - pag->pagf_longest < reserved)
2248 delta += reserved - (pag->pagf_freeblks - pag->pagf_longest);
2254 if (pag->pagf_longest > delta)
2255 return min_t(xfs_extlen_t, pag->pag_mount->m_ag_max_usable,
2256 pag->pagf_longest - delta);
2259 return pag->pagf_flcount > 0 || pag->pagf_longest > 0;
2263 * Compute the minimum length of the AGFL in the given AG. If @pag is NULL,
2269 struct xfs_perag *pag)
2273 const uint8_t *levels = pag ? pag->pagf_levels : fake_levels;
2325 struct xfs_perag *pag = args->pag;
2334 reservation = xfs_ag_resv_needed(pag, args->resv);
2338 longest = xfs_alloc_longest_free_extent(pag, min_free, reservation);
2347 agflcount = min_t(xfs_extlen_t, pag->pagf_flcount, min_free);
2348 available = (int)(pag->pagf_freeblks + agflcount -
2456 struct xfs_perag *pag)
2461 ASSERT(xfs_perag_agfl_needs_reset(pag));
2467 pag->pag_agno, pag->pagf_flcount);
2475 pag->pagf_flcount = 0;
2476 clear_bit(XFS_AGSTATE_AGFL_NEEDS_RESET, &pag->pag_opstate);
2600 args->pag, XFS_BTNUM_CNT);
2633 struct xfs_perag *pag = args->pag;
2645 if (!xfs_perag_initialised_agf(pag)) {
2646 error = xfs_alloc_read_agf(pag, tp, alloc_flags, &agbp);
2656 * If this is a metadata preferred pag and we are user data then try
2660 if (xfs_perag_prefers_metadata(pag) &&
2667 need = xfs_alloc_min_freelist(mp, pag);
2677 error = xfs_alloc_read_agf(pag, tp, alloc_flags, &agbp);
2687 if (xfs_perag_agfl_needs_reset(pag))
2688 xfs_agfl_reset(tp, agbp, pag);
2691 need = xfs_alloc_min_freelist(mp, pag);
2734 pag->pagf_flcount > need) {
2735 error = xfs_alloc_get_freelist(pag, tp, agbp, &bno, 0);
2750 targs.pag = pag;
2751 error = xfs_alloc_read_agfl(pag, tp, &agflbp);
2756 while (pag->pagf_flcount < need) {
2758 targs.maxlen = need - pag->pagf_flcount;
2778 error = xfs_rmap_alloc(tp, agbp, pag,
2792 error = xfs_alloc_put_freelist(pag, tp, agbp,
2818 struct xfs_perag *pag,
2842 error = xfs_alloc_read_agfl(pag, tp, &agflbp);
2852 if (XFS_IS_CORRUPT(tp->t_mountp, !xfs_verify_agbno(pag, bno)))
2860 ASSERT(!xfs_perag_agfl_needs_reset(pag));
2862 pag->pagf_flcount--;
2867 pag->pagf_btreeblks++;
2924 struct xfs_perag *pag,
2940 error = xfs_alloc_read_agfl(pag, tp, &agflbp);
2949 ASSERT(!xfs_perag_agfl_needs_reset(pag));
2951 pag->pagf_flcount++;
2956 pag->pagf_btreeblks--;
3161 struct xfs_perag *pag,
3166 struct xfs_mount *mp = pag->pag_mount;
3169 trace_xfs_read_agf(pag->pag_mount, pag->pag_agno);
3172 XFS_AG_DADDR(mp, pag->pag_agno, XFS_AGF_DADDR(mp)),
3188 struct xfs_perag *pag,
3198 trace_xfs_alloc_read_agf(pag->pag_mount, pag->pag_agno);
3203 error = xfs_read_agf(pag, tp,
3210 if (!xfs_perag_initialised_agf(pag)) {
3211 pag->pagf_freeblks = be32_to_cpu(agf->agf_freeblks);
3212 pag->pagf_btreeblks = be32_to_cpu(agf->agf_btreeblks);
3213 pag->pagf_flcount = be32_to_cpu(agf->agf_flcount);
3214 pag->pagf_longest = be32_to_cpu(agf->agf_longest);
3215 pag->pagf_levels[XFS_BTNUM_BNOi] =
3217 pag->pagf_levels[XFS_BTNUM_CNTi] =
3219 pag->pagf_levels[XFS_BTNUM_RMAPi] =
3221 pag->pagf_refcount_level = be32_to_cpu(agf->agf_refcount_level);
3222 if (xfs_agfl_needs_reset(pag->pag_mount, agf))
3223 set_bit(XFS_AGSTATE_AGFL_NEEDS_RESET, &pag->pag_opstate);
3225 clear_bit(XFS_AGSTATE_AGFL_NEEDS_RESET, &pag->pag_opstate);
3234 allocbt_blks = pag->pagf_btreeblks;
3235 if (xfs_has_rmapbt(pag->pag_mount))
3239 &pag->pag_mount->m_allocbt_blks);
3241 set_bit(XFS_AGSTATE_AGF_INIT, &pag->pag_opstate);
3244 else if (!xfs_is_shutdown(pag->pag_mount)) {
3245 ASSERT(pag->pagf_freeblks == be32_to_cpu(agf->agf_freeblks));
3246 ASSERT(pag->pagf_btreeblks == be32_to_cpu(agf->agf_btreeblks));
3247 ASSERT(pag->pagf_flcount == be32_to_cpu(agf->agf_flcount));
3248 ASSERT(pag->pagf_longest == be32_to_cpu(agf->agf_longest));
3249 ASSERT(pag->pagf_levels[XFS_BTNUM_BNOi] ==
3251 ASSERT(pag->pagf_levels[XFS_BTNUM_CNTi] ==
3332 bool need_pag = !args->pag;
3336 args->pag = xfs_perag_get(args->mp, args->agno);
3343 xfs_perag_put(args->pag);
3416 error = xfs_rmap_alloc(args->tp, args->agbp, args->pag,
3428 ASSERT(!xfs_extent_busy_search(mp, args->pag, args->agbno,
3432 xfs_ag_resv_alloc_extent(args->pag, args->resv, args);
3440 if (drop_perag && args->pag) {
3441 xfs_perag_rele(args->pag);
3442 args->pag = NULL;
3452 * Caller is expected to hold a perag reference in args->pag.
3464 ASSERT(args->pag != NULL);
3465 ASSERT(args->pag->pag_agno == agno);
3496 * On return, args->pag may be left referenced if we finish before the "all
3522 mp->m_sb.sb_agcount, agno, args->pag) {
3546 xfs_perag_rele(args->pag);
3547 args->pag = NULL;
3564 ASSERT(args->pag == NULL);
3590 ASSERT(args->pag == NULL);
3644 ASSERT(args->pag == NULL);
3666 * perag reference in args->pag.
3677 ASSERT(args->pag != NULL);
3678 ASSERT(args->pag->pag_agno == XFS_FSB_TO_AGNO(mp, target));
3703 * Caller may or may not have a per-ag reference in args->pag.
3712 bool needs_perag = args->pag == NULL;
3717 ASSERT(args->pag->pag_agno == XFS_FSB_TO_AGNO(mp, target));
3732 args->pag = xfs_perag_grab(mp, args->agno);
3745 struct xfs_perag *pag,
3754 args.agno = pag->pag_agno;
3755 args.pag = pag;
3780 struct xfs_perag *pag,
3800 error = xfs_free_extent_fix_freelist(tp, pag, &agbp);
3816 error = xfs_free_ag_extent(tp, agbp, pag->pag_agno, agbno, len, oinfo,
3823 xfs_extent_busy_insert(tp, pag, agbno, len, busy_flags);