lib/blob: read clear_method from per blob metadata
On blob load, read in the saved clear_method option. If BLOB_CLEAR_WITH_DEFAULT was passed in, use the setting stored in metadata previously. If something other than the default was specified, ignore stored value and used what was passed in. If ignoring a stored value, print a warning. Signed-off-by: paul luse <paul.e.luse@intel.com> Change-Id: Ia0c81fa0adc175dfaeb74c06e1ac91dc6b27e9ab Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/472209 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Community-CI: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
ea69d6d6cc
commit
ca667d064f
@ -953,6 +953,8 @@ _spdk_blob_load_snapshot_cpl(void *cb_arg, struct spdk_blob *snapshot, int bserr
|
|||||||
_spdk_blob_load_final(ctx, bserrno);
|
_spdk_blob_load_final(ctx, bserrno);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _spdk_blob_update_clear_method(struct spdk_blob *blob);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_spdk_blob_load_backing_dev(void *cb_arg)
|
_spdk_blob_load_backing_dev(void *cb_arg)
|
||||||
{
|
{
|
||||||
@ -1034,6 +1036,12 @@ _spdk_blob_load_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
|||||||
_spdk_blob_load_final(ctx, rc);
|
_spdk_blob_load_final(ctx, rc);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
ctx->seq = seq;
|
||||||
|
|
||||||
|
/* Check the clear_method stored in metadata vs what may have been passed
|
||||||
|
* via spdk_bs_open_blob_ext() and update accordingly.
|
||||||
|
*/
|
||||||
|
_spdk_blob_update_clear_method(blob);
|
||||||
|
|
||||||
_spdk_blob_load_backing_dev(ctx);
|
_spdk_blob_load_backing_dev(ctx);
|
||||||
}
|
}
|
||||||
@ -6328,6 +6336,27 @@ spdk_blob_is_thin_provisioned(struct spdk_blob *blob)
|
|||||||
return !!(blob->invalid_flags & SPDK_BLOB_THIN_PROV);
|
return !!(blob->invalid_flags & SPDK_BLOB_THIN_PROV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_spdk_blob_update_clear_method(struct spdk_blob *blob)
|
||||||
|
{
|
||||||
|
enum blob_clear_method stored_cm;
|
||||||
|
|
||||||
|
assert(blob != NULL);
|
||||||
|
|
||||||
|
/* If BLOB_CLEAR_WITH_DEFAULT was passed in, use the setting stored
|
||||||
|
* in metadata previously. If something other than the default was
|
||||||
|
* specified, ignore stored value and used what was passed in.
|
||||||
|
*/
|
||||||
|
stored_cm = ((blob->md_ro_flags & SPDK_BLOB_CLEAR_METHOD) >> SPDK_BLOB_CLEAR_METHOD_SHIFT);
|
||||||
|
|
||||||
|
if (blob->clear_method == BLOB_CLEAR_WITH_DEFAULT) {
|
||||||
|
blob->clear_method = stored_cm;
|
||||||
|
} else if (blob->clear_method != stored_cm) {
|
||||||
|
SPDK_WARNLOG("Using passed in clear method 0x%x instead of stored value of 0x%x\n",
|
||||||
|
blob->clear_method, stored_cm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
spdk_blob_id
|
spdk_blob_id
|
||||||
spdk_blob_get_parent_snapshot(struct spdk_blob_store *bs, spdk_blob_id blob_id)
|
spdk_blob_get_parent_snapshot(struct spdk_blob_store *bs, spdk_blob_id blob_id)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user