@@ -1772,6 +1772,13 @@ static int search_bitmap(struct btrfs_free_space_ctl *ctl,
1772
1772
return -1 ;
1773
1773
}
1774
1774
1775
+ static inline u64 get_max_extent_size (struct btrfs_free_space * entry )
1776
+ {
1777
+ if (entry -> bitmap )
1778
+ return entry -> max_extent_size ;
1779
+ return entry -> bytes ;
1780
+ }
1781
+
1775
1782
/* Cache the size of the max extent in bytes */
1776
1783
static struct btrfs_free_space *
1777
1784
find_free_space (struct btrfs_free_space_ctl * ctl , u64 * offset , u64 * bytes ,
@@ -1793,8 +1800,8 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes,
1793
1800
for (node = & entry -> offset_index ; node ; node = rb_next (node )) {
1794
1801
entry = rb_entry (node , struct btrfs_free_space , offset_index );
1795
1802
if (entry -> bytes < * bytes ) {
1796
- if ( entry -> bytes > * max_extent_size )
1797
- * max_extent_size = entry -> bytes ;
1803
+ * max_extent_size = max ( get_max_extent_size ( entry ),
1804
+ * max_extent_size ) ;
1798
1805
continue ;
1799
1806
}
1800
1807
@@ -1812,8 +1819,8 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes,
1812
1819
}
1813
1820
1814
1821
if (entry -> bytes < * bytes + align_off ) {
1815
- if ( entry -> bytes > * max_extent_size )
1816
- * max_extent_size = entry -> bytes ;
1822
+ * max_extent_size = max ( get_max_extent_size ( entry ),
1823
+ * max_extent_size ) ;
1817
1824
continue ;
1818
1825
}
1819
1826
@@ -1825,8 +1832,10 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes,
1825
1832
* offset = tmp ;
1826
1833
* bytes = size ;
1827
1834
return entry ;
1828
- } else if (size > * max_extent_size ) {
1829
- * max_extent_size = size ;
1835
+ } else {
1836
+ * max_extent_size =
1837
+ max (get_max_extent_size (entry ),
1838
+ * max_extent_size );
1830
1839
}
1831
1840
continue ;
1832
1841
}
@@ -2685,8 +2694,8 @@ static u64 btrfs_alloc_from_bitmap(struct btrfs_block_group_cache *block_group,
2685
2694
2686
2695
err = search_bitmap (ctl , entry , & search_start , & search_bytes , true);
2687
2696
if (err ) {
2688
- if ( search_bytes > * max_extent_size )
2689
- * max_extent_size = search_bytes ;
2697
+ * max_extent_size = max ( get_max_extent_size ( entry ),
2698
+ * max_extent_size ) ;
2690
2699
return 0 ;
2691
2700
}
2692
2701
@@ -2723,8 +2732,9 @@ u64 btrfs_alloc_from_cluster(struct btrfs_block_group_cache *block_group,
2723
2732
2724
2733
entry = rb_entry (node , struct btrfs_free_space , offset_index );
2725
2734
while (1 ) {
2726
- if (entry -> bytes < bytes && entry -> bytes > * max_extent_size )
2727
- * max_extent_size = entry -> bytes ;
2735
+ if (entry -> bytes < bytes )
2736
+ * max_extent_size = max (get_max_extent_size (entry ),
2737
+ * max_extent_size );
2728
2738
2729
2739
if (entry -> bytes < bytes ||
2730
2740
(!entry -> bitmap && entry -> offset < min_start )) {
0 commit comments