Lines Matching refs:args

283 	xfs_alloc_arg_t	*args,		/* allocation argument structure */  in xfs_alloc_compute_aligned()  argument
296 busy = xfs_extent_busy_trim(args, &bno, &len, busy_gen); in xfs_alloc_compute_aligned()
302 if (bno < args->min_agbno && bno + len > args->min_agbno) { in xfs_alloc_compute_aligned()
303 diff = args->min_agbno - bno; in xfs_alloc_compute_aligned()
310 if (args->alignment > 1 && len >= args->minlen) { in xfs_alloc_compute_aligned()
311 xfs_agblock_t aligned_bno = roundup(bno, args->alignment); in xfs_alloc_compute_aligned()
402 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_len() argument
407 ASSERT(args->mod < args->prod); in xfs_alloc_fix_len()
408 rlen = args->len; in xfs_alloc_fix_len()
409 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
410 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
411 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || in xfs_alloc_fix_len()
412 (args->mod == 0 && rlen < args->prod)) in xfs_alloc_fix_len()
414 k = rlen % args->prod; in xfs_alloc_fix_len()
415 if (k == args->mod) in xfs_alloc_fix_len()
417 if (k > args->mod) in xfs_alloc_fix_len()
418 rlen = rlen - (k - args->mod); in xfs_alloc_fix_len()
420 rlen = rlen - args->prod + (args->mod - k); in xfs_alloc_fix_len()
422 if ((int)rlen < (int)args->minlen) in xfs_alloc_fix_len()
424 ASSERT(rlen >= args->minlen && rlen <= args->maxlen); in xfs_alloc_fix_len()
425 ASSERT(rlen % args->prod == args->mod); in xfs_alloc_fix_len()
426 ASSERT(args->pag->pagf_freeblks + args->pag->pagf_flcount >= in xfs_alloc_fix_len()
427 rlen + args->minleft); in xfs_alloc_fix_len()
428 args->len = rlen; in xfs_alloc_fix_len()
765 struct xfs_alloc_arg *args, in xfs_alloc_cur_setup() argument
771 acur->cur_len = args->maxlen; in xfs_alloc_cur_setup()
786 acur->cnt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
787 args->agbp, args->pag, XFS_BTNUM_CNT); in xfs_alloc_cur_setup()
788 error = xfs_alloc_lookup_ge(acur->cnt, 0, args->maxlen, &i); in xfs_alloc_cur_setup()
796 acur->bnolt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
797 args->agbp, args->pag, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
799 acur->bnogt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
800 args->agbp, args->pag, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
831 struct xfs_alloc_arg *args, in xfs_alloc_cur_check() argument
849 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_cur_check()
856 if (len < args->minlen) { in xfs_alloc_cur_check()
861 busy = xfs_alloc_compute_aligned(args, bno, len, &bnoa, &lena, in xfs_alloc_cur_check()
867 if (bnoa < args->min_agbno || bnoa > args->max_agbno) { in xfs_alloc_cur_check()
871 if (lena < args->minlen) in xfs_alloc_cur_check()
874 args->len = XFS_EXTLEN_MIN(lena, args->maxlen); in xfs_alloc_cur_check()
875 xfs_alloc_fix_len(args); in xfs_alloc_cur_check()
876 ASSERT(args->len >= args->minlen); in xfs_alloc_cur_check()
877 if (args->len < acur->len) in xfs_alloc_cur_check()
884 diff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_cur_check()
885 args->alignment, args->datatype, in xfs_alloc_cur_check()
898 ASSERT(args->len > acur->len || in xfs_alloc_cur_check()
899 (args->len == acur->len && diff <= acur->diff)); in xfs_alloc_cur_check()
903 acur->len = args->len; in xfs_alloc_cur_check()
912 if (acur->diff == 0 && acur->len == args->maxlen) in xfs_alloc_cur_check()
917 trace_xfs_alloc_cur_check(args->mp, cur->bc_btnum, bno, len, diff, in xfs_alloc_cur_check()
928 struct xfs_alloc_arg *args, in xfs_alloc_cur_finish() argument
931 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_cur_finish()
944 args->agbno = acur->bno; in xfs_alloc_cur_finish()
945 args->len = acur->len; in xfs_alloc_cur_finish()
946 args->wasfromfl = 0; in xfs_alloc_cur_finish()
948 trace_xfs_alloc_cur(args); in xfs_alloc_cur_finish()
958 struct xfs_alloc_arg *args, in xfs_alloc_cntbt_iter() argument
972 error = xfs_alloc_lookup_ge(cur, args->agbno, cur_len, &i); in xfs_alloc_cntbt_iter()
982 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_cntbt_iter()
995 if (bno > args->agbno) { in xfs_alloc_cntbt_iter()
1000 error = xfs_alloc_cur_check(args, acur, cur, in xfs_alloc_cntbt_iter()
1029 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
1035 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_small()
1055 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_small()
1062 if (args->minlen != 1 || args->alignment != 1 || in xfs_alloc_ag_vextent_small()
1063 args->resv == XFS_AG_RESV_AGFL || in xfs_alloc_ag_vextent_small()
1064 be32_to_cpu(agf->agf_flcount) <= args->minleft) in xfs_alloc_ag_vextent_small()
1067 error = xfs_alloc_get_freelist(args->pag, args->tp, args->agbp, in xfs_alloc_ag_vextent_small()
1074 xfs_extent_busy_reuse(args->mp, args->pag, fbno, 1, in xfs_alloc_ag_vextent_small()
1075 (args->datatype & XFS_ALLOC_NOBUSY)); in xfs_alloc_ag_vextent_small()
1077 if (args->datatype & XFS_ALLOC_USERDATA) { in xfs_alloc_ag_vextent_small()
1080 error = xfs_trans_get_buf(args->tp, args->mp->m_ddev_targp, in xfs_alloc_ag_vextent_small()
1081 XFS_AGB_TO_DADDR(args->mp, args->agno, fbno), in xfs_alloc_ag_vextent_small()
1082 args->mp->m_bsize, 0, &bp); in xfs_alloc_ag_vextent_small()
1085 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
1087 *fbnop = args->agbno = fbno; in xfs_alloc_ag_vextent_small()
1088 *flenp = args->len = 1; in xfs_alloc_ag_vextent_small()
1089 if (XFS_IS_CORRUPT(args->mp, fbno >= be32_to_cpu(agf->agf_length))) { in xfs_alloc_ag_vextent_small()
1093 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
1094 trace_xfs_alloc_small_freelist(args); in xfs_alloc_ag_vextent_small()
1100 error = xfs_rmap_free(args->tp, args->agbp, args->pag, fbno, 1, in xfs_alloc_ag_vextent_small()
1112 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
1113 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
1114 trace_xfs_alloc_small_notenough(args); in xfs_alloc_ag_vextent_small()
1120 trace_xfs_alloc_small_done(args); in xfs_alloc_ag_vextent_small()
1124 trace_xfs_alloc_small_error(args); in xfs_alloc_ag_vextent_small()
1136 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
1138 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_exact()
1150 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
1155 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1156 args->pag, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_exact()
1163 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); in xfs_alloc_ag_vextent_exact()
1175 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_exact()
1179 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
1186 xfs_extent_busy_trim(args, &tbno, &tlen, &busy_gen); in xfs_alloc_ag_vextent_exact()
1192 if (tbno > args->agbno) in xfs_alloc_ag_vextent_exact()
1194 if (tlen < args->minlen) in xfs_alloc_ag_vextent_exact()
1197 if (tend < args->agbno + args->minlen) in xfs_alloc_ag_vextent_exact()
1206 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) in xfs_alloc_ag_vextent_exact()
1207 - args->agbno; in xfs_alloc_ag_vextent_exact()
1208 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
1209 ASSERT(args->agbno + args->len <= tend); in xfs_alloc_ag_vextent_exact()
1215 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1216 args->pag, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_exact()
1217 ASSERT(args->agbno + args->len <= be32_to_cpu(agf->agf_length)); in xfs_alloc_ag_vextent_exact()
1218 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, in xfs_alloc_ag_vextent_exact()
1219 args->len, XFSA_FIXUP_BNO_OK); in xfs_alloc_ag_vextent_exact()
1228 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
1229 trace_xfs_alloc_exact_done(args); in xfs_alloc_ag_vextent_exact()
1235 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
1236 trace_xfs_alloc_exact_notfound(args); in xfs_alloc_ag_vextent_exact()
1241 trace_xfs_alloc_exact_error(args); in xfs_alloc_ag_vextent_exact()
1251 struct xfs_alloc_arg *args, in xfs_alloc_walk_iter() argument
1270 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_walk_iter()
1303 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_locality() argument
1316 error = xfs_alloc_lookup_ge(acur->cnt, args->agbno, acur->cur_len, &i); in xfs_alloc_ag_vextent_locality()
1319 error = xfs_alloc_lookup_le(acur->bnolt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1322 error = xfs_alloc_lookup_ge(acur->bnogt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1352 trace_xfs_alloc_cur_lookup(args); in xfs_alloc_ag_vextent_locality()
1358 error = xfs_alloc_walk_iter(args, acur, acur->bnolt, false, in xfs_alloc_ag_vextent_locality()
1363 trace_xfs_alloc_cur_left(args); in xfs_alloc_ag_vextent_locality()
1368 error = xfs_alloc_walk_iter(args, acur, acur->bnogt, true, true, in xfs_alloc_ag_vextent_locality()
1373 trace_xfs_alloc_cur_right(args); in xfs_alloc_ag_vextent_locality()
1383 error = xfs_alloc_cntbt_iter(args, acur); in xfs_alloc_ag_vextent_locality()
1387 trace_xfs_alloc_cur_lookup_done(args); in xfs_alloc_ag_vextent_locality()
1413 error = xfs_alloc_walk_iter(args, acur, fbcur, fbinc, true, -1, in xfs_alloc_ag_vextent_locality()
1428 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_lastblock() argument
1449 if (*len || args->alignment > 1) { in xfs_alloc_ag_vextent_lastblock()
1455 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_ag_vextent_lastblock()
1457 if (*len >= args->minlen) in xfs_alloc_ag_vextent_lastblock()
1463 ASSERT(*len >= args->minlen); in xfs_alloc_ag_vextent_lastblock()
1468 error = xfs_alloc_walk_iter(args, acur, acur->cnt, true, false, -1, &i); in xfs_alloc_ag_vextent_lastblock()
1479 trace_xfs_alloc_near_first(args); in xfs_alloc_ag_vextent_lastblock()
1492 struct xfs_alloc_arg *args) in xfs_alloc_ag_vextent_near() argument
1501 if (!args->min_agbno && !args->max_agbno) in xfs_alloc_ag_vextent_near()
1502 args->max_agbno = args->mp->m_sb.sb_agblocks - 1; in xfs_alloc_ag_vextent_near()
1503 ASSERT(args->min_agbno <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1506 if (args->agbno < args->min_agbno) in xfs_alloc_ag_vextent_near()
1507 args->agbno = args->min_agbno; in xfs_alloc_ag_vextent_near()
1508 if (args->agbno > args->max_agbno) in xfs_alloc_ag_vextent_near()
1509 args->agbno = args->max_agbno; in xfs_alloc_ag_vextent_near()
1519 error = xfs_alloc_cur_setup(args, &acur); in xfs_alloc_ag_vextent_near()
1521 error = xfs_alloc_ag_vextent_small(args, acur.cnt, &bno, in xfs_alloc_ag_vextent_near()
1526 trace_xfs_alloc_near_noentry(args); in xfs_alloc_ag_vextent_near()
1545 error = xfs_alloc_ag_vextent_lastblock(args, &acur, &bno, &len, in xfs_alloc_ag_vextent_near()
1557 error = xfs_alloc_ag_vextent_locality(args, &acur, &i); in xfs_alloc_ag_vextent_near()
1566 trace_xfs_alloc_near_busy(args); in xfs_alloc_ag_vextent_near()
1567 xfs_extent_busy_flush(args->mp, args->pag, in xfs_alloc_ag_vextent_near()
1571 trace_xfs_alloc_size_neither(args); in xfs_alloc_ag_vextent_near()
1572 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1578 error = xfs_alloc_cur_finish(args, &acur); in xfs_alloc_ag_vextent_near()
1593 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_size() argument
1595 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_size()
1611 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1612 args->pag, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_size()
1619 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1630 error = xfs_alloc_ag_vextent_small(args, cnt_cur, in xfs_alloc_ag_vextent_size()
1636 trace_xfs_alloc_size_noentry(args); in xfs_alloc_ag_vextent_size()
1640 busy = xfs_alloc_compute_aligned(args, fbno, flen, &rbno, in xfs_alloc_ag_vextent_size()
1650 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1655 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1658 if (rlen >= args->maxlen) in xfs_alloc_ag_vextent_size()
1672 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1673 xfs_extent_busy_flush(args->mp, in xfs_alloc_ag_vextent_size()
1674 args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1686 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1687 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1694 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1712 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1718 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1720 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1721 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1733 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1740 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1749 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1753 args->len = rlen; in xfs_alloc_ag_vextent_size()
1754 if (rlen < args->minlen) { in xfs_alloc_ag_vextent_size()
1757 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1758 xfs_extent_busy_flush(args->mp, args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1763 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1765 rlen = args->len; in xfs_alloc_ag_vextent_size()
1766 if (XFS_IS_CORRUPT(args->mp, rlen > flen)) { in xfs_alloc_ag_vextent_size()
1773 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1774 args->pag, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_size()
1781 args->len = rlen; in xfs_alloc_ag_vextent_size()
1782 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1783 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1784 args->agbno + args->len > in xfs_alloc_ag_vextent_size()
1789 trace_xfs_alloc_size_done(args); in xfs_alloc_ag_vextent_size()
1793 trace_xfs_alloc_size_error(args); in xfs_alloc_ag_vextent_size()
1802 trace_xfs_alloc_size_nominleft(args); in xfs_alloc_ag_vextent_size()
1803 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
2218 struct xfs_alloc_arg *args, in xfs_alloc_space_available() argument
2222 struct xfs_perag *pag = args->pag; in xfs_alloc_space_available()
2231 reservation = xfs_ag_resv_needed(pag, args->resv); in xfs_alloc_space_available()
2234 alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop; in xfs_alloc_space_available()
2246 reservation - min_free - args->minleft); in xfs_alloc_space_available()
2247 if (available < (int)max(args->total, alloc_len)) in xfs_alloc_space_available()
2254 if (available < (int)args->maxlen && !(flags & XFS_ALLOC_FLAG_CHECK)) { in xfs_alloc_space_available()
2255 args->maxlen = available; in xfs_alloc_space_available()
2256 ASSERT(args->maxlen > 0); in xfs_alloc_space_available()
2257 ASSERT(args->maxlen >= args->minlen); in xfs_alloc_space_available()
2472 struct xfs_alloc_arg *args, in xfs_exact_minlen_extent_available() argument
2481 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, agbp, in xfs_exact_minlen_extent_available()
2482 args->pag, XFS_BTNUM_CNT); in xfs_exact_minlen_extent_available()
2483 error = xfs_alloc_lookup_ge(cnt_cur, 0, args->minlen, stat); in xfs_exact_minlen_extent_available()
2496 if (*stat == 1 && flen != args->minlen) in xfs_exact_minlen_extent_available()
2512 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
2515 struct xfs_mount *mp = args->mp; in xfs_alloc_fix_freelist()
2516 struct xfs_perag *pag = args->pag; in xfs_alloc_fix_freelist()
2517 struct xfs_trans *tp = args->tp; in xfs_alloc_fix_freelist()
2544 (args->datatype & XFS_ALLOC_USERDATA) && in xfs_alloc_fix_freelist()
2551 if (!xfs_alloc_space_available(args, need, flags | in xfs_alloc_fix_freelist()
2575 if (!xfs_alloc_space_available(args, need, flags)) in xfs_alloc_fix_freelist()
2579 if (args->alloc_minlen_only) { in xfs_alloc_fix_freelist()
2582 error = xfs_exact_minlen_extent_available(args, agbp, &stat); in xfs_alloc_fix_freelist()
2623 xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo); in xfs_alloc_fix_freelist()
2629 targs.agno = args->agno; in xfs_alloc_fix_freelist()
2680 args->agbp = agbp; in xfs_alloc_fix_freelist()
2689 args->agbp = NULL; in xfs_alloc_fix_freelist()
3091 struct xfs_alloc_arg *args, in xfs_alloc_vextent_check_args() argument
3095 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_check_args()
3098 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent_check_args()
3101 if (args->tp->t_highest_agno != NULLAGNUMBER) in xfs_alloc_vextent_check_args()
3102 *minimum_agno = args->tp->t_highest_agno; in xfs_alloc_vextent_check_args()
3110 if (args->maxlen > agsize) in xfs_alloc_vextent_check_args()
3111 args->maxlen = agsize; in xfs_alloc_vextent_check_args()
3112 if (args->alignment == 0) in xfs_alloc_vextent_check_args()
3113 args->alignment = 1; in xfs_alloc_vextent_check_args()
3115 ASSERT(args->minlen > 0); in xfs_alloc_vextent_check_args()
3116 ASSERT(args->maxlen > 0); in xfs_alloc_vextent_check_args()
3117 ASSERT(args->alignment > 0); in xfs_alloc_vextent_check_args()
3118 ASSERT(args->resv != XFS_AG_RESV_AGFL); in xfs_alloc_vextent_check_args()
3122 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent_check_args()
3123 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent_check_args()
3124 ASSERT(args->mod < args->prod); in xfs_alloc_vextent_check_args()
3128 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent_check_args()
3129 args->mod >= args->prod) { in xfs_alloc_vextent_check_args()
3130 trace_xfs_alloc_vextent_badargs(args); in xfs_alloc_vextent_check_args()
3134 if (args->agno != NULLAGNUMBER && *minimum_agno > args->agno) { in xfs_alloc_vextent_check_args()
3135 trace_xfs_alloc_vextent_skip_deadlock(args); in xfs_alloc_vextent_check_args()
3151 struct xfs_alloc_arg *args) in xfs_alloc_vextent_prepare_ag() argument
3153 bool need_pag = !args->pag; in xfs_alloc_vextent_prepare_ag()
3157 args->pag = xfs_perag_get(args->mp, args->agno); in xfs_alloc_vextent_prepare_ag()
3159 args->agbp = NULL; in xfs_alloc_vextent_prepare_ag()
3160 error = xfs_alloc_fix_freelist(args, 0); in xfs_alloc_vextent_prepare_ag()
3162 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent_prepare_ag()
3164 xfs_perag_put(args->pag); in xfs_alloc_vextent_prepare_ag()
3165 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent_prepare_ag()
3168 if (!args->agbp) { in xfs_alloc_vextent_prepare_ag()
3170 trace_xfs_alloc_vextent_noagbp(args); in xfs_alloc_vextent_prepare_ag()
3171 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent_prepare_ag()
3174 args->wasfromfl = 0; in xfs_alloc_vextent_prepare_ag()
3187 struct xfs_alloc_arg *args, in xfs_alloc_vextent_finish() argument
3192 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_finish()
3211 if (args->agbp && in xfs_alloc_vextent_finish()
3212 (args->tp->t_highest_agno == NULLAGNUMBER || in xfs_alloc_vextent_finish()
3213 args->agno > minimum_agno)) in xfs_alloc_vextent_finish()
3214 args->tp->t_highest_agno = args->agno; in xfs_alloc_vextent_finish()
3222 if (alloc_error || args->agbno == NULLAGBLOCK) { in xfs_alloc_vextent_finish()
3223 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent_finish()
3228 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent_finish()
3230 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent_finish()
3231 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent_finish()
3232 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent_finish()
3233 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), args->len); in xfs_alloc_vextent_finish()
3236 if (!xfs_rmap_should_skip_owner_update(&args->oinfo)) { in xfs_alloc_vextent_finish()
3237 error = xfs_rmap_alloc(args->tp, args->agbp, args->pag, in xfs_alloc_vextent_finish()
3238 args->agbno, args->len, &args->oinfo); in xfs_alloc_vextent_finish()
3243 if (!args->wasfromfl) { in xfs_alloc_vextent_finish()
3244 error = xfs_alloc_update_counters(args->tp, args->agbp, in xfs_alloc_vextent_finish()
3245 -((long)(args->len))); in xfs_alloc_vextent_finish()
3249 ASSERT(!xfs_extent_busy_search(mp, args->pag, args->agbno, in xfs_alloc_vextent_finish()
3250 args->len)); in xfs_alloc_vextent_finish()
3253 xfs_ag_resv_alloc_extent(args->pag, args->resv, args); in xfs_alloc_vextent_finish()
3256 XFS_STATS_ADD(mp, xs_allocb, args->len); in xfs_alloc_vextent_finish()
3259 if (drop_perag && args->pag) { in xfs_alloc_vextent_finish()
3260 xfs_perag_rele(args->pag); in xfs_alloc_vextent_finish()
3261 args->pag = NULL; in xfs_alloc_vextent_finish()
3275 struct xfs_alloc_arg *args, in xfs_alloc_vextent_this_ag() argument
3278 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_this_ag()
3282 args->agno = agno; in xfs_alloc_vextent_this_ag()
3283 args->agbno = 0; in xfs_alloc_vextent_this_ag()
3284 error = xfs_alloc_vextent_check_args(args, XFS_AGB_TO_FSB(mp, agno, 0), in xfs_alloc_vextent_this_ag()
3292 error = xfs_alloc_vextent_prepare_ag(args); in xfs_alloc_vextent_this_ag()
3293 if (!error && args->agbp) in xfs_alloc_vextent_this_ag()
3294 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_vextent_this_ag()
3296 return xfs_alloc_vextent_finish(args, minimum_agno, error, false); in xfs_alloc_vextent_this_ag()
3319 struct xfs_alloc_arg *args, in xfs_alloc_vextent_iterate_ags() argument
3325 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_iterate_ags()
3331 mp->m_sb.sb_agcount, agno, args->pag) { in xfs_alloc_vextent_iterate_ags()
3332 args->agno = agno; in xfs_alloc_vextent_iterate_ags()
3333 error = xfs_alloc_vextent_prepare_ag(args); in xfs_alloc_vextent_iterate_ags()
3336 if (!args->agbp) { in xfs_alloc_vextent_iterate_ags()
3337 trace_xfs_alloc_vextent_loopfailed(args); in xfs_alloc_vextent_iterate_ags()
3345 if (args->agno == start_agno && target_agbno) { in xfs_alloc_vextent_iterate_ags()
3346 args->agbno = target_agbno; in xfs_alloc_vextent_iterate_ags()
3347 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_vextent_iterate_ags()
3349 args->agbno = 0; in xfs_alloc_vextent_iterate_ags()
3350 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_vextent_iterate_ags()
3355 xfs_perag_rele(args->pag); in xfs_alloc_vextent_iterate_ags()
3356 args->pag = NULL; in xfs_alloc_vextent_iterate_ags()
3359 if (args->agbp) in xfs_alloc_vextent_iterate_ags()
3372 ASSERT(args->pag == NULL); in xfs_alloc_vextent_iterate_ags()
3373 trace_xfs_alloc_vextent_allfailed(args); in xfs_alloc_vextent_iterate_ags()
3387 struct xfs_alloc_arg *args, in xfs_alloc_vextent_start_ag() argument
3390 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_start_ag()
3397 args->agno = NULLAGNUMBER; in xfs_alloc_vextent_start_ag()
3398 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent_start_ag()
3399 error = xfs_alloc_vextent_check_args(args, target, &minimum_agno); in xfs_alloc_vextent_start_ag()
3406 if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent_start_ag()
3415 error = xfs_alloc_vextent_iterate_ags(args, minimum_agno, start_agno, in xfs_alloc_vextent_start_ag()
3419 if (args->agno == start_agno) in xfs_alloc_vextent_start_ag()
3423 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent_start_ag()
3427 return xfs_alloc_vextent_finish(args, minimum_agno, error, true); in xfs_alloc_vextent_start_ag()
3437 struct xfs_alloc_arg *args, in xfs_alloc_vextent_first_ag() argument
3440 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_first_ag()
3445 args->agno = NULLAGNUMBER; in xfs_alloc_vextent_first_ag()
3446 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent_first_ag()
3447 error = xfs_alloc_vextent_check_args(args, target, &minimum_agno); in xfs_alloc_vextent_first_ag()
3455 error = xfs_alloc_vextent_iterate_ags(args, minimum_agno, start_agno, in xfs_alloc_vextent_first_ag()
3457 return xfs_alloc_vextent_finish(args, minimum_agno, error, true); in xfs_alloc_vextent_first_ag()
3466 struct xfs_alloc_arg *args, in xfs_alloc_vextent_exact_bno() argument
3469 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_exact_bno()
3473 args->agno = XFS_FSB_TO_AGNO(mp, target); in xfs_alloc_vextent_exact_bno()
3474 args->agbno = XFS_FSB_TO_AGBNO(mp, target); in xfs_alloc_vextent_exact_bno()
3475 error = xfs_alloc_vextent_check_args(args, target, &minimum_agno); in xfs_alloc_vextent_exact_bno()
3482 error = xfs_alloc_vextent_prepare_ag(args); in xfs_alloc_vextent_exact_bno()
3483 if (!error && args->agbp) in xfs_alloc_vextent_exact_bno()
3484 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_vextent_exact_bno()
3486 return xfs_alloc_vextent_finish(args, minimum_agno, error, false); in xfs_alloc_vextent_exact_bno()
3497 struct xfs_alloc_arg *args, in xfs_alloc_vextent_near_bno() argument
3500 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_near_bno()
3502 bool needs_perag = args->pag == NULL; in xfs_alloc_vextent_near_bno()
3505 args->agno = XFS_FSB_TO_AGNO(mp, target); in xfs_alloc_vextent_near_bno()
3506 args->agbno = XFS_FSB_TO_AGBNO(mp, target); in xfs_alloc_vextent_near_bno()
3507 error = xfs_alloc_vextent_check_args(args, target, &minimum_agno); in xfs_alloc_vextent_near_bno()
3515 args->pag = xfs_perag_grab(mp, args->agno); in xfs_alloc_vextent_near_bno()
3517 error = xfs_alloc_vextent_prepare_ag(args); in xfs_alloc_vextent_near_bno()
3518 if (!error && args->agbp) in xfs_alloc_vextent_near_bno()
3519 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_vextent_near_bno()
3521 return xfs_alloc_vextent_finish(args, minimum_agno, error, needs_perag); in xfs_alloc_vextent_near_bno()
3531 struct xfs_alloc_arg args; in xfs_free_extent_fix_freelist() local
3534 memset(&args, 0, sizeof(struct xfs_alloc_arg)); in xfs_free_extent_fix_freelist()
3535 args.tp = tp; in xfs_free_extent_fix_freelist()
3536 args.mp = tp->t_mountp; in xfs_free_extent_fix_freelist()
3537 args.agno = pag->pag_agno; in xfs_free_extent_fix_freelist()
3538 args.pag = pag; in xfs_free_extent_fix_freelist()
3544 if (args.agno >= args.mp->m_sb.sb_agcount) in xfs_free_extent_fix_freelist()
3547 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); in xfs_free_extent_fix_freelist()
3551 *agbp = args.agbp; in xfs_free_extent_fix_freelist()