diff options
Diffstat (limited to 'fs/xfs/xfs_alloc.c')
-rw-r--r-- | fs/xfs/xfs_alloc.c | 361 |
1 files changed, 148 insertions, 213 deletions
diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c index 112abc439ca5..f3227984a9bf 100644 --- a/fs/xfs/xfs_alloc.c +++ b/fs/xfs/xfs_alloc.c | |||
@@ -41,10 +41,6 @@ | |||
41 | #define XFSA_FIXUP_BNO_OK 1 | 41 | #define XFSA_FIXUP_BNO_OK 1 |
42 | #define XFSA_FIXUP_CNT_OK 2 | 42 | #define XFSA_FIXUP_CNT_OK 2 |
43 | 43 | ||
44 | static int | ||
45 | xfs_alloc_busy_search(struct xfs_mount *mp, xfs_agnumber_t agno, | ||
46 | xfs_agblock_t bno, xfs_extlen_t len); | ||
47 | |||
48 | /* | 44 | /* |
49 | * Prototypes for per-ag allocation routines | 45 | * Prototypes for per-ag allocation routines |
50 | */ | 46 | */ |
@@ -94,7 +90,7 @@ xfs_alloc_lookup_ge( | |||
94 | * Lookup the first record less than or equal to [bno, len] | 90 | * Lookup the first record less than or equal to [bno, len] |
95 | * in the btree given by cur. | 91 | * in the btree given by cur. |
96 | */ | 92 | */ |
97 | STATIC int /* error */ | 93 | int /* error */ |
98 | xfs_alloc_lookup_le( | 94 | xfs_alloc_lookup_le( |
99 | struct xfs_btree_cur *cur, /* btree cursor */ | 95 | struct xfs_btree_cur *cur, /* btree cursor */ |
100 | xfs_agblock_t bno, /* starting block of extent */ | 96 | xfs_agblock_t bno, /* starting block of extent */ |
@@ -127,7 +123,7 @@ xfs_alloc_update( | |||
127 | /* | 123 | /* |
128 | * Get the data from the pointed-to record. | 124 | * Get the data from the pointed-to record. |
129 | */ | 125 | */ |
130 | STATIC int /* error */ | 126 | int /* error */ |
131 | xfs_alloc_get_rec( | 127 | xfs_alloc_get_rec( |
132 | struct xfs_btree_cur *cur, /* btree cursor */ | 128 | struct xfs_btree_cur *cur, /* btree cursor */ |
133 | xfs_agblock_t *bno, /* output: starting block of extent */ | 129 | xfs_agblock_t *bno, /* output: starting block of extent */ |
@@ -577,61 +573,58 @@ xfs_alloc_ag_vextent_exact( | |||
577 | xfs_extlen_t rlen; /* length of returned extent */ | 573 | xfs_extlen_t rlen; /* length of returned extent */ |
578 | 574 | ||
579 | ASSERT(args->alignment == 1); | 575 | ASSERT(args->alignment == 1); |
576 | |||
580 | /* | 577 | /* |
581 | * Allocate/initialize a cursor for the by-number freespace btree. | 578 | * Allocate/initialize a cursor for the by-number freespace btree. |
582 | */ | 579 | */ |
583 | bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, | 580 | bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, |
584 | args->agno, XFS_BTNUM_BNO); | 581 | args->agno, XFS_BTNUM_BNO); |
582 | |||
585 | /* | 583 | /* |
586 | * Lookup bno and minlen in the btree (minlen is irrelevant, really). | 584 | * Lookup bno and minlen in the btree (minlen is irrelevant, really). |
587 | * Look for the closest free block <= bno, it must contain bno | 585 | * Look for the closest free block <= bno, it must contain bno |
588 | * if any free block does. | 586 | * if any free block does. |
589 | */ | 587 | */ |
590 | if ((error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i))) | 588 | error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); |
589 | if (error) | ||
591 | goto error0; | 590 | goto error0; |
592 | if (!i) { | 591 | if (!i) |
593 | /* | 592 | goto not_found; |
594 | * Didn't find it, return null. | 593 | |
595 | */ | ||
596 | xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); | ||
597 | args->agbno = NULLAGBLOCK; | ||
598 | return 0; | ||
599 | } | ||
600 | /* | 594 | /* |
601 | * Grab the freespace record. | 595 | * Grab the freespace record. |
602 | */ | 596 | */ |
603 | if ((error = xfs_alloc_get_rec(bno_cur, &fbno, &flen, &i))) | 597 | error = xfs_alloc_get_rec(bno_cur, &fbno, &flen, &i); |
598 | if (error) | ||
604 | goto error0; | 599 | goto error0; |
605 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 600 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); |
606 | ASSERT(fbno <= args->agbno); | 601 | ASSERT(fbno <= args->agbno); |
607 | minend = args->agbno + args->minlen; | 602 | minend = args->agbno + args->minlen; |
608 | maxend = args->agbno + args->maxlen; | 603 | maxend = args->agbno + args->maxlen; |
609 | fend = fbno + flen; | 604 | fend = fbno + flen; |
605 | |||
610 | /* | 606 | /* |
611 | * Give up if the freespace isn't long enough for the minimum request. | 607 | * Give up if the freespace isn't long enough for the minimum request. |
612 | */ | 608 | */ |
613 | if (fend < minend) { | 609 | if (fend < minend) |
614 | xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); | 610 | goto not_found; |
615 | args->agbno = NULLAGBLOCK; | 611 | |
616 | return 0; | ||
617 | } | ||
618 | /* | 612 | /* |
619 | * End of extent will be smaller of the freespace end and the | 613 | * End of extent will be smaller of the freespace end and the |
620 | * maximal requested end. | 614 | * maximal requested end. |
621 | */ | 615 | * |
622 | end = XFS_AGBLOCK_MIN(fend, maxend); | ||
623 | /* | ||
624 | * Fix the length according to mod and prod if given. | 616 | * Fix the length according to mod and prod if given. |
625 | */ | 617 | */ |
618 | end = XFS_AGBLOCK_MIN(fend, maxend); | ||
626 | args->len = end - args->agbno; | 619 | args->len = end - args->agbno; |
627 | xfs_alloc_fix_len(args); | 620 | xfs_alloc_fix_len(args); |
628 | if (!xfs_alloc_fix_minleft(args)) { | 621 | if (!xfs_alloc_fix_minleft(args)) |
629 | xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); | 622 | goto not_found; |
630 | return 0; | 623 | |
631 | } | ||
632 | rlen = args->len; | 624 | rlen = args->len; |
633 | ASSERT(args->agbno + rlen <= fend); | 625 | ASSERT(args->agbno + rlen <= fend); |
634 | end = args->agbno + rlen; | 626 | end = args->agbno + rlen; |
627 | |||
635 | /* | 628 | /* |
636 | * We are allocating agbno for rlen [agbno .. end] | 629 | * We are allocating agbno for rlen [agbno .. end] |
637 | * Allocate/initialize a cursor for the by-size btree. | 630 | * Allocate/initialize a cursor for the by-size btree. |
@@ -640,16 +633,25 @@ xfs_alloc_ag_vextent_exact( | |||
640 | args->agno, XFS_BTNUM_CNT); | 633 | args->agno, XFS_BTNUM_CNT); |
641 | ASSERT(args->agbno + args->len <= | 634 | ASSERT(args->agbno + args->len <= |
642 | be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); | 635 | be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); |
643 | if ((error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, | 636 | error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, |
644 | args->agbno, args->len, XFSA_FIXUP_BNO_OK))) { | 637 | args->len, XFSA_FIXUP_BNO_OK); |
638 | if (error) { | ||
645 | xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR); | 639 | xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR); |
646 | goto error0; | 640 | goto error0; |
647 | } | 641 | } |
642 | |||
648 | xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); | 643 | xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); |
649 | xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); | 644 | xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); |
650 | 645 | ||
651 | trace_xfs_alloc_exact_done(args); | ||
652 | args->wasfromfl = 0; | 646 | args->wasfromfl = 0; |
647 | trace_xfs_alloc_exact_done(args); | ||
648 | return 0; | ||
649 | |||
650 | not_found: | ||
651 | /* Didn't find it, return null. */ | ||
652 | xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); | ||
653 | args->agbno = NULLAGBLOCK; | ||
654 | trace_xfs_alloc_exact_notfound(args); | ||
653 | return 0; | 655 | return 0; |
654 | 656 | ||
655 | error0: | 657 | error0: |
@@ -659,6 +661,95 @@ error0: | |||
659 | } | 661 | } |
660 | 662 | ||
661 | /* | 663 | /* |
664 | * Search the btree in a given direction via the search cursor and compare | ||
665 | * the records found against the good extent we've already found. | ||
666 | */ | ||
667 | STATIC int | ||
668 | xfs_alloc_find_best_extent( | ||
669 | struct xfs_alloc_arg *args, /* allocation argument structure */ | ||
670 | struct xfs_btree_cur **gcur, /* good cursor */ | ||
671 | struct xfs_btree_cur **scur, /* searching cursor */ | ||
672 | xfs_agblock_t gdiff, /* difference for search comparison */ | ||
673 | xfs_agblock_t *sbno, /* extent found by search */ | ||
674 | xfs_extlen_t *slen, | ||
675 | xfs_extlen_t *slena, /* aligned length */ | ||
676 | int dir) /* 0 = search right, 1 = search left */ | ||
677 | { | ||
678 | xfs_agblock_t bno; | ||
679 | xfs_agblock_t new; | ||
680 | xfs_agblock_t sdiff; | ||
681 | int error; | ||
682 | int i; | ||
683 | |||
684 | /* The good extent is perfect, no need to search. */ | ||
685 | if (!gdiff) | ||
686 | goto out_use_good; | ||
687 | |||
688 | /* | ||
689 | * Look until we find a better one, run out of space or run off the end. | ||
690 | */ | ||
691 | do { | ||
692 | error = xfs_alloc_get_rec(*scur, sbno, slen, &i); | ||
693 | if (error) | ||
694 | goto error0; | ||
695 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | ||
696 | xfs_alloc_compute_aligned(*sbno, *slen, args->alignment, | ||
697 | args->minlen, &bno, slena); | ||
698 | |||
699 | /* | ||
700 | * The good extent is closer than this one. | ||
701 | */ | ||
702 | if (!dir) { | ||
703 | if (bno >= args->agbno + gdiff) | ||
704 | goto out_use_good; | ||
705 | } else { | ||
706 | if (bno <= args->agbno - gdiff) | ||
707 | goto out_use_good; | ||
708 | } | ||
709 | |||
710 | /* | ||
711 | * Same distance, compare length and pick the best. | ||
712 | */ | ||
713 | if (*slena >= args->minlen) { | ||
714 | args->len = XFS_EXTLEN_MIN(*slena, args->maxlen); | ||
715 | xfs_alloc_fix_len(args); | ||
716 | |||
717 | sdiff = xfs_alloc_compute_diff(args->agbno, args->len, | ||
718 | args->alignment, *sbno, | ||
719 | *slen, &new); | ||
720 | |||
721 | /* | ||
722 | * Choose closer size and invalidate other cursor. | ||
723 | */ | ||
724 | if (sdiff < gdiff) | ||
725 | goto out_use_search; | ||
726 | goto out_use_good; | ||
727 | } | ||
728 | |||
729 | if (!dir) | ||
730 | error = xfs_btree_increment(*scur, 0, &i); | ||
731 | else | ||
732 | error = xfs_btree_decrement(*scur, 0, &i); | ||
733 | if (error) | ||
734 | goto error0; | ||
735 | } while (i); | ||
736 | |||
737 | out_use_good: | ||
738 | xfs_btree_del_cursor(*scur, XFS_BTREE_NOERROR); | ||
739 | *scur = NULL; | ||
740 | return 0; | ||
741 | |||
742 | out_use_search: | ||
743 | xfs_btree_del_cursor(*gcur, XFS_BTREE_NOERROR); | ||
744 | *gcur = NULL; | ||
745 | return 0; | ||
746 | |||
747 | error0: | ||
748 | /* caller invalidates cursors */ | ||
749 | return error; | ||
750 | } | ||
751 | |||
752 | /* | ||
662 | * Allocate a variable extent near bno in the allocation group agno. | 753 | * Allocate a variable extent near bno in the allocation group agno. |
663 | * Extent's length (returned in len) will be between minlen and maxlen, | 754 | * Extent's length (returned in len) will be between minlen and maxlen, |
664 | * and of the form k * prod + mod unless there's nothing that large. | 755 | * and of the form k * prod + mod unless there's nothing that large. |
@@ -925,203 +1016,45 @@ xfs_alloc_ag_vextent_near( | |||
925 | } | 1016 | } |
926 | } | 1017 | } |
927 | } while (bno_cur_lt || bno_cur_gt); | 1018 | } while (bno_cur_lt || bno_cur_gt); |
1019 | |||
928 | /* | 1020 | /* |
929 | * Got both cursors still active, need to find better entry. | 1021 | * Got both cursors still active, need to find better entry. |
930 | */ | 1022 | */ |
931 | if (bno_cur_lt && bno_cur_gt) { | 1023 | if (bno_cur_lt && bno_cur_gt) { |
932 | /* | ||
933 | * Left side is long enough, look for a right side entry. | ||
934 | */ | ||
935 | if (ltlena >= args->minlen) { | 1024 | if (ltlena >= args->minlen) { |
936 | /* | 1025 | /* |
937 | * Fix up the length. | 1026 | * Left side is good, look for a right side entry. |
938 | */ | 1027 | */ |
939 | args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); | 1028 | args->len = XFS_EXTLEN_MIN(ltlena, args->maxlen); |
940 | xfs_alloc_fix_len(args); | 1029 | xfs_alloc_fix_len(args); |
941 | rlen = args->len; | 1030 | ltdiff = xfs_alloc_compute_diff(args->agbno, args->len, |
942 | ltdiff = xfs_alloc_compute_diff(args->agbno, rlen, | ||
943 | args->alignment, ltbno, ltlen, <new); | 1031 | args->alignment, ltbno, ltlen, <new); |
1032 | |||
1033 | error = xfs_alloc_find_best_extent(args, | ||
1034 | &bno_cur_lt, &bno_cur_gt, | ||
1035 | ltdiff, >bno, >len, >lena, | ||
1036 | 0 /* search right */); | ||
1037 | } else { | ||
1038 | ASSERT(gtlena >= args->minlen); | ||
1039 | |||
944 | /* | 1040 | /* |
945 | * Not perfect. | 1041 | * Right side is good, look for a left side entry. |
946 | */ | ||
947 | if (ltdiff) { | ||
948 | /* | ||
949 | * Look until we find a better one, run out of | ||
950 | * space, or run off the end. | ||
951 | */ | ||
952 | while (bno_cur_lt && bno_cur_gt) { | ||
953 | if ((error = xfs_alloc_get_rec( | ||
954 | bno_cur_gt, >bno, | ||
955 | >len, &i))) | ||
956 | goto error0; | ||
957 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | ||
958 | xfs_alloc_compute_aligned(gtbno, gtlen, | ||
959 | args->alignment, args->minlen, | ||
960 | >bnoa, >lena); | ||
961 | /* | ||
962 | * The left one is clearly better. | ||
963 | */ | ||
964 | if (gtbnoa >= args->agbno + ltdiff) { | ||
965 | xfs_btree_del_cursor( | ||
966 | bno_cur_gt, | ||
967 | XFS_BTREE_NOERROR); | ||
968 | bno_cur_gt = NULL; | ||
969 | break; | ||
970 | } | ||
971 | /* | ||
972 | * If we reach a big enough entry, | ||
973 | * compare the two and pick the best. | ||
974 | */ | ||
975 | if (gtlena >= args->minlen) { | ||
976 | args->len = | ||
977 | XFS_EXTLEN_MIN(gtlena, | ||
978 | args->maxlen); | ||
979 | xfs_alloc_fix_len(args); | ||
980 | rlen = args->len; | ||
981 | gtdiff = xfs_alloc_compute_diff( | ||
982 | args->agbno, rlen, | ||
983 | args->alignment, | ||
984 | gtbno, gtlen, >new); | ||
985 | /* | ||
986 | * Right side is better. | ||
987 | */ | ||
988 | if (gtdiff < ltdiff) { | ||
989 | xfs_btree_del_cursor( | ||
990 | bno_cur_lt, | ||
991 | XFS_BTREE_NOERROR); | ||
992 | bno_cur_lt = NULL; | ||
993 | } | ||
994 | /* | ||
995 | * Left side is better. | ||
996 | */ | ||
997 | else { | ||
998 | xfs_btree_del_cursor( | ||
999 | bno_cur_gt, | ||
1000 | XFS_BTREE_NOERROR); | ||
1001 | bno_cur_gt = NULL; | ||
1002 | } | ||
1003 | break; | ||
1004 | } | ||
1005 | /* | ||
1006 | * Fell off the right end. | ||
1007 | */ | ||
1008 | if ((error = xfs_btree_increment( | ||
1009 | bno_cur_gt, 0, &i))) | ||
1010 | goto error0; | ||
1011 | if (!i) { | ||
1012 | xfs_btree_del_cursor( | ||
1013 | bno_cur_gt, | ||
1014 | XFS_BTREE_NOERROR); | ||
1015 | bno_cur_gt = NULL; | ||
1016 | break; | ||
1017 | } | ||
1018 | } | ||
1019 | } | ||
1020 | /* | ||
1021 | * The left side is perfect, trash the right side. | ||
1022 | */ | ||
1023 | else { | ||
1024 | xfs_btree_del_cursor(bno_cur_gt, | ||
1025 | XFS_BTREE_NOERROR); | ||
1026 | bno_cur_gt = NULL; | ||
1027 | } | ||
1028 | } | ||
1029 | /* | ||
1030 | * It's the right side that was found first, look left. | ||
1031 | */ | ||
1032 | else { | ||
1033 | /* | ||
1034 | * Fix up the length. | ||
1035 | */ | 1042 | */ |
1036 | args->len = XFS_EXTLEN_MIN(gtlena, args->maxlen); | 1043 | args->len = XFS_EXTLEN_MIN(gtlena, args->maxlen); |
1037 | xfs_alloc_fix_len(args); | 1044 | xfs_alloc_fix_len(args); |
1038 | rlen = args->len; | 1045 | gtdiff = xfs_alloc_compute_diff(args->agbno, args->len, |
1039 | gtdiff = xfs_alloc_compute_diff(args->agbno, rlen, | ||
1040 | args->alignment, gtbno, gtlen, >new); | 1046 | args->alignment, gtbno, gtlen, >new); |
1041 | /* | 1047 | |
1042 | * Right side entry isn't perfect. | 1048 | error = xfs_alloc_find_best_extent(args, |
1043 | */ | 1049 | &bno_cur_gt, &bno_cur_lt, |
1044 | if (gtdiff) { | 1050 | gtdiff, <bno, <len, <lena, |
1045 | /* | 1051 | 1 /* search left */); |
1046 | * Look until we find a better one, run out of | ||
1047 | * space, or run off the end. | ||
1048 | */ | ||
1049 | while (bno_cur_lt && bno_cur_gt) { | ||
1050 | if ((error = xfs_alloc_get_rec( | ||
1051 | bno_cur_lt, <bno, | ||
1052 | <len, &i))) | ||
1053 | goto error0; | ||
1054 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | ||
1055 | xfs_alloc_compute_aligned(ltbno, ltlen, | ||
1056 | args->alignment, args->minlen, | ||
1057 | <bnoa, <lena); | ||
1058 | /* | ||
1059 | * The right one is clearly better. | ||
1060 | */ | ||
1061 | if (ltbnoa <= args->agbno - gtdiff) { | ||
1062 | xfs_btree_del_cursor( | ||
1063 | bno_cur_lt, | ||
1064 | XFS_BTREE_NOERROR); | ||
1065 | bno_cur_lt = NULL; | ||
1066 | break; | ||
1067 | } | ||
1068 | /* | ||
1069 | * If we reach a big enough entry, | ||
1070 | * compare the two and pick the best. | ||
1071 | */ | ||
1072 | if (ltlena >= args->minlen) { | ||
1073 | args->len = XFS_EXTLEN_MIN( | ||
1074 | ltlena, args->maxlen); | ||
1075 | xfs_alloc_fix_len(args); | ||
1076 | rlen = args->len; | ||
1077 | ltdiff = xfs_alloc_compute_diff( | ||
1078 | args->agbno, rlen, | ||
1079 | args->alignment, | ||
1080 | ltbno, ltlen, <new); | ||
1081 | /* | ||
1082 | * Left side is better. | ||
1083 | */ | ||
1084 | if (ltdiff < gtdiff) { | ||
1085 | xfs_btree_del_cursor( | ||
1086 | bno_cur_gt, | ||
1087 | XFS_BTREE_NOERROR); | ||
1088 | bno_cur_gt = NULL; | ||
1089 | } | ||
1090 | /* | ||
1091 | * Right side is better. | ||
1092 | */ | ||
1093 | else { | ||
1094 | xfs_btree_del_cursor( | ||
1095 | bno_cur_lt, | ||
1096 | XFS_BTREE_NOERROR); | ||
1097 | bno_cur_lt = NULL; | ||
1098 | } | ||
1099 | break; | ||
1100 | } | ||
1101 | /* | ||
1102 | * Fell off the left end. | ||
1103 | */ | ||
1104 | if ((error = xfs_btree_decrement( | ||
1105 | bno_cur_lt, 0, &i))) | ||
1106 | goto error0; | ||
1107 | if (!i) { | ||
1108 | xfs_btree_del_cursor(bno_cur_lt, | ||
1109 | XFS_BTREE_NOERROR); | ||
1110 | bno_cur_lt = NULL; | ||
1111 | break; | ||
1112 | } | ||
1113 | } | ||
1114 | } | ||
1115 | /* | ||
1116 | * The right side is perfect, trash the left side. | ||
1117 | */ | ||
1118 | else { | ||
1119 | xfs_btree_del_cursor(bno_cur_lt, | ||
1120 | XFS_BTREE_NOERROR); | ||
1121 | bno_cur_lt = NULL; | ||
1122 | } | ||
1123 | } | 1052 | } |
1053 | |||
1054 | if (error) | ||
1055 | goto error0; | ||
1124 | } | 1056 | } |
1057 | |||
1125 | /* | 1058 | /* |
1126 | * If we couldn't get anything, give up. | 1059 | * If we couldn't get anything, give up. |
1127 | */ | 1060 | */ |
@@ -1130,6 +1063,7 @@ xfs_alloc_ag_vextent_near( | |||
1130 | args->agbno = NULLAGBLOCK; | 1063 | args->agbno = NULLAGBLOCK; |
1131 | return 0; | 1064 | return 0; |
1132 | } | 1065 | } |
1066 | |||
1133 | /* | 1067 | /* |
1134 | * At this point we have selected a freespace entry, either to the | 1068 | * At this point we have selected a freespace entry, either to the |
1135 | * left or to the right. If it's on the right, copy all the | 1069 | * left or to the right. If it's on the right, copy all the |
@@ -1146,6 +1080,7 @@ xfs_alloc_ag_vextent_near( | |||
1146 | j = 1; | 1080 | j = 1; |
1147 | } else | 1081 | } else |
1148 | j = 0; | 1082 | j = 0; |
1083 | |||
1149 | /* | 1084 | /* |
1150 | * Fix up the length and compute the useful address. | 1085 | * Fix up the length and compute the useful address. |
1151 | */ | 1086 | */ |
@@ -2676,7 +2611,7 @@ restart: | |||
2676 | * will require a synchronous transaction, but it can still be | 2611 | * will require a synchronous transaction, but it can still be |
2677 | * used to distinguish between a partial or exact match. | 2612 | * used to distinguish between a partial or exact match. |
2678 | */ | 2613 | */ |
2679 | static int | 2614 | int |
2680 | xfs_alloc_busy_search( | 2615 | xfs_alloc_busy_search( |
2681 | struct xfs_mount *mp, | 2616 | struct xfs_mount *mp, |
2682 | xfs_agnumber_t agno, | 2617 | xfs_agnumber_t agno, |