Lines Matching refs:args
144 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_compute_aligned() argument
154 xfs_extent_busy_trim(args, foundbno, foundlen, &bno, &len); in xfs_alloc_compute_aligned()
156 if (args->alignment > 1 && len >= args->minlen) { in xfs_alloc_compute_aligned()
157 xfs_agblock_t aligned_bno = roundup(bno, args->alignment); in xfs_alloc_compute_aligned()
244 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_len() argument
249 ASSERT(args->mod < args->prod); in xfs_alloc_fix_len()
250 rlen = args->len; in xfs_alloc_fix_len()
251 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
252 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
253 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || in xfs_alloc_fix_len()
254 (args->mod == 0 && rlen < args->prod)) in xfs_alloc_fix_len()
256 k = rlen % args->prod; in xfs_alloc_fix_len()
257 if (k == args->mod) in xfs_alloc_fix_len()
259 if (k > args->mod) in xfs_alloc_fix_len()
260 rlen = rlen - (k - args->mod); in xfs_alloc_fix_len()
262 rlen = rlen - args->prod + (args->mod - k); in xfs_alloc_fix_len()
264 if ((int)rlen < (int)args->minlen) in xfs_alloc_fix_len()
266 ASSERT(rlen >= args->minlen && rlen <= args->maxlen); in xfs_alloc_fix_len()
267 ASSERT(rlen % args->prod == args->mod); in xfs_alloc_fix_len()
268 args->len = rlen; in xfs_alloc_fix_len()
277 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_minleft() argument
282 if (args->minleft == 0) in xfs_alloc_fix_minleft()
284 agf = XFS_BUF_TO_AGF(args->agbp); in xfs_alloc_fix_minleft()
286 - args->len - args->minleft; in xfs_alloc_fix_minleft()
289 args->len += diff; /* shrink the allocated space */ in xfs_alloc_fix_minleft()
291 if ((int)args->len >= (int)args->minlen) in xfs_alloc_fix_minleft()
293 args->agbno = NULLAGBLOCK; in xfs_alloc_fix_minleft()
586 xfs_alloc_arg_t *args) /* argument structure for allocation */ in xfs_alloc_ag_vextent() argument
590 ASSERT(args->minlen > 0); in xfs_alloc_ag_vextent()
591 ASSERT(args->maxlen > 0); in xfs_alloc_ag_vextent()
592 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_ag_vextent()
593 ASSERT(args->mod < args->prod); in xfs_alloc_ag_vextent()
594 ASSERT(args->alignment > 0); in xfs_alloc_ag_vextent()
598 args->wasfromfl = 0; in xfs_alloc_ag_vextent()
599 switch (args->type) { in xfs_alloc_ag_vextent()
601 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_ag_vextent()
604 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_ag_vextent()
607 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_ag_vextent()
614 if (error || args->agbno == NULLAGBLOCK) in xfs_alloc_ag_vextent()
617 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent()
618 ASSERT(args->len <= args->maxlen); in xfs_alloc_ag_vextent()
619 ASSERT(!args->wasfromfl || !args->isfl); in xfs_alloc_ag_vextent()
620 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_ag_vextent()
622 if (!args->wasfromfl) { in xfs_alloc_ag_vextent()
623 error = xfs_alloc_update_counters(args->tp, args->pag, in xfs_alloc_ag_vextent()
624 args->agbp, in xfs_alloc_ag_vextent()
625 -((long)(args->len))); in xfs_alloc_ag_vextent()
629 ASSERT(!xfs_extent_busy_search(args->mp, args->agno, in xfs_alloc_ag_vextent()
630 args->agbno, args->len)); in xfs_alloc_ag_vextent()
633 if (!args->isfl) { in xfs_alloc_ag_vextent()
634 xfs_trans_mod_sb(args->tp, args->wasdel ? in xfs_alloc_ag_vextent()
637 -((long)(args->len))); in xfs_alloc_ag_vextent()
641 XFS_STATS_ADD(xs_allocb, args->len); in xfs_alloc_ag_vextent()
653 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
665 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
670 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
671 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_exact()
678 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); in xfs_alloc_ag_vextent_exact()
690 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_exact()
691 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
696 xfs_extent_busy_trim(args, fbno, flen, &tbno, &tlen); in xfs_alloc_ag_vextent_exact()
702 if (tbno > args->agbno) in xfs_alloc_ag_vextent_exact()
704 if (tlen < args->minlen) in xfs_alloc_ag_vextent_exact()
707 if (tend < args->agbno + args->minlen) in xfs_alloc_ag_vextent_exact()
716 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) in xfs_alloc_ag_vextent_exact()
717 - args->agbno; in xfs_alloc_ag_vextent_exact()
718 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
719 if (!xfs_alloc_fix_minleft(args)) in xfs_alloc_ag_vextent_exact()
722 ASSERT(args->agbno + args->len <= tend); in xfs_alloc_ag_vextent_exact()
728 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
729 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_exact()
730 ASSERT(args->agbno + args->len <= in xfs_alloc_ag_vextent_exact()
731 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_exact()
732 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, in xfs_alloc_ag_vextent_exact()
733 args->len, XFSA_FIXUP_BNO_OK); in xfs_alloc_ag_vextent_exact()
742 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
743 trace_xfs_alloc_exact_done(args); in xfs_alloc_ag_vextent_exact()
749 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
750 trace_xfs_alloc_exact_notfound(args); in xfs_alloc_ag_vextent_exact()
755 trace_xfs_alloc_exact_error(args); in xfs_alloc_ag_vextent_exact()
765 struct xfs_alloc_arg *args, /* allocation argument structure */ in xfs_alloc_find_best_extent() argument
791 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_find_best_extent()
792 xfs_alloc_compute_aligned(args, *sbno, *slen, sbnoa, slena); in xfs_alloc_find_best_extent()
798 if (*sbnoa >= args->agbno + gdiff) in xfs_alloc_find_best_extent()
801 if (*sbnoa <= args->agbno - gdiff) in xfs_alloc_find_best_extent()
808 if (*slena >= args->minlen) { in xfs_alloc_find_best_extent()
809 args->len = XFS_EXTLEN_MIN(*slena, args->maxlen); in xfs_alloc_find_best_extent()
810 xfs_alloc_fix_len(args); in xfs_alloc_find_best_extent()
812 sdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_find_best_extent()
813 args->alignment, in xfs_alloc_find_best_extent()
814 args->userdata, *sbnoa, in xfs_alloc_find_best_extent()
856 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_near() argument
897 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_near()
898 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_near()
903 if ((error = xfs_alloc_lookup_ge(cnt_cur, 0, args->maxlen, &i))) in xfs_alloc_ag_vextent_near()
910 if ((error = xfs_alloc_ag_vextent_small(args, cnt_cur, <bno, in xfs_alloc_ag_vextent_near()
915 trace_xfs_alloc_near_noentry(args); in xfs_alloc_ag_vextent_near()
920 args->wasfromfl = 0; in xfs_alloc_ag_vextent_near()
948 if (ltlen || args->alignment > 1) { in xfs_alloc_ag_vextent_near()
954 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
955 if (ltlen >= args->minlen) in xfs_alloc_ag_vextent_near()
960 ASSERT(ltlen >= args->minlen); in xfs_alloc_ag_vextent_near()
966 !error && j && (blen < args->maxlen || bdiff > 0); in xfs_alloc_ag_vextent_near()
974 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
975 xfs_alloc_compute_aligned(args, ltbno, ltlen, in xfs_alloc_ag_vextent_near()
977 if (ltlena < args->minlen) in xfs_alloc_ag_vextent_near()
979 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
980 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
981 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent_near()
982 if (args->len < blen) in xfs_alloc_ag_vextent_near()
984 ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
985 args->alignment, args->userdata, ltbnoa, in xfs_alloc_ag_vextent_near()
988 (args->len > blen || ltdiff < bdiff)) { in xfs_alloc_ag_vextent_near()
991 blen = args->len; in xfs_alloc_ag_vextent_near()
1007 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1008 ASSERT(ltbno + ltlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_near()
1009 args->len = blen; in xfs_alloc_ag_vextent_near()
1010 if (!xfs_alloc_fix_minleft(args)) { in xfs_alloc_ag_vextent_near()
1012 trace_xfs_alloc_near_nominleft(args); in xfs_alloc_ag_vextent_near()
1015 blen = args->len; in xfs_alloc_ag_vextent_near()
1019 args->agbno = bnew; in xfs_alloc_ag_vextent_near()
1025 bno_cur_lt = xfs_allocbt_init_cursor(args->mp, args->tp, in xfs_alloc_ag_vextent_near()
1026 args->agbp, args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_near()
1036 trace_xfs_alloc_near_first(args); in xfs_alloc_ag_vextent_near()
1054 bno_cur_lt = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_near()
1055 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_near()
1059 if ((error = xfs_alloc_lookup_le(bno_cur_lt, args->agbno, args->maxlen, &i))) in xfs_alloc_ag_vextent_near()
1096 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1097 xfs_alloc_compute_aligned(args, ltbno, ltlen, in xfs_alloc_ag_vextent_near()
1099 if (ltlena >= args->minlen) in xfs_alloc_ag_vextent_near()
1112 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_near()
1113 xfs_alloc_compute_aligned(args, gtbno, gtlen, in xfs_alloc_ag_vextent_near()
1115 if (gtlena >= args->minlen) in xfs_alloc_ag_vextent_near()
1131 if (ltlena >= args->minlen) { in xfs_alloc_ag_vextent_near()
1135 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1136 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1137 ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1138 args->alignment, args->userdata, ltbnoa, in xfs_alloc_ag_vextent_near()
1141 error = xfs_alloc_find_best_extent(args, in xfs_alloc_ag_vextent_near()
1147 ASSERT(gtlena >= args->minlen); in xfs_alloc_ag_vextent_near()
1152 args->len = XFS_EXTLEN_MIN(gtlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1153 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1154 gtdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
1155 args->alignment, args->userdata, gtbnoa, in xfs_alloc_ag_vextent_near()
1158 error = xfs_alloc_find_best_extent(args, in xfs_alloc_ag_vextent_near()
1176 trace_xfs_alloc_near_busy(args); in xfs_alloc_ag_vextent_near()
1177 xfs_log_force(args->mp, XFS_LOG_SYNC); in xfs_alloc_ag_vextent_near()
1180 trace_xfs_alloc_size_neither(args); in xfs_alloc_ag_vextent_near()
1181 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1205 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1206 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1207 if (!xfs_alloc_fix_minleft(args)) { in xfs_alloc_ag_vextent_near()
1208 trace_xfs_alloc_near_nominleft(args); in xfs_alloc_ag_vextent_near()
1213 rlen = args->len; in xfs_alloc_ag_vextent_near()
1214 (void)xfs_alloc_compute_diff(args->agbno, rlen, args->alignment, in xfs_alloc_ag_vextent_near()
1215 args->userdata, ltbnoa, ltlena, <new); in xfs_alloc_ag_vextent_near()
1218 ASSERT(ltnew + rlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_near()
1219 args->agbno = ltnew; in xfs_alloc_ag_vextent_near()
1226 trace_xfs_alloc_near_greater(args); in xfs_alloc_ag_vextent_near()
1228 trace_xfs_alloc_near_lesser(args); in xfs_alloc_ag_vextent_near()
1235 trace_xfs_alloc_near_error(args); in xfs_alloc_ag_vextent_near()
1253 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_size() argument
1269 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1270 args->agno, XFS_BTNUM_CNT); in xfs_alloc_ag_vextent_size()
1277 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1289 error = xfs_alloc_ag_vextent_small(args, cnt_cur, in xfs_alloc_ag_vextent_size()
1295 trace_xfs_alloc_size_noentry(args); in xfs_alloc_ag_vextent_size()
1299 xfs_alloc_compute_aligned(args, fbno, flen, &rbno, &rlen); in xfs_alloc_ag_vextent_size()
1311 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1313 xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1316 if (rlen >= args->maxlen) in xfs_alloc_ag_vextent_size()
1335 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1337 xfs_log_force(args->mp, XFS_LOG_SYNC); in xfs_alloc_ag_vextent_size()
1349 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1350 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 || in xfs_alloc_ag_vextent_size()
1352 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1370 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1373 xfs_alloc_compute_aligned(args, fbno, flen, in xfs_alloc_ag_vextent_size()
1375 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1376 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 || in xfs_alloc_ag_vextent_size()
1384 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1391 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_size()
1397 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1401 args->len = rlen; in xfs_alloc_ag_vextent_size()
1402 if (rlen < args->minlen) { in xfs_alloc_ag_vextent_size()
1405 trace_xfs_alloc_size_busy(args); in xfs_alloc_ag_vextent_size()
1406 xfs_log_force(args->mp, XFS_LOG_SYNC); in xfs_alloc_ag_vextent_size()
1411 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1413 if (!xfs_alloc_fix_minleft(args)) in xfs_alloc_ag_vextent_size()
1415 rlen = args->len; in xfs_alloc_ag_vextent_size()
1416 XFS_WANT_CORRUPTED_GOTO(args->mp, rlen <= flen, error0); in xfs_alloc_ag_vextent_size()
1420 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1421 args->agno, XFS_BTNUM_BNO); in xfs_alloc_ag_vextent_size()
1428 args->len = rlen; in xfs_alloc_ag_vextent_size()
1429 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1430 XFS_WANT_CORRUPTED_GOTO(args->mp, in xfs_alloc_ag_vextent_size()
1431 args->agbno + args->len <= in xfs_alloc_ag_vextent_size()
1432 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), in xfs_alloc_ag_vextent_size()
1434 trace_xfs_alloc_size_done(args); in xfs_alloc_ag_vextent_size()
1438 trace_xfs_alloc_size_error(args); in xfs_alloc_ag_vextent_size()
1447 trace_xfs_alloc_size_nominleft(args); in xfs_alloc_ag_vextent_size()
1448 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
1459 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
1475 XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); in xfs_alloc_ag_vextent_small()
1482 else if (args->minlen == 1 && args->alignment == 1 && !args->isfl && in xfs_alloc_ag_vextent_small()
1483 (be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_flcount) in xfs_alloc_ag_vextent_small()
1484 > args->minleft)) { in xfs_alloc_ag_vextent_small()
1485 error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0); in xfs_alloc_ag_vextent_small()
1489 xfs_extent_busy_reuse(args->mp, args->agno, fbno, 1, in xfs_alloc_ag_vextent_small()
1490 args->userdata); in xfs_alloc_ag_vextent_small()
1492 if (args->userdata) { in xfs_alloc_ag_vextent_small()
1495 bp = xfs_btree_get_bufs(args->mp, args->tp, in xfs_alloc_ag_vextent_small()
1496 args->agno, fbno, 0); in xfs_alloc_ag_vextent_small()
1497 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
1499 args->len = 1; in xfs_alloc_ag_vextent_small()
1500 args->agbno = fbno; in xfs_alloc_ag_vextent_small()
1501 XFS_WANT_CORRUPTED_GOTO(args->mp, in xfs_alloc_ag_vextent_small()
1502 args->agbno + args->len <= in xfs_alloc_ag_vextent_small()
1503 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), in xfs_alloc_ag_vextent_small()
1505 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
1506 trace_xfs_alloc_small_freelist(args); in xfs_alloc_ag_vextent_small()
1526 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
1527 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
1528 trace_xfs_alloc_small_notenough(args); in xfs_alloc_ag_vextent_small()
1534 trace_xfs_alloc_small_done(args); in xfs_alloc_ag_vextent_small()
1538 trace_xfs_alloc_small_error(args); in xfs_alloc_ag_vextent_small()
1847 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
1863 mp = args->mp; in xfs_alloc_fix_freelist()
1865 pag = args->pag; in xfs_alloc_fix_freelist()
1866 tp = args->tp; in xfs_alloc_fix_freelist()
1868 if ((error = xfs_alloc_read_agf(mp, tp, args->agno, flags, in xfs_alloc_fix_freelist()
1874 args->agbp = NULL; in xfs_alloc_fix_freelist()
1885 if (pag->pagf_metadata && args->userdata && in xfs_alloc_fix_freelist()
1888 args->agbp = NULL; in xfs_alloc_fix_freelist()
1899 if ((args->minlen + args->alignment + args->minalignslop - 1) > in xfs_alloc_fix_freelist()
1902 need - args->total) < (int)args->minleft)) { in xfs_alloc_fix_freelist()
1905 args->agbp = NULL; in xfs_alloc_fix_freelist()
1915 if ((error = xfs_alloc_read_agf(mp, tp, args->agno, flags, in xfs_alloc_fix_freelist()
1921 args->agbp = NULL; in xfs_alloc_fix_freelist()
1939 if ((args->minlen + args->alignment + args->minalignslop - 1) > in xfs_alloc_fix_freelist()
1942 be32_to_cpu(agf->agf_flcount) - need - args->total) < in xfs_alloc_fix_freelist()
1943 (int)args->minleft)) { in xfs_alloc_fix_freelist()
1945 args->agbp = NULL; in xfs_alloc_fix_freelist()
1958 if ((error = xfs_free_ag_extent(tp, agbp, args->agno, bno, 1, 1))) in xfs_alloc_fix_freelist()
1960 bp = xfs_btree_get_bufs(mp, tp, args->agno, bno, 0); in xfs_alloc_fix_freelist()
1970 targs.agno = args->agno; in xfs_alloc_fix_freelist()
1998 args->agbp = NULL; in xfs_alloc_fix_freelist()
2012 args->agbp = agbp; in xfs_alloc_fix_freelist()
2379 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_vextent() argument
2392 mp = args->mp; in xfs_alloc_vextent()
2393 type = args->otype = args->type; in xfs_alloc_vextent()
2394 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
2401 if (args->maxlen > agsize) in xfs_alloc_vextent()
2402 args->maxlen = agsize; in xfs_alloc_vextent()
2403 if (args->alignment == 0) in xfs_alloc_vextent()
2404 args->alignment = 1; in xfs_alloc_vextent()
2405 ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount); in xfs_alloc_vextent()
2406 ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize); in xfs_alloc_vextent()
2407 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent()
2408 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent()
2409 ASSERT(args->mod < args->prod); in xfs_alloc_vextent()
2410 if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount || in xfs_alloc_vextent()
2411 XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize || in xfs_alloc_vextent()
2412 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent()
2413 args->mod >= args->prod) { in xfs_alloc_vextent()
2414 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
2415 trace_xfs_alloc_vextent_badargs(args); in xfs_alloc_vextent()
2418 minleft = args->minleft; in xfs_alloc_vextent()
2427 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2428 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
2429 args->minleft = 0; in xfs_alloc_vextent()
2430 error = xfs_alloc_fix_freelist(args, 0); in xfs_alloc_vextent()
2431 args->minleft = minleft; in xfs_alloc_vextent()
2433 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
2436 if (!args->agbp) { in xfs_alloc_vextent()
2437 trace_xfs_alloc_vextent_noagbp(args); in xfs_alloc_vextent()
2440 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
2441 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
2449 if ((args->userdata == XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent()
2451 args->fsbno = XFS_AGB_TO_FSB(mp, in xfs_alloc_vextent()
2456 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
2457 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
2469 args->agno = sagno = (mp->m_agfrotor / rotorstep) % in xfs_alloc_vextent()
2471 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2477 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2478 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2483 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2487 args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2495 args->pag = xfs_perag_get(mp, args->agno); in xfs_alloc_vextent()
2496 if (no_min) args->minleft = 0; in xfs_alloc_vextent()
2497 error = xfs_alloc_fix_freelist(args, flags); in xfs_alloc_vextent()
2498 args->minleft = minleft; in xfs_alloc_vextent()
2500 trace_xfs_alloc_vextent_nofix(args); in xfs_alloc_vextent()
2506 if (args->agbp) { in xfs_alloc_vextent()
2507 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
2512 trace_xfs_alloc_vextent_loopfailed(args); in xfs_alloc_vextent()
2517 if (args->agno == sagno && in xfs_alloc_vextent()
2519 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2527 if (++(args->agno) == mp->m_sb.sb_agcount) { in xfs_alloc_vextent()
2528 if (args->firstblock != NULLFSBLOCK) in xfs_alloc_vextent()
2529 args->agno = sagno; in xfs_alloc_vextent()
2531 args->agno = 0; in xfs_alloc_vextent()
2537 if (args->agno == sagno) { in xfs_alloc_vextent()
2539 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
2540 trace_xfs_alloc_vextent_allfailed(args); in xfs_alloc_vextent()
2548 args->agbno = XFS_FSB_TO_AGBNO(mp, in xfs_alloc_vextent()
2549 args->fsbno); in xfs_alloc_vextent()
2550 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
2554 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2557 if (args->agno == sagno) in xfs_alloc_vextent()
2561 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent()
2569 if (args->agbno == NULLAGBLOCK) in xfs_alloc_vextent()
2570 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
2572 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent()
2574 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent()
2575 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent()
2576 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent()
2577 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), in xfs_alloc_vextent()
2578 args->len); in xfs_alloc_vextent()
2581 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2584 xfs_perag_put(args->pag); in xfs_alloc_vextent()
2599 xfs_alloc_arg_t args; in xfs_free_extent() local
2603 memset(&args, 0, sizeof(xfs_alloc_arg_t)); in xfs_free_extent()
2604 args.tp = tp; in xfs_free_extent()
2605 args.mp = tp->t_mountp; in xfs_free_extent()
2611 args.agno = XFS_FSB_TO_AGNO(args.mp, bno); in xfs_free_extent()
2612 if (args.agno >= args.mp->m_sb.sb_agcount) in xfs_free_extent()
2615 args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno); in xfs_free_extent()
2616 if (args.agbno >= args.mp->m_sb.sb_agblocks) in xfs_free_extent()
2619 args.pag = xfs_perag_get(args.mp, args.agno); in xfs_free_extent()
2620 ASSERT(args.pag); in xfs_free_extent()
2622 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); in xfs_free_extent()
2627 if (args.agbno + len > in xfs_free_extent()
2628 be32_to_cpu(XFS_BUF_TO_AGF(args.agbp)->agf_length)) { in xfs_free_extent()
2633 error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0); in xfs_free_extent()
2635 xfs_extent_busy_insert(tp, args.agno, args.agbno, len, 0); in xfs_free_extent()
2637 xfs_perag_put(args.pag); in xfs_free_extent()