Lines Matching refs:args

192 	xfs_alloc_arg_t	*args)		/* allocation argument structure */  in xfs_alloc_fix_len()  argument
197 ASSERT(args->mod < args->prod); in xfs_alloc_fix_len()
198 rlen = args->len; in xfs_alloc_fix_len()
199 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
200 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
201 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || in xfs_alloc_fix_len()
202 (args->mod == 0 && rlen < args->prod)) in xfs_alloc_fix_len()
204 k = rlen % args->prod; in xfs_alloc_fix_len()
205 if (k == args->mod) in xfs_alloc_fix_len()
207 if (k > args->mod) { in xfs_alloc_fix_len()
208 if ((int)(rlen = rlen - k - args->mod) < (int)args->minlen) in xfs_alloc_fix_len()
211 if ((int)(rlen = rlen - args->prod - (args->mod - k)) < in xfs_alloc_fix_len()
212 (int)args->minlen) in xfs_alloc_fix_len()
215 ASSERT(rlen >= args->minlen); in xfs_alloc_fix_len()
216 ASSERT(rlen <= args->maxlen); in xfs_alloc_fix_len()
217 args->len = rlen; in xfs_alloc_fix_len()
226 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_fix_minleft() argument
231 if (args->minleft == 0) in xfs_alloc_fix_minleft()
233 agf = XFS_BUF_TO_AGF(args->agbp); in xfs_alloc_fix_minleft()
236 - args->len - args->minleft; in xfs_alloc_fix_minleft()
239 args->len += diff; /* shrink the allocated space */ in xfs_alloc_fix_minleft()
240 if (args->len >= args->minlen) in xfs_alloc_fix_minleft()
242 args->agbno = NULLAGBLOCK; in xfs_alloc_fix_minleft()
427 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_trace_alloc() argument
434 (void *)args->mp, in xfs_alloc_trace_alloc()
435 (void *)(__psunsigned_t)args->agno, in xfs_alloc_trace_alloc()
436 (void *)(__psunsigned_t)args->agbno, in xfs_alloc_trace_alloc()
437 (void *)(__psunsigned_t)args->minlen, in xfs_alloc_trace_alloc()
438 (void *)(__psunsigned_t)args->maxlen, in xfs_alloc_trace_alloc()
439 (void *)(__psunsigned_t)args->mod, in xfs_alloc_trace_alloc()
440 (void *)(__psunsigned_t)args->prod, in xfs_alloc_trace_alloc()
441 (void *)(__psunsigned_t)args->minleft, in xfs_alloc_trace_alloc()
442 (void *)(__psunsigned_t)args->total, in xfs_alloc_trace_alloc()
443 (void *)(__psunsigned_t)args->alignment, in xfs_alloc_trace_alloc()
444 (void *)(__psunsigned_t)args->len, in xfs_alloc_trace_alloc()
445 (void *)((((__psint_t)args->type) << 16) | in xfs_alloc_trace_alloc()
446 (__psint_t)args->otype), in xfs_alloc_trace_alloc()
447 (void *)(__psint_t)((args->wasdel << 3) | in xfs_alloc_trace_alloc()
448 (args->wasfromfl << 2) | in xfs_alloc_trace_alloc()
449 (args->isfl << 1) | in xfs_alloc_trace_alloc()
450 (args->userdata << 0))); in xfs_alloc_trace_alloc()
551 xfs_alloc_arg_t *args) /* argument structure for allocation */ in xfs_alloc_ag_vextent() argument
558 ASSERT(args->minlen > 0); in xfs_alloc_ag_vextent()
559 ASSERT(args->maxlen > 0); in xfs_alloc_ag_vextent()
560 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_ag_vextent()
561 ASSERT(args->mod < args->prod); in xfs_alloc_ag_vextent()
562 ASSERT(args->alignment > 0); in xfs_alloc_ag_vextent()
566 args->wasfromfl = 0; in xfs_alloc_ag_vextent()
567 switch (args->type) { in xfs_alloc_ag_vextent()
569 error = xfs_alloc_ag_vextent_size(args); in xfs_alloc_ag_vextent()
572 error = xfs_alloc_ag_vextent_near(args); in xfs_alloc_ag_vextent()
575 error = xfs_alloc_ag_vextent_exact(args); in xfs_alloc_ag_vextent()
587 if (args->agbno != NULLAGBLOCK) { in xfs_alloc_ag_vextent()
590 xfs_mount_t *mp = args->mp; in xfs_alloc_ag_vextent()
592 long slen = (long)args->len; in xfs_alloc_ag_vextent()
594 ASSERT(args->len >= args->minlen && args->len <= args->maxlen); in xfs_alloc_ag_vextent()
595 ASSERT(!(args->wasfromfl) || !args->isfl); in xfs_alloc_ag_vextent()
596 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_ag_vextent()
597 if (!(args->wasfromfl)) { in xfs_alloc_ag_vextent()
599 agf = XFS_BUF_TO_AGF(args->agbp); in xfs_alloc_ag_vextent()
600 be32_add(&agf->agf_freeblks, -(args->len)); in xfs_alloc_ag_vextent()
601 xfs_trans_agblocks_delta(args->tp, in xfs_alloc_ag_vextent()
602 -((long)(args->len))); in xfs_alloc_ag_vextent()
603 args->pag->pagf_freeblks -= args->len; in xfs_alloc_ag_vextent()
607 xfs_alloc_log_agf(args->tp, args->agbp, in xfs_alloc_ag_vextent()
610 xfs_alloc_search_busy(args->tp, args->agno, in xfs_alloc_ag_vextent()
611 args->agbno, args->len); in xfs_alloc_ag_vextent()
613 if (!args->isfl) in xfs_alloc_ag_vextent()
614 xfs_trans_mod_sb(args->tp, in xfs_alloc_ag_vextent()
615 args->wasdel ? XFS_TRANS_SB_RES_FDBLOCKS : in xfs_alloc_ag_vextent()
618 XFS_STATS_ADD(xs_allocb, args->len); in xfs_alloc_ag_vextent()
631 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_exact() argument
648 ASSERT(args->alignment == 1); in xfs_alloc_ag_vextent_exact()
652 bno_cur = xfs_btree_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
653 args->agno, XFS_BTNUM_BNO, NULL, 0); in xfs_alloc_ag_vextent_exact()
659 if ((error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i))) in xfs_alloc_ag_vextent_exact()
666 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
675 ASSERT(fbno <= args->agbno); in xfs_alloc_ag_vextent_exact()
676 minend = args->agbno + args->minlen; in xfs_alloc_ag_vextent_exact()
677 maxend = args->agbno + args->maxlen; in xfs_alloc_ag_vextent_exact()
684 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_exact()
695 args->len = end - args->agbno; in xfs_alloc_ag_vextent_exact()
696 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_exact()
697 if (!xfs_alloc_fix_minleft(args)) { in xfs_alloc_ag_vextent_exact()
701 rlen = args->len; in xfs_alloc_ag_vextent_exact()
702 ASSERT(args->agbno + rlen <= fend); in xfs_alloc_ag_vextent_exact()
703 end = args->agbno + rlen; in xfs_alloc_ag_vextent_exact()
708 cnt_cur = xfs_btree_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_exact()
709 args->agno, XFS_BTNUM_CNT, NULL, 0); in xfs_alloc_ag_vextent_exact()
710 ASSERT(args->agbno + args->len <= in xfs_alloc_ag_vextent_exact()
711 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_exact()
713 args->agbno, args->len, XFSA_FIXUP_BNO_OK))) { in xfs_alloc_ag_vextent_exact()
719 TRACE_ALLOC("normal", args); in xfs_alloc_ag_vextent_exact()
720 args->wasfromfl = 0; in xfs_alloc_ag_vextent_exact()
725 TRACE_ALLOC("error", args); in xfs_alloc_ag_vextent_exact()
737 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_near() argument
774 cnt_cur = xfs_btree_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_near()
775 args->agno, XFS_BTNUM_CNT, NULL, 0); in xfs_alloc_ag_vextent_near()
781 if ((error = xfs_alloc_lookup_ge(cnt_cur, 0, args->maxlen, &i))) in xfs_alloc_ag_vextent_near()
788 if ((error = xfs_alloc_ag_vextent_small(args, cnt_cur, &ltbno, in xfs_alloc_ag_vextent_near()
797 args->wasfromfl = 0; in xfs_alloc_ag_vextent_near()
824 if (ltlen || args->alignment > 1) { in xfs_alloc_ag_vextent_near()
831 if (ltlen >= args->minlen) in xfs_alloc_ag_vextent_near()
836 ASSERT(ltlen >= args->minlen); in xfs_alloc_ag_vextent_near()
842 !error && j && (blen < args->maxlen || bdiff > 0); in xfs_alloc_ag_vextent_near()
852 args->alignment, args->minlen, in xfs_alloc_ag_vextent_near()
855 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
856 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
857 ASSERT(args->len >= args->minlen); in xfs_alloc_ag_vextent_near()
858 if (args->len < blen) in xfs_alloc_ag_vextent_near()
860 ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, in xfs_alloc_ag_vextent_near()
861 args->alignment, ltbno, ltlen, &ltnew); in xfs_alloc_ag_vextent_near()
863 (args->len > blen || ltdiff < bdiff)) { in xfs_alloc_ag_vextent_near()
866 blen = args->len; in xfs_alloc_ag_vextent_near()
884 ASSERT(ltend <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_near()
885 args->len = blen; in xfs_alloc_ag_vextent_near()
886 if (!xfs_alloc_fix_minleft(args)) { in xfs_alloc_ag_vextent_near()
888 TRACE_ALLOC("nominleft", args); in xfs_alloc_ag_vextent_near()
891 blen = args->len; in xfs_alloc_ag_vextent_near()
895 args->agbno = bnew; in xfs_alloc_ag_vextent_near()
901 bno_cur_lt = xfs_btree_init_cursor(args->mp, args->tp, in xfs_alloc_ag_vextent_near()
902 args->agbp, args->agno, XFS_BTNUM_BNO, NULL, 0); in xfs_alloc_ag_vextent_near()
911 TRACE_ALLOC("first", args); in xfs_alloc_ag_vextent_near()
929 bno_cur_lt = xfs_btree_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_near()
930 args->agno, XFS_BTNUM_BNO, NULL, 0); in xfs_alloc_ag_vextent_near()
934 if ((error = xfs_alloc_lookup_le(bno_cur_lt, args->agbno, args->maxlen, &i))) in xfs_alloc_ag_vextent_near()
973 args->alignment, args->minlen, in xfs_alloc_ag_vextent_near()
989 args->alignment, args->minlen, in xfs_alloc_ag_vextent_near()
1008 if (ltlena >= args->minlen) { in xfs_alloc_ag_vextent_near()
1012 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1013 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1014 rlen = args->len; in xfs_alloc_ag_vextent_near()
1015 ltdiff = xfs_alloc_compute_diff(args->agbno, rlen, in xfs_alloc_ag_vextent_near()
1016 args->alignment, ltbno, ltlen, &ltnew); in xfs_alloc_ag_vextent_near()
1032 args->alignment, args->minlen, in xfs_alloc_ag_vextent_near()
1037 if (gtbnoa >= args->agbno + ltdiff) { in xfs_alloc_ag_vextent_near()
1048 if (gtlena >= args->minlen) { in xfs_alloc_ag_vextent_near()
1049 args->len = in xfs_alloc_ag_vextent_near()
1051 args->maxlen); in xfs_alloc_ag_vextent_near()
1052 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1053 rlen = args->len; in xfs_alloc_ag_vextent_near()
1055 args->agbno, rlen, in xfs_alloc_ag_vextent_near()
1056 args->alignment, in xfs_alloc_ag_vextent_near()
1109 args->len = XFS_EXTLEN_MIN(gtlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1110 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1111 rlen = args->len; in xfs_alloc_ag_vextent_near()
1112 gtdiff = xfs_alloc_compute_diff(args->agbno, rlen, in xfs_alloc_ag_vextent_near()
1113 args->alignment, gtbno, gtlen, &gtnew); in xfs_alloc_ag_vextent_near()
1129 args->alignment, args->minlen, in xfs_alloc_ag_vextent_near()
1134 if (ltbnoa <= args->agbno - gtdiff) { in xfs_alloc_ag_vextent_near()
1145 if (ltlena >= args->minlen) { in xfs_alloc_ag_vextent_near()
1146 args->len = XFS_EXTLEN_MIN( in xfs_alloc_ag_vextent_near()
1147 ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1148 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1149 rlen = args->len; in xfs_alloc_ag_vextent_near()
1151 args->agbno, rlen, in xfs_alloc_ag_vextent_near()
1152 args->alignment, in xfs_alloc_ag_vextent_near()
1202 TRACE_ALLOC("neither", args); in xfs_alloc_ag_vextent_near()
1203 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_near()
1226 args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); in xfs_alloc_ag_vextent_near()
1227 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_near()
1228 if (!xfs_alloc_fix_minleft(args)) { in xfs_alloc_ag_vextent_near()
1229 TRACE_ALLOC("nominleft", args); in xfs_alloc_ag_vextent_near()
1234 rlen = args->len; in xfs_alloc_ag_vextent_near()
1235 (void)xfs_alloc_compute_diff(args->agbno, rlen, args->alignment, ltbno, in xfs_alloc_ag_vextent_near()
1239 ASSERT(ltnew + rlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); in xfs_alloc_ag_vextent_near()
1240 args->agbno = ltnew; in xfs_alloc_ag_vextent_near()
1244 TRACE_ALLOC(j ? "gt" : "lt", args); in xfs_alloc_ag_vextent_near()
1250 TRACE_ALLOC("error", args); in xfs_alloc_ag_vextent_near()
1268 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_ag_vextent_size() argument
1285 cnt_cur = xfs_btree_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1286 args->agno, XFS_BTNUM_CNT, NULL, 0); in xfs_alloc_ag_vextent_size()
1292 args->maxlen + args->alignment - 1, &i))) in xfs_alloc_ag_vextent_size()
1299 if ((error = xfs_alloc_ag_vextent_small(args, cnt_cur, &fbno, in xfs_alloc_ag_vextent_size()
1304 TRACE_ALLOC("noentry", args); in xfs_alloc_ag_vextent_size()
1323 xfs_alloc_compute_aligned(fbno, flen, args->alignment, args->minlen, in xfs_alloc_ag_vextent_size()
1325 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1328 if (rlen < args->maxlen) { in xfs_alloc_ag_vextent_size()
1349 xfs_alloc_compute_aligned(fbno, flen, args->alignment, in xfs_alloc_ag_vextent_size()
1350 args->minlen, &rbno, &rlen); in xfs_alloc_ag_vextent_size()
1351 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); in xfs_alloc_ag_vextent_size()
1360 if (rlen == args->maxlen) in xfs_alloc_ag_vextent_size()
1373 args->wasfromfl = 0; in xfs_alloc_ag_vextent_size()
1377 args->len = rlen; in xfs_alloc_ag_vextent_size()
1378 xfs_alloc_fix_len(args); in xfs_alloc_ag_vextent_size()
1379 if (rlen < args->minlen || !xfs_alloc_fix_minleft(args)) { in xfs_alloc_ag_vextent_size()
1381 TRACE_ALLOC("nominleft", args); in xfs_alloc_ag_vextent_size()
1382 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_size()
1385 rlen = args->len; in xfs_alloc_ag_vextent_size()
1390 bno_cur = xfs_btree_init_cursor(args->mp, args->tp, args->agbp, in xfs_alloc_ag_vextent_size()
1391 args->agno, XFS_BTNUM_BNO, NULL, 0); in xfs_alloc_ag_vextent_size()
1398 args->len = rlen; in xfs_alloc_ag_vextent_size()
1399 args->agbno = rbno; in xfs_alloc_ag_vextent_size()
1401 args->agbno + args->len <= in xfs_alloc_ag_vextent_size()
1402 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), in xfs_alloc_ag_vextent_size()
1404 TRACE_ALLOC("normal", args); in xfs_alloc_ag_vextent_size()
1408 TRACE_ALLOC("error", args); in xfs_alloc_ag_vextent_size()
1423 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_ag_vextent_small() argument
1449 else if (args->minlen == 1 && args->alignment == 1 && !args->isfl && in xfs_alloc_ag_vextent_small()
1450 (be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_flcount) in xfs_alloc_ag_vextent_small()
1451 > args->minleft)) { in xfs_alloc_ag_vextent_small()
1452 if ((error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno))) in xfs_alloc_ag_vextent_small()
1455 if (args->userdata) { in xfs_alloc_ag_vextent_small()
1458 bp = xfs_btree_get_bufs(args->mp, args->tp, in xfs_alloc_ag_vextent_small()
1459 args->agno, fbno, 0); in xfs_alloc_ag_vextent_small()
1460 xfs_trans_binval(args->tp, bp); in xfs_alloc_ag_vextent_small()
1462 args->len = 1; in xfs_alloc_ag_vextent_small()
1463 args->agbno = fbno; in xfs_alloc_ag_vextent_small()
1465 args->agbno + args->len <= in xfs_alloc_ag_vextent_small()
1466 be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), in xfs_alloc_ag_vextent_small()
1468 args->wasfromfl = 1; in xfs_alloc_ag_vextent_small()
1469 TRACE_ALLOC("freelist", args); in xfs_alloc_ag_vextent_small()
1489 if (flen < args->minlen) { in xfs_alloc_ag_vextent_small()
1490 args->agbno = NULLAGBLOCK; in xfs_alloc_ag_vextent_small()
1491 TRACE_ALLOC("notenough", args); in xfs_alloc_ag_vextent_small()
1497 TRACE_ALLOC("normal", args); in xfs_alloc_ag_vextent_small()
1501 TRACE_ALLOC("error", args); in xfs_alloc_ag_vextent_small()
1817 xfs_alloc_arg_t *args, /* allocation argument structure */ in xfs_alloc_fix_freelist() argument
1833 mp = args->mp; in xfs_alloc_fix_freelist()
1835 pag = args->pag; in xfs_alloc_fix_freelist()
1836 tp = args->tp; in xfs_alloc_fix_freelist()
1838 if ((error = xfs_alloc_read_agf(mp, tp, args->agno, flags, in xfs_alloc_fix_freelist()
1842 args->agbp = NULL; in xfs_alloc_fix_freelist()
1852 if (pag->pagf_metadata && args->userdata && flags) { in xfs_alloc_fix_freelist()
1853 args->agbp = NULL; in xfs_alloc_fix_freelist()
1866 if (args->minlen + args->alignment + args->minalignslop - 1 > longest || in xfs_alloc_fix_freelist()
1867 (args->minleft && in xfs_alloc_fix_freelist()
1869 need - args->total) < in xfs_alloc_fix_freelist()
1870 (int)args->minleft)) { in xfs_alloc_fix_freelist()
1873 args->agbp = NULL; in xfs_alloc_fix_freelist()
1881 if ((error = xfs_alloc_read_agf(mp, tp, args->agno, flags, in xfs_alloc_fix_freelist()
1885 args->agbp = NULL; in xfs_alloc_fix_freelist()
1902 if (args->minlen + args->alignment + args->minalignslop - 1 > longest || in xfs_alloc_fix_freelist()
1903 (args->minleft && in xfs_alloc_fix_freelist()
1905 be32_to_cpu(agf->agf_flcount) - need - args->total) < in xfs_alloc_fix_freelist()
1906 (int)args->minleft)) { in xfs_alloc_fix_freelist()
1908 args->agbp = NULL; in xfs_alloc_fix_freelist()
1919 if ((error = xfs_free_ag_extent(tp, agbp, args->agno, bno, 1, 1))) in xfs_alloc_fix_freelist()
1921 bp = xfs_btree_get_bufs(mp, tp, args->agno, bno, 0); in xfs_alloc_fix_freelist()
1930 targs.agno = args->agno; in xfs_alloc_fix_freelist()
1965 args->agbp = agbp; in xfs_alloc_fix_freelist()
2216 xfs_alloc_arg_t *args) /* allocation argument structure */ in xfs_alloc_vextent() argument
2232 mp = args->mp; in xfs_alloc_vextent()
2233 type = args->otype = args->type; in xfs_alloc_vextent()
2234 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
2241 if (args->maxlen > agsize) in xfs_alloc_vextent()
2242 args->maxlen = agsize; in xfs_alloc_vextent()
2243 if (args->alignment == 0) in xfs_alloc_vextent()
2244 args->alignment = 1; in xfs_alloc_vextent()
2245 ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount); in xfs_alloc_vextent()
2246 ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize); in xfs_alloc_vextent()
2247 ASSERT(args->minlen <= args->maxlen); in xfs_alloc_vextent()
2248 ASSERT(args->minlen <= agsize); in xfs_alloc_vextent()
2249 ASSERT(args->mod < args->prod); in xfs_alloc_vextent()
2250 if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount || in xfs_alloc_vextent()
2251 XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize || in xfs_alloc_vextent()
2252 args->minlen > args->maxlen || args->minlen > agsize || in xfs_alloc_vextent()
2253 args->mod >= args->prod) { in xfs_alloc_vextent()
2254 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
2255 TRACE_ALLOC("badargs", args); in xfs_alloc_vextent()
2258 minleft = args->minleft; in xfs_alloc_vextent()
2267 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2269 args->pag = &mp->m_perag[args->agno]; in xfs_alloc_vextent()
2270 args->minleft = 0; in xfs_alloc_vextent()
2271 error = xfs_alloc_fix_freelist(args, 0); in xfs_alloc_vextent()
2272 args->minleft = minleft; in xfs_alloc_vextent()
2274 TRACE_ALLOC("nofix", args); in xfs_alloc_vextent()
2277 if (!args->agbp) { in xfs_alloc_vextent()
2279 TRACE_ALLOC("noagbp", args); in xfs_alloc_vextent()
2282 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
2283 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
2292 if ((args->userdata == XFS_ALLOC_INITIAL_USER_DATA) && in xfs_alloc_vextent()
2294 args->fsbno = XFS_AGB_TO_FSB(mp, in xfs_alloc_vextent()
2299 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); in xfs_alloc_vextent()
2300 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
2312 args->agno = sagno = (mp->m_agfrotor / rotorstep) % in xfs_alloc_vextent()
2314 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2320 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2321 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2326 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2330 args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno); in xfs_alloc_vextent()
2339 args->pag = &mp->m_perag[args->agno]; in xfs_alloc_vextent()
2340 if (no_min) args->minleft = 0; in xfs_alloc_vextent()
2341 error = xfs_alloc_fix_freelist(args, flags); in xfs_alloc_vextent()
2342 args->minleft = minleft; in xfs_alloc_vextent()
2344 TRACE_ALLOC("nofix", args); in xfs_alloc_vextent()
2350 if (args->agbp) { in xfs_alloc_vextent()
2351 if ((error = xfs_alloc_ag_vextent(args))) in xfs_alloc_vextent()
2355 TRACE_ALLOC("loopfailed", args); in xfs_alloc_vextent()
2359 if (args->agno == sagno && in xfs_alloc_vextent()
2361 args->type = XFS_ALLOCTYPE_THIS_AG; in xfs_alloc_vextent()
2362 if (++(args->agno) == mp->m_sb.sb_agcount) in xfs_alloc_vextent()
2363 args->agno = 0; in xfs_alloc_vextent()
2368 if (args->agno == sagno) { in xfs_alloc_vextent()
2370 args->agbno = NULLAGBLOCK; in xfs_alloc_vextent()
2371 TRACE_ALLOC("allfailed", args); in xfs_alloc_vextent()
2379 args->agbno = XFS_FSB_TO_AGBNO(mp, in xfs_alloc_vextent()
2380 args->fsbno); in xfs_alloc_vextent()
2381 args->type = XFS_ALLOCTYPE_NEAR_BNO; in xfs_alloc_vextent()
2388 if (args->agno == sagno) in xfs_alloc_vextent()
2392 mp->m_agfrotor = (args->agno * rotorstep + 1) % in xfs_alloc_vextent()
2400 if (args->agbno == NULLAGBLOCK) in xfs_alloc_vextent()
2401 args->fsbno = NULLFSBLOCK; in xfs_alloc_vextent()
2403 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); in xfs_alloc_vextent()
2405 ASSERT(args->len >= args->minlen); in xfs_alloc_vextent()
2406 ASSERT(args->len <= args->maxlen); in xfs_alloc_vextent()
2407 ASSERT(args->agbno % args->alignment == 0); in xfs_alloc_vextent()
2408 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), in xfs_alloc_vextent()
2409 args->len); in xfs_alloc_vextent()
2432 xfs_alloc_arg_t args; /* allocation argument structure */ in xfs_free_extent() local
2436 args.tp = tp; in xfs_free_extent()
2437 args.mp = tp->t_mountp; in xfs_free_extent()
2438 args.agno = XFS_FSB_TO_AGNO(args.mp, bno); in xfs_free_extent()
2439 ASSERT(args.agno < args.mp->m_sb.sb_agcount); in xfs_free_extent()
2440 args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno); in xfs_free_extent()
2441 args.alignment = 1; in xfs_free_extent()
2442 args.minlen = args.minleft = args.minalignslop = 0; in xfs_free_extent()
2443 down_read(&args.mp->m_peraglock); in xfs_free_extent()
2444 args.pag = &args.mp->m_perag[args.agno]; in xfs_free_extent()
2445 if ((error = xfs_alloc_fix_freelist(&args, 0))) in xfs_free_extent()
2448 ASSERT(args.agbp != NULL); in xfs_free_extent()
2449 agf = XFS_BUF_TO_AGF(args.agbp); in xfs_free_extent()
2450 ASSERT(args.agbno + len <= be32_to_cpu(agf->agf_length)); in xfs_free_extent()
2452 error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, in xfs_free_extent()
2455 up_read(&args.mp->m_peraglock); in xfs_free_extent()