Re: [PATCH] fail_function: no need to check return value of debugfs_create functions

Masami Hiramatsu
2019-01-23T00:11:47Z

On Tue, 22 Jan 2019 16:21:44 +0100
Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote:

> When calling debugfs functions, there is no need to ever check the
> return value. The function can work or not, but the code logic should
> never do something different based on this.

Ah, OK. It simplifies the code. But I have a question below,

>
> Cc: Masami Hiramatsu <mhiramat@kernel.org>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: Josef Bacik <jbacik@fb.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>
> Cc: zhong jiang <zhongjiang@huawei.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
> kernel/fail_function.c | 23 +++++------------------
> 1 file changed, 5 insertions(+), 18 deletions(-)
>
> diff --git a/kernel/fail_function.c b/kernel/fail_function.c
> index 17f75b545f66..afc779be5ebb 100644
> --- a/kernel/fail_function.c
> +++ b/kernel/fail_function.c
> @@ -152,20 +152,13 @@ static int fei_retval_get(void *data, u64 *val)
> DEFINE_DEBUGFS_ATTRIBUTE(fei_retval_ops, fei_retval_get, fei_retval_set,
> "%llx\n");
>
> -static int fei_debugfs_add_attr(struct fei_attr *attr)
> +static void fei_debugfs_add_attr(struct fei_attr *attr)
> {
> struct dentry *dir;
>
> dir = debugfs_create_dir(attr->kp.symbol_name, fei_debugfs_dir);
> - if (!dir)
> - return -ENOMEM;
> -
> - if (!debugfs_create_file("retval", 0600, dir, attr, &fei_retval_ops)) {
> - debugfs_remove_recursive(dir);
> - return -ENOMEM;
> - }
>
> - return 0;

Don't we need to check dir here? If above debugfs_create_dir() returns NULL,
it seems we will create "retval" under root directory of debugfs.

Thank you,

> + debugfs_create_file("retval", 0600, dir, attr, &fei_retval_ops);
> }
>
> static void fei_debugfs_remove_attr(struct fei_attr *attr)
> @@ -306,7 +299,7 @@ static ssize_t fei_write(struct file *file, const char __user *buffer,
>
> ret = register_kprobe(&attr->kp);
> if (!ret)
> - ret = fei_debugfs_add_attr(attr);
> + fei_debugfs_add_attr(attr);
> if (ret < 0)
> fei_attr_remove(attr);
> else {
> @@ -337,19 +330,13 @@ static int __init fei_debugfs_init(void)
> return PTR_ERR(dir);
>
> /* injectable attribute is just a symlink of error_inject/list */
> - if (!debugfs_create_symlink("injectable", dir,
> - "../error_injection/list"))
> - goto error;
> + debugfs_create_symlink("injectable", dir, "../error_injection/list");
>
> - if (!debugfs_create_file("inject", 0600, dir, NULL, &fei_ops))
> - goto error;
> + debugfs_create_file("inject", 0600, dir, NULL, &fei_ops);
>
> fei_debugfs_dir = dir;
>
> return 0;
> -error:
> - debugfs_remove_recursive(dir);
> - return -ENOMEM;
> }
>
> late_initcall(fei_debugfs_init);
> --
> 2.20.1
>

--
Masami Hiramatsu <mhiramat@kernel.org>