Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
No conflicts. Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -5217,6 +5217,7 @@ int unregister_ftrace_direct(unsigned long ip, unsigned long addr)
|
||||
{
|
||||
struct ftrace_direct_func *direct;
|
||||
struct ftrace_func_entry *entry;
|
||||
struct ftrace_hash *hash;
|
||||
int ret = -ENODEV;
|
||||
|
||||
mutex_lock(&direct_mutex);
|
||||
@@ -5225,7 +5226,8 @@ int unregister_ftrace_direct(unsigned long ip, unsigned long addr)
|
||||
if (!entry)
|
||||
goto out_unlock;
|
||||
|
||||
if (direct_functions->count == 1)
|
||||
hash = direct_ops.func_hash->filter_hash;
|
||||
if (hash->count == 1)
|
||||
unregister_ftrace_function(&direct_ops);
|
||||
|
||||
ret = ftrace_set_filter_ip(&direct_ops, ip, 1, 0);
|
||||
@@ -5540,6 +5542,10 @@ int unregister_ftrace_direct_multi(struct ftrace_ops *ops, unsigned long addr)
|
||||
err = unregister_ftrace_function(ops);
|
||||
remove_direct_functions_hash(hash, addr);
|
||||
mutex_unlock(&direct_mutex);
|
||||
|
||||
/* cleanup for possible another register call */
|
||||
ops->func = NULL;
|
||||
ops->trampoline = 0;
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(unregister_ftrace_direct_multi);
|
||||
|
||||
@@ -1237,9 +1237,8 @@ static int __create_synth_event(const char *name, const char *raw_fields)
|
||||
argv + consumed, &consumed,
|
||||
&field_version);
|
||||
if (IS_ERR(field)) {
|
||||
argv_free(argv);
|
||||
ret = PTR_ERR(field);
|
||||
goto err;
|
||||
goto err_free_arg;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1262,18 +1261,19 @@ static int __create_synth_event(const char *name, const char *raw_fields)
|
||||
if (cmd_version > 1 && n_fields_this_loop >= 1) {
|
||||
synth_err(SYNTH_ERR_INVALID_CMD, errpos(field_str));
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
goto err_free_arg;
|
||||
}
|
||||
|
||||
fields[n_fields++] = field;
|
||||
if (n_fields == SYNTH_FIELDS_MAX) {
|
||||
synth_err(SYNTH_ERR_TOO_MANY_FIELDS, 0);
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
goto err_free_arg;
|
||||
}
|
||||
|
||||
n_fields_this_loop++;
|
||||
}
|
||||
argv_free(argv);
|
||||
|
||||
if (consumed < argc) {
|
||||
synth_err(SYNTH_ERR_INVALID_CMD, 0);
|
||||
@@ -1281,7 +1281,6 @@ static int __create_synth_event(const char *name, const char *raw_fields)
|
||||
goto err;
|
||||
}
|
||||
|
||||
argv_free(argv);
|
||||
}
|
||||
|
||||
if (n_fields == 0) {
|
||||
@@ -1307,6 +1306,8 @@ static int __create_synth_event(const char *name, const char *raw_fields)
|
||||
kfree(saved_fields);
|
||||
|
||||
return ret;
|
||||
err_free_arg:
|
||||
argv_free(argv);
|
||||
err:
|
||||
for (i = 0; i < n_fields; i++)
|
||||
free_synth_field(fields[i]);
|
||||
|
||||
Reference in New Issue
Block a user