|
@@ -4423,11 +4423,11 @@ ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b,
|
|
|
node = rb_prev(new_node);
|
|
|
if (node) {
|
|
|
entry = rb_entry(node, struct ext4_free_data, efd_node);
|
|
|
- if (can_merge(entry, new_entry)) {
|
|
|
+ if (can_merge(entry, new_entry) &&
|
|
|
+ ext4_journal_callback_try_del(handle, &entry->efd_jce)) {
|
|
|
new_entry->efd_start_cluster = entry->efd_start_cluster;
|
|
|
new_entry->efd_count += entry->efd_count;
|
|
|
rb_erase(node, &(db->bb_free_root));
|
|
|
- ext4_journal_callback_del(handle, &entry->efd_jce);
|
|
|
kmem_cache_free(ext4_free_data_cachep, entry);
|
|
|
}
|
|
|
}
|
|
@@ -4435,10 +4435,10 @@ ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b,
|
|
|
node = rb_next(new_node);
|
|
|
if (node) {
|
|
|
entry = rb_entry(node, struct ext4_free_data, efd_node);
|
|
|
- if (can_merge(new_entry, entry)) {
|
|
|
+ if (can_merge(new_entry, entry) &&
|
|
|
+ ext4_journal_callback_try_del(handle, &entry->efd_jce)) {
|
|
|
new_entry->efd_count += entry->efd_count;
|
|
|
rb_erase(node, &(db->bb_free_root));
|
|
|
- ext4_journal_callback_del(handle, &entry->efd_jce);
|
|
|
kmem_cache_free(ext4_free_data_cachep, entry);
|
|
|
}
|
|
|
}
|