0d1aa0252d
When serializing extents, run-length encoding is supposed to 1) RLE all sequential LBAs 2) RLE zero LBAs (unallocated) There is one special case, with sequential LBAs that start with 0 LBA. This is RLE as 1) case, but results in descriptor matching case 2). Which causes loss of allocated clusters. This requires following conditions to be met: - blobstore has just a single cluster reserved for MD - blob is thin provisioned - first allocation occurs on cluster_num=1 For last part to be true, very first write for blob has to be issued to LBA between cluster_size and 2*cluster_size. Causing allocation of second cluster in blobstore and assiging it LBA equal to number of LBAs per cluster. To fix this, case 1) disallows to RLE zeroes. Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Change-Id: I136282407966310c882ca97c960e9a71c442c469 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/475494 Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> |
||
---|---|---|
.. | ||
blob_bs_dev.c | ||
blobstore.c | ||
blobstore.h | ||
Makefile | ||
request.c | ||
request.h | ||
zeroes.c |