diff --git a/libsparse/backed_block.c b/libsparse/backed_block.c index 3e72b57c7..794cd6b17 100644 --- a/libsparse/backed_block.c +++ b/libsparse/backed_block.c @@ -221,7 +221,8 @@ static int merge_bb(struct backed_block_list *bbl, } break; case BACKED_BLOCK_FILE: - if (a->file.filename != b->file.filename || + /* Already make sure b->type is BACKED_BLOCK_FILE */ + if (strcmp(a->file.filename, b->file.filename) || a->file.offset + a->len != b->file.offset) { return -EINVAL; } @@ -279,7 +280,10 @@ static int queue_bb(struct backed_block_list *bbl, struct backed_block *new_bb) } merge_bb(bbl, new_bb, new_bb->next); - merge_bb(bbl, bb, new_bb); + if (!merge_bb(bbl, bb, new_bb)) { + /* new_bb destroyed, point to retained as last_used */ + bbl->last_used = bb; + } return 0; }