if (cmd->pccc_cmd == PCC_ADD_DATASET) {
if (!list_empty(&cmd->u.pccc_add.pccc_conds))
pcc_rule_conds_free(&cmd->u.pccc_add.pccc_conds);
- OBD_FREE(cmd->u.pccc_add.pccc_conds_str,
- strlen(cmd->u.pccc_add.pccc_conds_str) + 1);
+ if (cmd->u.pccc_add.pccc_conds_str) {
+ OBD_FREE(cmd->u.pccc_add.pccc_conds_str,
+ strlen(cmd->u.pccc_add.pccc_conds_str) + 1);
+ cmd->u.pccc_add.pccc_conds_str = NULL;
+ }
}
}
int rc = 0;
LASSERT(cmd->u.pccc_add.pccc_conds_str);
+ INIT_LIST_HEAD(&rule->pmr_conds);
OBD_ALLOC(rule->pmr_conds_str,
strlen(cmd->u.pccc_add.pccc_conds_str) + 1);
if (rule->pmr_conds_str == NULL)
cmd->u.pccc_add.pccc_conds_str,
strlen(cmd->u.pccc_add.pccc_conds_str));
- INIT_LIST_HEAD(&rule->pmr_conds);
if (!list_empty(&cmd->u.pccc_add.pccc_conds))
rc = pcc_conds_parse(rule->pmr_conds_str,
&rule->pmr_conds);
static struct pcc_cmd *
pcc_cmd_parse(char *buffer, unsigned long count)
{
- static struct pcc_cmd *cmd;
+ struct pcc_cmd *cmd;
char *token;
char *val;
int rc = 0;
GOTO(out_free_cmd, rc = -EINVAL);
/* Type of the command */
- if (strcmp(token, "add") == 0)
+ if (strcmp(token, "add") == 0) {
cmd->pccc_cmd = PCC_ADD_DATASET;
- else if (strcmp(token, "del") == 0)
+ INIT_LIST_HEAD(&cmd->u.pccc_add.pccc_conds);
+ } else if (strcmp(token, "del") == 0) {
cmd->pccc_cmd = PCC_DEL_DATASET;
- else
+ } else {
GOTO(out_free_cmd, rc = -EINVAL);
+ }
/* Pathname of the dataset */
token = strsep(&val, " ");