Lines Matching refs:args
290 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_compute_aligned() argument
303 busy = xfs_extent_busy_trim(args, &bno, &len, busy_gen); in xfs_alloc_compute_aligned()
309 if (bno < args->min_agbno && bno + len > args->min_agbno) { in xfs_alloc_compute_aligned()
310 diff = args->min_agbno - bno; in xfs_alloc_compute_aligned()
317 if (args->alignment > 1 && len >= args->minlen) { in xfs_alloc_compute_aligned()
318 xfs_agblock_t aligned_bno = roundup(bno, args->alignment); in xfs_alloc_compute_aligned()
409 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_len() argument
414 ASSERT(args->mod < args->prod); in xfs_alloc_fix_len()
415 rlen = args->len; in xfs_alloc_fix_len()
416 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
417 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
418 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || in xfs_alloc_fix_len()
419 (args->mod == 0 && rlen < args->prod)) in xfs_alloc_fix_len()
421 k = rlen % args->prod; in xfs_alloc_fix_len()
422 if (k == args->mod) in xfs_alloc_fix_len()
424 if (k > args->mod) in xfs_alloc_fix_len()
425 rlen = rlen - (k - args->mod); in xfs_alloc_fix_len()
427 rlen = rlen - args->prod + (args->mod - k); in xfs_alloc_fix_len()
429 if ((int)rlen < (int)args->minlen) in xfs_alloc_fix_len()
431 ASSERT(rlen >= args->minlen && rlen <= args->maxlen); in xfs_alloc_fix_len()
432 ASSERT(rlen % args->prod == args->mod); in xfs_alloc_fix_len()
433 ASSERT(args->pag->pagf_freeblks + args->pag->pagf_flcount >= in xfs_alloc_fix_len()
434 rlen + args->minleft); in xfs_alloc_fix_len()
435 args->len = rlen; in xfs_alloc_fix_len()
773 struct xfs_alloc_arg *args, in xfs_alloc_cur_setup() argument
779 ASSERT(args->alignment == 1 || args->type != XFS_ALLOCTYPE_THIS_BNO); in xfs_alloc_cur_setup()
781 acur->cur_len = args->maxlen; in xfs_alloc_cur_setup()
796 acur->cnt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
797 args->agbp, args->pag, XFS_BTNUM_CNT); in xfs_alloc_cur_setup()
798 error = xfs_alloc_lookup_ge(acur->cnt, 0, args->maxlen, &i); in xfs_alloc_cur_setup()
806 acur->bnolt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
807 args->agbp, args->pag, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
809 acur->bnogt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
810 args->agbp, args->pag, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
841 struct xfs_alloc_arg *args, in xfs_alloc_cur_check() argument
859 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_cur_check()
866 if (len < args->minlen) { in xfs_alloc_cur_check()
871 busy = xfs_alloc_compute_aligned(args, bno, len, &bnoa, &lena, in xfs_alloc_cur_check()
877 if (bnoa < args->min_agbno || bnoa > args->max_agbno) { in xfs_alloc_cur_check()
881 if (lena < args->minlen) in xfs_alloc_cur_check()
884 args->len = XFS_EXTLEN_MIN(lena, args->maxlen); in xfs_alloc_cur_check()
885 xfs_alloc_fix_len(args); in xfs_alloc_cur_check()
886 ASSERT(args->len >= args->minlen); in xfs_alloc_cur_check()
887 if (args->len < acur->len) in xfs_alloc_cur_check()
894 ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO); in xfs_alloc_cur_check()
895 diff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_cur_check()
896 args->alignment, args->datatype, in xfs_alloc_cur_check()
909 ASSERT(args->len > acur->len || in xfs_alloc_cur_check()
910 (args->len == acur->len && diff <= acur->diff)); in xfs_alloc_cur_check()
914 acur->len = args->len; in xfs_alloc_cur_check()
923 if (acur->diff == 0 && acur->len == args->maxlen) in xfs_alloc_cur_check()
928 trace_xfs_alloc_cur_check(args->mp, cur->bc_btnum, bno, len, diff, in xfs_alloc_cur_check()
939 struct xfs_alloc_arg *args, in xfs_alloc_cur_finish() argument
942 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_cur_finish()
955 args->agbno = acur->bno; in xfs_alloc_cur_finish()
956 args->len = acur->len; in xfs_alloc_cur_finish()
957 args->wasfromfl = 0; in xfs_alloc_cur_finish()
959 trace_xfs_alloc_cur(args); in xfs_alloc_cur_finish()
969 struct xfs_alloc_arg *args, in xfs_alloc_cntbt_iter() argument
983 error = xfs_alloc_lookup_ge(cur, args->agbno, cur_len, &i); in xfs_alloc_cntbt_iter()
993 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_cntbt_iter()
1006 if (bno > args->agbno) { in xfs_alloc_cntbt_iter()
1011 error = xfs_alloc_cur_check(args, acur, cur, in xfs_alloc_cntbt_iter()
1040 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
1046 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_small()
1066 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_small()
1073 if (args->minlen != 1 || args->alignment != 1 || in xfs_alloc_ag_vextent_small()
1074 args->resv == XFS_AG_RESV_AGFL || in xfs_alloc_ag_vextent_small()
1075 be32_to_cpu(agf->agf_flcount) <= args->minleft) in xfs_alloc_ag_vextent_small()
1078 error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0); in xfs_alloc_ag_vextent_small()
1084 xfs_extent_busy_reuse(args->mp, args->pag, fbno, 1, in xfs_alloc_ag_vextent_small()
1085 (args->datatype & XFS_ALLOC_NOBUSY)); in xfs_alloc_ag_vextent_small()
1087 if (args->datatype & XFS_ALLOC_USERDATA) { in xfs_alloc_ag_vextent_small()
1090 error = xfs_trans_get_buf(args->tp, args->mp->m_ddev_targp, in xfs_alloc_ag_vextent_small()
1091 XFS_AGB_TO_DADDR(args->mp, args->agno, fbno), in xfs_alloc_ag_vextent_small()
1092 args->mp->m_bsize, 0, &bp); in xfs_alloc_ag_vextent_small()
1095 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
1097 *fbnop = args->agbno = fbno; in xfs_alloc_ag_vextent_small()
1098 *flenp = args->len = 1; in xfs_alloc_ag_vextent_small()
1099 if (XFS_IS_CORRUPT(args->mp, fbno >= be32_to_cpu(agf->agf_length))) { in xfs_alloc_ag_vextent_small()
1103 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
1104 trace_xfs_alloc_small_freelist(args); in xfs_alloc_ag_vextent_small()
1110 error = xfs_rmap_free(args->tp, args->agbp, args->pag, fbno, 1, in xfs_alloc_ag_vextent_small()
1122 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
1123 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
1124 trace_xfs_alloc_small_notenough(args); in xfs_alloc_ag_vextent_small()
1130 trace_xfs_alloc_small_done(args); in xfs_alloc_ag_vextent_small()
1134 trace_xfs_alloc_small_error(args); in xfs_alloc_ag_vextent_small()
1148 xfs_alloc_arg_t *args) /* argument structure for allocation */ in xfs_alloc_ag_vextent() argument
1152 ASSERT(args->minlen > 0); in xfs_alloc_ag_vextent()
1153 ASSERT(args->maxlen > 0); in xfs_alloc_ag_vextent()
1154 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_ag_vextent()
1155 ASSERT(args->mod < args->prod); in xfs_alloc_ag_vextent()
1156 ASSERT(args->alignment > 0); in xfs_alloc_ag_vextent()
1161 args->wasfromfl = 0; in xfs_alloc_ag_vextent()
1162 switch (args->type) { in xfs_alloc_ag_vextent()
1164 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_ag_vextent()
1167 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_ag_vextent()
1170 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_ag_vextent()
1177 if (error || args->agbno == NULLAGBLOCK) in xfs_alloc_ag_vextent()
1180 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent()
1181 ASSERT(args->len <= args->maxlen); in xfs_alloc_ag_vextent()
1182 ASSERT(!args->wasfromfl || args->resv != XFS_AG_RESV_AGFL); in xfs_alloc_ag_vextent()
1183 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_ag_vextent()
1186 if (!xfs_rmap_should_skip_owner_update(&args->oinfo)) { in xfs_alloc_ag_vextent()
1187 error = xfs_rmap_alloc(args->tp, args->agbp, args->pag, in xfs_alloc_ag_vextent()
1188 args->agbno, args->len, &args->oinfo); in xfs_alloc_ag_vextent()
1193 if (!args->wasfromfl) { in xfs_alloc_ag_vextent()
1194 error = xfs_alloc_update_counters(args->tp, args->agbp, in xfs_alloc_ag_vextent()
1195 -((long)(args->len))); in xfs_alloc_ag_vextent()
1199 ASSERT(!xfs_extent_busy_search(args->mp, args->pag, in xfs_alloc_ag_vextent()
1200 args->agbno, args->len)); in xfs_alloc_ag_vextent()
1203 xfs_ag_resv_alloc_extent(args->pag, args->resv, args); in xfs_alloc_ag_vextent()
1205 XFS_STATS_INC(args->mp, xs_allocx); in xfs_alloc_ag_vextent()
1206 XFS_STATS_ADD(args->mp, xs_allocb, args->len); in xfs_alloc_ag_vextent()
1218 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
1220 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_exact()
1232 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
1237 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1238 args->pag, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_exact()
1245 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); in xfs_alloc_ag_vextent_exact()
1257 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_exact()
1261 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
1268 xfs_extent_busy_trim(args, &tbno, &tlen, &busy_gen); in xfs_alloc_ag_vextent_exact()
1274 if (tbno > args->agbno) in xfs_alloc_ag_vextent_exact()
1276 if (tlen < args->minlen) in xfs_alloc_ag_vextent_exact()
1279 if (tend < args->agbno + args->minlen) in xfs_alloc_ag_vextent_exact()
1288 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) in xfs_alloc_ag_vextent_exact()
1289 - args->agbno; in xfs_alloc_ag_vextent_exact()
1290 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
1291 ASSERT(args->agbno + args->len <= tend); in xfs_alloc_ag_vextent_exact()
1297 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1298 args->pag, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_exact()
1299 ASSERT(args->agbno + args->len <= be32_to_cpu(agf->agf_length)); in xfs_alloc_ag_vextent_exact()
1300 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, in xfs_alloc_ag_vextent_exact()
1301 args->len, XFSA_FIXUP_BNO_OK); in xfs_alloc_ag_vextent_exact()
1310 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
1311 trace_xfs_alloc_exact_done(args); in xfs_alloc_ag_vextent_exact()
1317 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
1318 trace_xfs_alloc_exact_notfound(args); in xfs_alloc_ag_vextent_exact()
1323 trace_xfs_alloc_exact_error(args); in xfs_alloc_ag_vextent_exact()
1333 struct xfs_alloc_arg *args, in xfs_alloc_walk_iter() argument
1352 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_walk_iter()
1385 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_locality() argument
1395 ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO); in xfs_alloc_ag_vextent_locality()
1399 error = xfs_alloc_lookup_ge(acur->cnt, args->agbno, acur->cur_len, &i); in xfs_alloc_ag_vextent_locality()
1402 error = xfs_alloc_lookup_le(acur->bnolt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1405 error = xfs_alloc_lookup_ge(acur->bnogt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1435 trace_xfs_alloc_cur_lookup(args); in xfs_alloc_ag_vextent_locality()
1441 error = xfs_alloc_walk_iter(args, acur, acur->bnolt, false, in xfs_alloc_ag_vextent_locality()
1446 trace_xfs_alloc_cur_left(args); in xfs_alloc_ag_vextent_locality()
1451 error = xfs_alloc_walk_iter(args, acur, acur->bnogt, true, true, in xfs_alloc_ag_vextent_locality()
1456 trace_xfs_alloc_cur_right(args); in xfs_alloc_ag_vextent_locality()
1466 error = xfs_alloc_cntbt_iter(args, acur); in xfs_alloc_ag_vextent_locality()
1470 trace_xfs_alloc_cur_lookup_done(args); in xfs_alloc_ag_vextent_locality()
1496 error = xfs_alloc_walk_iter(args, acur, fbcur, fbinc, true, -1, in xfs_alloc_ag_vextent_locality()
1511 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_lastblock() argument
1532 if (*len || args->alignment > 1) { in xfs_alloc_ag_vextent_lastblock()
1538 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_ag_vextent_lastblock()
1540 if (*len >= args->minlen) in xfs_alloc_ag_vextent_lastblock()
1546 ASSERT(*len >= args->minlen); in xfs_alloc_ag_vextent_lastblock()
1551 error = xfs_alloc_walk_iter(args, acur, acur->cnt, true, false, -1, &i); in xfs_alloc_ag_vextent_lastblock()
1562 trace_xfs_alloc_near_first(args); in xfs_alloc_ag_vextent_lastblock()
1575 struct xfs_alloc_arg *args) in xfs_alloc_ag_vextent_near() argument
1584 if (!args->min_agbno && !args->max_agbno) in xfs_alloc_ag_vextent_near()
1585 args->max_agbno = args->mp->m_sb.sb_agblocks - 1; in xfs_alloc_ag_vextent_near()
1586 ASSERT(args->min_agbno <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1589 if (args->agbno < args->min_agbno) in xfs_alloc_ag_vextent_near()
1590 args->agbno = args->min_agbno; in xfs_alloc_ag_vextent_near()
1591 if (args->agbno > args->max_agbno) in xfs_alloc_ag_vextent_near()
1592 args->agbno = args->max_agbno; in xfs_alloc_ag_vextent_near()
1602 error = xfs_alloc_cur_setup(args, &acur); in xfs_alloc_ag_vextent_near()
1604 error = xfs_alloc_ag_vextent_small(args, acur.cnt, &bno, in xfs_alloc_ag_vextent_near()
1609 trace_xfs_alloc_near_noentry(args); in xfs_alloc_ag_vextent_near()
1628 error = xfs_alloc_ag_vextent_lastblock(args, &acur, &bno, &len, in xfs_alloc_ag_vextent_near()
1640 error = xfs_alloc_ag_vextent_locality(args, &acur, &i); in xfs_alloc_ag_vextent_near()
1649 trace_xfs_alloc_near_busy(args); in xfs_alloc_ag_vextent_near()
1650 xfs_extent_busy_flush(args->mp, args->pag, in xfs_alloc_ag_vextent_near()
1654 trace_xfs_alloc_size_neither(args); in xfs_alloc_ag_vextent_near()
1655 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1661 error = xfs_alloc_cur_finish(args, &acur); in xfs_alloc_ag_vextent_near()
1676 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_size() argument
1678 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_size()
1694 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1695 args->pag, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_size()
1702 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1713 error = xfs_alloc_ag_vextent_small(args, cnt_cur, in xfs_alloc_ag_vextent_size()
1719 trace_xfs_alloc_size_noentry(args); in xfs_alloc_ag_vextent_size()
1723 busy = xfs_alloc_compute_aligned(args, fbno, flen, &rbno, in xfs_alloc_ag_vextent_size()
1733 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1738 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1741 if (rlen >= args->maxlen) in xfs_alloc_ag_vextent_size()
1755 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1756 xfs_extent_busy_flush(args->mp, in xfs_alloc_ag_vextent_size()
1757 args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1769 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1770 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1777 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1795 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1801 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1803 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1804 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1816 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1823 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1832 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1836 args->len = rlen; in xfs_alloc_ag_vextent_size()
1837 if (rlen < args->minlen) { in xfs_alloc_ag_vextent_size()
1840 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1841 xfs_extent_busy_flush(args->mp, args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1846 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1848 rlen = args->len; in xfs_alloc_ag_vextent_size()
1849 if (XFS_IS_CORRUPT(args->mp, rlen > flen)) { in xfs_alloc_ag_vextent_size()
1856 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1857 args->pag, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_size()
1864 args->len = rlen; in xfs_alloc_ag_vextent_size()
1865 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1866 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1867 args->agbno + args->len > in xfs_alloc_ag_vextent_size()
1872 trace_xfs_alloc_size_done(args); in xfs_alloc_ag_vextent_size()
1876 trace_xfs_alloc_size_error(args); in xfs_alloc_ag_vextent_size()
1885 trace_xfs_alloc_size_nominleft(args); in xfs_alloc_ag_vextent_size()
1886 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
2301 struct xfs_alloc_arg *args, in xfs_alloc_space_available() argument
2305 struct xfs_perag *pag = args->pag; in xfs_alloc_space_available()
2314 reservation = xfs_ag_resv_needed(pag, args->resv); in xfs_alloc_space_available()
2317 alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop; in xfs_alloc_space_available()
2329 reservation - min_free - args->minleft); in xfs_alloc_space_available()
2330 if (available < (int)max(args->total, alloc_len)) in xfs_alloc_space_available()
2337 if (available < (int)args->maxlen && !(flags & XFS_ALLOC_FLAG_CHECK)) { in xfs_alloc_space_available()
2338 args->maxlen = available; in xfs_alloc_space_available()
2339 ASSERT(args->maxlen > 0); in xfs_alloc_space_available()
2340 ASSERT(args->maxlen >= args->minlen); in xfs_alloc_space_available()
2555 struct xfs_alloc_arg *args, in xfs_exact_minlen_extent_available() argument
2564 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, agbp, in xfs_exact_minlen_extent_available()
2565 args->pag, XFS_BTNUM_CNT); in xfs_exact_minlen_extent_available()
2566 error = xfs_alloc_lookup_ge(cnt_cur, 0, args->minlen, stat); in xfs_exact_minlen_extent_available()
2579 if (*stat == 1 && flen != args->minlen) in xfs_exact_minlen_extent_available()
2595 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
2598 struct xfs_mount *mp = args->mp; in xfs_alloc_fix_freelist()
2599 struct xfs_perag *pag = args->pag; in xfs_alloc_fix_freelist()
2600 struct xfs_trans *tp = args->tp; in xfs_alloc_fix_freelist()
2612 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
2626 if (pag->pagf_metadata && (args->datatype & XFS_ALLOC_USERDATA) && in xfs_alloc_fix_freelist()
2633 if (!xfs_alloc_space_available(args, need, flags | in xfs_alloc_fix_freelist()
2642 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
2657 if (!xfs_alloc_space_available(args, need, flags)) in xfs_alloc_fix_freelist()
2661 if (args->alloc_minlen_only) { in xfs_alloc_fix_freelist()
2664 error = xfs_exact_minlen_extent_available(args, agbp, &stat); in xfs_alloc_fix_freelist()
2705 xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo); in xfs_alloc_fix_freelist()
2711 targs.agno = args->agno; in xfs_alloc_fix_freelist()
2751 args->agbp = agbp; in xfs_alloc_fix_freelist()
2760 args->agbp = NULL; in xfs_alloc_fix_freelist()
3178 struct xfs_alloc_arg *args) /* allocation argument structure */ in xfs_alloc_vextent() argument
3189 mp = args->mp; in xfs_alloc_vextent()
3190 type = args->otype = args->type; in xfs_alloc_vextent()
3191 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
3198 if (args->maxlen > agsize) in xfs_alloc_vextent()
3199 args->maxlen = agsize; in xfs_alloc_vextent()
3200 if (args->alignment == 0) in xfs_alloc_vextent()
3201 args->alignment = 1; in xfs_alloc_vextent()
3202 ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount); in xfs_alloc_vextent()
3203 ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize); in xfs_alloc_vextent()
3204 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent()
3205 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent()
3206 ASSERT(args->mod < args->prod); in xfs_alloc_vextent()
3207 if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount || in xfs_alloc_vextent()
3208 XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize || in xfs_alloc_vextent()
3209 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent()
3210 args->mod >= args->prod) { in xfs_alloc_vextent()
3211 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
3212 trace_xfs_alloc_vextent_badargs(args); in xfs_alloc_vextent()
3223 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3224 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
3225 error = xfs_alloc_fix_freelist(args, 0); in xfs_alloc_vextent()
3227 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
3230 if (!args->agbp) { in xfs_alloc_vextent()
3231 trace_xfs_alloc_vextent_noagbp(args); in xfs_alloc_vextent()
3234 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
3235 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
3243 if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent()
3245 args->fsbno = XFS_AGB_TO_FSB(mp, in xfs_alloc_vextent()
3250 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
3251 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
3261 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3262 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
3269 args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3277 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
3278 error = xfs_alloc_fix_freelist(args, flags); in xfs_alloc_vextent()
3280 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
3286 if (args->agbp) { in xfs_alloc_vextent()
3287 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
3292 trace_xfs_alloc_vextent_loopfailed(args); in xfs_alloc_vextent()
3297 if (args->agno == sagno && in xfs_alloc_vextent()
3299 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
3307 if (++(args->agno) == mp->m_sb.sb_agcount) { in xfs_alloc_vextent()
3308 if (args->tp->t_firstblock != NULLFSBLOCK) in xfs_alloc_vextent()
3309 args->agno = sagno; in xfs_alloc_vextent()
3311 args->agno = 0; in xfs_alloc_vextent()
3317 if (args->agno == sagno) { in xfs_alloc_vextent()
3319 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
3320 trace_xfs_alloc_vextent_allfailed(args); in xfs_alloc_vextent()
3326 args->agbno = XFS_FSB_TO_AGBNO(mp, in xfs_alloc_vextent()
3327 args->fsbno); in xfs_alloc_vextent()
3328 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
3331 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3334 if (args->agno == sagno) in xfs_alloc_vextent()
3338 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent()
3346 if (args->agbno == NULLAGBLOCK) in xfs_alloc_vextent()
3347 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
3349 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent()
3351 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent()
3352 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent()
3353 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent()
3354 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), in xfs_alloc_vextent()
3355 args->len); in xfs_alloc_vextent()
3359 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3362 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3373 struct xfs_alloc_arg args; in xfs_free_extent_fix_freelist() local
3376 memset(&args, 0, sizeof(struct xfs_alloc_arg)); in xfs_free_extent_fix_freelist()
3377 args.tp = tp; in xfs_free_extent_fix_freelist()
3378 args.mp = tp->t_mountp; in xfs_free_extent_fix_freelist()
3379 args.agno = pag->pag_agno; in xfs_free_extent_fix_freelist()
3380 args.pag = pag; in xfs_free_extent_fix_freelist()
3386 if (args.agno >= args.mp->m_sb.sb_agcount) in xfs_free_extent_fix_freelist()
3389 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); in xfs_free_extent_fix_freelist()
3393 *agbp = args.agbp; in xfs_free_extent_fix_freelist()