2019-06-12 18:06:02

by Greg Kroah-Hartman

[permalink] [raw]
Subject: [PATCH] lib: debugobjects: no need to check return value of debugfs_create functions

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.

Cc: Qian Cai <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Waiman Long <[email protected]>
Cc: "Joel Fernandes (Google)" <[email protected]>
Cc: Zhong Jiang <[email protected]>
Cc: [email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
lib/debugobjects.c | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/lib/debugobjects.c b/lib/debugobjects.c
index 55437fd5128b..2ac42286cd08 100644
--- a/lib/debugobjects.c
+++ b/lib/debugobjects.c
@@ -850,26 +850,16 @@ static const struct file_operations debug_stats_fops = {

static int __init debug_objects_init_debugfs(void)
{
- struct dentry *dbgdir, *dbgstats;
+ struct dentry *dbgdir;

if (!debug_objects_enabled)
return 0;

dbgdir = debugfs_create_dir("debug_objects", NULL);
- if (!dbgdir)
- return -ENOMEM;

- dbgstats = debugfs_create_file("stats", 0444, dbgdir, NULL,
- &debug_stats_fops);
- if (!dbgstats)
- goto err;
+ debugfs_create_file("stats", 0444, dbgdir, NULL, &debug_stats_fops);

return 0;
-
-err:
- debugfs_remove(dbgdir);
-
- return -ENOMEM;
}
__initcall(debug_objects_init_debugfs);

--
2.22.0


2019-06-12 18:08:22

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] lib: debugobjects: no need to check return value of debugfs_create functions

On Wed, Jun 12, 2019 at 12:58:19PM -0400, Joel Fernandes wrote:
> On Wed, Jun 12, 2019 at 05:35:13PM +0200, Greg Kroah-Hartman 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.
> >
> > Cc: Qian Cai <[email protected]>
> > Cc: Thomas Gleixner <[email protected]>
> > Cc: Andrew Morton <[email protected]>
> > Cc: Waiman Long <[email protected]>
> > Cc: "Joel Fernandes (Google)" <[email protected]>
> > Cc: Zhong Jiang <[email protected]>
> > Cc: [email protected]
> > Signed-off-by: Greg Kroah-Hartman <[email protected]>
> > ---
> > lib/debugobjects.c | 14 ++------------
> > 1 file changed, 2 insertions(+), 12 deletions(-)
> >
> > diff --git a/lib/debugobjects.c b/lib/debugobjects.c
> > index 55437fd5128b..2ac42286cd08 100644
> > --- a/lib/debugobjects.c
> > +++ b/lib/debugobjects.c
> > @@ -850,26 +850,16 @@ static const struct file_operations debug_stats_fops = {
> >
> > static int __init debug_objects_init_debugfs(void)
> > {
> > - struct dentry *dbgdir, *dbgstats;
> > + struct dentry *dbgdir;
> >
> > if (!debug_objects_enabled)
> > return 0;
> >
> > dbgdir = debugfs_create_dir("debug_objects", NULL);
> > - if (!dbgdir)
> > - return -ENOMEM;
> >
> > - dbgstats = debugfs_create_file("stats", 0444, dbgdir, NULL,
> > - &debug_stats_fops);
> > - if (!dbgstats)
> > - goto err;
> > + debugfs_create_file("stats", 0444, dbgdir, NULL, &debug_stats_fops);
>
>
> One weirdness is, if dbgdir is ever NULL, then debugfs_create_file() may end
> up creating the stats file in the root.

Yes, but dbgdir can not be NULL.

> In debugfs_create_file():
> /* If the parent is not specified, we create it in the root.
> * We need the root dentry to do this, which is in the super
> * block. A pointer to that is in the struct vfsmount that we
> * have around.
> */
> if (!parent)
> parent = debugfs_mount->mnt_root;

Yes, but debugfs_create_dir() will never return NULL.

> But I guess that's not a major issue since its debugfs :-) So LGTM,

Yup!

> Reviewed-by: Joel Fernandes (Google) <[email protected]>

thanks for the review.

greg k-h

2019-06-12 18:08:59

by Joel Fernandes

[permalink] [raw]
Subject: Re: [PATCH] lib: debugobjects: no need to check return value of debugfs_create functions

On Wed, Jun 12, 2019 at 05:35:13PM +0200, Greg Kroah-Hartman 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.
>
> Cc: Qian Cai <[email protected]>
> Cc: Thomas Gleixner <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Cc: Waiman Long <[email protected]>
> Cc: "Joel Fernandes (Google)" <[email protected]>
> Cc: Zhong Jiang <[email protected]>
> Cc: [email protected]
> Signed-off-by: Greg Kroah-Hartman <[email protected]>
> ---
> lib/debugobjects.c | 14 ++------------
> 1 file changed, 2 insertions(+), 12 deletions(-)
>
> diff --git a/lib/debugobjects.c b/lib/debugobjects.c
> index 55437fd5128b..2ac42286cd08 100644
> --- a/lib/debugobjects.c
> +++ b/lib/debugobjects.c
> @@ -850,26 +850,16 @@ static const struct file_operations debug_stats_fops = {
>
> static int __init debug_objects_init_debugfs(void)
> {
> - struct dentry *dbgdir, *dbgstats;
> + struct dentry *dbgdir;
>
> if (!debug_objects_enabled)
> return 0;
>
> dbgdir = debugfs_create_dir("debug_objects", NULL);
> - if (!dbgdir)
> - return -ENOMEM;
>
> - dbgstats = debugfs_create_file("stats", 0444, dbgdir, NULL,
> - &debug_stats_fops);
> - if (!dbgstats)
> - goto err;
> + debugfs_create_file("stats", 0444, dbgdir, NULL, &debug_stats_fops);


One weirdness is, if dbgdir is ever NULL, then debugfs_create_file() may end
up creating the stats file in the root.

In debugfs_create_file():
/* If the parent is not specified, we create it in the root.
* We need the root dentry to do this, which is in the super
* block. A pointer to that is in the struct vfsmount that we
* have around.
*/
if (!parent)
parent = debugfs_mount->mnt_root;

But I guess that's not a major issue since its debugfs :-) So LGTM,
Reviewed-by: Joel Fernandes (Google) <[email protected]>

thanks,

- Joel

>
> return 0;
> -
> -err:
> - debugfs_remove(dbgdir);
> -
> - return -ENOMEM;
> }
> __initcall(debug_objects_init_debugfs);
>
> --
> 2.22.0
>

2019-06-12 18:09:07

by Joel Fernandes

[permalink] [raw]
Subject: Re: [PATCH] lib: debugobjects: no need to check return value of debugfs_create functions

On Wed, Jun 12, 2019 at 1:10 PM Greg Kroah-Hartman
<[email protected]> wrote:
>
> On Wed, Jun 12, 2019 at 12:58:19PM -0400, Joel Fernandes wrote:
> > On Wed, Jun 12, 2019 at 05:35:13PM +0200, Greg Kroah-Hartman 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.
> > >
> > > Cc: Qian Cai <[email protected]>
> > > Cc: Thomas Gleixner <[email protected]>
> > > Cc: Andrew Morton <[email protected]>
> > > Cc: Waiman Long <[email protected]>
> > > Cc: "Joel Fernandes (Google)" <[email protected]>
> > > Cc: Zhong Jiang <[email protected]>
> > > Cc: [email protected]
> > > Signed-off-by: Greg Kroah-Hartman <[email protected]>
> > > ---
> > > lib/debugobjects.c | 14 ++------------
> > > 1 file changed, 2 insertions(+), 12 deletions(-)
> > >
> > > diff --git a/lib/debugobjects.c b/lib/debugobjects.c
> > > index 55437fd5128b..2ac42286cd08 100644
> > > --- a/lib/debugobjects.c
> > > +++ b/lib/debugobjects.c
> > > @@ -850,26 +850,16 @@ static const struct file_operations debug_stats_fops = {
> > >
> > > static int __init debug_objects_init_debugfs(void)
> > > {
> > > - struct dentry *dbgdir, *dbgstats;
> > > + struct dentry *dbgdir;
> > >
> > > if (!debug_objects_enabled)
> > > return 0;
> > >
> > > dbgdir = debugfs_create_dir("debug_objects", NULL);
> > > - if (!dbgdir)
> > > - return -ENOMEM;
> > >
> > > - dbgstats = debugfs_create_file("stats", 0444, dbgdir, NULL,
> > > - &debug_stats_fops);
> > > - if (!dbgstats)
> > > - goto err;
> > > + debugfs_create_file("stats", 0444, dbgdir, NULL, &debug_stats_fops);
> >
> >
> > One weirdness is, if dbgdir is ever NULL, then debugfs_create_file() may end
> > up creating the stats file in the root.
>
> Yes, but dbgdir can not be NULL.

Makes sense, thanks for clarification,

- Joel

Subject: [tip:core/debugobjects] debugobjects: No need to check return value of debugfs_create()

Commit-ID: fecb0d95cdf752836cafdfffc1661f61ba4e2101
Gitweb: https://git.kernel.org/tip/fecb0d95cdf752836cafdfffc1661f61ba4e2101
Author: Greg Kroah-Hartman <[email protected]>
AuthorDate: Wed, 12 Jun 2019 17:35:13 +0200
Committer: Thomas Gleixner <[email protected]>
CommitDate: Fri, 14 Jun 2019 14:51:14 +0200

debugobjects: No need to check return value of debugfs_create()

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.

Signed-off-by: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
Cc: Qian Cai <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Waiman Long <[email protected]>
Cc: "Joel Fernandes (Google)" <[email protected]>
Cc: Zhong Jiang <[email protected]>
Link: https://lkml.kernel.org/r/[email protected]

---
lib/debugobjects.c | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/lib/debugobjects.c b/lib/debugobjects.c
index 55437fd5128b..2ac42286cd08 100644
--- a/lib/debugobjects.c
+++ b/lib/debugobjects.c
@@ -850,26 +850,16 @@ static const struct file_operations debug_stats_fops = {

static int __init debug_objects_init_debugfs(void)
{
- struct dentry *dbgdir, *dbgstats;
+ struct dentry *dbgdir;

if (!debug_objects_enabled)
return 0;

dbgdir = debugfs_create_dir("debug_objects", NULL);
- if (!dbgdir)
- return -ENOMEM;

- dbgstats = debugfs_create_file("stats", 0444, dbgdir, NULL,
- &debug_stats_fops);
- if (!dbgstats)
- goto err;
+ debugfs_create_file("stats", 0444, dbgdir, NULL, &debug_stats_fops);

return 0;
-
-err:
- debugfs_remove(dbgdir);
-
- return -ENOMEM;
}
__initcall(debug_objects_init_debugfs);