Lines Matching refs:args
258 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_compute_aligned() argument
271 busy = xfs_extent_busy_trim(args, &bno, &len, busy_gen); in xfs_alloc_compute_aligned()
277 if (bno < args->min_agbno && bno + len > args->min_agbno) { in xfs_alloc_compute_aligned()
278 diff = args->min_agbno - bno; in xfs_alloc_compute_aligned()
285 if (args->alignment > 1 && len >= args->minlen) { in xfs_alloc_compute_aligned()
286 xfs_agblock_t aligned_bno = roundup(bno, args->alignment); in xfs_alloc_compute_aligned()
377 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_len() argument
382 ASSERT(args->mod < args->prod); in xfs_alloc_fix_len()
383 rlen = args->len; in xfs_alloc_fix_len()
384 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
385 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
386 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || in xfs_alloc_fix_len()
387 (args->mod == 0 && rlen < args->prod)) in xfs_alloc_fix_len()
389 k = rlen % args->prod; in xfs_alloc_fix_len()
390 if (k == args->mod) in xfs_alloc_fix_len()
392 if (k > args->mod) in xfs_alloc_fix_len()
393 rlen = rlen - (k - args->mod); in xfs_alloc_fix_len()
395 rlen = rlen - args->prod + (args->mod - k); in xfs_alloc_fix_len()
397 if ((int)rlen < (int)args->minlen) in xfs_alloc_fix_len()
399 ASSERT(rlen >= args->minlen && rlen <= args->maxlen); in xfs_alloc_fix_len()
400 ASSERT(rlen % args->prod == args->mod); in xfs_alloc_fix_len()
401 ASSERT(args->pag->pagf_freeblks + args->pag->pagf_flcount >= in xfs_alloc_fix_len()
402 rlen + args->minleft); in xfs_alloc_fix_len()
403 args->len = rlen; in xfs_alloc_fix_len()
711 xfs_alloc_arg_t *args) /* argument structure for allocation */ in xfs_alloc_ag_vextent() argument
715 ASSERT(args->minlen > 0); in xfs_alloc_ag_vextent()
716 ASSERT(args->maxlen > 0); in xfs_alloc_ag_vextent()
717 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_ag_vextent()
718 ASSERT(args->mod < args->prod); in xfs_alloc_ag_vextent()
719 ASSERT(args->alignment > 0); in xfs_alloc_ag_vextent()
724 args->wasfromfl = 0; in xfs_alloc_ag_vextent()
725 switch (args->type) { in xfs_alloc_ag_vextent()
727 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_ag_vextent()
730 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_ag_vextent()
733 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_ag_vextent()
740 if (error || args->agbno == NULLAGBLOCK) in xfs_alloc_ag_vextent()
743 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent()
744 ASSERT(args->len <= args->maxlen); in xfs_alloc_ag_vextent()
745 ASSERT(!args->wasfromfl || args->resv != XFS_AG_RESV_AGFL); in xfs_alloc_ag_vextent()
746 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_ag_vextent()
749 if (!xfs_rmap_should_skip_owner_update(&args->oinfo)) { in xfs_alloc_ag_vextent()
750 error = xfs_rmap_alloc(args->tp, args->agbp, args->agno, in xfs_alloc_ag_vextent()
751 args->agbno, args->len, &args->oinfo); in xfs_alloc_ag_vextent()
756 if (!args->wasfromfl) { in xfs_alloc_ag_vextent()
757 error = xfs_alloc_update_counters(args->tp, args->pag, in xfs_alloc_ag_vextent()
758 args->agbp, in xfs_alloc_ag_vextent()
759 -((long)(args->len))); in xfs_alloc_ag_vextent()
763 ASSERT(!xfs_extent_busy_search(args->mp, args->agno, in xfs_alloc_ag_vextent()
764 args->agbno, args->len)); in xfs_alloc_ag_vextent()
767 xfs_ag_resv_alloc_extent(args->pag, args->resv, args); in xfs_alloc_ag_vextent()
769 XFS_STATS_INC(args->mp, xs_allocx); in xfs_alloc_ag_vextent()
770 XFS_STATS_ADD(args->mp, xs_allocb, args->len); in xfs_alloc_ag_vextent()
782 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
795 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
800 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
801 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_exact()
808 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); in xfs_alloc_ag_vextent_exact()
820 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_exact()
821 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
828 xfs_extent_busy_trim(args, &tbno, &tlen, &busy_gen); in xfs_alloc_ag_vextent_exact()
834 if (tbno > args->agbno) in xfs_alloc_ag_vextent_exact()
836 if (tlen < args->minlen) in xfs_alloc_ag_vextent_exact()
839 if (tend < args->agbno + args->minlen) in xfs_alloc_ag_vextent_exact()
848 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) in xfs_alloc_ag_vextent_exact()
849 - args->agbno; in xfs_alloc_ag_vextent_exact()
850 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
851 ASSERT(args->agbno + args->len <= tend); in xfs_alloc_ag_vextent_exact()
857 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
858 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_exact()
859 ASSERT(args->agbno + args->len <= in xfs_alloc_ag_vextent_exact()
860 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_exact()
861 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, in xfs_alloc_ag_vextent_exact()
862 args->len, XFSA_FIXUP_BNO_OK); in xfs_alloc_ag_vextent_exact()
871 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
872 trace_xfs_alloc_exact_done(args); in xfs_alloc_ag_vextent_exact()
878 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
879 trace_xfs_alloc_exact_notfound(args); in xfs_alloc_ag_vextent_exact()
884 trace_xfs_alloc_exact_error(args); in xfs_alloc_ag_vextent_exact()
894 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_find_best_extent() argument
921 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_find_best_extent()
922 xfs_alloc_compute_aligned(args, *sbno, *slen, in xfs_alloc_find_best_extent()
929 if (*sbnoa > args->max_agbno) in xfs_alloc_find_best_extent()
931 if (*sbnoa >= args->agbno + gdiff) in xfs_alloc_find_best_extent()
934 if (*sbnoa < args->min_agbno) in xfs_alloc_find_best_extent()
936 if (*sbnoa <= args->agbno - gdiff) in xfs_alloc_find_best_extent()
943 if (*slena >= args->minlen) { in xfs_alloc_find_best_extent()
944 args->len = XFS_EXTLEN_MIN(*slena, args->maxlen); in xfs_alloc_find_best_extent()
945 xfs_alloc_fix_len(args); in xfs_alloc_find_best_extent()
947 sdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_find_best_extent()
948 args->alignment, in xfs_alloc_find_best_extent()
949 args->datatype, *sbnoa, in xfs_alloc_find_best_extent()
991 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_near() argument
1024 if (!args->min_agbno && !args->max_agbno) in xfs_alloc_ag_vextent_near()
1025 args->max_agbno = args->mp->m_sb.sb_agblocks - 1; in xfs_alloc_ag_vextent_near()
1026 ASSERT(args->min_agbno <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1029 if (args->agbno < args->min_agbno) in xfs_alloc_ag_vextent_near()
1030 args->agbno = args->min_agbno; in xfs_alloc_ag_vextent_near()
1031 if (args->agbno > args->max_agbno) in xfs_alloc_ag_vextent_near()
1032 args->agbno = args->max_agbno; in xfs_alloc_ag_vextent_near()
1045 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_near()
1046 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_near()
1051 if ((error = xfs_alloc_lookup_ge(cnt_cur, 0, args->maxlen, &i))) in xfs_alloc_ag_vextent_near()
1058 if ((error = xfs_alloc_ag_vextent_small(args, cnt_cur, <bno, in xfs_alloc_ag_vextent_near()
1063 trace_xfs_alloc_near_noentry(args); in xfs_alloc_ag_vextent_near()
1068 args->wasfromfl = 0; in xfs_alloc_ag_vextent_near()
1096 if (ltlen || args->alignment > 1) { in xfs_alloc_ag_vextent_near()
1102 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1103 if (ltlen >= args->minlen) in xfs_alloc_ag_vextent_near()
1108 ASSERT(ltlen >= args->minlen); in xfs_alloc_ag_vextent_near()
1114 !error && j && (blen < args->maxlen || bdiff > 0); in xfs_alloc_ag_vextent_near()
1122 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1123 busy = xfs_alloc_compute_aligned(args, ltbno, ltlen, in xfs_alloc_ag_vextent_near()
1125 if (ltlena < args->minlen) in xfs_alloc_ag_vextent_near()
1127 if (ltbnoa < args->min_agbno || ltbnoa > args->max_agbno) in xfs_alloc_ag_vextent_near()
1129 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1130 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1131 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent_near()
1132 if (args->len < blen) in xfs_alloc_ag_vextent_near()
1134 ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1135 args->alignment, args->datatype, ltbnoa, in xfs_alloc_ag_vextent_near()
1138 (args->len > blen || ltdiff < bdiff)) { in xfs_alloc_ag_vextent_near()
1141 blen = args->len; in xfs_alloc_ag_vextent_near()
1157 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1158 ASSERT(ltbno + ltlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_near()
1159 args->len = blen; in xfs_alloc_ag_vextent_near()
1164 args->agbno = bnew; in xfs_alloc_ag_vextent_near()
1170 bno_cur_lt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_ag_vextent_near()
1171 args->agbp, args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_near()
1181 trace_xfs_alloc_near_first(args); in xfs_alloc_ag_vextent_near()
1199 bno_cur_lt = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_near()
1200 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_near()
1204 if ((error = xfs_alloc_lookup_le(bno_cur_lt, args->agbno, args->maxlen, &i))) in xfs_alloc_ag_vextent_near()
1241 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1242 busy |= xfs_alloc_compute_aligned(args, ltbno, ltlen, in xfs_alloc_ag_vextent_near()
1244 if (ltlena >= args->minlen && ltbnoa >= args->min_agbno) in xfs_alloc_ag_vextent_near()
1248 if (!i || ltbnoa < args->min_agbno) { in xfs_alloc_ag_vextent_near()
1257 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1258 busy |= xfs_alloc_compute_aligned(args, gtbno, gtlen, in xfs_alloc_ag_vextent_near()
1260 if (gtlena >= args->minlen && gtbnoa <= args->max_agbno) in xfs_alloc_ag_vextent_near()
1264 if (!i || gtbnoa > args->max_agbno) { in xfs_alloc_ag_vextent_near()
1276 if (ltlena >= args->minlen) { in xfs_alloc_ag_vextent_near()
1280 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1281 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1282 ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1283 args->alignment, args->datatype, ltbnoa, in xfs_alloc_ag_vextent_near()
1286 error = xfs_alloc_find_best_extent(args, in xfs_alloc_ag_vextent_near()
1292 ASSERT(gtlena >= args->minlen); in xfs_alloc_ag_vextent_near()
1297 args->len = XFS_EXTLEN_MIN(gtlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1298 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1299 gtdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1300 args->alignment, args->datatype, gtbnoa, in xfs_alloc_ag_vextent_near()
1303 error = xfs_alloc_find_best_extent(args, in xfs_alloc_ag_vextent_near()
1321 trace_xfs_alloc_near_busy(args); in xfs_alloc_ag_vextent_near()
1322 xfs_extent_busy_flush(args->mp, args->pag, busy_gen); in xfs_alloc_ag_vextent_near()
1325 trace_xfs_alloc_size_neither(args); in xfs_alloc_ag_vextent_near()
1326 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1350 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1351 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1352 rlen = args->len; in xfs_alloc_ag_vextent_near()
1353 (void)xfs_alloc_compute_diff(args->agbno, rlen, args->alignment, in xfs_alloc_ag_vextent_near()
1354 args->datatype, ltbnoa, ltlena, <new); in xfs_alloc_ag_vextent_near()
1357 ASSERT(ltnew + rlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_near()
1358 ASSERT(ltnew >= args->min_agbno && ltnew <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1359 args->agbno = ltnew; in xfs_alloc_ag_vextent_near()
1366 trace_xfs_alloc_near_greater(args); in xfs_alloc_ag_vextent_near()
1368 trace_xfs_alloc_near_lesser(args); in xfs_alloc_ag_vextent_near()
1375 trace_xfs_alloc_near_error(args); in xfs_alloc_ag_vextent_near()
1393 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_size() argument
1410 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1411 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_size()
1419 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1430 error = xfs_alloc_ag_vextent_small(args, cnt_cur, in xfs_alloc_ag_vextent_size()
1436 trace_xfs_alloc_size_noentry(args); in xfs_alloc_ag_vextent_size()
1440 busy = xfs_alloc_compute_aligned(args, fbno, flen, &rbno, in xfs_alloc_ag_vextent_size()
1450 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1452 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1455 if (rlen >= args->maxlen) in xfs_alloc_ag_vextent_size()
1469 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1470 xfs_extent_busy_flush(args->mp, in xfs_alloc_ag_vextent_size()
1471 args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1483 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1484 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 || in xfs_alloc_ag_vextent_size()
1486 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1504 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1507 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1509 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1510 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 || in xfs_alloc_ag_vextent_size()
1518 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1525 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1531 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1535 args->len = rlen; in xfs_alloc_ag_vextent_size()
1536 if (rlen < args->minlen) { in xfs_alloc_ag_vextent_size()
1539 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1540 xfs_extent_busy_flush(args->mp, args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1545 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1547 rlen = args->len; in xfs_alloc_ag_vextent_size()
1548 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen <= flen, error0); in xfs_alloc_ag_vextent_size()
1552 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1553 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_size()
1560 args->len = rlen; in xfs_alloc_ag_vextent_size()
1561 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1562 XFS_WANT_CORRUPTED_GOTO(args->mp, in xfs_alloc_ag_vextent_size()
1563 args->agbno + args->len <= in xfs_alloc_ag_vextent_size()
1564 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), in xfs_alloc_ag_vextent_size()
1566 trace_xfs_alloc_size_done(args); in xfs_alloc_ag_vextent_size()
1570 trace_xfs_alloc_size_error(args); in xfs_alloc_ag_vextent_size()
1579 trace_xfs_alloc_size_nominleft(args); in xfs_alloc_ag_vextent_size()
1580 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
1591 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
1608 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_small()
1615 else if (args->minlen == 1 && args->alignment == 1 && in xfs_alloc_ag_vextent_small()
1616 args->resv != XFS_AG_RESV_AGFL && in xfs_alloc_ag_vextent_small()
1617 (be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_flcount) in xfs_alloc_ag_vextent_small()
1618 > args->minleft)) { in xfs_alloc_ag_vextent_small()
1619 error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0); in xfs_alloc_ag_vextent_small()
1623 xfs_extent_busy_reuse(args->mp, args->agno, fbno, 1, in xfs_alloc_ag_vextent_small()
1624 xfs_alloc_allow_busy_reuse(args->datatype)); in xfs_alloc_ag_vextent_small()
1626 if (xfs_alloc_is_userdata(args->datatype)) { in xfs_alloc_ag_vextent_small()
1629 bp = xfs_btree_get_bufs(args->mp, args->tp, in xfs_alloc_ag_vextent_small()
1630 args->agno, fbno, 0); in xfs_alloc_ag_vextent_small()
1635 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
1637 args->len = 1; in xfs_alloc_ag_vextent_small()
1638 args->agbno = fbno; in xfs_alloc_ag_vextent_small()
1639 XFS_WANT_CORRUPTED_GOTO(args->mp, in xfs_alloc_ag_vextent_small()
1640 args->agbno + args->len <= in xfs_alloc_ag_vextent_small()
1641 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), in xfs_alloc_ag_vextent_small()
1643 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
1644 trace_xfs_alloc_small_freelist(args); in xfs_alloc_ag_vextent_small()
1652 error = xfs_rmap_free(args->tp, args->agbp, args->agno, in xfs_alloc_ag_vextent_small()
1676 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
1677 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
1678 trace_xfs_alloc_small_notenough(args); in xfs_alloc_ag_vextent_small()
1684 trace_xfs_alloc_small_done(args); in xfs_alloc_ag_vextent_small()
1688 trace_xfs_alloc_small_error(args); in xfs_alloc_ag_vextent_small()
2038 struct xfs_alloc_arg *args, in xfs_alloc_space_available() argument
2042 struct xfs_perag *pag = args->pag; in xfs_alloc_space_available()
2050 reservation = xfs_ag_resv_needed(pag, args->resv); in xfs_alloc_space_available()
2053 alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop; in xfs_alloc_space_available()
2060 reservation - min_free - args->minleft); in xfs_alloc_space_available()
2061 if (available < (int)max(args->total, alloc_len)) in xfs_alloc_space_available()
2068 if (available < (int)args->maxlen && !(flags & XFS_ALLOC_FLAG_CHECK)) { in xfs_alloc_space_available()
2069 args->maxlen = available; in xfs_alloc_space_available()
2070 ASSERT(args->maxlen > 0); in xfs_alloc_space_available()
2071 ASSERT(args->maxlen >= args->minlen); in xfs_alloc_space_available()
2228 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
2231 struct xfs_mount *mp = args->mp; in xfs_alloc_fix_freelist()
2232 struct xfs_perag *pag = args->pag; in xfs_alloc_fix_freelist()
2233 struct xfs_trans *tp = args->tp; in xfs_alloc_fix_freelist()
2242 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
2257 if (pag->pagf_metadata && xfs_alloc_is_userdata(args->datatype) && in xfs_alloc_fix_freelist()
2264 if (!xfs_alloc_space_available(args, need, flags | in xfs_alloc_fix_freelist()
2273 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
2289 if (!xfs_alloc_space_available(args, need, flags)) in xfs_alloc_fix_freelist()
2327 xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo); in xfs_alloc_fix_freelist()
2333 targs.agno = args->agno; in xfs_alloc_fix_freelist()
2373 args->agbp = agbp; in xfs_alloc_fix_freelist()
2382 args->agbp = NULL; in xfs_alloc_fix_freelist()
2792 struct xfs_alloc_arg *args) /* allocation argument structure */ in xfs_alloc_vextent() argument
2803 mp = args->mp; in xfs_alloc_vextent()
2804 type = args->otype = args->type; in xfs_alloc_vextent()
2805 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
2812 if (args->maxlen > agsize) in xfs_alloc_vextent()
2813 args->maxlen = agsize; in xfs_alloc_vextent()
2814 if (args->alignment == 0) in xfs_alloc_vextent()
2815 args->alignment = 1; in xfs_alloc_vextent()
2816 ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount); in xfs_alloc_vextent()
2817 ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize); in xfs_alloc_vextent()
2818 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent()
2819 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent()
2820 ASSERT(args->mod < args->prod); in xfs_alloc_vextent()
2821 if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount || in xfs_alloc_vextent()
2822 XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize || in xfs_alloc_vextent()
2823 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent()
2824 args->mod >= args->prod) { in xfs_alloc_vextent()
2825 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
2826 trace_xfs_alloc_vextent_badargs(args); in xfs_alloc_vextent()
2837 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2838 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
2839 error = xfs_alloc_fix_freelist(args, 0); in xfs_alloc_vextent()
2841 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
2844 if (!args->agbp) { in xfs_alloc_vextent()
2845 trace_xfs_alloc_vextent_noagbp(args); in xfs_alloc_vextent()
2848 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
2849 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
2857 if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent()
2859 args->fsbno = XFS_AGB_TO_FSB(mp, in xfs_alloc_vextent()
2864 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
2865 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
2875 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2876 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2883 args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2891 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
2892 error = xfs_alloc_fix_freelist(args, flags); in xfs_alloc_vextent()
2894 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
2900 if (args->agbp) { in xfs_alloc_vextent()
2901 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
2906 trace_xfs_alloc_vextent_loopfailed(args); in xfs_alloc_vextent()
2911 if (args->agno == sagno && in xfs_alloc_vextent()
2913 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2921 if (++(args->agno) == mp->m_sb.sb_agcount) { in xfs_alloc_vextent()
2922 if (args->tp->t_firstblock != NULLFSBLOCK) in xfs_alloc_vextent()
2923 args->agno = sagno; in xfs_alloc_vextent()
2925 args->agno = 0; in xfs_alloc_vextent()
2931 if (args->agno == sagno) { in xfs_alloc_vextent()
2933 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
2934 trace_xfs_alloc_vextent_allfailed(args); in xfs_alloc_vextent()
2940 args->agbno = XFS_FSB_TO_AGBNO(mp, in xfs_alloc_vextent()
2941 args->fsbno); in xfs_alloc_vextent()
2942 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
2945 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2948 if (args->agno == sagno) in xfs_alloc_vextent()
2952 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent()
2960 if (args->agbno == NULLAGBLOCK) in xfs_alloc_vextent()
2961 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
2963 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent()
2965 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent()
2966 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent()
2967 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent()
2968 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), in xfs_alloc_vextent()
2969 args->len); in xfs_alloc_vextent()
2973 if (args->datatype & XFS_ALLOC_USERDATA_ZERO) { in xfs_alloc_vextent()
2974 error = xfs_zero_extent(args->ip, args->fsbno, args->len); in xfs_alloc_vextent()
2980 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2983 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2994 struct xfs_alloc_arg args; in xfs_free_extent_fix_freelist() local
2997 memset(&args, 0, sizeof(struct xfs_alloc_arg)); in xfs_free_extent_fix_freelist()
2998 args.tp = tp; in xfs_free_extent_fix_freelist()
2999 args.mp = tp->t_mountp; in xfs_free_extent_fix_freelist()
3000 args.agno = agno; in xfs_free_extent_fix_freelist()
3006 if (args.agno >= args.mp->m_sb.sb_agcount) in xfs_free_extent_fix_freelist()
3009 args.pag = xfs_perag_get(args.mp, args.agno); in xfs_free_extent_fix_freelist()
3010 ASSERT(args.pag); in xfs_free_extent_fix_freelist()
3012 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); in xfs_free_extent_fix_freelist()
3016 *agbp = args.agbp; in xfs_free_extent_fix_freelist()
3018 xfs_perag_put(args.pag); in xfs_free_extent_fix_freelist()