Lines Matching full:args
272 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_compute_aligned() argument
285 busy = xfs_extent_busy_trim(args, &bno, &len, busy_gen); in xfs_alloc_compute_aligned()
291 if (bno < args->min_agbno && bno + len > args->min_agbno) { in xfs_alloc_compute_aligned()
292 diff = args->min_agbno - bno; in xfs_alloc_compute_aligned()
299 if (args->alignment > 1 && len >= args->minlen) { in xfs_alloc_compute_aligned()
300 xfs_agblock_t aligned_bno = roundup(bno, args->alignment); in xfs_alloc_compute_aligned()
391 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_len() argument
396 ASSERT(args->mod < args->prod); in xfs_alloc_fix_len()
397 rlen = args->len; in xfs_alloc_fix_len()
398 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
399 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
400 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || in xfs_alloc_fix_len()
401 (args->mod == 0 && rlen < args->prod)) in xfs_alloc_fix_len()
403 k = rlen % args->prod; in xfs_alloc_fix_len()
404 if (k == args->mod) in xfs_alloc_fix_len()
406 if (k > args->mod) in xfs_alloc_fix_len()
407 rlen = rlen - (k - args->mod); in xfs_alloc_fix_len()
409 rlen = rlen - args->prod + (args->mod - k); in xfs_alloc_fix_len()
411 if ((int)rlen < (int)args->minlen) in xfs_alloc_fix_len()
413 ASSERT(rlen >= args->minlen && rlen <= args->maxlen); in xfs_alloc_fix_len()
414 ASSERT(rlen % args->prod == args->mod); in xfs_alloc_fix_len()
415 ASSERT(args->pag->pagf_freeblks + args->pag->pagf_flcount >= in xfs_alloc_fix_len()
416 rlen + args->minleft); in xfs_alloc_fix_len()
417 args->len = rlen; in xfs_alloc_fix_len()
755 struct xfs_alloc_arg *args, in xfs_alloc_cur_setup() argument
761 ASSERT(args->alignment == 1 || args->type != XFS_ALLOCTYPE_THIS_BNO); in xfs_alloc_cur_setup()
763 acur->cur_len = args->maxlen; in xfs_alloc_cur_setup()
778 acur->cnt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
779 args->agbp, args->pag, XFS_BTNUM_CNT); in xfs_alloc_cur_setup()
780 error = xfs_alloc_lookup_ge(acur->cnt, 0, args->maxlen, &i); in xfs_alloc_cur_setup()
788 acur->bnolt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
789 args->agbp, args->pag, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
791 acur->bnogt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
792 args->agbp, args->pag, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
823 struct xfs_alloc_arg *args, in xfs_alloc_cur_check() argument
841 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_cur_check()
848 if (len < args->minlen) { in xfs_alloc_cur_check()
853 busy = xfs_alloc_compute_aligned(args, bno, len, &bnoa, &lena, in xfs_alloc_cur_check()
859 if (bnoa < args->min_agbno || bnoa > args->max_agbno) { in xfs_alloc_cur_check()
863 if (lena < args->minlen) in xfs_alloc_cur_check()
866 args->len = XFS_EXTLEN_MIN(lena, args->maxlen); in xfs_alloc_cur_check()
867 xfs_alloc_fix_len(args); in xfs_alloc_cur_check()
868 ASSERT(args->len >= args->minlen); in xfs_alloc_cur_check()
869 if (args->len < acur->len) in xfs_alloc_cur_check()
876 ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO); in xfs_alloc_cur_check()
877 diff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_cur_check()
878 args->alignment, args->datatype, in xfs_alloc_cur_check()
891 ASSERT(args->len > acur->len || in xfs_alloc_cur_check()
892 (args->len == acur->len && diff <= acur->diff)); in xfs_alloc_cur_check()
896 acur->len = args->len; in xfs_alloc_cur_check()
905 if (acur->diff == 0 && acur->len == args->maxlen) in xfs_alloc_cur_check()
910 trace_xfs_alloc_cur_check(args->mp, cur->bc_btnum, bno, len, diff, in xfs_alloc_cur_check()
917 * trees and update the args structure.
921 struct xfs_alloc_arg *args, in xfs_alloc_cur_finish() argument
924 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_cur_finish()
937 args->agbno = acur->bno; in xfs_alloc_cur_finish()
938 args->len = acur->len; in xfs_alloc_cur_finish()
939 args->wasfromfl = 0; in xfs_alloc_cur_finish()
941 trace_xfs_alloc_cur(args); in xfs_alloc_cur_finish()
951 struct xfs_alloc_arg *args, in xfs_alloc_cntbt_iter() argument
965 error = xfs_alloc_lookup_ge(cur, args->agbno, cur_len, &i); in xfs_alloc_cntbt_iter()
975 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_cntbt_iter()
988 if (bno > args->agbno) { in xfs_alloc_cntbt_iter()
993 error = xfs_alloc_cur_check(args, acur, cur, in xfs_alloc_cntbt_iter()
1022 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
1028 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_small()
1048 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_small()
1055 if (args->minlen != 1 || args->alignment != 1 || in xfs_alloc_ag_vextent_small()
1056 args->resv == XFS_AG_RESV_AGFL || in xfs_alloc_ag_vextent_small()
1057 be32_to_cpu(agf->agf_flcount) <= args->minleft) in xfs_alloc_ag_vextent_small()
1060 error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0); in xfs_alloc_ag_vextent_small()
1066 xfs_extent_busy_reuse(args->mp, args->pag, fbno, 1, in xfs_alloc_ag_vextent_small()
1067 (args->datatype & XFS_ALLOC_NOBUSY)); in xfs_alloc_ag_vextent_small()
1069 if (args->datatype & XFS_ALLOC_USERDATA) { in xfs_alloc_ag_vextent_small()
1072 error = xfs_trans_get_buf(args->tp, args->mp->m_ddev_targp, in xfs_alloc_ag_vextent_small()
1073 XFS_AGB_TO_DADDR(args->mp, args->agno, fbno), in xfs_alloc_ag_vextent_small()
1074 args->mp->m_bsize, 0, &bp); in xfs_alloc_ag_vextent_small()
1077 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
1079 *fbnop = args->agbno = fbno; in xfs_alloc_ag_vextent_small()
1080 *flenp = args->len = 1; in xfs_alloc_ag_vextent_small()
1081 if (XFS_IS_CORRUPT(args->mp, fbno >= be32_to_cpu(agf->agf_length))) { in xfs_alloc_ag_vextent_small()
1085 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
1086 trace_xfs_alloc_small_freelist(args); in xfs_alloc_ag_vextent_small()
1092 error = xfs_rmap_free(args->tp, args->agbp, args->pag, fbno, 1, in xfs_alloc_ag_vextent_small()
1104 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
1105 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
1106 trace_xfs_alloc_small_notenough(args); in xfs_alloc_ag_vextent_small()
1112 trace_xfs_alloc_small_done(args); in xfs_alloc_ag_vextent_small()
1116 trace_xfs_alloc_small_error(args); in xfs_alloc_ag_vextent_small()
1130 xfs_alloc_arg_t *args) /* argument structure for allocation */ in xfs_alloc_ag_vextent() argument
1134 ASSERT(args->minlen > 0); in xfs_alloc_ag_vextent()
1135 ASSERT(args->maxlen > 0); in xfs_alloc_ag_vextent()
1136 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_ag_vextent()
1137 ASSERT(args->mod < args->prod); in xfs_alloc_ag_vextent()
1138 ASSERT(args->alignment > 0); in xfs_alloc_ag_vextent()
1143 args->wasfromfl = 0; in xfs_alloc_ag_vextent()
1144 switch (args->type) { in xfs_alloc_ag_vextent()
1146 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_ag_vextent()
1149 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_ag_vextent()
1152 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_ag_vextent()
1159 if (error || args->agbno == NULLAGBLOCK) in xfs_alloc_ag_vextent()
1162 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent()
1163 ASSERT(args->len <= args->maxlen); in xfs_alloc_ag_vextent()
1164 ASSERT(!args->wasfromfl || args->resv != XFS_AG_RESV_AGFL); in xfs_alloc_ag_vextent()
1165 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_ag_vextent()
1168 if (!xfs_rmap_should_skip_owner_update(&args->oinfo)) { in xfs_alloc_ag_vextent()
1169 error = xfs_rmap_alloc(args->tp, args->agbp, args->pag, in xfs_alloc_ag_vextent()
1170 args->agbno, args->len, &args->oinfo); in xfs_alloc_ag_vextent()
1175 if (!args->wasfromfl) { in xfs_alloc_ag_vextent()
1176 error = xfs_alloc_update_counters(args->tp, args->agbp, in xfs_alloc_ag_vextent()
1177 -((long)(args->len))); in xfs_alloc_ag_vextent()
1181 ASSERT(!xfs_extent_busy_search(args->mp, args->pag, in xfs_alloc_ag_vextent()
1182 args->agbno, args->len)); in xfs_alloc_ag_vextent()
1185 xfs_ag_resv_alloc_extent(args->pag, args->resv, args); in xfs_alloc_ag_vextent()
1187 XFS_STATS_INC(args->mp, xs_allocx); in xfs_alloc_ag_vextent()
1188 XFS_STATS_ADD(args->mp, xs_allocb, args->len); in xfs_alloc_ag_vextent()
1200 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
1202 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_exact()
1214 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
1219 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1220 args->pag, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_exact()
1227 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); in xfs_alloc_ag_vextent_exact()
1239 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_exact()
1243 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
1250 xfs_extent_busy_trim(args, &tbno, &tlen, &busy_gen); in xfs_alloc_ag_vextent_exact()
1256 if (tbno > args->agbno) in xfs_alloc_ag_vextent_exact()
1258 if (tlen < args->minlen) in xfs_alloc_ag_vextent_exact()
1261 if (tend < args->agbno + args->minlen) in xfs_alloc_ag_vextent_exact()
1270 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) in xfs_alloc_ag_vextent_exact()
1271 - args->agbno; in xfs_alloc_ag_vextent_exact()
1272 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
1273 ASSERT(args->agbno + args->len <= tend); in xfs_alloc_ag_vextent_exact()
1276 * We are allocating agbno for args->len in xfs_alloc_ag_vextent_exact()
1279 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1280 args->pag, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_exact()
1281 ASSERT(args->agbno + args->len <= be32_to_cpu(agf->agf_length)); in xfs_alloc_ag_vextent_exact()
1282 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, in xfs_alloc_ag_vextent_exact()
1283 args->len, XFSA_FIXUP_BNO_OK); in xfs_alloc_ag_vextent_exact()
1292 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
1293 trace_xfs_alloc_exact_done(args); in xfs_alloc_ag_vextent_exact()
1299 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
1300 trace_xfs_alloc_exact_notfound(args); in xfs_alloc_ag_vextent_exact()
1305 trace_xfs_alloc_exact_error(args); in xfs_alloc_ag_vextent_exact()
1315 struct xfs_alloc_arg *args, in xfs_alloc_walk_iter() argument
1334 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_walk_iter()
1367 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_locality() argument
1377 ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO); in xfs_alloc_ag_vextent_locality()
1381 error = xfs_alloc_lookup_ge(acur->cnt, args->agbno, acur->cur_len, &i); in xfs_alloc_ag_vextent_locality()
1384 error = xfs_alloc_lookup_le(acur->bnolt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1387 error = xfs_alloc_lookup_ge(acur->bnogt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1417 trace_xfs_alloc_cur_lookup(args); in xfs_alloc_ag_vextent_locality()
1423 error = xfs_alloc_walk_iter(args, acur, acur->bnolt, false, in xfs_alloc_ag_vextent_locality()
1428 trace_xfs_alloc_cur_left(args); in xfs_alloc_ag_vextent_locality()
1433 error = xfs_alloc_walk_iter(args, acur, acur->bnogt, true, true, in xfs_alloc_ag_vextent_locality()
1438 trace_xfs_alloc_cur_right(args); in xfs_alloc_ag_vextent_locality()
1448 error = xfs_alloc_cntbt_iter(args, acur); in xfs_alloc_ag_vextent_locality()
1452 trace_xfs_alloc_cur_lookup_done(args); in xfs_alloc_ag_vextent_locality()
1478 error = xfs_alloc_walk_iter(args, acur, fbcur, fbinc, true, -1, in xfs_alloc_ag_vextent_locality()
1493 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_lastblock() argument
1514 if (*len || args->alignment > 1) { in xfs_alloc_ag_vextent_lastblock()
1520 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_ag_vextent_lastblock()
1522 if (*len >= args->minlen) in xfs_alloc_ag_vextent_lastblock()
1528 ASSERT(*len >= args->minlen); in xfs_alloc_ag_vextent_lastblock()
1533 error = xfs_alloc_walk_iter(args, acur, acur->cnt, true, false, -1, &i); in xfs_alloc_ag_vextent_lastblock()
1544 trace_xfs_alloc_near_first(args); in xfs_alloc_ag_vextent_lastblock()
1557 struct xfs_alloc_arg *args) in xfs_alloc_ag_vextent_near() argument
1566 if (!args->min_agbno && !args->max_agbno) in xfs_alloc_ag_vextent_near()
1567 args->max_agbno = args->mp->m_sb.sb_agblocks - 1; in xfs_alloc_ag_vextent_near()
1568 ASSERT(args->min_agbno <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1571 if (args->agbno < args->min_agbno) in xfs_alloc_ag_vextent_near()
1572 args->agbno = args->min_agbno; in xfs_alloc_ag_vextent_near()
1573 if (args->agbno > args->max_agbno) in xfs_alloc_ag_vextent_near()
1574 args->agbno = args->max_agbno; in xfs_alloc_ag_vextent_near()
1584 error = xfs_alloc_cur_setup(args, &acur); in xfs_alloc_ag_vextent_near()
1586 error = xfs_alloc_ag_vextent_small(args, acur.cnt, &bno, in xfs_alloc_ag_vextent_near()
1591 trace_xfs_alloc_near_noentry(args); in xfs_alloc_ag_vextent_near()
1610 error = xfs_alloc_ag_vextent_lastblock(args, &acur, &bno, &len, in xfs_alloc_ag_vextent_near()
1622 error = xfs_alloc_ag_vextent_locality(args, &acur, &i); in xfs_alloc_ag_vextent_near()
1631 trace_xfs_alloc_near_busy(args); in xfs_alloc_ag_vextent_near()
1632 xfs_extent_busy_flush(args->mp, args->pag, in xfs_alloc_ag_vextent_near()
1636 trace_xfs_alloc_size_neither(args); in xfs_alloc_ag_vextent_near()
1637 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1643 error = xfs_alloc_cur_finish(args, &acur); in xfs_alloc_ag_vextent_near()
1658 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_size() argument
1660 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_size()
1676 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1677 args->pag, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_size()
1684 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1695 error = xfs_alloc_ag_vextent_small(args, cnt_cur, in xfs_alloc_ag_vextent_size()
1701 trace_xfs_alloc_size_noentry(args); in xfs_alloc_ag_vextent_size()
1705 busy = xfs_alloc_compute_aligned(args, fbno, flen, &rbno, in xfs_alloc_ag_vextent_size()
1715 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1720 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1723 if (rlen >= args->maxlen) in xfs_alloc_ag_vextent_size()
1737 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1738 xfs_extent_busy_flush(args->mp, in xfs_alloc_ag_vextent_size()
1739 args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1751 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1752 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1759 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1777 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1783 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1785 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1786 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1798 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1805 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1814 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1818 args->len = rlen; in xfs_alloc_ag_vextent_size()
1819 if (rlen < args->minlen) { in xfs_alloc_ag_vextent_size()
1822 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1823 xfs_extent_busy_flush(args->mp, args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1828 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1830 rlen = args->len; in xfs_alloc_ag_vextent_size()
1831 if (XFS_IS_CORRUPT(args->mp, rlen > flen)) { in xfs_alloc_ag_vextent_size()
1838 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1839 args->pag, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_size()
1846 args->len = rlen; in xfs_alloc_ag_vextent_size()
1847 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1848 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1849 args->agbno + args->len > in xfs_alloc_ag_vextent_size()
1854 trace_xfs_alloc_size_done(args); in xfs_alloc_ag_vextent_size()
1858 trace_xfs_alloc_size_error(args); in xfs_alloc_ag_vextent_size()
1867 trace_xfs_alloc_size_nominleft(args); in xfs_alloc_ag_vextent_size()
1868 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
2282 struct xfs_alloc_arg *args, in xfs_alloc_space_available() argument
2286 struct xfs_perag *pag = args->pag; in xfs_alloc_space_available()
2295 reservation = xfs_ag_resv_needed(pag, args->resv); in xfs_alloc_space_available()
2298 alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop; in xfs_alloc_space_available()
2310 reservation - min_free - args->minleft); in xfs_alloc_space_available()
2311 if (available < (int)max(args->total, alloc_len)) in xfs_alloc_space_available()
2318 if (available < (int)args->maxlen && !(flags & XFS_ALLOC_FLAG_CHECK)) { in xfs_alloc_space_available()
2319 args->maxlen = available; in xfs_alloc_space_available()
2320 ASSERT(args->maxlen > 0); in xfs_alloc_space_available()
2321 ASSERT(args->maxlen >= args->minlen); in xfs_alloc_space_available()
2479 * args->minlen.
2483 struct xfs_alloc_arg *args, in xfs_exact_minlen_extent_available() argument
2492 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, agbp, in xfs_exact_minlen_extent_available()
2493 args->pag, XFS_BTNUM_CNT); in xfs_exact_minlen_extent_available()
2494 error = xfs_alloc_lookup_ge(cnt_cur, 0, args->minlen, stat); in xfs_exact_minlen_extent_available()
2507 if (*stat == 1 && flen != args->minlen) in xfs_exact_minlen_extent_available()
2523 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
2526 struct xfs_mount *mp = args->mp; in xfs_alloc_fix_freelist()
2527 struct xfs_perag *pag = args->pag; in xfs_alloc_fix_freelist()
2528 struct xfs_trans *tp = args->tp; in xfs_alloc_fix_freelist()
2540 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
2554 if (pag->pagf_metadata && (args->datatype & XFS_ALLOC_USERDATA) && in xfs_alloc_fix_freelist()
2561 if (!xfs_alloc_space_available(args, need, flags | in xfs_alloc_fix_freelist()
2570 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
2585 if (!xfs_alloc_space_available(args, need, flags)) in xfs_alloc_fix_freelist()
2589 if (args->alloc_minlen_only) { in xfs_alloc_fix_freelist()
2592 error = xfs_exact_minlen_extent_available(args, agbp, &stat); in xfs_alloc_fix_freelist()
2633 xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo); in xfs_alloc_fix_freelist()
2639 targs.agno = args->agno; in xfs_alloc_fix_freelist()
2679 args->agbp = agbp; in xfs_alloc_fix_freelist()
2688 args->agbp = NULL; in xfs_alloc_fix_freelist()
3103 struct xfs_alloc_arg *args) /* allocation argument structure */ in xfs_alloc_vextent() argument
3114 mp = args->mp; in xfs_alloc_vextent()
3115 type = args->otype = args->type; in xfs_alloc_vextent()
3116 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
3123 if (args->maxlen > agsize) in xfs_alloc_vextent()
3124 args->maxlen = agsize; in xfs_alloc_vextent()
3125 if (args->alignment == 0) in xfs_alloc_vextent()
3126 args->alignment = 1; in xfs_alloc_vextent()
3127 ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount); in xfs_alloc_vextent()
3128 ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize); in xfs_alloc_vextent()
3129 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent()
3130 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent()
3131 ASSERT(args->mod < args->prod); in xfs_alloc_vextent()
3132 if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount || in xfs_alloc_vextent()
3133 XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize || in xfs_alloc_vextent()
3134 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent()
3135 args->mod >= args->prod) { in xfs_alloc_vextent()
3136 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
3137 trace_xfs_alloc_vextent_badargs(args); in xfs_alloc_vextent()
3148 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3149 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
3150 error = xfs_alloc_fix_freelist(args, 0); in xfs_alloc_vextent()
3152 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
3155 if (!args->agbp) { in xfs_alloc_vextent()
3156 trace_xfs_alloc_vextent_noagbp(args); in xfs_alloc_vextent()
3159 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
3160 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
3168 if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent()
3170 args->fsbno = XFS_AGB_TO_FSB(mp, in xfs_alloc_vextent()
3175 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
3176 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
3186 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3187 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
3194 args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3202 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
3203 error = xfs_alloc_fix_freelist(args, flags); in xfs_alloc_vextent()
3205 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
3211 if (args->agbp) { in xfs_alloc_vextent()
3212 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
3217 trace_xfs_alloc_vextent_loopfailed(args); in xfs_alloc_vextent()
3222 if (args->agno == sagno && in xfs_alloc_vextent()
3224 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
3232 if (++(args->agno) == mp->m_sb.sb_agcount) { in xfs_alloc_vextent()
3233 if (args->tp->t_firstblock != NULLFSBLOCK) in xfs_alloc_vextent()
3234 args->agno = sagno; in xfs_alloc_vextent()
3236 args->agno = 0; in xfs_alloc_vextent()
3242 if (args->agno == sagno) { in xfs_alloc_vextent()
3244 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
3245 trace_xfs_alloc_vextent_allfailed(args); in xfs_alloc_vextent()
3251 args->agbno = XFS_FSB_TO_AGBNO(mp, in xfs_alloc_vextent()
3252 args->fsbno); in xfs_alloc_vextent()
3253 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
3256 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3259 if (args->agno == sagno) in xfs_alloc_vextent()
3263 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent()
3271 if (args->agbno == NULLAGBLOCK) in xfs_alloc_vextent()
3272 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
3274 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent()
3276 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent()
3277 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent()
3278 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent()
3279 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), in xfs_alloc_vextent()
3280 args->len); in xfs_alloc_vextent()
3284 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3287 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3298 struct xfs_alloc_arg args; in xfs_free_extent_fix_freelist() local
3301 memset(&args, 0, sizeof(struct xfs_alloc_arg)); in xfs_free_extent_fix_freelist()
3302 args.tp = tp; in xfs_free_extent_fix_freelist()
3303 args.mp = tp->t_mountp; in xfs_free_extent_fix_freelist()
3304 args.agno = pag->pag_agno; in xfs_free_extent_fix_freelist()
3305 args.pag = pag; in xfs_free_extent_fix_freelist()
3311 if (args.agno >= args.mp->m_sb.sb_agcount) in xfs_free_extent_fix_freelist()
3314 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); in xfs_free_extent_fix_freelist()
3318 *agbp = args.agbp; in xfs_free_extent_fix_freelist()