Move querying for atomic device params before cache start
This needs to be done in caller application context. As part of asynchronous management API rework, volume_open callback was moved to kernel worker thread context. To work around this, atomic parameters are now read before cache attach/load/probe and provided to bottom volume via volume params. Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:
@@ -986,26 +986,22 @@ void cas_atomic_close_object(ocf_volume_t volume)
|
||||
block_dev_close_object(volume);
|
||||
}
|
||||
|
||||
int cas_atomic_open_object(ocf_volume_t volume)
|
||||
int cas_atomic_open_object(ocf_volume_t volume, void *volume_params)
|
||||
{
|
||||
int result;
|
||||
uint8_t type;
|
||||
struct bd_object *bdobj = NULL;
|
||||
|
||||
result = block_dev_open_object(volume);
|
||||
if (!volume_params)
|
||||
return -EINVAL;
|
||||
|
||||
result = block_dev_open_object(volume, volume_params);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
bdobj = bd_object(volume);
|
||||
|
||||
result = cas_blk_identify_type_by_bdev(bdobj->btm_bd,
|
||||
&type, &bdobj->atomic_params);
|
||||
|
||||
if (type != ATOMIC_DEVICE_VOLUME) {
|
||||
cas_atomic_close_object(volume);
|
||||
result = -OCF_ERR_INVAL_VOLUME_TYPE;
|
||||
goto end;
|
||||
}
|
||||
memcpy(&bdobj->atomic_params, volume_params,
|
||||
sizeof(bdobj->atomic_params));
|
||||
|
||||
bdobj->workqueue = create_workqueue("CAS_AT_ZER");
|
||||
if (!bdobj->workqueue) {
|
||||
|
@@ -412,7 +412,7 @@ int cas_blk_open_volume_by_bdev(ocf_volume_t *vol,
|
||||
bdobj->btm_bd = bdev;
|
||||
bdobj->opened_by_bdev = true;
|
||||
|
||||
ocf_volume_open(*vol);
|
||||
ocf_volume_open(*vol, &atomic_params);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@@ -22,7 +22,7 @@
|
||||
#define CAS_DEBUG_PARAM(format, ...)
|
||||
#endif
|
||||
|
||||
int block_dev_open_object(ocf_volume_t vol)
|
||||
int block_dev_open_object(ocf_volume_t vol, void *volume_params)
|
||||
{
|
||||
struct bd_object *bdobj = bd_object(vol);
|
||||
const struct ocf_volume_uuid *uuid = ocf_volume_get_uuid(vol);
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
#include "../cas_cache.h"
|
||||
|
||||
int block_dev_open_object(ocf_volume_t vol);
|
||||
int block_dev_open_object(ocf_volume_t vol, void *volume_params);
|
||||
|
||||
void block_dev_close_object(ocf_volume_t vol);
|
||||
|
||||
|
Reference in New Issue
Block a user