Lines Matching refs:args

317 	xfs_alloc_arg_t	*args,		/* allocation argument structure */  in xfs_alloc_compute_aligned()  argument
330 busy = xfs_extent_busy_trim(args, &bno, &len, busy_gen); in xfs_alloc_compute_aligned()
336 if (bno < args->min_agbno && bno + len > args->min_agbno) { in xfs_alloc_compute_aligned()
337 diff = args->min_agbno - bno; in xfs_alloc_compute_aligned()
344 if (args->alignment > 1 && len >= args->minlen) { in xfs_alloc_compute_aligned()
345 xfs_agblock_t aligned_bno = roundup(bno, args->alignment); in xfs_alloc_compute_aligned()
436 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_len() argument
441 ASSERT(args->mod < args->prod); in xfs_alloc_fix_len()
442 rlen = args->len; in xfs_alloc_fix_len()
443 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
444 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
445 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || in xfs_alloc_fix_len()
446 (args->mod == 0 && rlen < args->prod)) in xfs_alloc_fix_len()
448 k = rlen % args->prod; in xfs_alloc_fix_len()
449 if (k == args->mod) in xfs_alloc_fix_len()
451 if (k > args->mod) in xfs_alloc_fix_len()
452 rlen = rlen - (k - args->mod); in xfs_alloc_fix_len()
454 rlen = rlen - args->prod + (args->mod - k); in xfs_alloc_fix_len()
456 if ((int)rlen < (int)args->minlen) in xfs_alloc_fix_len()
458 ASSERT(rlen >= args->minlen && rlen <= args->maxlen); in xfs_alloc_fix_len()
459 ASSERT(rlen % args->prod == args->mod); in xfs_alloc_fix_len()
460 ASSERT(args->pag->pagf_freeblks + args->pag->pagf_flcount >= in xfs_alloc_fix_len()
461 rlen + args->minleft); in xfs_alloc_fix_len()
462 args->len = rlen; in xfs_alloc_fix_len()
812 struct xfs_alloc_arg *args, in xfs_alloc_cur_setup() argument
818 acur->cur_len = args->maxlen; in xfs_alloc_cur_setup()
833 acur->cnt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
834 args->agbp, args->pag, XFS_BTNUM_CNT); in xfs_alloc_cur_setup()
835 error = xfs_alloc_lookup_ge(acur->cnt, 0, args->maxlen, &i); in xfs_alloc_cur_setup()
843 acur->bnolt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
844 args->agbp, args->pag, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
846 acur->bnogt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_cur_setup()
847 args->agbp, args->pag, XFS_BTNUM_BNO); in xfs_alloc_cur_setup()
878 struct xfs_alloc_arg *args, in xfs_alloc_cur_check() argument
896 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_cur_check()
903 if (len < args->minlen) { in xfs_alloc_cur_check()
908 busy = xfs_alloc_compute_aligned(args, bno, len, &bnoa, &lena, in xfs_alloc_cur_check()
914 if (bnoa < args->min_agbno || bnoa > args->max_agbno) { in xfs_alloc_cur_check()
918 if (lena < args->minlen) in xfs_alloc_cur_check()
921 args->len = XFS_EXTLEN_MIN(lena, args->maxlen); in xfs_alloc_cur_check()
922 xfs_alloc_fix_len(args); in xfs_alloc_cur_check()
923 ASSERT(args->len >= args->minlen); in xfs_alloc_cur_check()
924 if (args->len < acur->len) in xfs_alloc_cur_check()
931 diff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_cur_check()
932 args->alignment, args->datatype, in xfs_alloc_cur_check()
945 ASSERT(args->len > acur->len || in xfs_alloc_cur_check()
946 (args->len == acur->len && diff <= acur->diff)); in xfs_alloc_cur_check()
950 acur->len = args->len; in xfs_alloc_cur_check()
959 if (acur->diff == 0 && acur->len == args->maxlen) in xfs_alloc_cur_check()
964 trace_xfs_alloc_cur_check(args->mp, cur->bc_btnum, bno, len, diff, in xfs_alloc_cur_check()
975 struct xfs_alloc_arg *args, in xfs_alloc_cur_finish() argument
978 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_cur_finish()
991 args->agbno = acur->bno; in xfs_alloc_cur_finish()
992 args->len = acur->len; in xfs_alloc_cur_finish()
993 args->wasfromfl = 0; in xfs_alloc_cur_finish()
995 trace_xfs_alloc_cur(args); in xfs_alloc_cur_finish()
1005 struct xfs_alloc_arg *args, in xfs_alloc_cntbt_iter() argument
1019 error = xfs_alloc_lookup_ge(cur, args->agbno, cur_len, &i); in xfs_alloc_cntbt_iter()
1029 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_cntbt_iter()
1042 if (bno > args->agbno) { in xfs_alloc_cntbt_iter()
1047 error = xfs_alloc_cur_check(args, acur, cur, in xfs_alloc_cntbt_iter()
1076 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
1082 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_small()
1102 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_small()
1109 if (args->minlen != 1 || args->alignment != 1 || in xfs_alloc_ag_vextent_small()
1110 args->resv == XFS_AG_RESV_AGFL || in xfs_alloc_ag_vextent_small()
1111 be32_to_cpu(agf->agf_flcount) <= args->minleft) in xfs_alloc_ag_vextent_small()
1114 error = xfs_alloc_get_freelist(args->pag, args->tp, args->agbp, in xfs_alloc_ag_vextent_small()
1121 xfs_extent_busy_reuse(args->mp, args->pag, fbno, 1, in xfs_alloc_ag_vextent_small()
1122 (args->datatype & XFS_ALLOC_NOBUSY)); in xfs_alloc_ag_vextent_small()
1124 if (args->datatype & XFS_ALLOC_USERDATA) { in xfs_alloc_ag_vextent_small()
1127 error = xfs_trans_get_buf(args->tp, args->mp->m_ddev_targp, in xfs_alloc_ag_vextent_small()
1128 XFS_AGB_TO_DADDR(args->mp, args->agno, fbno), in xfs_alloc_ag_vextent_small()
1129 args->mp->m_bsize, 0, &bp); in xfs_alloc_ag_vextent_small()
1132 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
1134 *fbnop = args->agbno = fbno; in xfs_alloc_ag_vextent_small()
1135 *flenp = args->len = 1; in xfs_alloc_ag_vextent_small()
1136 if (XFS_IS_CORRUPT(args->mp, fbno >= be32_to_cpu(agf->agf_length))) { in xfs_alloc_ag_vextent_small()
1140 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
1141 trace_xfs_alloc_small_freelist(args); in xfs_alloc_ag_vextent_small()
1147 error = xfs_rmap_free(args->tp, args->agbp, args->pag, fbno, 1, in xfs_alloc_ag_vextent_small()
1159 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
1160 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
1161 trace_xfs_alloc_small_notenough(args); in xfs_alloc_ag_vextent_small()
1167 trace_xfs_alloc_small_done(args); in xfs_alloc_ag_vextent_small()
1171 trace_xfs_alloc_small_error(args); in xfs_alloc_ag_vextent_small()
1183 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
1185 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_exact()
1197 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
1202 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1203 args->pag, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_exact()
1210 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); in xfs_alloc_ag_vextent_exact()
1222 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_exact()
1226 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
1233 xfs_extent_busy_trim(args, &tbno, &tlen, &busy_gen); in xfs_alloc_ag_vextent_exact()
1239 if (tbno > args->agbno) in xfs_alloc_ag_vextent_exact()
1241 if (tlen < args->minlen) in xfs_alloc_ag_vextent_exact()
1244 if (tend < args->agbno + args->minlen) in xfs_alloc_ag_vextent_exact()
1253 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) in xfs_alloc_ag_vextent_exact()
1254 - args->agbno; in xfs_alloc_ag_vextent_exact()
1255 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
1256 ASSERT(args->agbno + args->len <= tend); in xfs_alloc_ag_vextent_exact()
1262 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
1263 args->pag, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_exact()
1264 ASSERT(args->agbno + args->len <= be32_to_cpu(agf->agf_length)); in xfs_alloc_ag_vextent_exact()
1265 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, in xfs_alloc_ag_vextent_exact()
1266 args->len, XFSA_FIXUP_BNO_OK); in xfs_alloc_ag_vextent_exact()
1275 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
1276 trace_xfs_alloc_exact_done(args); in xfs_alloc_ag_vextent_exact()
1282 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
1283 trace_xfs_alloc_exact_notfound(args); in xfs_alloc_ag_vextent_exact()
1288 trace_xfs_alloc_exact_error(args); in xfs_alloc_ag_vextent_exact()
1298 struct xfs_alloc_arg *args, in xfs_alloc_walk_iter() argument
1317 error = xfs_alloc_cur_check(args, acur, cur, &i); in xfs_alloc_walk_iter()
1350 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_locality() argument
1363 error = xfs_alloc_lookup_ge(acur->cnt, args->agbno, acur->cur_len, &i); in xfs_alloc_ag_vextent_locality()
1366 error = xfs_alloc_lookup_le(acur->bnolt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1369 error = xfs_alloc_lookup_ge(acur->bnogt, args->agbno, 0, &i); in xfs_alloc_ag_vextent_locality()
1399 trace_xfs_alloc_cur_lookup(args); in xfs_alloc_ag_vextent_locality()
1405 error = xfs_alloc_walk_iter(args, acur, acur->bnolt, false, in xfs_alloc_ag_vextent_locality()
1410 trace_xfs_alloc_cur_left(args); in xfs_alloc_ag_vextent_locality()
1415 error = xfs_alloc_walk_iter(args, acur, acur->bnogt, true, true, in xfs_alloc_ag_vextent_locality()
1420 trace_xfs_alloc_cur_right(args); in xfs_alloc_ag_vextent_locality()
1430 error = xfs_alloc_cntbt_iter(args, acur); in xfs_alloc_ag_vextent_locality()
1434 trace_xfs_alloc_cur_lookup_done(args); in xfs_alloc_ag_vextent_locality()
1460 error = xfs_alloc_walk_iter(args, acur, fbcur, fbinc, true, -1, in xfs_alloc_ag_vextent_locality()
1475 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_lastblock() argument
1496 if (*len || args->alignment > 1) { in xfs_alloc_ag_vextent_lastblock()
1502 if (XFS_IS_CORRUPT(args->mp, i != 1)) in xfs_alloc_ag_vextent_lastblock()
1504 if (*len >= args->minlen) in xfs_alloc_ag_vextent_lastblock()
1510 ASSERT(*len >= args->minlen); in xfs_alloc_ag_vextent_lastblock()
1515 error = xfs_alloc_walk_iter(args, acur, acur->cnt, true, false, -1, &i); in xfs_alloc_ag_vextent_lastblock()
1526 trace_xfs_alloc_near_first(args); in xfs_alloc_ag_vextent_lastblock()
1539 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_near() argument
1549 if (!args->min_agbno && !args->max_agbno) in xfs_alloc_ag_vextent_near()
1550 args->max_agbno = args->mp->m_sb.sb_agblocks - 1; in xfs_alloc_ag_vextent_near()
1551 ASSERT(args->min_agbno <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1554 if (args->agbno < args->min_agbno) in xfs_alloc_ag_vextent_near()
1555 args->agbno = args->min_agbno; in xfs_alloc_ag_vextent_near()
1556 if (args->agbno > args->max_agbno) in xfs_alloc_ag_vextent_near()
1557 args->agbno = args->max_agbno; in xfs_alloc_ag_vextent_near()
1569 error = xfs_alloc_cur_setup(args, &acur); in xfs_alloc_ag_vextent_near()
1571 error = xfs_alloc_ag_vextent_small(args, acur.cnt, &bno, in xfs_alloc_ag_vextent_near()
1576 trace_xfs_alloc_near_noentry(args); in xfs_alloc_ag_vextent_near()
1595 error = xfs_alloc_ag_vextent_lastblock(args, &acur, &bno, &len, in xfs_alloc_ag_vextent_near()
1607 error = xfs_alloc_ag_vextent_locality(args, &acur, &i); in xfs_alloc_ag_vextent_near()
1623 trace_xfs_alloc_near_busy(args); in xfs_alloc_ag_vextent_near()
1624 error = xfs_extent_busy_flush(args->tp, args->pag, in xfs_alloc_ag_vextent_near()
1632 trace_xfs_alloc_size_neither(args); in xfs_alloc_ag_vextent_near()
1633 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1639 error = xfs_alloc_cur_finish(args, &acur); in xfs_alloc_ag_vextent_near()
1654 struct xfs_alloc_arg *args, in xfs_alloc_ag_vextent_size() argument
1657 struct xfs_agf *agf = args->agbp->b_addr; in xfs_alloc_ag_vextent_size()
1675 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1676 args->pag, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_size()
1683 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1694 error = xfs_alloc_ag_vextent_small(args, cnt_cur, in xfs_alloc_ag_vextent_size()
1700 trace_xfs_alloc_size_noentry(args); in xfs_alloc_ag_vextent_size()
1704 busy = xfs_alloc_compute_aligned(args, fbno, flen, &rbno, in xfs_alloc_ag_vextent_size()
1714 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1719 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1722 if (rlen >= args->maxlen) in xfs_alloc_ag_vextent_size()
1738 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1739 error = xfs_extent_busy_flush(args->tp, args->pag, in xfs_alloc_ag_vextent_size()
1756 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1757 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1764 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1782 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1788 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1790 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1791 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1803 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1810 if (XFS_IS_CORRUPT(args->mp, i != 1)) { in xfs_alloc_ag_vextent_size()
1819 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1823 args->len = rlen; in xfs_alloc_ag_vextent_size()
1824 if (rlen < args->minlen) { in xfs_alloc_ag_vextent_size()
1833 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1834 error = xfs_extent_busy_flush(args->tp, args->pag, in xfs_alloc_ag_vextent_size()
1845 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1847 rlen = args->len; in xfs_alloc_ag_vextent_size()
1848 if (XFS_IS_CORRUPT(args->mp, rlen > flen)) { in xfs_alloc_ag_vextent_size()
1855 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1856 args->pag, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_size()
1863 args->len = rlen; in xfs_alloc_ag_vextent_size()
1864 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1865 if (XFS_IS_CORRUPT(args->mp, in xfs_alloc_ag_vextent_size()
1866 args->agbno + args->len > in xfs_alloc_ag_vextent_size()
1871 trace_xfs_alloc_size_done(args); in xfs_alloc_ag_vextent_size()
1875 trace_xfs_alloc_size_error(args); in xfs_alloc_ag_vextent_size()
1884 trace_xfs_alloc_size_nominleft(args); in xfs_alloc_ag_vextent_size()
1885 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
2300 struct xfs_alloc_arg *args, in xfs_alloc_space_available() argument
2304 struct xfs_perag *pag = args->pag; in xfs_alloc_space_available()
2313 reservation = xfs_ag_resv_needed(pag, args->resv); in xfs_alloc_space_available()
2316 alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop; in xfs_alloc_space_available()
2328 reservation - min_free - args->minleft); in xfs_alloc_space_available()
2329 if (available < (int)max(args->total, alloc_len)) in xfs_alloc_space_available()
2336 if (available < (int)args->maxlen && !(flags & XFS_ALLOC_FLAG_CHECK)) { in xfs_alloc_space_available()
2337 args->maxlen = available; in xfs_alloc_space_available()
2338 ASSERT(args->maxlen > 0); in xfs_alloc_space_available()
2339 ASSERT(args->maxlen >= args->minlen); in xfs_alloc_space_available()
2570 struct xfs_alloc_arg *args, in xfs_exact_minlen_extent_available() argument
2579 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, agbp, in xfs_exact_minlen_extent_available()
2580 args->pag, XFS_BTNUM_CNT); in xfs_exact_minlen_extent_available()
2581 error = xfs_alloc_lookup_ge(cnt_cur, 0, args->minlen, stat); in xfs_exact_minlen_extent_available()
2594 if (*stat == 1 && flen != args->minlen) in xfs_exact_minlen_extent_available()
2610 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
2613 struct xfs_mount *mp = args->mp; in xfs_alloc_fix_freelist()
2614 struct xfs_perag *pag = args->pag; in xfs_alloc_fix_freelist()
2615 struct xfs_trans *tp = args->tp; in xfs_alloc_fix_freelist()
2642 (args->datatype & XFS_ALLOC_USERDATA) && in xfs_alloc_fix_freelist()
2649 if (!xfs_alloc_space_available(args, need, alloc_flags | in xfs_alloc_fix_freelist()
2673 if (!xfs_alloc_space_available(args, need, alloc_flags)) in xfs_alloc_fix_freelist()
2677 if (args->alloc_minlen_only) { in xfs_alloc_fix_freelist()
2680 error = xfs_exact_minlen_extent_available(args, agbp, &stat); in xfs_alloc_fix_freelist()
2722 error = xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo); in xfs_alloc_fix_freelist()
2730 targs.agno = args->agno; in xfs_alloc_fix_freelist()
2781 args->agbp = agbp; in xfs_alloc_fix_freelist()
2790 args->agbp = NULL; in xfs_alloc_fix_freelist()
3251 struct xfs_alloc_arg *args, in xfs_alloc_vextent_check_args() argument
3255 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_check_args()
3258 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent_check_args()
3261 if (args->tp->t_highest_agno != NULLAGNUMBER) in xfs_alloc_vextent_check_args()
3262 *minimum_agno = args->tp->t_highest_agno; in xfs_alloc_vextent_check_args()
3270 if (args->maxlen > agsize) in xfs_alloc_vextent_check_args()
3271 args->maxlen = agsize; in xfs_alloc_vextent_check_args()
3272 if (args->alignment == 0) in xfs_alloc_vextent_check_args()
3273 args->alignment = 1; in xfs_alloc_vextent_check_args()
3275 ASSERT(args->minlen > 0); in xfs_alloc_vextent_check_args()
3276 ASSERT(args->maxlen > 0); in xfs_alloc_vextent_check_args()
3277 ASSERT(args->alignment > 0); in xfs_alloc_vextent_check_args()
3278 ASSERT(args->resv != XFS_AG_RESV_AGFL); in xfs_alloc_vextent_check_args()
3282 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent_check_args()
3283 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent_check_args()
3284 ASSERT(args->mod < args->prod); in xfs_alloc_vextent_check_args()
3288 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent_check_args()
3289 args->mod >= args->prod) { in xfs_alloc_vextent_check_args()
3290 trace_xfs_alloc_vextent_badargs(args); in xfs_alloc_vextent_check_args()
3294 if (args->agno != NULLAGNUMBER && *minimum_agno > args->agno) { in xfs_alloc_vextent_check_args()
3295 trace_xfs_alloc_vextent_skip_deadlock(args); in xfs_alloc_vextent_check_args()
3311 struct xfs_alloc_arg *args, in xfs_alloc_vextent_prepare_ag() argument
3314 bool need_pag = !args->pag; in xfs_alloc_vextent_prepare_ag()
3318 args->pag = xfs_perag_get(args->mp, args->agno); in xfs_alloc_vextent_prepare_ag()
3320 args->agbp = NULL; in xfs_alloc_vextent_prepare_ag()
3321 error = xfs_alloc_fix_freelist(args, alloc_flags); in xfs_alloc_vextent_prepare_ag()
3323 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent_prepare_ag()
3325 xfs_perag_put(args->pag); in xfs_alloc_vextent_prepare_ag()
3326 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent_prepare_ag()
3329 if (!args->agbp) { in xfs_alloc_vextent_prepare_ag()
3331 trace_xfs_alloc_vextent_noagbp(args); in xfs_alloc_vextent_prepare_ag()
3332 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent_prepare_ag()
3335 args->wasfromfl = 0; in xfs_alloc_vextent_prepare_ag()
3348 struct xfs_alloc_arg *args, in xfs_alloc_vextent_finish() argument
3353 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_finish()
3372 if (args->agbp && in xfs_alloc_vextent_finish()
3373 (args->tp->t_highest_agno == NULLAGNUMBER || in xfs_alloc_vextent_finish()
3374 args->agno > minimum_agno)) in xfs_alloc_vextent_finish()
3375 args->tp->t_highest_agno = args->agno; in xfs_alloc_vextent_finish()
3383 if (alloc_error || args->agbno == NULLAGBLOCK) { in xfs_alloc_vextent_finish()
3384 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent_finish()
3389 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent_finish()
3391 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent_finish()
3392 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent_finish()
3393 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent_finish()
3394 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), args->len); in xfs_alloc_vextent_finish()
3397 if (!xfs_rmap_should_skip_owner_update(&args->oinfo)) { in xfs_alloc_vextent_finish()
3398 error = xfs_rmap_alloc(args->tp, args->agbp, args->pag, in xfs_alloc_vextent_finish()
3399 args->agbno, args->len, &args->oinfo); in xfs_alloc_vextent_finish()
3404 if (!args->wasfromfl) { in xfs_alloc_vextent_finish()
3405 error = xfs_alloc_update_counters(args->tp, args->agbp, in xfs_alloc_vextent_finish()
3406 -((long)(args->len))); in xfs_alloc_vextent_finish()
3410 ASSERT(!xfs_extent_busy_search(mp, args->pag, args->agbno, in xfs_alloc_vextent_finish()
3411 args->len)); in xfs_alloc_vextent_finish()
3414 xfs_ag_resv_alloc_extent(args->pag, args->resv, args); in xfs_alloc_vextent_finish()
3417 XFS_STATS_ADD(mp, xs_allocb, args->len); in xfs_alloc_vextent_finish()
3419 trace_xfs_alloc_vextent_finish(args); in xfs_alloc_vextent_finish()
3422 if (drop_perag && args->pag) { in xfs_alloc_vextent_finish()
3423 xfs_perag_rele(args->pag); in xfs_alloc_vextent_finish()
3424 args->pag = NULL; in xfs_alloc_vextent_finish()
3438 struct xfs_alloc_arg *args, in xfs_alloc_vextent_this_ag() argument
3441 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_this_ag()
3446 ASSERT(args->pag != NULL); in xfs_alloc_vextent_this_ag()
3447 ASSERT(args->pag->pag_agno == agno); in xfs_alloc_vextent_this_ag()
3449 args->agno = agno; in xfs_alloc_vextent_this_ag()
3450 args->agbno = 0; in xfs_alloc_vextent_this_ag()
3452 trace_xfs_alloc_vextent_this_ag(args); in xfs_alloc_vextent_this_ag()
3454 error = xfs_alloc_vextent_check_args(args, XFS_AGB_TO_FSB(mp, agno, 0), in xfs_alloc_vextent_this_ag()
3462 error = xfs_alloc_vextent_prepare_ag(args, alloc_flags); in xfs_alloc_vextent_this_ag()
3463 if (!error && args->agbp) in xfs_alloc_vextent_this_ag()
3464 error = xfs_alloc_ag_vextent_size(args, alloc_flags); in xfs_alloc_vextent_this_ag()
3466 return xfs_alloc_vextent_finish(args, minimum_agno, error, false); in xfs_alloc_vextent_this_ag()
3489 struct xfs_alloc_arg *args, in xfs_alloc_vextent_iterate_ags() argument
3495 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_iterate_ags()
3504 mp->m_sb.sb_agcount, agno, args->pag) { in xfs_alloc_vextent_iterate_ags()
3505 args->agno = agno; in xfs_alloc_vextent_iterate_ags()
3506 error = xfs_alloc_vextent_prepare_ag(args, alloc_flags); in xfs_alloc_vextent_iterate_ags()
3509 if (!args->agbp) { in xfs_alloc_vextent_iterate_ags()
3510 trace_xfs_alloc_vextent_loopfailed(args); in xfs_alloc_vextent_iterate_ags()
3518 if (args->agno == start_agno && target_agbno) { in xfs_alloc_vextent_iterate_ags()
3519 args->agbno = target_agbno; in xfs_alloc_vextent_iterate_ags()
3520 error = xfs_alloc_ag_vextent_near(args, alloc_flags); in xfs_alloc_vextent_iterate_ags()
3522 args->agbno = 0; in xfs_alloc_vextent_iterate_ags()
3523 error = xfs_alloc_ag_vextent_size(args, alloc_flags); in xfs_alloc_vextent_iterate_ags()
3528 xfs_perag_rele(args->pag); in xfs_alloc_vextent_iterate_ags()
3529 args->pag = NULL; in xfs_alloc_vextent_iterate_ags()
3532 if (args->agbp) in xfs_alloc_vextent_iterate_ags()
3546 ASSERT(args->pag == NULL); in xfs_alloc_vextent_iterate_ags()
3547 trace_xfs_alloc_vextent_allfailed(args); in xfs_alloc_vextent_iterate_ags()
3561 struct xfs_alloc_arg *args, in xfs_alloc_vextent_start_ag() argument
3564 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_start_ag()
3572 ASSERT(args->pag == NULL); in xfs_alloc_vextent_start_ag()
3574 args->agno = NULLAGNUMBER; in xfs_alloc_vextent_start_ag()
3575 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent_start_ag()
3577 trace_xfs_alloc_vextent_start_ag(args); in xfs_alloc_vextent_start_ag()
3579 error = xfs_alloc_vextent_check_args(args, target, &minimum_agno); in xfs_alloc_vextent_start_ag()
3586 if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent_start_ag()
3595 error = xfs_alloc_vextent_iterate_ags(args, minimum_agno, start_agno, in xfs_alloc_vextent_start_ag()
3599 if (args->agno == start_agno) in xfs_alloc_vextent_start_ag()
3603 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent_start_ag()
3607 return xfs_alloc_vextent_finish(args, minimum_agno, error, true); in xfs_alloc_vextent_start_ag()
3617 struct xfs_alloc_arg *args, in xfs_alloc_vextent_first_ag() argument
3620 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_first_ag()
3626 ASSERT(args->pag == NULL); in xfs_alloc_vextent_first_ag()
3628 args->agno = NULLAGNUMBER; in xfs_alloc_vextent_first_ag()
3629 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent_first_ag()
3631 trace_xfs_alloc_vextent_first_ag(args); in xfs_alloc_vextent_first_ag()
3633 error = xfs_alloc_vextent_check_args(args, target, &minimum_agno); in xfs_alloc_vextent_first_ag()
3641 error = xfs_alloc_vextent_iterate_ags(args, minimum_agno, start_agno, in xfs_alloc_vextent_first_ag()
3643 return xfs_alloc_vextent_finish(args, minimum_agno, error, true); in xfs_alloc_vextent_first_ag()
3652 struct xfs_alloc_arg *args, in xfs_alloc_vextent_exact_bno() argument
3655 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_exact_bno()
3659 ASSERT(args->pag != NULL); in xfs_alloc_vextent_exact_bno()
3660 ASSERT(args->pag->pag_agno == XFS_FSB_TO_AGNO(mp, target)); in xfs_alloc_vextent_exact_bno()
3662 args->agno = XFS_FSB_TO_AGNO(mp, target); in xfs_alloc_vextent_exact_bno()
3663 args->agbno = XFS_FSB_TO_AGBNO(mp, target); in xfs_alloc_vextent_exact_bno()
3665 trace_xfs_alloc_vextent_exact_bno(args); in xfs_alloc_vextent_exact_bno()
3667 error = xfs_alloc_vextent_check_args(args, target, &minimum_agno); in xfs_alloc_vextent_exact_bno()
3674 error = xfs_alloc_vextent_prepare_ag(args, 0); in xfs_alloc_vextent_exact_bno()
3675 if (!error && args->agbp) in xfs_alloc_vextent_exact_bno()
3676 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_vextent_exact_bno()
3678 return xfs_alloc_vextent_finish(args, minimum_agno, error, false); in xfs_alloc_vextent_exact_bno()
3689 struct xfs_alloc_arg *args, in xfs_alloc_vextent_near_bno() argument
3692 struct xfs_mount *mp = args->mp; in xfs_alloc_vextent_near_bno()
3694 bool needs_perag = args->pag == NULL; in xfs_alloc_vextent_near_bno()
3699 ASSERT(args->pag->pag_agno == XFS_FSB_TO_AGNO(mp, target)); in xfs_alloc_vextent_near_bno()
3701 args->agno = XFS_FSB_TO_AGNO(mp, target); in xfs_alloc_vextent_near_bno()
3702 args->agbno = XFS_FSB_TO_AGBNO(mp, target); in xfs_alloc_vextent_near_bno()
3704 trace_xfs_alloc_vextent_near_bno(args); in xfs_alloc_vextent_near_bno()
3706 error = xfs_alloc_vextent_check_args(args, target, &minimum_agno); in xfs_alloc_vextent_near_bno()
3714 args->pag = xfs_perag_grab(mp, args->agno); in xfs_alloc_vextent_near_bno()
3716 error = xfs_alloc_vextent_prepare_ag(args, alloc_flags); in xfs_alloc_vextent_near_bno()
3717 if (!error && args->agbp) in xfs_alloc_vextent_near_bno()
3718 error = xfs_alloc_ag_vextent_near(args, alloc_flags); in xfs_alloc_vextent_near_bno()
3720 return xfs_alloc_vextent_finish(args, minimum_agno, error, needs_perag); in xfs_alloc_vextent_near_bno()
3730 struct xfs_alloc_arg args; in xfs_free_extent_fix_freelist() local
3733 memset(&args, 0, sizeof(struct xfs_alloc_arg)); in xfs_free_extent_fix_freelist()
3734 args.tp = tp; in xfs_free_extent_fix_freelist()
3735 args.mp = tp->t_mountp; in xfs_free_extent_fix_freelist()
3736 args.agno = pag->pag_agno; in xfs_free_extent_fix_freelist()
3737 args.pag = pag; in xfs_free_extent_fix_freelist()
3743 if (args.agno >= args.mp->m_sb.sb_agcount) in xfs_free_extent_fix_freelist()
3746 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); in xfs_free_extent_fix_freelist()
3750 *agbp = args.agbp; in xfs_free_extent_fix_freelist()