@@ -1795,6 +1795,13 @@ static int search_bitmap(struct btrfs_free_space_ctl *ctl,
1795
1795
return -1 ;
1796
1796
}
1797
1797
1798
+ static inline u64 get_max_extent_size (struct btrfs_free_space * entry )
1799
+ {
1800
+ if (entry -> bitmap )
1801
+ return entry -> max_extent_size ;
1802
+ return entry -> bytes ;
1803
+ }
1804
+
1798
1805
/* Cache the size of the max extent in bytes */
1799
1806
static struct btrfs_free_space *
1800
1807
find_free_space (struct btrfs_free_space_ctl * ctl , u64 * offset , u64 * bytes ,
@@ -1816,8 +1823,8 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes,
1816
1823
for (node = & entry -> offset_index ; node ; node = rb_next (node )) {
1817
1824
entry = rb_entry (node , struct btrfs_free_space , offset_index );
1818
1825
if (entry -> bytes < * bytes ) {
1819
- if ( entry -> bytes > * max_extent_size )
1820
- * max_extent_size = entry -> bytes ;
1826
+ * max_extent_size = max ( get_max_extent_size ( entry ),
1827
+ * max_extent_size ) ;
1821
1828
continue ;
1822
1829
}
1823
1830
@@ -1835,8 +1842,8 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes,
1835
1842
}
1836
1843
1837
1844
if (entry -> bytes < * bytes + align_off ) {
1838
- if ( entry -> bytes > * max_extent_size )
1839
- * max_extent_size = entry -> bytes ;
1845
+ * max_extent_size = max ( get_max_extent_size ( entry ),
1846
+ * max_extent_size ) ;
1840
1847
continue ;
1841
1848
}
1842
1849
@@ -1848,8 +1855,10 @@ find_free_space(struct btrfs_free_space_ctl *ctl, u64 *offset, u64 *bytes,
1848
1855
* offset = tmp ;
1849
1856
* bytes = size ;
1850
1857
return entry ;
1851
- } else if (size > * max_extent_size ) {
1852
- * max_extent_size = size ;
1858
+ } else {
1859
+ * max_extent_size =
1860
+ max (get_max_extent_size (entry ),
1861
+ * max_extent_size );
1853
1862
}
1854
1863
continue ;
1855
1864
}
@@ -2709,8 +2718,8 @@ static u64 btrfs_alloc_from_bitmap(struct btrfs_block_group_cache *block_group,
2709
2718
2710
2719
err = search_bitmap (ctl , entry , & search_start , & search_bytes , true);
2711
2720
if (err ) {
2712
- if ( search_bytes > * max_extent_size )
2713
- * max_extent_size = search_bytes ;
2721
+ * max_extent_size = max ( get_max_extent_size ( entry ),
2722
+ * max_extent_size ) ;
2714
2723
return 0 ;
2715
2724
}
2716
2725
@@ -2747,8 +2756,9 @@ u64 btrfs_alloc_from_cluster(struct btrfs_block_group_cache *block_group,
2747
2756
2748
2757
entry = rb_entry (node , struct btrfs_free_space , offset_index );
2749
2758
while (1 ) {
2750
- if (entry -> bytes < bytes && entry -> bytes > * max_extent_size )
2751
- * max_extent_size = entry -> bytes ;
2759
+ if (entry -> bytes < bytes )
2760
+ * max_extent_size = max (get_max_extent_size (entry ),
2761
+ * max_extent_size );
2752
2762
2753
2763
if (entry -> bytes < bytes ||
2754
2764
(!entry -> bitmap && entry -> offset < min_start )) {
0 commit comments