diff options
-rw-r--r-- | drivers/md/bcache/extents.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/md/bcache/extents.c b/drivers/md/bcache/extents.c index 0beda6a36f55..0422fb27f1d7 100644 --- a/drivers/md/bcache/extents.c +++ b/drivers/md/bcache/extents.c @@ -1843,8 +1843,11 @@ static void __extent_sort_ptrs(struct cache_member_rcu *mi, extent_for_each_ptr_crc(src, src_ptr, src_crc) { extent_for_each_ptr_crc(dst, dst_ptr, dst_crc) if (PTR_TIER(mi, src_ptr) < PTR_TIER(mi, dst_ptr)) - break; + goto found; + dst_ptr = &extent_entry_last(dst)->ptr; + dst_crc = NULL; +found: /* found insert position: */ /* @@ -1896,12 +1899,14 @@ static void extent_sort_ptrs(struct cache_set *c, struct bkey_s_extent e) */ mi = cache_member_info_get(c); - extent_for_each_ptr_crc(e, ptr, crc) + extent_for_each_ptr_crc(e, ptr, crc) { if (prev && PTR_TIER(mi, ptr) < PTR_TIER(mi, prev)) { __extent_sort_ptrs(mi, e); break; } + prev = ptr; + } cache_member_info_put(); } |