Lines Matching refs:args

287 	xfs_alloc_arg_t	*args,		/* allocation argument structure */  in xfs_alloc_compute_aligned()  argument
300 busy = xfs_extent_busy_trim(args, &bno, &len, busy_gen); in xfs_alloc_compute_aligned()
306 if (bno < args->min_agbno && bno + len > args->min_agbno) { in xfs_alloc_compute_aligned()
307 diff = args->min_agbno - bno; in xfs_alloc_compute_aligned()
314 if (args->alignment > 1 && len >= args->minlen) { in xfs_alloc_compute_aligned()
315 xfs_agblock_t aligned_bno = roundup(bno, args->alignment); in xfs_alloc_compute_aligned()
406 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_len() argument
411 ASSERT(args->mod < args->prod); in xfs_alloc_fix_len()
412 rlen = args->len; in xfs_alloc_fix_len()
413 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
414 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
415 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || in xfs_alloc_fix_len()
416 (args->mod == 0 && rlen < args->prod)) in xfs_alloc_fix_len()
418 k = rlen % args->prod; in xfs_alloc_fix_len()
419 if (k == args->mod) in xfs_alloc_fix_len()
421 if (k > args->mod) in xfs_alloc_fix_len()
422 rlen = rlen - (k - args->mod); in xfs_alloc_fix_len()
424 rlen = rlen - args->prod + (args->mod - k); in xfs_alloc_fix_len()
426 if ((int)rlen < (int)args->minlen) in xfs_alloc_fix_len()
428 ASSERT(rlen >= args->minlen && rlen <= args->maxlen); in xfs_alloc_fix_len()
429 ASSERT(rlen % args->prod == args->mod); in xfs_alloc_fix_len()
430 ASSERT(args->pag->pagf_freeblks + args->pag->pagf_flcount >= in xfs_alloc_fix_len()
431 rlen + args->minleft); in xfs_alloc_fix_len()
432 args->len = rlen; in xfs_alloc_fix_len()
769 struct xfs_alloc_arg *args, in xfs_alloc_cur_setup() argument
775 ASSERT(args->alignment == 1 || args->type != XFS_ALLOCTYPE_THIS_BNO); in xfs_alloc_cur_setup()
777 acur->cur_len = args->maxlen; in xfs_alloc_cur_setup()
792 acur->cnt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
793 args->agbp, args->pag, XFS_BTNUM_CNT); in xfs_alloc_cur_setup()
794 error = xfs_alloc_lookup_ge(acur->cnt, 0, args->maxlen, &i); in xfs_alloc_cur_setup()
802 acur->bnolt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
803 args->agbp, args->pag, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
805 acur->bnogt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
806 args->agbp, args->pag, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
837 struct xfs_alloc_arg *args, in xfs_alloc_cur_check() argument
855 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_cur_check()
862 if (len < args->minlen) { in xfs_alloc_cur_check()
867 busy = xfs_alloc_compute_aligned(args, bno, len, &bnoa, &lena, in xfs_alloc_cur_check()
873 if (bnoa < args->min_agbno || bnoa > args->max_agbno) { in xfs_alloc_cur_check()
877 if (lena < args->minlen) in xfs_alloc_cur_check()
880 args->len = XFS_EXTLEN_MIN(lena, args->maxlen); in xfs_alloc_cur_check()
881 xfs_alloc_fix_len(args); in xfs_alloc_cur_check()
882 ASSERT(args->len >= args->minlen); in xfs_alloc_cur_check()
883 if (args->len < acur->len) in xfs_alloc_cur_check()
890 ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO); in xfs_alloc_cur_check()
891 diff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_cur_check()
892 args->alignment, args->datatype, in xfs_alloc_cur_check()
905 ASSERT(args->len > acur->len || in xfs_alloc_cur_check()
906 (args->len == acur->len && diff <= acur->diff)); in xfs_alloc_cur_check()
910 acur->len = args->len; in xfs_alloc_cur_check()
919 if (acur->diff == 0 && acur->len == args->maxlen) in xfs_alloc_cur_check()
924 trace_xfs_alloc_cur_check(args->mp, cur->bc_btnum, bno, len, diff, in xfs_alloc_cur_check()
935 struct xfs_alloc_arg *args, in xfs_alloc_cur_finish() argument
938 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_cur_finish()
951 args->agbno = acur->bno; in xfs_alloc_cur_finish()
952 args->len = acur->len; in xfs_alloc_cur_finish()
953 args->wasfromfl = 0; in xfs_alloc_cur_finish()
955 trace_xfs_alloc_cur(args); in xfs_alloc_cur_finish()
965 struct xfs_alloc_arg *args, in xfs_alloc_cntbt_iter() argument
979 error = xfs_alloc_lookup_ge(cur, args->agbno, cur_len, &i); in xfs_alloc_cntbt_iter()
989 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_cntbt_iter()
1002 if (bno > args->agbno) { in xfs_alloc_cntbt_iter()
1007 error = xfs_alloc_cur_check(args, acur, cur, in xfs_alloc_cntbt_iter()
1036 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
1042 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_small()
1062 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_small()
1069 if (args->minlen != 1 || args->alignment != 1 || in xfs_alloc_ag_vextent_small()
1070 args->resv == XFS_AG_RESV_AGFL || in xfs_alloc_ag_vextent_small()
1071 be32_to_cpu(agf->agf_flcount) <= args->minleft) in xfs_alloc_ag_vextent_small()
1074 error = xfs_alloc_get_freelist(args->pag, args->tp, args->agbp, in xfs_alloc_ag_vextent_small()
1081 xfs_extent_busy_reuse(args->mp, args->pag, fbno, 1, in xfs_alloc_ag_vextent_small()
1082 (args->datatype & XFS_ALLOC_NOBUSY)); in xfs_alloc_ag_vextent_small()
1084 if (args->datatype & XFS_ALLOC_USERDATA) { in xfs_alloc_ag_vextent_small()
1087 error = xfs_trans_get_buf(args->tp, args->mp->m_ddev_targp, in xfs_alloc_ag_vextent_small()
1088 XFS_AGB_TO_DADDR(args->mp, args->agno, fbno), in xfs_alloc_ag_vextent_small()
1089 args->mp->m_bsize, 0, &bp); in xfs_alloc_ag_vextent_small()
1092 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
1094 *fbnop = args->agbno = fbno; in xfs_alloc_ag_vextent_small()
1095 *flenp = args->len = 1; in xfs_alloc_ag_vextent_small()
1096 if (XFS_IS_CORRUPT(args->mp, fbno >= be32_to_cpu(agf->agf_length))) { in xfs_alloc_ag_vextent_small()
1100 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
1101 trace_xfs_alloc_small_freelist(args); in xfs_alloc_ag_vextent_small()
1107 error = xfs_rmap_free(args->tp, args->agbp, args->pag, fbno, 1, in xfs_alloc_ag_vextent_small()
1119 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
1120 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
1121 trace_xfs_alloc_small_notenough(args); in xfs_alloc_ag_vextent_small()
1127 trace_xfs_alloc_small_done(args); in xfs_alloc_ag_vextent_small()
1131 trace_xfs_alloc_small_error(args); in xfs_alloc_ag_vextent_small()
1145 xfs_alloc_arg_t *args) /* argument structure for allocation */ in xfs_alloc_ag_vextent() argument
1149 ASSERT(args->minlen > 0); in xfs_alloc_ag_vextent()
1150 ASSERT(args->maxlen > 0); in xfs_alloc_ag_vextent()
1151 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_ag_vextent()
1152 ASSERT(args->mod < args->prod); in xfs_alloc_ag_vextent()
1153 ASSERT(args->alignment > 0); in xfs_alloc_ag_vextent()
1158 args->wasfromfl = 0; in xfs_alloc_ag_vextent()
1159 switch (args->type) { in xfs_alloc_ag_vextent()
1161 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_ag_vextent()
1164 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_ag_vextent()
1167 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_ag_vextent()
1174 if (error || args->agbno == NULLAGBLOCK) in xfs_alloc_ag_vextent()
1177 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent()
1178 ASSERT(args->len <= args->maxlen); in xfs_alloc_ag_vextent()
1179 ASSERT(!args->wasfromfl || args->resv != XFS_AG_RESV_AGFL); in xfs_alloc_ag_vextent()
1180 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_ag_vextent()
1183 if (!xfs_rmap_should_skip_owner_update(&args->oinfo)) { in xfs_alloc_ag_vextent()
1184 error = xfs_rmap_alloc(args->tp, args->agbp, args->pag, in xfs_alloc_ag_vextent()
1185 args->agbno, args->len, &args->oinfo); in xfs_alloc_ag_vextent()
1190 if (!args->wasfromfl) { in xfs_alloc_ag_vextent()
1191 error = xfs_alloc_update_counters(args->tp, args->agbp, in xfs_alloc_ag_vextent()
1192 -((long)(args->len))); in xfs_alloc_ag_vextent()
1196 ASSERT(!xfs_extent_busy_search(args->mp, args->pag, in xfs_alloc_ag_vextent()
1197 args->agbno, args->len)); in xfs_alloc_ag_vextent()
1200 xfs_ag_resv_alloc_extent(args->pag, args->resv, args); in xfs_alloc_ag_vextent()
1202 XFS_STATS_INC(args->mp, xs_allocx); in xfs_alloc_ag_vextent()
1203 XFS_STATS_ADD(args->mp, xs_allocb, args->len); in xfs_alloc_ag_vextent()
1215 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
1217 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_exact()
1229 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
1234 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1235 args->pag, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_exact()
1242 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); in xfs_alloc_ag_vextent_exact()
1254 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_exact()
1258 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
1265 xfs_extent_busy_trim(args, &tbno, &tlen, &busy_gen); in xfs_alloc_ag_vextent_exact()
1271 if (tbno > args->agbno) in xfs_alloc_ag_vextent_exact()
1273 if (tlen < args->minlen) in xfs_alloc_ag_vextent_exact()
1276 if (tend < args->agbno + args->minlen) in xfs_alloc_ag_vextent_exact()
1285 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) in xfs_alloc_ag_vextent_exact()
1286 - args->agbno; in xfs_alloc_ag_vextent_exact()
1287 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
1288 ASSERT(args->agbno + args->len <= tend); in xfs_alloc_ag_vextent_exact()
1294 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1295 args->pag, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_exact()
1296 ASSERT(args->agbno + args->len <= be32_to_cpu(agf->agf_length)); in xfs_alloc_ag_vextent_exact()
1297 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, in xfs_alloc_ag_vextent_exact()
1298 args->len, XFSA_FIXUP_BNO_OK); in xfs_alloc_ag_vextent_exact()
1307 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
1308 trace_xfs_alloc_exact_done(args); in xfs_alloc_ag_vextent_exact()
1314 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
1315 trace_xfs_alloc_exact_notfound(args); in xfs_alloc_ag_vextent_exact()
1320 trace_xfs_alloc_exact_error(args); in xfs_alloc_ag_vextent_exact()
1330 struct xfs_alloc_arg *args, in xfs_alloc_walk_iter() argument
1349 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_walk_iter()
1382 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_locality() argument
1392 ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO); in xfs_alloc_ag_vextent_locality()
1396 error = xfs_alloc_lookup_ge(acur->cnt, args->agbno, acur->cur_len, &i); in xfs_alloc_ag_vextent_locality()
1399 error = xfs_alloc_lookup_le(acur->bnolt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1402 error = xfs_alloc_lookup_ge(acur->bnogt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1432 trace_xfs_alloc_cur_lookup(args); in xfs_alloc_ag_vextent_locality()
1438 error = xfs_alloc_walk_iter(args, acur, acur->bnolt, false, in xfs_alloc_ag_vextent_locality()
1443 trace_xfs_alloc_cur_left(args); in xfs_alloc_ag_vextent_locality()
1448 error = xfs_alloc_walk_iter(args, acur, acur->bnogt, true, true, in xfs_alloc_ag_vextent_locality()
1453 trace_xfs_alloc_cur_right(args); in xfs_alloc_ag_vextent_locality()
1463 error = xfs_alloc_cntbt_iter(args, acur); in xfs_alloc_ag_vextent_locality()
1467 trace_xfs_alloc_cur_lookup_done(args); in xfs_alloc_ag_vextent_locality()
1493 error = xfs_alloc_walk_iter(args, acur, fbcur, fbinc, true, -1, in xfs_alloc_ag_vextent_locality()
1508 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_lastblock() argument
1529 if (*len || args->alignment > 1) { in xfs_alloc_ag_vextent_lastblock()
1535 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_ag_vextent_lastblock()
1537 if (*len >= args->minlen) in xfs_alloc_ag_vextent_lastblock()
1543 ASSERT(*len >= args->minlen); in xfs_alloc_ag_vextent_lastblock()
1548 error = xfs_alloc_walk_iter(args, acur, acur->cnt, true, false, -1, &i); in xfs_alloc_ag_vextent_lastblock()
1559 trace_xfs_alloc_near_first(args); in xfs_alloc_ag_vextent_lastblock()
1572 struct xfs_alloc_arg *args) in xfs_alloc_ag_vextent_near() argument
1581 if (!args->min_agbno && !args->max_agbno) in xfs_alloc_ag_vextent_near()
1582 args->max_agbno = args->mp->m_sb.sb_agblocks - 1; in xfs_alloc_ag_vextent_near()
1583 ASSERT(args->min_agbno <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1586 if (args->agbno < args->min_agbno) in xfs_alloc_ag_vextent_near()
1587 args->agbno = args->min_agbno; in xfs_alloc_ag_vextent_near()
1588 if (args->agbno > args->max_agbno) in xfs_alloc_ag_vextent_near()
1589 args->agbno = args->max_agbno; in xfs_alloc_ag_vextent_near()
1599 error = xfs_alloc_cur_setup(args, &acur); in xfs_alloc_ag_vextent_near()
1601 error = xfs_alloc_ag_vextent_small(args, acur.cnt, &bno, in xfs_alloc_ag_vextent_near()
1606 trace_xfs_alloc_near_noentry(args); in xfs_alloc_ag_vextent_near()
1625 error = xfs_alloc_ag_vextent_lastblock(args, &acur, &bno, &len, in xfs_alloc_ag_vextent_near()
1637 error = xfs_alloc_ag_vextent_locality(args, &acur, &i); in xfs_alloc_ag_vextent_near()
1646 trace_xfs_alloc_near_busy(args); in xfs_alloc_ag_vextent_near()
1647 xfs_extent_busy_flush(args->mp, args->pag, in xfs_alloc_ag_vextent_near()
1651 trace_xfs_alloc_size_neither(args); in xfs_alloc_ag_vextent_near()
1652 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1658 error = xfs_alloc_cur_finish(args, &acur); in xfs_alloc_ag_vextent_near()
1673 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_size() argument
1675 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_size()
1691 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1692 args->pag, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_size()
1699 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1710 error = xfs_alloc_ag_vextent_small(args, cnt_cur, in xfs_alloc_ag_vextent_size()
1716 trace_xfs_alloc_size_noentry(args); in xfs_alloc_ag_vextent_size()
1720 busy = xfs_alloc_compute_aligned(args, fbno, flen, &rbno, in xfs_alloc_ag_vextent_size()
1730 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1735 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1738 if (rlen >= args->maxlen) in xfs_alloc_ag_vextent_size()
1752 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1753 xfs_extent_busy_flush(args->mp, in xfs_alloc_ag_vextent_size()
1754 args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1766 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1767 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1774 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1792 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1798 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1800 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1801 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1813 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1820 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1829 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1833 args->len = rlen; in xfs_alloc_ag_vextent_size()
1834 if (rlen < args->minlen) { in xfs_alloc_ag_vextent_size()
1837 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1838 xfs_extent_busy_flush(args->mp, args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1843 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1845 rlen = args->len; in xfs_alloc_ag_vextent_size()
1846 if (XFS_IS_CORRUPT(args->mp, rlen > flen)) { in xfs_alloc_ag_vextent_size()
1853 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1854 args->pag, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_size()
1861 args->len = rlen; in xfs_alloc_ag_vextent_size()
1862 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1863 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1864 args->agbno + args->len > in xfs_alloc_ag_vextent_size()
1869 trace_xfs_alloc_size_done(args); in xfs_alloc_ag_vextent_size()
1873 trace_xfs_alloc_size_error(args); in xfs_alloc_ag_vextent_size()
1882 trace_xfs_alloc_size_nominleft(args); in xfs_alloc_ag_vextent_size()
1883 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
2298 struct xfs_alloc_arg *args, in xfs_alloc_space_available() argument
2302 struct xfs_perag *pag = args->pag; in xfs_alloc_space_available()
2311 reservation = xfs_ag_resv_needed(pag, args->resv); in xfs_alloc_space_available()
2314 alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop; in xfs_alloc_space_available()
2326 reservation - min_free - args->minleft); in xfs_alloc_space_available()
2327 if (available < (int)max(args->total, alloc_len)) in xfs_alloc_space_available()
2334 if (available < (int)args->maxlen && !(flags & XFS_ALLOC_FLAG_CHECK)) { in xfs_alloc_space_available()
2335 args->maxlen = available; in xfs_alloc_space_available()
2336 ASSERT(args->maxlen > 0); in xfs_alloc_space_available()
2337 ASSERT(args->maxlen >= args->minlen); in xfs_alloc_space_available()
2552 struct xfs_alloc_arg *args, in xfs_exact_minlen_extent_available() argument
2561 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, agbp, in xfs_exact_minlen_extent_available()
2562 args->pag, XFS_BTNUM_CNT); in xfs_exact_minlen_extent_available()
2563 error = xfs_alloc_lookup_ge(cnt_cur, 0, args->minlen, stat); in xfs_exact_minlen_extent_available()
2576 if (*stat == 1 && flen != args->minlen) in xfs_exact_minlen_extent_available()
2592 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
2595 struct xfs_mount *mp = args->mp; in xfs_alloc_fix_freelist()
2596 struct xfs_perag *pag = args->pag; in xfs_alloc_fix_freelist()
2597 struct xfs_trans *tp = args->tp; in xfs_alloc_fix_freelist()
2623 if (pag->pagf_metadata && (args->datatype & XFS_ALLOC_USERDATA) && in xfs_alloc_fix_freelist()
2630 if (!xfs_alloc_space_available(args, need, flags | in xfs_alloc_fix_freelist()
2654 if (!xfs_alloc_space_available(args, need, flags)) in xfs_alloc_fix_freelist()
2658 if (args->alloc_minlen_only) { in xfs_alloc_fix_freelist()
2661 error = xfs_exact_minlen_extent_available(args, agbp, &stat); in xfs_alloc_fix_freelist()
2702 xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo); in xfs_alloc_fix_freelist()
2708 targs.agno = args->agno; in xfs_alloc_fix_freelist()
2748 args->agbp = agbp; in xfs_alloc_fix_freelist()
2757 args->agbp = NULL; in xfs_alloc_fix_freelist()
3157 struct xfs_alloc_arg *args) /* allocation argument structure */ in xfs_alloc_vextent() argument
3168 mp = args->mp; in xfs_alloc_vextent()
3169 type = args->otype = args->type; in xfs_alloc_vextent()
3170 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
3177 if (args->maxlen > agsize) in xfs_alloc_vextent()
3178 args->maxlen = agsize; in xfs_alloc_vextent()
3179 if (args->alignment == 0) in xfs_alloc_vextent()
3180 args->alignment = 1; in xfs_alloc_vextent()
3181 ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount); in xfs_alloc_vextent()
3182 ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize); in xfs_alloc_vextent()
3183 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent()
3184 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent()
3185 ASSERT(args->mod < args->prod); in xfs_alloc_vextent()
3186 if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount || in xfs_alloc_vextent()
3187 XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize || in xfs_alloc_vextent()
3188 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent()
3189 args->mod >= args->prod) { in xfs_alloc_vextent()
3190 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
3191 trace_xfs_alloc_vextent_badargs(args); in xfs_alloc_vextent()
3202 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3203 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
3204 error = xfs_alloc_fix_freelist(args, 0); in xfs_alloc_vextent()
3206 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
3209 if (!args->agbp) { in xfs_alloc_vextent()
3210 trace_xfs_alloc_vextent_noagbp(args); in xfs_alloc_vextent()
3213 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
3214 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
3222 if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent()
3224 args->fsbno = XFS_AGB_TO_FSB(mp, in xfs_alloc_vextent()
3229 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
3230 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
3240 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3241 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
3248 args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
3256 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
3257 error = xfs_alloc_fix_freelist(args, flags); in xfs_alloc_vextent()
3259 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
3265 if (args->agbp) { in xfs_alloc_vextent()
3266 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
3271 trace_xfs_alloc_vextent_loopfailed(args); in xfs_alloc_vextent()
3276 if (args->agno == sagno && in xfs_alloc_vextent()
3278 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
3286 if (++(args->agno) == mp->m_sb.sb_agcount) { in xfs_alloc_vextent()
3287 if (args->tp->t_firstblock != NULLFSBLOCK) in xfs_alloc_vextent()
3288 args->agno = sagno; in xfs_alloc_vextent()
3290 args->agno = 0; in xfs_alloc_vextent()
3296 if (args->agno == sagno) { in xfs_alloc_vextent()
3298 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
3299 trace_xfs_alloc_vextent_allfailed(args); in xfs_alloc_vextent()
3305 args->agbno = XFS_FSB_TO_AGBNO(mp, in xfs_alloc_vextent()
3306 args->fsbno); in xfs_alloc_vextent()
3307 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
3310 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3313 if (args->agno == sagno) in xfs_alloc_vextent()
3317 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent()
3325 if (args->agbno == NULLAGBLOCK) in xfs_alloc_vextent()
3326 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
3328 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent()
3330 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent()
3331 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent()
3332 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent()
3333 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), in xfs_alloc_vextent()
3334 args->len); in xfs_alloc_vextent()
3338 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3341 xfs_perag_put(args->pag); in xfs_alloc_vextent()
3352 struct xfs_alloc_arg args; in xfs_free_extent_fix_freelist() local
3355 memset(&args, 0, sizeof(struct xfs_alloc_arg)); in xfs_free_extent_fix_freelist()
3356 args.tp = tp; in xfs_free_extent_fix_freelist()
3357 args.mp = tp->t_mountp; in xfs_free_extent_fix_freelist()
3358 args.agno = pag->pag_agno; in xfs_free_extent_fix_freelist()
3359 args.pag = pag; in xfs_free_extent_fix_freelist()
3365 if (args.agno >= args.mp->m_sb.sb_agcount) in xfs_free_extent_fix_freelist()
3368 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); in xfs_free_extent_fix_freelist()
3372 *agbp = args.agbp; in xfs_free_extent_fix_freelist()