Add "remove inactive" command to casadm
Add `remove_inactive_core` function to casadm's code to handle `remove inactive` command. Print messages based on errors returned when command fails. Add documentation comment to new function. Add CLI part of introduced command. Signed-off-by: Slawomir Jankowski <slawomir.jankowski@intel.com>
This commit is contained in:
parent
760b60628c
commit
2514f5fa5b
@ -1931,6 +1931,43 @@ int remove_core(unsigned int cache_id, unsigned int core_id,
|
|||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int remove_inactive_core(unsigned int cache_id, unsigned int core_id)
|
||||||
|
{
|
||||||
|
int fd = 0;
|
||||||
|
struct kcas_remove_inactive cmd;
|
||||||
|
|
||||||
|
/* don't even attempt ioctl if filesystem is mounted */
|
||||||
|
if (SUCCESS != check_if_mounted(cache_id, core_id)) {
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
fd = open_ctrl_device();
|
||||||
|
if (fd == -1)
|
||||||
|
return FAILURE;
|
||||||
|
|
||||||
|
memset(&cmd, 0, sizeof(cmd));
|
||||||
|
cmd.cache_id = cache_id;
|
||||||
|
cmd.core_id = core_id;
|
||||||
|
|
||||||
|
if (run_ioctl(fd, KCAS_IOCTL_REMOVE_INACTIVE, &cmd) < 0) {
|
||||||
|
close(fd);
|
||||||
|
if (cmd.ext_err_code == KCAS_ERR_CORE_IN_ACTIVE_STATE) {
|
||||||
|
cas_printf(LOG_ERR, "Core is active. "
|
||||||
|
"To manage the active core use "
|
||||||
|
"'--remove-core' command.\n");
|
||||||
|
} else {
|
||||||
|
cas_printf(LOG_ERR, "Error while removing inactive "
|
||||||
|
"core device %d from cache instance "
|
||||||
|
"%d\n", core_id, cache_id);
|
||||||
|
print_err(cmd.ext_err_code);
|
||||||
|
}
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
int core_pool_remove(const char *core_device)
|
int core_pool_remove(const char *core_device)
|
||||||
{
|
{
|
||||||
struct kcas_core_pool_remove cmd;
|
struct kcas_core_pool_remove cmd;
|
||||||
|
@ -215,6 +215,15 @@ int get_core_info(int fd, int cache_id, int core_id, struct kcas_core_info *info
|
|||||||
int remove_core(unsigned int cache_id, unsigned int core_id,
|
int remove_core(unsigned int cache_id, unsigned int core_id,
|
||||||
bool detach, bool force_no_flush);
|
bool detach, bool force_no_flush);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief remove inactive core device from a cache
|
||||||
|
*
|
||||||
|
* @param cache_id cache from which inactive core is being removed
|
||||||
|
* @param cache_id inactive core which is being removed
|
||||||
|
* @return 0 upon successful core removal, 1 upon failure
|
||||||
|
*/
|
||||||
|
int remove_inactive_core(unsigned int cache_id, unsigned int core_id);
|
||||||
|
|
||||||
int core_pool_remove(const char *core_device);
|
int core_pool_remove(const char *core_device);
|
||||||
int get_core_pool_count(int fd);
|
int get_core_pool_count(int fd);
|
||||||
|
|
||||||
|
@ -180,6 +180,23 @@ int remove_core_command_handle_option(char *opt, const char **arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int remove_inactive_core_command_handle_option(char *opt, const char **arg)
|
||||||
|
{
|
||||||
|
if (!strcmp(opt, "cache-id")){
|
||||||
|
if (validate_str_num(arg[0], "cache id", OCF_CACHE_ID_MIN, OCF_CACHE_ID_MAX) == FAILURE)
|
||||||
|
return FAILURE;
|
||||||
|
|
||||||
|
command_args_values.cache_id = atoi(arg[0]);
|
||||||
|
} else if (!strcmp(opt, "core-id")){
|
||||||
|
if (validate_str_num(arg[0], "core id", 0, OCF_CORE_ID_MAX) == FAILURE)
|
||||||
|
return FAILURE;
|
||||||
|
|
||||||
|
command_args_values.core_id = atoi(arg[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int core_pool_remove_command_handle_option(char *opt, const char **arg)
|
int core_pool_remove_command_handle_option(char *opt, const char **arg)
|
||||||
{
|
{
|
||||||
if (!strcmp(opt, "device")) {
|
if (!strcmp(opt, "device")) {
|
||||||
@ -1121,6 +1138,18 @@ int handle_remove()
|
|||||||
command_args_values.force);
|
command_args_values.force);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cli_option remove_inactive_options[] = {
|
||||||
|
{'i', "cache-id", CACHE_ID_DESC, 1, "ID", CLI_OPTION_REQUIRED},
|
||||||
|
{'j', "core-id", CORE_ID_DESC, 1, "ID", CLI_OPTION_REQUIRED},
|
||||||
|
{0}
|
||||||
|
};
|
||||||
|
|
||||||
|
int handle_remove_inactive()
|
||||||
|
{
|
||||||
|
return remove_inactive_core(command_args_values.cache_id,
|
||||||
|
command_args_values.core_id);
|
||||||
|
}
|
||||||
|
|
||||||
static cli_option core_pool_remove_options[] = {
|
static cli_option core_pool_remove_options[] = {
|
||||||
{'d', "device", CORE_DEVICE_DESC, 1, "DEVICE", CLI_OPTION_REQUIRED},
|
{'d', "device", CORE_DEVICE_DESC, 1, "DEVICE", CLI_OPTION_REQUIRED},
|
||||||
{0}
|
{0}
|
||||||
@ -1969,6 +1998,16 @@ static cli_command cas_commands[] = {
|
|||||||
.flags = CLI_SU_REQUIRED,
|
.flags = CLI_SU_REQUIRED,
|
||||||
.help = NULL,
|
.help = NULL,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "remove-inactive",
|
||||||
|
.desc = "Remove inactive core device from cache instance",
|
||||||
|
.long_desc = NULL,
|
||||||
|
.options = remove_inactive_options,
|
||||||
|
.command_handle_opts = remove_inactive_core_command_handle_option,
|
||||||
|
.handle = handle_remove_inactive,
|
||||||
|
.flags = CLI_SU_REQUIRED,
|
||||||
|
.help = NULL,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = "remove-detached",
|
.name = "remove-detached",
|
||||||
.desc = "Remove core device from core pool",
|
.desc = "Remove core device from core pool",
|
||||||
|
Loading…
Reference in New Issue
Block a user