Lines Matching refs:args
144 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_compute_aligned() argument
155 xfs_extent_busy_trim(args, foundbno, foundlen, &bno, &len); in xfs_alloc_compute_aligned()
161 if (bno < args->min_agbno && bno + len > args->min_agbno) { in xfs_alloc_compute_aligned()
162 diff = args->min_agbno - bno; in xfs_alloc_compute_aligned()
169 if (args->alignment > 1 && len >= args->minlen) { in xfs_alloc_compute_aligned()
170 xfs_agblock_t aligned_bno = roundup(bno, args->alignment); in xfs_alloc_compute_aligned()
258 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_len() argument
263 ASSERT(args->mod < args->prod); in xfs_alloc_fix_len()
264 rlen = args->len; in xfs_alloc_fix_len()
265 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
266 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
267 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || in xfs_alloc_fix_len()
268 (args->mod == 0 && rlen < args->prod)) in xfs_alloc_fix_len()
270 k = rlen % args->prod; in xfs_alloc_fix_len()
271 if (k == args->mod) in xfs_alloc_fix_len()
273 if (k > args->mod) in xfs_alloc_fix_len()
274 rlen = rlen - (k - args->mod); in xfs_alloc_fix_len()
276 rlen = rlen - args->prod + (args->mod - k); in xfs_alloc_fix_len()
278 if ((int)rlen < (int)args->minlen) in xfs_alloc_fix_len()
280 ASSERT(rlen >= args->minlen && rlen <= args->maxlen); in xfs_alloc_fix_len()
281 ASSERT(rlen % args->prod == args->mod); in xfs_alloc_fix_len()
282 args->len = rlen; in xfs_alloc_fix_len()
291 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_minleft() argument
296 if (args->minleft == 0) in xfs_alloc_fix_minleft()
298 agf = XFS_BUF_TO_AGF(args->agbp); in xfs_alloc_fix_minleft()
300 - args->len - args->minleft; in xfs_alloc_fix_minleft()
303 args->len += diff; /* shrink the allocated space */ in xfs_alloc_fix_minleft()
305 if ((int)args->len >= (int)args->minlen) in xfs_alloc_fix_minleft()
307 args->agbno = NULLAGBLOCK; in xfs_alloc_fix_minleft()
603 xfs_alloc_arg_t *args) /* argument structure for allocation */ in xfs_alloc_ag_vextent() argument
607 ASSERT(args->minlen > 0); in xfs_alloc_ag_vextent()
608 ASSERT(args->maxlen > 0); in xfs_alloc_ag_vextent()
609 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_ag_vextent()
610 ASSERT(args->mod < args->prod); in xfs_alloc_ag_vextent()
611 ASSERT(args->alignment > 0); in xfs_alloc_ag_vextent()
615 args->wasfromfl = 0; in xfs_alloc_ag_vextent()
616 switch (args->type) { in xfs_alloc_ag_vextent()
618 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_ag_vextent()
621 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_ag_vextent()
624 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_ag_vextent()
631 if (error || args->agbno == NULLAGBLOCK) in xfs_alloc_ag_vextent()
634 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent()
635 ASSERT(args->len <= args->maxlen); in xfs_alloc_ag_vextent()
636 ASSERT(!args->wasfromfl || !args->isfl); in xfs_alloc_ag_vextent()
637 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_ag_vextent()
639 if (!args->wasfromfl) { in xfs_alloc_ag_vextent()
640 error = xfs_alloc_update_counters(args->tp, args->pag, in xfs_alloc_ag_vextent()
641 args->agbp, in xfs_alloc_ag_vextent()
642 -((long)(args->len))); in xfs_alloc_ag_vextent()
646 ASSERT(!xfs_extent_busy_search(args->mp, args->agno, in xfs_alloc_ag_vextent()
647 args->agbno, args->len)); in xfs_alloc_ag_vextent()
650 if (!args->isfl) { in xfs_alloc_ag_vextent()
651 xfs_trans_mod_sb(args->tp, args->wasdel ? in xfs_alloc_ag_vextent()
654 -((long)(args->len))); in xfs_alloc_ag_vextent()
657 XFS_STATS_INC(args->mp, xs_allocx); in xfs_alloc_ag_vextent()
658 XFS_STATS_ADD(args->mp, xs_allocb, args->len); in xfs_alloc_ag_vextent()
670 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
682 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
687 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
688 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_exact()
695 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); in xfs_alloc_ag_vextent_exact()
707 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_exact()
708 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
713 xfs_extent_busy_trim(args, fbno, flen, &tbno, &tlen); in xfs_alloc_ag_vextent_exact()
719 if (tbno > args->agbno) in xfs_alloc_ag_vextent_exact()
721 if (tlen < args->minlen) in xfs_alloc_ag_vextent_exact()
724 if (tend < args->agbno + args->minlen) in xfs_alloc_ag_vextent_exact()
733 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) in xfs_alloc_ag_vextent_exact()
734 - args->agbno; in xfs_alloc_ag_vextent_exact()
735 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
736 if (!xfs_alloc_fix_minleft(args)) in xfs_alloc_ag_vextent_exact()
739 ASSERT(args->agbno + args->len <= tend); in xfs_alloc_ag_vextent_exact()
745 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
746 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_exact()
747 ASSERT(args->agbno + args->len <= in xfs_alloc_ag_vextent_exact()
748 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_exact()
749 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, in xfs_alloc_ag_vextent_exact()
750 args->len, XFSA_FIXUP_BNO_OK); in xfs_alloc_ag_vextent_exact()
759 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
760 trace_xfs_alloc_exact_done(args); in xfs_alloc_ag_vextent_exact()
766 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
767 trace_xfs_alloc_exact_notfound(args); in xfs_alloc_ag_vextent_exact()
772 trace_xfs_alloc_exact_error(args); in xfs_alloc_ag_vextent_exact()
782 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_find_best_extent() argument
808 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_find_best_extent()
809 xfs_alloc_compute_aligned(args, *sbno, *slen, sbnoa, slena); in xfs_alloc_find_best_extent()
815 if (*sbnoa > args->max_agbno) in xfs_alloc_find_best_extent()
817 if (*sbnoa >= args->agbno + gdiff) in xfs_alloc_find_best_extent()
820 if (*sbnoa < args->min_agbno) in xfs_alloc_find_best_extent()
822 if (*sbnoa <= args->agbno - gdiff) in xfs_alloc_find_best_extent()
829 if (*slena >= args->minlen) { in xfs_alloc_find_best_extent()
830 args->len = XFS_EXTLEN_MIN(*slena, args->maxlen); in xfs_alloc_find_best_extent()
831 xfs_alloc_fix_len(args); in xfs_alloc_find_best_extent()
833 sdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_find_best_extent()
834 args->alignment, in xfs_alloc_find_best_extent()
835 args->userdata, *sbnoa, in xfs_alloc_find_best_extent()
877 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_near() argument
909 if (!args->min_agbno && !args->max_agbno) in xfs_alloc_ag_vextent_near()
910 args->max_agbno = args->mp->m_sb.sb_agblocks - 1; in xfs_alloc_ag_vextent_near()
911 ASSERT(args->min_agbno <= args->max_agbno); in xfs_alloc_ag_vextent_near()
914 if (args->agbno < args->min_agbno) in xfs_alloc_ag_vextent_near()
915 args->agbno = args->min_agbno; in xfs_alloc_ag_vextent_near()
916 if (args->agbno > args->max_agbno) in xfs_alloc_ag_vextent_near()
917 args->agbno = args->max_agbno; in xfs_alloc_ag_vextent_near()
929 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_near()
930 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_near()
935 if ((error = xfs_alloc_lookup_ge(cnt_cur, 0, args->maxlen, &i))) in xfs_alloc_ag_vextent_near()
942 if ((error = xfs_alloc_ag_vextent_small(args, cnt_cur, <bno, in xfs_alloc_ag_vextent_near()
947 trace_xfs_alloc_near_noentry(args); in xfs_alloc_ag_vextent_near()
952 args->wasfromfl = 0; in xfs_alloc_ag_vextent_near()
980 if (ltlen || args->alignment > 1) { in xfs_alloc_ag_vextent_near()
986 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
987 if (ltlen >= args->minlen) in xfs_alloc_ag_vextent_near()
992 ASSERT(ltlen >= args->minlen); in xfs_alloc_ag_vextent_near()
998 !error && j && (blen < args->maxlen || bdiff > 0); in xfs_alloc_ag_vextent_near()
1006 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1007 xfs_alloc_compute_aligned(args, ltbno, ltlen, in xfs_alloc_ag_vextent_near()
1009 if (ltlena < args->minlen) in xfs_alloc_ag_vextent_near()
1011 if (ltbnoa < args->min_agbno || ltbnoa > args->max_agbno) in xfs_alloc_ag_vextent_near()
1013 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1014 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1015 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent_near()
1016 if (args->len < blen) in xfs_alloc_ag_vextent_near()
1018 ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1019 args->alignment, args->userdata, ltbnoa, in xfs_alloc_ag_vextent_near()
1022 (args->len > blen || ltdiff < bdiff)) { in xfs_alloc_ag_vextent_near()
1025 blen = args->len; in xfs_alloc_ag_vextent_near()
1041 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1042 ASSERT(ltbno + ltlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_near()
1043 args->len = blen; in xfs_alloc_ag_vextent_near()
1044 if (!xfs_alloc_fix_minleft(args)) { in xfs_alloc_ag_vextent_near()
1046 trace_xfs_alloc_near_nominleft(args); in xfs_alloc_ag_vextent_near()
1049 blen = args->len; in xfs_alloc_ag_vextent_near()
1053 args->agbno = bnew; in xfs_alloc_ag_vextent_near()
1059 bno_cur_lt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_ag_vextent_near()
1060 args->agbp, args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_near()
1070 trace_xfs_alloc_near_first(args); in xfs_alloc_ag_vextent_near()
1088 bno_cur_lt = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_near()
1089 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_near()
1093 if ((error = xfs_alloc_lookup_le(bno_cur_lt, args->agbno, args->maxlen, &i))) in xfs_alloc_ag_vextent_near()
1130 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1131 xfs_alloc_compute_aligned(args, ltbno, ltlen, in xfs_alloc_ag_vextent_near()
1133 if (ltlena >= args->minlen && ltbnoa >= args->min_agbno) in xfs_alloc_ag_vextent_near()
1137 if (!i || ltbnoa < args->min_agbno) { in xfs_alloc_ag_vextent_near()
1146 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1147 xfs_alloc_compute_aligned(args, gtbno, gtlen, in xfs_alloc_ag_vextent_near()
1149 if (gtlena >= args->minlen && gtbnoa <= args->max_agbno) in xfs_alloc_ag_vextent_near()
1153 if (!i || gtbnoa > args->max_agbno) { in xfs_alloc_ag_vextent_near()
1165 if (ltlena >= args->minlen) { in xfs_alloc_ag_vextent_near()
1169 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1170 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1171 ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1172 args->alignment, args->userdata, ltbnoa, in xfs_alloc_ag_vextent_near()
1175 error = xfs_alloc_find_best_extent(args, in xfs_alloc_ag_vextent_near()
1181 ASSERT(gtlena >= args->minlen); in xfs_alloc_ag_vextent_near()
1186 args->len = XFS_EXTLEN_MIN(gtlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1187 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1188 gtdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1189 args->alignment, args->userdata, gtbnoa, in xfs_alloc_ag_vextent_near()
1192 error = xfs_alloc_find_best_extent(args, in xfs_alloc_ag_vextent_near()
1210 trace_xfs_alloc_near_busy(args); in xfs_alloc_ag_vextent_near()
1211 xfs_log_force(args->mp, XFS_LOG_SYNC); in xfs_alloc_ag_vextent_near()
1214 trace_xfs_alloc_size_neither(args); in xfs_alloc_ag_vextent_near()
1215 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1239 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1240 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1241 if (!xfs_alloc_fix_minleft(args)) { in xfs_alloc_ag_vextent_near()
1242 trace_xfs_alloc_near_nominleft(args); in xfs_alloc_ag_vextent_near()
1247 rlen = args->len; in xfs_alloc_ag_vextent_near()
1248 (void)xfs_alloc_compute_diff(args->agbno, rlen, args->alignment, in xfs_alloc_ag_vextent_near()
1249 args->userdata, ltbnoa, ltlena, <new); in xfs_alloc_ag_vextent_near()
1252 ASSERT(ltnew + rlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_near()
1253 ASSERT(ltnew >= args->min_agbno && ltnew <= args->max_agbno); in xfs_alloc_ag_vextent_near()
1254 args->agbno = ltnew; in xfs_alloc_ag_vextent_near()
1261 trace_xfs_alloc_near_greater(args); in xfs_alloc_ag_vextent_near()
1263 trace_xfs_alloc_near_lesser(args); in xfs_alloc_ag_vextent_near()
1270 trace_xfs_alloc_near_error(args); in xfs_alloc_ag_vextent_near()
1288 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_size() argument
1304 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1305 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_size()
1312 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1324 error = xfs_alloc_ag_vextent_small(args, cnt_cur, in xfs_alloc_ag_vextent_size()
1330 trace_xfs_alloc_size_noentry(args); in xfs_alloc_ag_vextent_size()
1334 xfs_alloc_compute_aligned(args, fbno, flen, &rbno, &rlen); in xfs_alloc_ag_vextent_size()
1346 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1348 xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1351 if (rlen >= args->maxlen) in xfs_alloc_ag_vextent_size()
1370 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1372 xfs_log_force(args->mp, XFS_LOG_SYNC); in xfs_alloc_ag_vextent_size()
1384 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1385 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 || in xfs_alloc_ag_vextent_size()
1387 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1405 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1408 xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1410 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1411 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 || in xfs_alloc_ag_vextent_size()
1419 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1426 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1432 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1436 args->len = rlen; in xfs_alloc_ag_vextent_size()
1437 if (rlen < args->minlen) { in xfs_alloc_ag_vextent_size()
1440 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1441 xfs_log_force(args->mp, XFS_LOG_SYNC); in xfs_alloc_ag_vextent_size()
1446 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1448 if (!xfs_alloc_fix_minleft(args)) in xfs_alloc_ag_vextent_size()
1450 rlen = args->len; in xfs_alloc_ag_vextent_size()
1451 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen <= flen, error0); in xfs_alloc_ag_vextent_size()
1455 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1456 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_size()
1463 args->len = rlen; in xfs_alloc_ag_vextent_size()
1464 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1465 XFS_WANT_CORRUPTED_GOTO(args->mp, in xfs_alloc_ag_vextent_size()
1466 args->agbno + args->len <= in xfs_alloc_ag_vextent_size()
1467 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), in xfs_alloc_ag_vextent_size()
1469 trace_xfs_alloc_size_done(args); in xfs_alloc_ag_vextent_size()
1473 trace_xfs_alloc_size_error(args); in xfs_alloc_ag_vextent_size()
1482 trace_xfs_alloc_size_nominleft(args); in xfs_alloc_ag_vextent_size()
1483 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
1494 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
1510 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_small()
1517 else if (args->minlen == 1 && args->alignment == 1 && !args->isfl && in xfs_alloc_ag_vextent_small()
1518 (be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_flcount) in xfs_alloc_ag_vextent_small()
1519 > args->minleft)) { in xfs_alloc_ag_vextent_small()
1520 error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0); in xfs_alloc_ag_vextent_small()
1524 xfs_extent_busy_reuse(args->mp, args->agno, fbno, 1, in xfs_alloc_ag_vextent_small()
1525 args->userdata); in xfs_alloc_ag_vextent_small()
1527 if (args->userdata) { in xfs_alloc_ag_vextent_small()
1530 bp = xfs_btree_get_bufs(args->mp, args->tp, in xfs_alloc_ag_vextent_small()
1531 args->agno, fbno, 0); in xfs_alloc_ag_vextent_small()
1532 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
1534 args->len = 1; in xfs_alloc_ag_vextent_small()
1535 args->agbno = fbno; in xfs_alloc_ag_vextent_small()
1536 XFS_WANT_CORRUPTED_GOTO(args->mp, in xfs_alloc_ag_vextent_small()
1537 args->agbno + args->len <= in xfs_alloc_ag_vextent_small()
1538 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), in xfs_alloc_ag_vextent_small()
1540 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
1541 trace_xfs_alloc_small_freelist(args); in xfs_alloc_ag_vextent_small()
1561 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
1562 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
1563 trace_xfs_alloc_small_notenough(args); in xfs_alloc_ag_vextent_small()
1569 trace_xfs_alloc_small_done(args); in xfs_alloc_ag_vextent_small()
1573 trace_xfs_alloc_small_error(args); in xfs_alloc_ag_vextent_small()
1901 struct xfs_alloc_arg *args, in xfs_alloc_space_available() argument
1905 struct xfs_perag *pag = args->pag; in xfs_alloc_space_available()
1913 longest = xfs_alloc_longest_free_extent(args->mp, pag, min_free); in xfs_alloc_space_available()
1914 if ((args->minlen + args->alignment + args->minalignslop - 1) > longest) in xfs_alloc_space_available()
1919 min_free - args->total); in xfs_alloc_space_available()
1920 if (available < (int)args->minleft) in xfs_alloc_space_available()
1932 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
1935 struct xfs_mount *mp = args->mp; in xfs_alloc_fix_freelist()
1936 struct xfs_perag *pag = args->pag; in xfs_alloc_fix_freelist()
1937 struct xfs_trans *tp = args->tp; in xfs_alloc_fix_freelist()
1946 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
1961 if (pag->pagf_metadata && args->userdata && in xfs_alloc_fix_freelist()
1968 if (!xfs_alloc_space_available(args, need, flags)) in xfs_alloc_fix_freelist()
1976 error = xfs_alloc_read_agf(mp, tp, args->agno, flags, &agbp); in xfs_alloc_fix_freelist()
1988 if (!xfs_alloc_space_available(args, need, flags)) in xfs_alloc_fix_freelist()
2013 error = xfs_free_ag_extent(tp, agbp, args->agno, bno, 1, 1); in xfs_alloc_fix_freelist()
2016 bp = xfs_btree_get_bufs(mp, tp, args->agno, bno, 0); in xfs_alloc_fix_freelist()
2024 targs.agno = args->agno; in xfs_alloc_fix_freelist()
2063 args->agbp = agbp; in xfs_alloc_fix_freelist()
2072 args->agbp = NULL; in xfs_alloc_fix_freelist()
2444 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_vextent() argument
2457 mp = args->mp; in xfs_alloc_vextent()
2458 type = args->otype = args->type; in xfs_alloc_vextent()
2459 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
2466 if (args->maxlen > agsize) in xfs_alloc_vextent()
2467 args->maxlen = agsize; in xfs_alloc_vextent()
2468 if (args->alignment == 0) in xfs_alloc_vextent()
2469 args->alignment = 1; in xfs_alloc_vextent()
2470 ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount); in xfs_alloc_vextent()
2471 ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize); in xfs_alloc_vextent()
2472 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent()
2473 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent()
2474 ASSERT(args->mod < args->prod); in xfs_alloc_vextent()
2475 if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount || in xfs_alloc_vextent()
2476 XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize || in xfs_alloc_vextent()
2477 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent()
2478 args->mod >= args->prod) { in xfs_alloc_vextent()
2479 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
2480 trace_xfs_alloc_vextent_badargs(args); in xfs_alloc_vextent()
2483 minleft = args->minleft; in xfs_alloc_vextent()
2492 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2493 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
2494 args->minleft = 0; in xfs_alloc_vextent()
2495 error = xfs_alloc_fix_freelist(args, 0); in xfs_alloc_vextent()
2496 args->minleft = minleft; in xfs_alloc_vextent()
2498 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
2501 if (!args->agbp) { in xfs_alloc_vextent()
2502 trace_xfs_alloc_vextent_noagbp(args); in xfs_alloc_vextent()
2505 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
2506 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
2514 if ((args->userdata & XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent()
2516 args->fsbno = XFS_AGB_TO_FSB(mp, in xfs_alloc_vextent()
2521 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
2522 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
2534 args->agno = sagno = (mp->m_agfrotor / rotorstep) % in xfs_alloc_vextent()
2536 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2542 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2543 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2548 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2552 args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2560 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
2561 if (no_min) args->minleft = 0; in xfs_alloc_vextent()
2562 error = xfs_alloc_fix_freelist(args, flags); in xfs_alloc_vextent()
2563 args->minleft = minleft; in xfs_alloc_vextent()
2565 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
2571 if (args->agbp) { in xfs_alloc_vextent()
2572 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
2577 trace_xfs_alloc_vextent_loopfailed(args); in xfs_alloc_vextent()
2582 if (args->agno == sagno && in xfs_alloc_vextent()
2584 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2592 if (++(args->agno) == mp->m_sb.sb_agcount) { in xfs_alloc_vextent()
2593 if (args->firstblock != NULLFSBLOCK) in xfs_alloc_vextent()
2594 args->agno = sagno; in xfs_alloc_vextent()
2596 args->agno = 0; in xfs_alloc_vextent()
2602 if (args->agno == sagno) { in xfs_alloc_vextent()
2604 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
2605 trace_xfs_alloc_vextent_allfailed(args); in xfs_alloc_vextent()
2613 args->agbno = XFS_FSB_TO_AGBNO(mp, in xfs_alloc_vextent()
2614 args->fsbno); in xfs_alloc_vextent()
2615 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
2619 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2622 if (args->agno == sagno) in xfs_alloc_vextent()
2626 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent()
2634 if (args->agbno == NULLAGBLOCK) in xfs_alloc_vextent()
2635 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
2637 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent()
2639 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent()
2640 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent()
2641 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent()
2642 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), in xfs_alloc_vextent()
2643 args->len); in xfs_alloc_vextent()
2647 if (args->userdata & XFS_ALLOC_USERDATA_ZERO) { in xfs_alloc_vextent()
2648 error = xfs_zero_extent(args->ip, args->fsbno, args->len); in xfs_alloc_vextent()
2654 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2657 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2672 xfs_alloc_arg_t args; in xfs_free_extent() local
2676 memset(&args, 0, sizeof(xfs_alloc_arg_t)); in xfs_free_extent()
2677 args.tp = tp; in xfs_free_extent()
2678 args.mp = tp->t_mountp; in xfs_free_extent()
2684 args.agno = XFS_FSB_TO_AGNO(args.mp, bno); in xfs_free_extent()
2685 if (args.agno >= args.mp->m_sb.sb_agcount) in xfs_free_extent()
2688 args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno); in xfs_free_extent()
2689 if (args.agbno >= args.mp->m_sb.sb_agblocks) in xfs_free_extent()
2692 args.pag = xfs_perag_get(args.mp, args.agno); in xfs_free_extent()
2693 ASSERT(args.pag); in xfs_free_extent()
2695 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); in xfs_free_extent()
2700 if (args.agbno + len > in xfs_free_extent()
2701 be32_to_cpu(XFS_BUF_TO_AGF(args.agbp)->agf_length)) { in xfs_free_extent()
2706 error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0); in xfs_free_extent()
2708 xfs_extent_busy_insert(tp, args.agno, args.agbno, len, 0); in xfs_free_extent()
2710 xfs_perag_put(args.pag); in xfs_free_extent()