2019-02-21 04:02:36

by Yue Hu

[permalink] [raw]
Subject: [PATCH] mm/cma_debug: Avoid to use global cma_debugfs_root

From: Yue Hu <[email protected]>

Currently cma_debugfs_root is at global space. That is unnecessary
since it will be only used by next cma_debugfs_add_one(). We can
just pass it to following calling, it will save global space. Also
remove useless idx parameter.

Signed-off-by: Yue Hu <[email protected]>
---
mm/cma_debug.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/mm/cma_debug.c b/mm/cma_debug.c
index f234672..2c2c869 100644
--- a/mm/cma_debug.c
+++ b/mm/cma_debug.c
@@ -21,8 +21,6 @@ struct cma_mem {
unsigned long n;
};

-static struct dentry *cma_debugfs_root;
-
static int cma_debugfs_get(void *data, u64 *val)
{
unsigned long *p = data;
@@ -162,7 +160,7 @@ static int cma_alloc_write(void *data, u64 val)
}
DEFINE_SIMPLE_ATTRIBUTE(cma_alloc_fops, NULL, cma_alloc_write, "%llu\n");

-static void cma_debugfs_add_one(struct cma *cma, int idx)
+static void cma_debugfs_add_one(struct cma *cma, struct dentry *root_dentry)
{
struct dentry *tmp;
char name[16];
@@ -170,7 +168,7 @@ static void cma_debugfs_add_one(struct cma *cma, int idx)

scnprintf(name, sizeof(name), "cma-%s", cma->name);

- tmp = debugfs_create_dir(name, cma_debugfs_root);
+ tmp = debugfs_create_dir(name, root_dentry);

debugfs_create_file("alloc", 0200, tmp, cma, &cma_alloc_fops);
debugfs_create_file("free", 0200, tmp, cma, &cma_free_fops);
@@ -188,6 +186,7 @@ static void cma_debugfs_add_one(struct cma *cma, int idx)

static int __init cma_debugfs_init(void)
{
+ struct dentry *cma_debugfs_root;
int i;

cma_debugfs_root = debugfs_create_dir("cma", NULL);
@@ -195,7 +194,7 @@ static int __init cma_debugfs_init(void)
return -ENOMEM;

for (i = 0; i < cma_area_count; i++)
- cma_debugfs_add_one(&cma_areas[i], i);
+ cma_debugfs_add_one(&cma_areas[i], cma_debugfs_root);

return 0;
}
--
1.9.1



2019-02-21 04:02:45

by Yue Hu

[permalink] [raw]
Subject: [PATCH] mm/cma_debug: Check for null tmp in cma_debugfs_add_one()

From: Yue Hu <[email protected]>

If debugfs_create_dir() failed, the following debugfs_create_file()
will be meanless since it depends on non-NULL tmp dentry and it will
only waste CPU resource.

Signed-off-by: Yue Hu <[email protected]>
---
mm/cma_debug.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/mm/cma_debug.c b/mm/cma_debug.c
index 2c2c869..3e9d984 100644
--- a/mm/cma_debug.c
+++ b/mm/cma_debug.c
@@ -169,6 +169,8 @@ static void cma_debugfs_add_one(struct cma *cma, struct dentry *root_dentry)
scnprintf(name, sizeof(name), "cma-%s", cma->name);

tmp = debugfs_create_dir(name, root_dentry);
+ if (!tmp)
+ return;

debugfs_create_file("alloc", 0200, tmp, cma, &cma_alloc_fops);
debugfs_create_file("free", 0200, tmp, cma, &cma_free_fops);
--
1.9.1


2019-02-21 08:24:06

by Michal Hocko

[permalink] [raw]
Subject: Re: [PATCH] mm/cma_debug: Check for null tmp in cma_debugfs_add_one()

On Thu 21-02-19 12:01:30, Yue Hu wrote:
> From: Yue Hu <[email protected]>
>
> If debugfs_create_dir() failed, the following debugfs_create_file()
> will be meanless since it depends on non-NULL tmp dentry and it will
> only waste CPU resource.

The file will be created in the debugfs root. But, more importantly.
Greg (CCed now) is working on removing the failure paths because he
believes they do not really matter for debugfs and they make code more
ugly. More importantly a check for NULL is not correct because you
get ERR_PTR after recent changes IIRC.

>
> Signed-off-by: Yue Hu <[email protected]>
> ---
> mm/cma_debug.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/mm/cma_debug.c b/mm/cma_debug.c
> index 2c2c869..3e9d984 100644
> --- a/mm/cma_debug.c
> +++ b/mm/cma_debug.c
> @@ -169,6 +169,8 @@ static void cma_debugfs_add_one(struct cma *cma, struct dentry *root_dentry)
> scnprintf(name, sizeof(name), "cma-%s", cma->name);
>
> tmp = debugfs_create_dir(name, root_dentry);
> + if (!tmp)
> + return;
>
> debugfs_create_file("alloc", 0200, tmp, cma, &cma_alloc_fops);
> debugfs_create_file("free", 0200, tmp, cma, &cma_free_fops);
> --
> 1.9.1
>

--
Michal Hocko
SUSE Labs

2019-02-21 08:37:36

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] mm/cma_debug: Check for null tmp in cma_debugfs_add_one()

On Thu, Feb 21, 2019 at 09:23:09AM +0100, Michal Hocko wrote:
> On Thu 21-02-19 12:01:30, Yue Hu wrote:
> > From: Yue Hu <[email protected]>
> >
> > If debugfs_create_dir() failed, the following debugfs_create_file()
> > will be meanless since it depends on non-NULL tmp dentry and it will
> > only waste CPU resource.
>
> The file will be created in the debugfs root. But, more importantly.
> Greg (CCed now) is working on removing the failure paths because he
> believes they do not really matter for debugfs and they make code more
> ugly. More importantly a check for NULL is not correct because you
> get ERR_PTR after recent changes IIRC.
>
> >
> > Signed-off-by: Yue Hu <[email protected]>
> > ---
> > mm/cma_debug.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/mm/cma_debug.c b/mm/cma_debug.c
> > index 2c2c869..3e9d984 100644
> > --- a/mm/cma_debug.c
> > +++ b/mm/cma_debug.c
> > @@ -169,6 +169,8 @@ static void cma_debugfs_add_one(struct cma *cma, struct dentry *root_dentry)
> > scnprintf(name, sizeof(name), "cma-%s", cma->name);
> >
> > tmp = debugfs_create_dir(name, root_dentry);
> > + if (!tmp)
> > + return;

Ick, yes, this patch isn't ok, I've been doing lots of work to rip these
checks out :)

Thanks for catching this Michal.

greg k-h

2019-02-21 08:46:10

by Michal Hocko

[permalink] [raw]
Subject: Re: [PATCH] mm/cma_debug: Check for null tmp in cma_debugfs_add_one()

On Thu 21-02-19 09:36:24, Greg KH wrote:
> On Thu, Feb 21, 2019 at 09:23:09AM +0100, Michal Hocko wrote:
> > On Thu 21-02-19 12:01:30, Yue Hu wrote:
> > > From: Yue Hu <[email protected]>
> > >
> > > If debugfs_create_dir() failed, the following debugfs_create_file()
> > > will be meanless since it depends on non-NULL tmp dentry and it will
> > > only waste CPU resource.
> >
> > The file will be created in the debugfs root. But, more importantly.
> > Greg (CCed now) is working on removing the failure paths because he
> > believes they do not really matter for debugfs and they make code more
> > ugly. More importantly a check for NULL is not correct because you
> > get ERR_PTR after recent changes IIRC.
> >
> > >
> > > Signed-off-by: Yue Hu <[email protected]>
> > > ---
> > > mm/cma_debug.c | 2 ++
> > > 1 file changed, 2 insertions(+)
> > >
> > > diff --git a/mm/cma_debug.c b/mm/cma_debug.c
> > > index 2c2c869..3e9d984 100644
> > > --- a/mm/cma_debug.c
> > > +++ b/mm/cma_debug.c
> > > @@ -169,6 +169,8 @@ static void cma_debugfs_add_one(struct cma *cma, struct dentry *root_dentry)
> > > scnprintf(name, sizeof(name), "cma-%s", cma->name);
> > >
> > > tmp = debugfs_create_dir(name, root_dentry);
> > > + if (!tmp)
> > > + return;
>
> Ick, yes, this patch isn't ok, I've been doing lots of work to rip these
> checks out :)

Btw. I believe that it would help to clarify this stance in the
kerneldoc otherwise these checks will be returning back because the
general kernel development attitude is to check for errors. As I've said
previously debugfs being different is ugly but decision is yours.

--
Michal Hocko
SUSE Labs

2019-02-21 08:57:39

by Yue Hu

[permalink] [raw]
Subject: Re: [PATCH] mm/cma_debug: Check for null tmp in cma_debugfs_add_one()

On Thu, 21 Feb 2019 09:23:09 +0100
Michal Hocko <[email protected]> wrote:

> On Thu 21-02-19 12:01:30, Yue Hu wrote:
> > From: Yue Hu <[email protected]>
> >
> > If debugfs_create_dir() failed, the following debugfs_create_file()
> > will be meanless since it depends on non-NULL tmp dentry and it will
> > only waste CPU resource.
>
> The file will be created in the debugfs root. But, more importantly.
> Greg (CCed now) is working on removing the failure paths because he
> believes they do not really matter for debugfs and they make code more
> ugly. More importantly a check for NULL is not correct because you
> get ERR_PTR after recent changes IIRC.

Same check logic in cma_debugfs_init(), i'm just finding they do not stay
the same.

>
> >
> > Signed-off-by: Yue Hu <[email protected]>
> > ---
> > mm/cma_debug.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/mm/cma_debug.c b/mm/cma_debug.c
> > index 2c2c869..3e9d984 100644
> > --- a/mm/cma_debug.c
> > +++ b/mm/cma_debug.c
> > @@ -169,6 +169,8 @@ static void cma_debugfs_add_one(struct cma *cma, struct dentry *root_dentry)
> > scnprintf(name, sizeof(name), "cma-%s", cma->name);
> >
> > tmp = debugfs_create_dir(name, root_dentry);
> > + if (!tmp)
> > + return;
> >
> > debugfs_create_file("alloc", 0200, tmp, cma, &cma_alloc_fops);
> > debugfs_create_file("free", 0200, tmp, cma, &cma_free_fops);
> > --
> > 1.9.1
> >
>


2019-02-21 09:11:09

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] mm/cma_debug: Check for null tmp in cma_debugfs_add_one()

On Thu, Feb 21, 2019 at 04:56:42PM +0800, Yue Hu wrote:
> On Thu, 21 Feb 2019 09:23:09 +0100
> Michal Hocko <[email protected]> wrote:
>
> > On Thu 21-02-19 12:01:30, Yue Hu wrote:
> > > From: Yue Hu <[email protected]>
> > >
> > > If debugfs_create_dir() failed, the following debugfs_create_file()
> > > will be meanless since it depends on non-NULL tmp dentry and it will
> > > only waste CPU resource.
> >
> > The file will be created in the debugfs root. But, more importantly.
> > Greg (CCed now) is working on removing the failure paths because he
> > believes they do not really matter for debugfs and they make code more
> > ugly. More importantly a check for NULL is not correct because you
> > get ERR_PTR after recent changes IIRC.
>
> Same check logic in cma_debugfs_init(), i'm just finding they do not stay
> the same.

I have patches to fix that up as well :)

thanks,

greg k-h

2019-02-21 09:11:27

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] mm/cma_debug: Check for null tmp in cma_debugfs_add_one()

On Thu, Feb 21, 2019 at 09:45:25AM +0100, Michal Hocko wrote:
> On Thu 21-02-19 09:36:24, Greg KH wrote:
> > On Thu, Feb 21, 2019 at 09:23:09AM +0100, Michal Hocko wrote:
> > > On Thu 21-02-19 12:01:30, Yue Hu wrote:
> > > > From: Yue Hu <[email protected]>
> > > >
> > > > If debugfs_create_dir() failed, the following debugfs_create_file()
> > > > will be meanless since it depends on non-NULL tmp dentry and it will
> > > > only waste CPU resource.
> > >
> > > The file will be created in the debugfs root. But, more importantly.
> > > Greg (CCed now) is working on removing the failure paths because he
> > > believes they do not really matter for debugfs and they make code more
> > > ugly. More importantly a check for NULL is not correct because you
> > > get ERR_PTR after recent changes IIRC.
> > >
> > > >
> > > > Signed-off-by: Yue Hu <[email protected]>
> > > > ---
> > > > mm/cma_debug.c | 2 ++
> > > > 1 file changed, 2 insertions(+)
> > > >
> > > > diff --git a/mm/cma_debug.c b/mm/cma_debug.c
> > > > index 2c2c869..3e9d984 100644
> > > > --- a/mm/cma_debug.c
> > > > +++ b/mm/cma_debug.c
> > > > @@ -169,6 +169,8 @@ static void cma_debugfs_add_one(struct cma *cma, struct dentry *root_dentry)
> > > > scnprintf(name, sizeof(name), "cma-%s", cma->name);
> > > >
> > > > tmp = debugfs_create_dir(name, root_dentry);
> > > > + if (!tmp)
> > > > + return;
> >
> > Ick, yes, this patch isn't ok, I've been doing lots of work to rip these
> > checks out :)
>
> Btw. I believe that it would help to clarify this stance in the
> kerneldoc otherwise these checks will be returning back because the
> general kernel development attitude is to check for errors. As I've said
> previously debugfs being different is ugly but decision is yours.

Yes, I'll be doing that, thanks for the reminder.

greg k-h