mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2025-12-16 11:14:39 +00:00
Override sector status when setting DDT entry as it can be different than cached deduplicated entries.
This commit is contained in:
@@ -1062,10 +1062,12 @@ bool set_ddt_single_level_v2(aaruformat_context *ctx, uint64_t sector_address, c
|
|||||||
TRACE("Exiting set_ddt_single_level_v2() = false");
|
TRACE("Exiting set_ddt_single_level_v2() = false");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ddt_entry |= (uint64_t)sector_status << 60;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sector status can be different from previous deduplicated sector
|
||||||
|
*ddt_entry &= 0x0FFFFFFFFFFFFFFF;
|
||||||
|
*ddt_entry |= (uint64_t)sector_status << 60;
|
||||||
|
|
||||||
TRACE("Setting big single-level DDT entry %d to %ull", sector_address, (uint64_t)*ddt_entry);
|
TRACE("Setting big single-level DDT entry %d to %ull", sector_address, (uint64_t)*ddt_entry);
|
||||||
ctx->user_data_ddt2[sector_address] = *ddt_entry;
|
ctx->user_data_ddt2[sector_address] = *ddt_entry;
|
||||||
|
|
||||||
@@ -1154,10 +1156,12 @@ bool set_ddt_multi_level_v2(aaruformat_context *ctx, uint64_t sector_address, bo
|
|||||||
TRACE("Exiting set_ddt_multi_level_v2() = false");
|
TRACE("Exiting set_ddt_multi_level_v2() = false");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ddt_entry |= (uint64_t)sector_status << 60;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sector status can be different from previous deduplicated sector
|
||||||
|
*ddt_entry &= 0x0FFFFFFFFFFFFFFF;
|
||||||
|
*ddt_entry |= (uint64_t)sector_status << 60;
|
||||||
|
|
||||||
TRACE("Setting small secondary DDT entry %d to %ull", sector_address % items_per_ddt_entry,
|
TRACE("Setting small secondary DDT entry %d to %ull", sector_address % items_per_ddt_entry,
|
||||||
(uint64_t)*ddt_entry);
|
(uint64_t)*ddt_entry);
|
||||||
ctx->cached_secondary_ddt2[sector_address % items_per_ddt_entry] = *ddt_entry;
|
ctx->cached_secondary_ddt2[sector_address % items_per_ddt_entry] = *ddt_entry;
|
||||||
@@ -1637,10 +1641,12 @@ bool set_ddt_multi_level_v2(aaruformat_context *ctx, uint64_t sector_address, bo
|
|||||||
TRACE("Exiting set_ddt_multi_level_v2() = false");
|
TRACE("Exiting set_ddt_multi_level_v2() = false");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ddt_entry |= (uint64_t)sector_status << 60;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sector status can be different from previous deduplicated sector
|
||||||
|
*ddt_entry &= 0x0FFFFFFFFFFFFFFF;
|
||||||
|
*ddt_entry |= (uint64_t)sector_status << 60;
|
||||||
|
|
||||||
TRACE("Setting big secondary DDT entry %d to %ull", sector_address % items_per_ddt_entry, (uint64_t)*ddt_entry);
|
TRACE("Setting big secondary DDT entry %d to %ull", sector_address % items_per_ddt_entry, (uint64_t)*ddt_entry);
|
||||||
ctx->cached_secondary_ddt2[sector_address % items_per_ddt_entry] = *ddt_entry;
|
ctx->cached_secondary_ddt2[sector_address % items_per_ddt_entry] = *ddt_entry;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user