Fix device config life cycle management
Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
parent
85cbeb997c
commit
f2adc702e7
@ -608,7 +608,7 @@ struct _cache_mngt_attach_context {
|
|||||||
struct _cache_mngt_async_context async;
|
struct _cache_mngt_async_context async;
|
||||||
char cache_elevator[MAX_ELEVATOR_NAME];
|
char cache_elevator[MAX_ELEVATOR_NAME];
|
||||||
uint64_t min_free_ram;
|
uint64_t min_free_ram;
|
||||||
struct ocf_mngt_cache_device_config *device_cfg;
|
struct ocf_mngt_cache_device_config device_cfg;
|
||||||
char cache_path[MAX_STR_LEN];
|
char cache_path[MAX_STR_LEN];
|
||||||
ocf_cache_t cache;
|
ocf_cache_t cache;
|
||||||
int ocf_start_error;
|
int ocf_start_error;
|
||||||
@ -1961,14 +1961,10 @@ int cache_mngt_create_cache_cfg(struct ocf_mngt_cache_config *cfg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void _cache_mngt_log_cache_device_path(ocf_cache_t cache,
|
static void _cache_mngt_log_cache_device_path(ocf_cache_t cache,
|
||||||
struct ocf_mngt_cache_device_config *device_cfg)
|
const char *cache_path)
|
||||||
{
|
{
|
||||||
const struct ocf_volume_uuid *uuid =
|
|
||||||
ocf_volume_get_uuid(device_cfg->volume);
|
|
||||||
|
|
||||||
printk(KERN_INFO OCF_PREFIX_SHORT "Adding device %s as cache %s\n",
|
printk(KERN_INFO OCF_PREFIX_SHORT "Adding device %s as cache %s\n",
|
||||||
(const char*)uuid->data,
|
cache_path, ocf_cache_get_name(cache));
|
||||||
ocf_cache_get_name(cache));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _cas_queue_kick(ocf_queue_t q)
|
static void _cas_queue_kick(ocf_queue_t q)
|
||||||
@ -2059,19 +2055,19 @@ static void _cache_mngt_start_complete(ocf_cache_t cache, void *priv, int error)
|
|||||||
int caller_status;
|
int caller_status;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
cache_mngt_destroy_cache_device_cfg(ctx->device_cfg);
|
cache_mngt_destroy_cache_device_cfg(&ctx->device_cfg);
|
||||||
|
|
||||||
if (error == -OCF_ERR_NO_FREE_RAM) {
|
if (error == -OCF_ERR_NO_FREE_RAM) {
|
||||||
result = cache_mngt_create_cache_device_cfg(ctx->device_cfg,
|
result = cache_mngt_create_cache_device_cfg(&ctx->device_cfg,
|
||||||
ctx->cache_path);
|
ctx->cache_path);
|
||||||
if (result) {
|
if (result) {
|
||||||
printk(KERN_WARNING "Cannot calculate amount of DRAM "
|
printk(KERN_WARNING "Cannot calculate amount of DRAM "
|
||||||
"needed\n");
|
"needed\n");
|
||||||
ctx->min_free_ram = 0;
|
ctx->min_free_ram = 0;
|
||||||
} else {
|
} else {
|
||||||
ocf_mngt_get_ram_needed(cache, ctx->device_cfg,
|
ocf_mngt_get_ram_needed(cache, &ctx->device_cfg,
|
||||||
&ctx->min_free_ram);
|
&ctx->min_free_ram);
|
||||||
cache_mngt_destroy_cache_device_cfg(ctx->device_cfg);
|
cache_mngt_destroy_cache_device_cfg(&ctx->device_cfg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2193,7 +2189,7 @@ static int _cache_start_finalize(ocf_cache_t cache, int init_mode,
|
|||||||
struct _cache_mngt_attach_context *ctx = cache_priv->attach_context;
|
struct _cache_mngt_attach_context *ctx = cache_priv->attach_context;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
_cache_mngt_log_cache_device_path(cache, ctx->device_cfg);
|
_cache_mngt_log_cache_device_path(cache, ctx->cache_path);
|
||||||
|
|
||||||
if (activate || (init_mode != CACHE_INIT_STANDBY_NEW &&
|
if (activate || (init_mode != CACHE_INIT_STANDBY_NEW &&
|
||||||
init_mode != CACHE_INIT_STANDBY_LOAD)) {
|
init_mode != CACHE_INIT_STANDBY_LOAD)) {
|
||||||
@ -2387,11 +2383,8 @@ int cache_mngt_activate(struct ocf_mngt_cache_standby_activate_config *cfg,
|
|||||||
goto out_cache_unlock;
|
goto out_cache_unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: doesn't this need to be copied to avoid use-after-free
|
|
||||||
* in case where calle is interrupted and returns???
|
|
||||||
*/
|
|
||||||
strncpy(context->cache_path, cmd->cache_path, MAX_STR_LEN-1);
|
strncpy(context->cache_path, cmd->cache_path, MAX_STR_LEN-1);
|
||||||
context->device_cfg = &cfg->device;
|
context->device_cfg = cfg->device;
|
||||||
context->cache = cache;
|
context->cache = cache;
|
||||||
|
|
||||||
cache_priv = ocf_cache_get_priv(cache);
|
cache_priv = ocf_cache_get_priv(cache);
|
||||||
@ -2531,7 +2524,7 @@ int cache_mngt_init_instance(struct ocf_mngt_cache_config *cfg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
strncpy(context->cache_path, cmd->cache_path_name, MAX_STR_LEN-1);
|
strncpy(context->cache_path, cmd->cache_path_name, MAX_STR_LEN-1);
|
||||||
context->device_cfg = &attach_cfg->device;
|
context->device_cfg = attach_cfg->device;
|
||||||
_cache_mngt_async_context_init(&context->async);
|
_cache_mngt_async_context_init(&context->async);
|
||||||
|
|
||||||
/* Start cache. Returned cache instance will be locked as it was set
|
/* Start cache. Returned cache instance will be locked as it was set
|
||||||
|
Loading…
Reference in New Issue
Block a user