Lines Matching refs:args

254 	xfs_alloc_arg_t	*args,		/* allocation argument structure */  in xfs_alloc_compute_aligned()  argument
267 busy = xfs_extent_busy_trim(args, &bno, &len, busy_gen); in xfs_alloc_compute_aligned()
273 if (bno < args->min_agbno && bno + len > args->min_agbno) { in xfs_alloc_compute_aligned()
274 diff = args->min_agbno - bno; in xfs_alloc_compute_aligned()
281 if (args->alignment > 1 && len >= args->minlen) { in xfs_alloc_compute_aligned()
282 xfs_agblock_t aligned_bno = roundup(bno, args->alignment); in xfs_alloc_compute_aligned()
373 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_len() argument
378 ASSERT(args->mod < args->prod); in xfs_alloc_fix_len()
379 rlen = args->len; in xfs_alloc_fix_len()
380 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
381 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
382 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || in xfs_alloc_fix_len()
383 (args->mod == 0 && rlen < args->prod)) in xfs_alloc_fix_len()
385 k = rlen % args->prod; in xfs_alloc_fix_len()
386 if (k == args->mod) in xfs_alloc_fix_len()
388 if (k > args->mod) in xfs_alloc_fix_len()
389 rlen = rlen - (k - args->mod); in xfs_alloc_fix_len()
391 rlen = rlen - args->prod + (args->mod - k); in xfs_alloc_fix_len()
393 if ((int)rlen < (int)args->minlen) in xfs_alloc_fix_len()
395 ASSERT(rlen >= args->minlen && rlen <= args->maxlen); in xfs_alloc_fix_len()
396 ASSERT(rlen % args->prod == args->mod); in xfs_alloc_fix_len()
397 ASSERT(args->pag->pagf_freeblks + args->pag->pagf_flcount >= in xfs_alloc_fix_len()
398 rlen + args->minleft); in xfs_alloc_fix_len()
399 args->len = rlen; in xfs_alloc_fix_len()
705 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
730 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error); in xfs_alloc_ag_vextent_small()
734 if (args->minlen != 1 || args->alignment != 1 || in xfs_alloc_ag_vextent_small()
735 args->resv == XFS_AG_RESV_AGFL || in xfs_alloc_ag_vextent_small()
736 (be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_flcount) <= in xfs_alloc_ag_vextent_small()
737 args->minleft)) in xfs_alloc_ag_vextent_small()
740 error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0); in xfs_alloc_ag_vextent_small()
746 xfs_extent_busy_reuse(args->mp, args->agno, fbno, 1, in xfs_alloc_ag_vextent_small()
747 xfs_alloc_allow_busy_reuse(args->datatype)); in xfs_alloc_ag_vextent_small()
749 if (xfs_alloc_is_userdata(args->datatype)) { in xfs_alloc_ag_vextent_small()
752 bp = xfs_btree_get_bufs(args->mp, args->tp, args->agno, fbno); in xfs_alloc_ag_vextent_small()
757 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
759 *fbnop = args->agbno = fbno; in xfs_alloc_ag_vextent_small()
760 *flenp = args->len = 1; in xfs_alloc_ag_vextent_small()
761 XFS_WANT_CORRUPTED_GOTO(args->mp, in xfs_alloc_ag_vextent_small()
762 fbno < be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), in xfs_alloc_ag_vextent_small()
764 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
765 trace_xfs_alloc_small_freelist(args); in xfs_alloc_ag_vextent_small()
771 error = xfs_rmap_free(args->tp, args->agbp, args->agno, fbno, 1, in xfs_alloc_ag_vextent_small()
783 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
784 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
785 trace_xfs_alloc_small_notenough(args); in xfs_alloc_ag_vextent_small()
791 trace_xfs_alloc_small_done(args); in xfs_alloc_ag_vextent_small()
795 trace_xfs_alloc_small_error(args); in xfs_alloc_ag_vextent_small()
809 xfs_alloc_arg_t *args) /* argument structure for allocation */ in xfs_alloc_ag_vextent() argument
813 ASSERT(args->minlen > 0); in xfs_alloc_ag_vextent()
814 ASSERT(args->maxlen > 0); in xfs_alloc_ag_vextent()
815 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_ag_vextent()
816 ASSERT(args->mod < args->prod); in xfs_alloc_ag_vextent()
817 ASSERT(args->alignment > 0); in xfs_alloc_ag_vextent()
822 args->wasfromfl = 0; in xfs_alloc_ag_vextent()
823 switch (args->type) { in xfs_alloc_ag_vextent()
825 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_ag_vextent()
828 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_ag_vextent()
831 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_ag_vextent()
838 if (error || args->agbno == NULLAGBLOCK) in xfs_alloc_ag_vextent()
841 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent()
842 ASSERT(args->len <= args->maxlen); in xfs_alloc_ag_vextent()
843 ASSERT(!args->wasfromfl || args->resv != XFS_AG_RESV_AGFL); in xfs_alloc_ag_vextent()
844 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_ag_vextent()
847 if (!xfs_rmap_should_skip_owner_update(&args->oinfo)) { in xfs_alloc_ag_vextent()
848 error = xfs_rmap_alloc(args->tp, args->agbp, args->agno, in xfs_alloc_ag_vextent()
849 args->agbno, args->len, &args->oinfo); in xfs_alloc_ag_vextent()
854 if (!args->wasfromfl) { in xfs_alloc_ag_vextent()
855 error = xfs_alloc_update_counters(args->tp, args->pag, in xfs_alloc_ag_vextent()
856 args->agbp, in xfs_alloc_ag_vextent()
857 -((long)(args->len))); in xfs_alloc_ag_vextent()
861 ASSERT(!xfs_extent_busy_search(args->mp, args->agno, in xfs_alloc_ag_vextent()
862 args->agbno, args->len)); in xfs_alloc_ag_vextent()
865 xfs_ag_resv_alloc_extent(args->pag, args->resv, args); in xfs_alloc_ag_vextent()
867 XFS_STATS_INC(args->mp, xs_allocx); in xfs_alloc_ag_vextent()
868 XFS_STATS_ADD(args->mp, xs_allocb, args->len); in xfs_alloc_ag_vextent()
880 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
893 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
898 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
899 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_exact()
906 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); in xfs_alloc_ag_vextent_exact()
918 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_exact()
919 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
926 xfs_extent_busy_trim(args, &tbno, &tlen, &busy_gen); in xfs_alloc_ag_vextent_exact()
932 if (tbno > args->agbno) in xfs_alloc_ag_vextent_exact()
934 if (tlen < args->minlen) in xfs_alloc_ag_vextent_exact()
937 if (tend < args->agbno + args->minlen) in xfs_alloc_ag_vextent_exact()
946 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) in xfs_alloc_ag_vextent_exact()
947 - args->agbno; in xfs_alloc_ag_vextent_exact()
948 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
949 ASSERT(args->agbno + args->len <= tend); in xfs_alloc_ag_vextent_exact()
955 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
956 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_exact()
957 ASSERT(args->agbno + args->len <= in xfs_alloc_ag_vextent_exact()
958 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_exact()
959 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, in xfs_alloc_ag_vextent_exact()
960 args->len, XFSA_FIXUP_BNO_OK); in xfs_alloc_ag_vextent_exact()
969 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
970 trace_xfs_alloc_exact_done(args); in xfs_alloc_ag_vextent_exact()
976 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
977 trace_xfs_alloc_exact_notfound(args); in xfs_alloc_ag_vextent_exact()
982 trace_xfs_alloc_exact_error(args); in xfs_alloc_ag_vextent_exact()
992 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_find_best_extent() argument
1019 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_find_best_extent()
1020 xfs_alloc_compute_aligned(args, *sbno, *slen, in xfs_alloc_find_best_extent()
1027 if (*sbnoa > args->max_agbno) in xfs_alloc_find_best_extent()
1029 if (*sbnoa >= args->agbno + gdiff) in xfs_alloc_find_best_extent()
1032 if (*sbnoa < args->min_agbno) in xfs_alloc_find_best_extent()
1034 if (*sbnoa <= args->agbno - gdiff) in xfs_alloc_find_best_extent()
1041 if (*slena >= args->minlen) { in xfs_alloc_find_best_extent()
1042 args->len = XFS_EXTLEN_MIN(*slena, args->maxlen); in xfs_alloc_find_best_extent()
1043 xfs_alloc_fix_len(args); in xfs_alloc_find_best_extent()
1045 sdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_find_best_extent()
1046 args->alignment, in xfs_alloc_find_best_extent()
1047 args->datatype, *sbnoa, in xfs_alloc_find_best_extent()
1089 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_near() argument
1122 if (!args->min_agbno && !args->max_agbno) in xfs_alloc_ag_vextent_near()
1123 args->max_agbno = args->mp->m_sb.sb_agblocks - 1; in xfs_alloc_ag_vextent_near()
1124 ASSERT(args->min_agbno <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1127 if (args->agbno < args->min_agbno) in xfs_alloc_ag_vextent_near()
1128 args->agbno = args->min_agbno; in xfs_alloc_ag_vextent_near()
1129 if (args->agbno > args->max_agbno) in xfs_alloc_ag_vextent_near()
1130 args->agbno = args->max_agbno; in xfs_alloc_ag_vextent_near()
1143 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_near()
1144 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_near()
1149 if ((error = xfs_alloc_lookup_ge(cnt_cur, 0, args->maxlen, &i))) in xfs_alloc_ag_vextent_near()
1156 if ((error = xfs_alloc_ag_vextent_small(args, cnt_cur, &ltbno, in xfs_alloc_ag_vextent_near()
1161 trace_xfs_alloc_near_noentry(args); in xfs_alloc_ag_vextent_near()
1166 args->wasfromfl = 0; in xfs_alloc_ag_vextent_near()
1194 if (ltlen || args->alignment > 1) { in xfs_alloc_ag_vextent_near()
1200 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1201 if (ltlen >= args->minlen) in xfs_alloc_ag_vextent_near()
1206 ASSERT(ltlen >= args->minlen); in xfs_alloc_ag_vextent_near()
1212 !error && j && (blen < args->maxlen || bdiff > 0); in xfs_alloc_ag_vextent_near()
1220 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1221 busy = xfs_alloc_compute_aligned(args, ltbno, ltlen, in xfs_alloc_ag_vextent_near()
1223 if (ltlena < args->minlen) in xfs_alloc_ag_vextent_near()
1225 if (ltbnoa < args->min_agbno || ltbnoa > args->max_agbno) in xfs_alloc_ag_vextent_near()
1227 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1228 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1229 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent_near()
1230 if (args->len < blen) in xfs_alloc_ag_vextent_near()
1232 ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1233 args->alignment, args->datatype, ltbnoa, in xfs_alloc_ag_vextent_near()
1236 (args->len > blen || ltdiff < bdiff)) { in xfs_alloc_ag_vextent_near()
1239 blen = args->len; in xfs_alloc_ag_vextent_near()
1255 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1256 ASSERT(ltbno + ltlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_near()
1257 args->len = blen; in xfs_alloc_ag_vextent_near()
1262 args->agbno = bnew; in xfs_alloc_ag_vextent_near()
1268 bno_cur_lt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_ag_vextent_near()
1269 args->agbp, args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_near()
1279 trace_xfs_alloc_near_first(args); in xfs_alloc_ag_vextent_near()
1297 bno_cur_lt = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_near()
1298 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_near()
1302 if ((error = xfs_alloc_lookup_le(bno_cur_lt, args->agbno, args->maxlen, &i))) in xfs_alloc_ag_vextent_near()
1339 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1340 busy |= xfs_alloc_compute_aligned(args, ltbno, ltlen, in xfs_alloc_ag_vextent_near()
1342 if (ltlena >= args->minlen && ltbnoa >= args->min_agbno) in xfs_alloc_ag_vextent_near()
1346 if (!i || ltbnoa < args->min_agbno) { in xfs_alloc_ag_vextent_near()
1355 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1356 busy |= xfs_alloc_compute_aligned(args, gtbno, gtlen, in xfs_alloc_ag_vextent_near()
1358 if (gtlena >= args->minlen && gtbnoa <= args->max_agbno) in xfs_alloc_ag_vextent_near()
1362 if (!i || gtbnoa > args->max_agbno) { in xfs_alloc_ag_vextent_near()
1374 if (ltlena >= args->minlen) { in xfs_alloc_ag_vextent_near()
1378 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1379 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1380 ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1381 args->alignment, args->datatype, ltbnoa, in xfs_alloc_ag_vextent_near()
1384 error = xfs_alloc_find_best_extent(args, in xfs_alloc_ag_vextent_near()
1390 ASSERT(gtlena >= args->minlen); in xfs_alloc_ag_vextent_near()
1395 args->len = XFS_EXTLEN_MIN(gtlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1396 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1397 gtdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1398 args->alignment, args->datatype, gtbnoa, in xfs_alloc_ag_vextent_near()
1401 error = xfs_alloc_find_best_extent(args, in xfs_alloc_ag_vextent_near()
1419 trace_xfs_alloc_near_busy(args); in xfs_alloc_ag_vextent_near()
1420 xfs_extent_busy_flush(args->mp, args->pag, busy_gen); in xfs_alloc_ag_vextent_near()
1423 trace_xfs_alloc_size_neither(args); in xfs_alloc_ag_vextent_near()
1424 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1448 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1449 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1450 rlen = args->len; in xfs_alloc_ag_vextent_near()
1451 (void)xfs_alloc_compute_diff(args->agbno, rlen, args->alignment, in xfs_alloc_ag_vextent_near()
1452 args->datatype, ltbnoa, ltlena, &ltnew); in xfs_alloc_ag_vextent_near()
1455 ASSERT(ltnew + rlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_near()
1456 ASSERT(ltnew >= args->min_agbno && ltnew <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1457 args->agbno = ltnew; in xfs_alloc_ag_vextent_near()
1464 trace_xfs_alloc_near_greater(args); in xfs_alloc_ag_vextent_near()
1466 trace_xfs_alloc_near_lesser(args); in xfs_alloc_ag_vextent_near()
1473 trace_xfs_alloc_near_error(args); in xfs_alloc_ag_vextent_near()
1491 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_size() argument
1508 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1509 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_size()
1517 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1528 error = xfs_alloc_ag_vextent_small(args, cnt_cur, in xfs_alloc_ag_vextent_size()
1534 trace_xfs_alloc_size_noentry(args); in xfs_alloc_ag_vextent_size()
1538 busy = xfs_alloc_compute_aligned(args, fbno, flen, &rbno, in xfs_alloc_ag_vextent_size()
1548 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1550 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1553 if (rlen >= args->maxlen) in xfs_alloc_ag_vextent_size()
1567 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1568 xfs_extent_busy_flush(args->mp, in xfs_alloc_ag_vextent_size()
1569 args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1581 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1582 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 || in xfs_alloc_ag_vextent_size()
1584 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1602 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1605 busy = xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1607 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1608 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 || in xfs_alloc_ag_vextent_size()
1616 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1623 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1629 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1633 args->len = rlen; in xfs_alloc_ag_vextent_size()
1634 if (rlen < args->minlen) { in xfs_alloc_ag_vextent_size()
1637 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1638 xfs_extent_busy_flush(args->mp, args->pag, busy_gen); in xfs_alloc_ag_vextent_size()
1643 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1645 rlen = args->len; in xfs_alloc_ag_vextent_size()
1646 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen <= flen, error0); in xfs_alloc_ag_vextent_size()
1650 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1651 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_size()
1658 args->len = rlen; in xfs_alloc_ag_vextent_size()
1659 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1660 XFS_WANT_CORRUPTED_GOTO(args->mp, in xfs_alloc_ag_vextent_size()
1661 args->agbno + args->len <= in xfs_alloc_ag_vextent_size()
1662 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), in xfs_alloc_ag_vextent_size()
1664 trace_xfs_alloc_size_done(args); in xfs_alloc_ag_vextent_size()
1668 trace_xfs_alloc_size_error(args); in xfs_alloc_ag_vextent_size()
1677 trace_xfs_alloc_size_nominleft(args); in xfs_alloc_ag_vextent_size()
1678 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
2028 struct xfs_alloc_arg *args, in xfs_alloc_space_available() argument
2032 struct xfs_perag *pag = args->pag; in xfs_alloc_space_available()
2041 reservation = xfs_ag_resv_needed(pag, args->resv); in xfs_alloc_space_available()
2044 alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop; in xfs_alloc_space_available()
2056 reservation - min_free - args->minleft); in xfs_alloc_space_available()
2057 if (available < (int)max(args->total, alloc_len)) in xfs_alloc_space_available()
2064 if (available < (int)args->maxlen && !(flags & XFS_ALLOC_FLAG_CHECK)) { in xfs_alloc_space_available()
2065 args->maxlen = available; in xfs_alloc_space_available()
2066 ASSERT(args->maxlen > 0); in xfs_alloc_space_available()
2067 ASSERT(args->maxlen >= args->minlen); in xfs_alloc_space_available()
2224 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
2227 struct xfs_mount *mp = args->mp; in xfs_alloc_fix_freelist()
2228 struct xfs_perag *pag = args->pag; in xfs_alloc_fix_freelist()
2229 struct xfs_trans *tp = args->tp; in xfs_alloc_fix_freelist()
2241 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
2256 if (pag->pagf_metadata && xfs_alloc_is_userdata(args->datatype) && in xfs_alloc_fix_freelist()
2263 if (!xfs_alloc_space_available(args, need, flags | in xfs_alloc_fix_freelist()
2272 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
2288 if (!xfs_alloc_space_available(args, need, flags)) in xfs_alloc_fix_freelist()
2327 xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo); in xfs_alloc_fix_freelist()
2333 targs.agno = args->agno; in xfs_alloc_fix_freelist()
2373 args->agbp = agbp; in xfs_alloc_fix_freelist()
2382 args->agbp = NULL; in xfs_alloc_fix_freelist()
2779 struct xfs_alloc_arg *args) /* allocation argument structure */ in xfs_alloc_vextent() argument
2790 mp = args->mp; in xfs_alloc_vextent()
2791 type = args->otype = args->type; in xfs_alloc_vextent()
2792 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
2799 if (args->maxlen > agsize) in xfs_alloc_vextent()
2800 args->maxlen = agsize; in xfs_alloc_vextent()
2801 if (args->alignment == 0) in xfs_alloc_vextent()
2802 args->alignment = 1; in xfs_alloc_vextent()
2803 ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount); in xfs_alloc_vextent()
2804 ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize); in xfs_alloc_vextent()
2805 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent()
2806 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent()
2807 ASSERT(args->mod < args->prod); in xfs_alloc_vextent()
2808 if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount || in xfs_alloc_vextent()
2809 XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize || in xfs_alloc_vextent()
2810 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent()
2811 args->mod >= args->prod) { in xfs_alloc_vextent()
2812 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
2813 trace_xfs_alloc_vextent_badargs(args); in xfs_alloc_vextent()
2824 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2825 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
2826 error = xfs_alloc_fix_freelist(args, 0); in xfs_alloc_vextent()
2828 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
2831 if (!args->agbp) { in xfs_alloc_vextent()
2832 trace_xfs_alloc_vextent_noagbp(args); in xfs_alloc_vextent()
2835 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
2836 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
2844 if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent()
2846 args->fsbno = XFS_AGB_TO_FSB(mp, in xfs_alloc_vextent()
2851 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
2852 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
2862 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2863 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2870 args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2878 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
2879 error = xfs_alloc_fix_freelist(args, flags); in xfs_alloc_vextent()
2881 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
2887 if (args->agbp) { in xfs_alloc_vextent()
2888 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
2893 trace_xfs_alloc_vextent_loopfailed(args); in xfs_alloc_vextent()
2898 if (args->agno == sagno && in xfs_alloc_vextent()
2900 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2908 if (++(args->agno) == mp->m_sb.sb_agcount) { in xfs_alloc_vextent()
2909 if (args->tp->t_firstblock != NULLFSBLOCK) in xfs_alloc_vextent()
2910 args->agno = sagno; in xfs_alloc_vextent()
2912 args->agno = 0; in xfs_alloc_vextent()
2918 if (args->agno == sagno) { in xfs_alloc_vextent()
2920 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
2921 trace_xfs_alloc_vextent_allfailed(args); in xfs_alloc_vextent()
2927 args->agbno = XFS_FSB_TO_AGBNO(mp, in xfs_alloc_vextent()
2928 args->fsbno); in xfs_alloc_vextent()
2929 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
2932 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2935 if (args->agno == sagno) in xfs_alloc_vextent()
2939 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent()
2947 if (args->agbno == NULLAGBLOCK) in xfs_alloc_vextent()
2948 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
2950 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent()
2952 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent()
2953 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent()
2954 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent()
2955 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), in xfs_alloc_vextent()
2956 args->len); in xfs_alloc_vextent()
2960 if (args->datatype & XFS_ALLOC_USERDATA_ZERO) { in xfs_alloc_vextent()
2961 error = xfs_zero_extent(args->ip, args->fsbno, args->len); in xfs_alloc_vextent()
2967 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2970 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2981 struct xfs_alloc_arg args; in xfs_free_extent_fix_freelist() local
2984 memset(&args, 0, sizeof(struct xfs_alloc_arg)); in xfs_free_extent_fix_freelist()
2985 args.tp = tp; in xfs_free_extent_fix_freelist()
2986 args.mp = tp->t_mountp; in xfs_free_extent_fix_freelist()
2987 args.agno = agno; in xfs_free_extent_fix_freelist()
2993 if (args.agno >= args.mp->m_sb.sb_agcount) in xfs_free_extent_fix_freelist()
2996 args.pag = xfs_perag_get(args.mp, args.agno); in xfs_free_extent_fix_freelist()
2997 ASSERT(args.pag); in xfs_free_extent_fix_freelist()
2999 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); in xfs_free_extent_fix_freelist()
3003 *agbp = args.agbp; in xfs_free_extent_fix_freelist()
3005 xfs_perag_put(args.pag); in xfs_free_extent_fix_freelist()