When blobstore is shutdown unexpectedly the super block should already be marked as dirty. Only when proper blobstore unload happens, the super block is marked as clean. Super block is not marked as dirty on blobstore load, but on first action that starts to modify the metadata. At this time it only happens through blob persist, which is fine for creation/deletion of blobs or their modification (resize/xattr). It works for cluster allocation with extent_table disabled, and when extent page needs to be allocated. Yet it fails for cases when no new extent page is required. It will result in not marking blobstore as dirty and then fail when loading a particular blob due to mismatch between used_clusters and contents of extent page. To fix that, the blobstore is now marked dirty on a very first extent page update since blobstore load. Fixes #2830 Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Change-Id: Ied37ecf90d46e1bc51b22c323dce278a0fa88f72 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16179 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> |
||
---|---|---|
.. | ||
blob_bs_dev.c | ||
blobstore.c | ||
blobstore.h | ||
Makefile | ||
request.c | ||
request.h | ||
spdk_blob.map | ||
zeroes.c |