• Home
  • Raw
  • Download

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()
756 struct xfs_alloc_arg *args, in xfs_alloc_cur_setup() argument
762 ASSERT(args->alignment == 1 || args->type != XFS_ALLOCTYPE_THIS_BNO); in xfs_alloc_cur_setup()
764 acur->cur_len = args->maxlen; in xfs_alloc_cur_setup()
779 acur->cnt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
780 args->agbp, args->agno, XFS_BTNUM_CNT); in xfs_alloc_cur_setup()
781 error = xfs_alloc_lookup_ge(acur->cnt, 0, args->maxlen, &i); in xfs_alloc_cur_setup()
789 acur->bnolt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
790 args->agbp, args->agno, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
792 acur->bnogt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
793 args->agbp, args->agno, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
824 struct xfs_alloc_arg *args, in xfs_alloc_cur_check() argument
842 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_cur_check()
849 if (len < args->minlen) { in xfs_alloc_cur_check()
854 busy = xfs_alloc_compute_aligned(args, bno, len, &bnoa, &lena, in xfs_alloc_cur_check()
860 if (bnoa < args->min_agbno || bnoa > args->max_agbno) { in xfs_alloc_cur_check()
864 if (lena < args->minlen) in xfs_alloc_cur_check()
867 args->len = XFS_EXTLEN_MIN(lena, args->maxlen); in xfs_alloc_cur_check()
868 xfs_alloc_fix_len(args); in xfs_alloc_cur_check()
869 ASSERT(args->len >= args->minlen); in xfs_alloc_cur_check()
870 if (args->len < acur->len) in xfs_alloc_cur_check()
877 ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO); in xfs_alloc_cur_check()
878 diff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_cur_check()
879 args->alignment, args->datatype, in xfs_alloc_cur_check()
892 ASSERT(args->len > acur->len || in xfs_alloc_cur_check()
893 (args->len == acur->len && diff <= acur->diff)); in xfs_alloc_cur_check()
897 acur->len = args->len; in xfs_alloc_cur_check()
906 if (acur->diff == 0 && acur->len == args->maxlen) in xfs_alloc_cur_check()
911 trace_xfs_alloc_cur_check(args->mp, cur->bc_btnum, bno, len, diff, in xfs_alloc_cur_check()
918 * trees and update the args structure.
922 struct xfs_alloc_arg *args, in xfs_alloc_cur_finish() argument
925 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_cur_finish()
938 args->agbno = acur->bno; in xfs_alloc_cur_finish()
939 args->len = acur->len; in xfs_alloc_cur_finish()
940 args->wasfromfl = 0; in xfs_alloc_cur_finish()
942 trace_xfs_alloc_cur(args); in xfs_alloc_cur_finish()
952 struct xfs_alloc_arg *args, in xfs_alloc_cntbt_iter() argument
966 error = xfs_alloc_lookup_ge(cur, args->agbno, cur_len, &i); in xfs_alloc_cntbt_iter()
976 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_cntbt_iter()
989 if (bno > args->agbno) { in xfs_alloc_cntbt_iter()
994 error = xfs_alloc_cur_check(args, acur, cur, in xfs_alloc_cntbt_iter()
1023 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
1029 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_small()
1049 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_small()
1056 if (args->minlen != 1 || args->alignment != 1 || in xfs_alloc_ag_vextent_small()
1057 args->resv == XFS_AG_RESV_AGFL || in xfs_alloc_ag_vextent_small()
1058 be32_to_cpu(agf->agf_flcount) <= args->minleft) in xfs_alloc_ag_vextent_small()
1061 error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0); in xfs_alloc_ag_vextent_small()
1067 xfs_extent_busy_reuse(args->mp, args->agno, fbno, 1, in xfs_alloc_ag_vextent_small()
1068 (args->datatype & XFS_ALLOC_NOBUSY)); in xfs_alloc_ag_vextent_small()
1070 if (args->datatype & XFS_ALLOC_USERDATA) { in xfs_alloc_ag_vextent_small()
1073 error = xfs_trans_get_buf(args->tp, args->mp->m_ddev_targp, in xfs_alloc_ag_vextent_small()
1074 XFS_AGB_TO_DADDR(args->mp, args->agno, fbno), in xfs_alloc_ag_vextent_small()
1075 args->mp->m_bsize, 0, &bp); in xfs_alloc_ag_vextent_small()
1078 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
1080 *fbnop = args->agbno = fbno; in xfs_alloc_ag_vextent_small()
1081 *flenp = args->len = 1; in xfs_alloc_ag_vextent_small()
1082 if (XFS_IS_CORRUPT(args->mp, fbno >= be32_to_cpu(agf->agf_length))) { in xfs_alloc_ag_vextent_small()
1086 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
1087 trace_xfs_alloc_small_freelist(args); in xfs_alloc_ag_vextent_small()
1093 error = xfs_rmap_free(args->tp, args->agbp, args->agno, fbno, 1, in xfs_alloc_ag_vextent_small()
1105 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
1106 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
1107 trace_xfs_alloc_small_notenough(args); in xfs_alloc_ag_vextent_small()
1113 trace_xfs_alloc_small_done(args); in xfs_alloc_ag_vextent_small()
1117 trace_xfs_alloc_small_error(args); in xfs_alloc_ag_vextent_small()
1131 xfs_alloc_arg_t *args) /* argument structure for allocation */ in xfs_alloc_ag_vextent() argument
1135 ASSERT(args->minlen > 0); in xfs_alloc_ag_vextent()
1136 ASSERT(args->maxlen > 0); in xfs_alloc_ag_vextent()
1137 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_ag_vextent()
1138 ASSERT(args->mod < args->prod); in xfs_alloc_ag_vextent()
1139 ASSERT(args->alignment > 0); in xfs_alloc_ag_vextent()
1144 args->wasfromfl = 0; in xfs_alloc_ag_vextent()
1145 switch (args->type) { in xfs_alloc_ag_vextent()
1147 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_ag_vextent()
1150 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_ag_vextent()
1153 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_ag_vextent()
1160 if (error || args->agbno == NULLAGBLOCK) in xfs_alloc_ag_vextent()
1163 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent()
1164 ASSERT(args->len <= args->maxlen); in xfs_alloc_ag_vextent()
1165 ASSERT(!args->wasfromfl || args->resv != XFS_AG_RESV_AGFL); in xfs_alloc_ag_vextent()
1166 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_ag_vextent()
1169 if (!xfs_rmap_should_skip_owner_update(&args->oinfo)) { in xfs_alloc_ag_vextent()
1170 error = xfs_rmap_alloc(args->tp, args->agbp, args->agno, in xfs_alloc_ag_vextent()
1171 args->agbno, args->len, &args->oinfo); in xfs_alloc_ag_vextent()
1176 if (!args->wasfromfl) { in xfs_alloc_ag_vextent()
1177 error = xfs_alloc_update_counters(args->tp, args->agbp, in xfs_alloc_ag_vextent()
1178 -((long)(args->len))); in xfs_alloc_ag_vextent()
1182 ASSERT(!xfs_extent_busy_search(args->mp, args->agno, in xfs_alloc_ag_vextent()
1183 args->agbno, args->len)); in xfs_alloc_ag_vextent()
1186 xfs_ag_resv_alloc_extent(args->pag, args->resv, args); in xfs_alloc_ag_vextent()
1188 XFS_STATS_INC(args->mp, xs_allocx); in xfs_alloc_ag_vextent()
1189 XFS_STATS_ADD(args->mp, xs_allocb, args->len); in xfs_alloc_ag_vextent()
1201 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
1203 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_exact()
1215 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
1220 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1221 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_exact()
1228 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); in xfs_alloc_ag_vextent_exact()
1240 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_exact()
1244 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
1251 xfs_extent_busy_trim(args, &tbno, &tlen, &busy_gen); in xfs_alloc_ag_vextent_exact()
1257 if (tbno > args->agbno) in xfs_alloc_ag_vextent_exact()
1259 if (tlen < args->minlen) in xfs_alloc_ag_vextent_exact()
1262 if (tend < args->agbno + args->minlen) in xfs_alloc_ag_vextent_exact()
1271 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) in xfs_alloc_ag_vextent_exact()
1272 - args->agbno; in xfs_alloc_ag_vextent_exact()
1273 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
1274 ASSERT(args->agbno + args->len <= tend); in xfs_alloc_ag_vextent_exact()
1277 * We are allocating agbno for args->len in xfs_alloc_ag_vextent_exact()
1280 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1281 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_exact()
1282 ASSERT(args->agbno + args->len <= be32_to_cpu(agf->agf_length)); in xfs_alloc_ag_vextent_exact()
1283 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, in xfs_alloc_ag_vextent_exact()
1284 args->len, XFSA_FIXUP_BNO_OK); in xfs_alloc_ag_vextent_exact()
1293 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
1294 trace_xfs_alloc_exact_done(args); in xfs_alloc_ag_vextent_exact()
1300 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
1301 trace_xfs_alloc_exact_notfound(args); in xfs_alloc_ag_vextent_exact()
1306 trace_xfs_alloc_exact_error(args); in xfs_alloc_ag_vextent_exact()
1316 struct xfs_alloc_arg *args, in xfs_alloc_walk_iter() argument
1335 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_walk_iter()
1368 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_locality() argument
1378 ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO); in xfs_alloc_ag_vextent_locality()
1382 error = xfs_alloc_lookup_ge(acur->cnt, args->agbno, acur->cur_len, &i); in xfs_alloc_ag_vextent_locality()
1385 error = xfs_alloc_lookup_le(acur->bnolt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1388 error = xfs_alloc_lookup_ge(acur->bnogt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1418 trace_xfs_alloc_cur_lookup(args); in xfs_alloc_ag_vextent_locality()
1424 error = xfs_alloc_walk_iter(args, acur, acur->bnolt, false, in xfs_alloc_ag_vextent_locality()
1429 trace_xfs_alloc_cur_left(args); in xfs_alloc_ag_vextent_locality()
1434 error = xfs_alloc_walk_iter(args, acur, acur->bnogt, true, true, in xfs_alloc_ag_vextent_locality()
1439 trace_xfs_alloc_cur_right(args); in xfs_alloc_ag_vextent_locality()
1449 error = xfs_alloc_cntbt_iter(args, acur); in xfs_alloc_ag_vextent_locality()
1453 trace_xfs_alloc_cur_lookup_done(args); in xfs_alloc_ag_vextent_locality()
1479 error = xfs_alloc_walk_iter(args, acur, fbcur, fbinc, true, -1, in xfs_alloc_ag_vextent_locality()
1494 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_lastblock() argument
1515 if (*len || args->alignment > 1) { in xfs_alloc_ag_vextent_lastblock()
1521 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_ag_vextent_lastblock()
1523 if (*len >= args->minlen) in xfs_alloc_ag_vextent_lastblock()
1529 ASSERT(*len >= args->minlen); in xfs_alloc_ag_vextent_lastblock()
1534 error = xfs_alloc_walk_iter(args, acur, acur->cnt, true, false, -1, &i); in xfs_alloc_ag_vextent_lastblock()
1545 trace_xfs_alloc_near_first(args); in xfs_alloc_ag_vextent_lastblock()
1558 struct xfs_alloc_arg *args) in xfs_alloc_ag_vextent_near() argument
1567 if (!args->min_agbno && !args->max_agbno) in xfs_alloc_ag_vextent_near()
1568 args->max_agbno = args->mp->m_sb.sb_agblocks - 1; in xfs_alloc_ag_vextent_near()
1569 ASSERT(args->min_agbno <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1572 if (args->agbno < args->min_agbno) in xfs_alloc_ag_vextent_near()
1573 args->agbno = args->min_agbno; in xfs_alloc_ag_vextent_near()
1574 if (args->agbno > args->max_agbno) in xfs_alloc_ag_vextent_near()
1575 args->agbno = args->max_agbno; in xfs_alloc_ag_vextent_near()
1585 error = xfs_alloc_cur_setup(args, &acur); in xfs_alloc_ag_vextent_near()
1587 error = xfs_alloc_ag_vextent_small(args, acur.cnt, &bno, in xfs_alloc_ag_vextent_near()
1592 trace_xfs_alloc_near_noentry(args); in xfs_alloc_ag_vextent_near()
1611 error = xfs_alloc_ag_vextent_lastblock(args, &acur, &bno, &len, in xfs_alloc_ag_vextent_near()
1623 error = xfs_alloc_ag_vextent_locality(args, &acur, &i); in xfs_alloc_ag_vextent_near()
1632 trace_xfs_alloc_near_busy(args); in xfs_alloc_ag_vextent_near()
1633 xfs_extent_busy_flush(args->mp, args->pag, in xfs_alloc_ag_vextent_near()
1637 trace_xfs_alloc_size_neither(args); in xfs_alloc_ag_vextent_near()
1638 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1644 error = xfs_alloc_cur_finish(args, &acur); in xfs_alloc_ag_vextent_near()
1659 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_size() argument
1661 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_size()
1677 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1678 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_size()
1686 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1697 error = xfs_alloc_ag_vextent_small(args, cnt_cur, in xfs_alloc_ag_vextent_size()
1703 trace_xfs_alloc_size_noentry(args); in xfs_alloc_ag_vextent_size()
1707 busy = xfs_alloc_compute_aligned(args, fbno, flen, &rbno, in xfs_alloc_ag_vextent_size()
1717 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1722 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1725 if (rlen >= args->maxlen) in xfs_alloc_ag_vextent_size()
1739 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1740 xfs_extent_busy_flush(args->mp, in xfs_alloc_ag_vextent_size()
1741 args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1753 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1754 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1761 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1779 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1785 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1787 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1788 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1800 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1807 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1816 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1820 args->len = rlen; in xfs_alloc_ag_vextent_size()
1821 if (rlen < args->minlen) { in xfs_alloc_ag_vextent_size()
1824 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1825 xfs_extent_busy_flush(args->mp, args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1830 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1832 rlen = args->len; in xfs_alloc_ag_vextent_size()
1833 if (XFS_IS_CORRUPT(args->mp, rlen > flen)) { in xfs_alloc_ag_vextent_size()
1840 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1841 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_size()
1848 args->len = rlen; in xfs_alloc_ag_vextent_size()
1849 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1850 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1851 args->agbno + args->len > in xfs_alloc_ag_vextent_size()
1856 trace_xfs_alloc_size_done(args); in xfs_alloc_ag_vextent_size()
1860 trace_xfs_alloc_size_error(args); in xfs_alloc_ag_vextent_size()
1869 trace_xfs_alloc_size_nominleft(args); in xfs_alloc_ag_vextent_size()
1870 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
2283 struct xfs_alloc_arg *args, in xfs_alloc_space_available() argument
2287 struct xfs_perag *pag = args->pag; in xfs_alloc_space_available()
2296 reservation = xfs_ag_resv_needed(pag, args->resv); in xfs_alloc_space_available()
2299 alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop; in xfs_alloc_space_available()
2311 reservation - min_free - args->minleft); in xfs_alloc_space_available()
2312 if (available < (int)max(args->total, alloc_len)) in xfs_alloc_space_available()
2319 if (available < (int)args->maxlen && !(flags & XFS_ALLOC_FLAG_CHECK)) { in xfs_alloc_space_available()
2320 args->maxlen = available; in xfs_alloc_space_available()
2321 ASSERT(args->maxlen > 0); in xfs_alloc_space_available()
2322 ASSERT(args->maxlen >= args->minlen); in xfs_alloc_space_available()
2483 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
2486 struct xfs_mount *mp = args->mp; in xfs_alloc_fix_freelist()
2487 struct xfs_perag *pag = args->pag; in xfs_alloc_fix_freelist()
2488 struct xfs_trans *tp = args->tp; in xfs_alloc_fix_freelist()
2500 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
2514 if (pag->pagf_metadata && (args->datatype & XFS_ALLOC_USERDATA) && in xfs_alloc_fix_freelist()
2521 if (!xfs_alloc_space_available(args, need, flags | in xfs_alloc_fix_freelist()
2530 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
2545 if (!xfs_alloc_space_available(args, need, flags)) in xfs_alloc_fix_freelist()
2584 xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo); in xfs_alloc_fix_freelist()
2590 targs.agno = args->agno; in xfs_alloc_fix_freelist()
2630 args->agbp = agbp; in xfs_alloc_fix_freelist()
2639 args->agbp = NULL; in xfs_alloc_fix_freelist()
3042 struct xfs_alloc_arg *args) /* allocation argument structure */ in xfs_alloc_vextent() argument
3053 mp = args->mp; in xfs_alloc_vextent()
3054 type = args->otype = args->type; in xfs_alloc_vextent()
3055 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
3062 if (args->maxlen > agsize) in xfs_alloc_vextent()
3063 args->maxlen = agsize; in xfs_alloc_vextent()
3064 if (args->alignment == 0) in xfs_alloc_vextent()
3065 args->alignment = 1; in xfs_alloc_vextent()
3066 ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount); in xfs_alloc_vextent()
3067 ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize); in xfs_alloc_vextent()
3068 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent()
3069 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent()
3070 ASSERT(args->mod < args->prod); in xfs_alloc_vextent()
3071 if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount || in xfs_alloc_vextent()
3072 XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize || in xfs_alloc_vextent()
3073 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent()
3074 args->mod >= args->prod) { in xfs_alloc_vextent()
3075 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
3076 trace_xfs_alloc_vextent_badargs(args); in xfs_alloc_vextent()
3087 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3088 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
3089 error = xfs_alloc_fix_freelist(args, 0); in xfs_alloc_vextent()
3091 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
3094 if (!args->agbp) { in xfs_alloc_vextent()
3095 trace_xfs_alloc_vextent_noagbp(args); in xfs_alloc_vextent()
3098 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
3099 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
3107 if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent()
3109 args->fsbno = XFS_AGB_TO_FSB(mp, in xfs_alloc_vextent()
3114 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
3115 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
3125 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3126 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
3133 args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3141 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
3142 error = xfs_alloc_fix_freelist(args, flags); in xfs_alloc_vextent()
3144 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
3150 if (args->agbp) { in xfs_alloc_vextent()
3151 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
3156 trace_xfs_alloc_vextent_loopfailed(args); in xfs_alloc_vextent()
3161 if (args->agno == sagno && in xfs_alloc_vextent()
3163 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
3171 if (++(args->agno) == mp->m_sb.sb_agcount) { in xfs_alloc_vextent()
3172 if (args->tp->t_firstblock != NULLFSBLOCK) in xfs_alloc_vextent()
3173 args->agno = sagno; in xfs_alloc_vextent()
3175 args->agno = 0; in xfs_alloc_vextent()
3181 if (args->agno == sagno) { in xfs_alloc_vextent()
3183 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
3184 trace_xfs_alloc_vextent_allfailed(args); in xfs_alloc_vextent()
3190 args->agbno = XFS_FSB_TO_AGBNO(mp, in xfs_alloc_vextent()
3191 args->fsbno); in xfs_alloc_vextent()
3192 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
3195 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3198 if (args->agno == sagno) in xfs_alloc_vextent()
3202 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent()
3210 if (args->agbno == NULLAGBLOCK) in xfs_alloc_vextent()
3211 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
3213 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent()
3215 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent()
3216 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent()
3217 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent()
3218 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), in xfs_alloc_vextent()
3219 args->len); in xfs_alloc_vextent()
3223 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3226 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3237 struct xfs_alloc_arg args; in xfs_free_extent_fix_freelist() local
3240 memset(&args, 0, sizeof(struct xfs_alloc_arg)); in xfs_free_extent_fix_freelist()
3241 args.tp = tp; in xfs_free_extent_fix_freelist()
3242 args.mp = tp->t_mountp; in xfs_free_extent_fix_freelist()
3243 args.agno = agno; in xfs_free_extent_fix_freelist()
3249 if (args.agno >= args.mp->m_sb.sb_agcount) in xfs_free_extent_fix_freelist()
3252 args.pag = xfs_perag_get(args.mp, args.agno); in xfs_free_extent_fix_freelist()
3253 ASSERT(args.pag); in xfs_free_extent_fix_freelist()
3255 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); in xfs_free_extent_fix_freelist()
3259 *agbp = args.agbp; in xfs_free_extent_fix_freelist()
3261 xfs_perag_put(args.pag); in xfs_free_extent_fix_freelist()