2006-03-20 15:54:18

by Matthew Wilcox

[permalink] [raw]
Subject: [PATCH] Make sure nobody's leaking resources


Currently, releasing a resource also releases all of its children. That
made sense when request_resource was the main method of dividing up the
memory map. With the increased use of insert_resource, it seems to me
that we should instead reparent the newly orphaned resources. Before
we do that, let's make sure that nobody's actually relying on the current
semantics.

Signed-off-by: Matthew Wilcox <[email protected]>

diff -urpNX dontdiff linus-2.6/kernel/resource.c parisc-2.6/kernel/resource.c
--- linus-2.6/kernel/resource.c 2006-03-20 07:29:06.000000000 -0700
+++ parisc-2.6/kernel/resource.c 2006-03-20 07:00:47.000000000 -0700
@@ -181,6 +181,8 @@ static int __release_resource(struct res
{
struct resource *tmp, **p;

+ BUG_ON(old->child);
+
p = &old->parent->child;
for (;;) {
tmp = *p;


2006-03-20 16:11:09

by Muli Ben-Yehuda

[permalink] [raw]
Subject: Re: [PATCH] Make sure nobody's leaking resources

On Mon, Mar 20, 2006 at 08:53:04AM -0700, Matthew Wilcox wrote:
>
> Currently, releasing a resource also releases all of its children. That
> made sense when request_resource was the main method of dividing up the
> memory map. With the increased use of insert_resource, it seems to me
> that we should instead reparent the newly orphaned resources. Before
> we do that, let's make sure that nobody's actually relying on the current
> semantics.
>
> Signed-off-by: Matthew Wilcox <[email protected]>
>
> diff -urpNX dontdiff linus-2.6/kernel/resource.c parisc-2.6/kernel/resource.c
> --- linus-2.6/kernel/resource.c 2006-03-20 07:29:06.000000000 -0700
> +++ parisc-2.6/kernel/resource.c 2006-03-20 07:00:47.000000000 -0700
> @@ -181,6 +181,8 @@ static int __release_resource(struct res
> {
> struct resource *tmp, **p;
>
> + BUG_ON(old->child);
> +

Is this expressely forbidden at this stage, or just "not recommended"?
if the latter, WARN_ON() might be more appropriate.

Cheers,
Muli
--
Muli Ben-Yehuda
http://www.mulix.org | http://mulix.livejournal.com/

2006-03-20 21:37:19

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] Make sure nobody's leaking resources

Muli Ben-Yehuda <[email protected]> wrote:
>
> On Mon, Mar 20, 2006 at 08:53:04AM -0700, Matthew Wilcox wrote:
> >
> > Currently, releasing a resource also releases all of its children. That
> > made sense when request_resource was the main method of dividing up the
> > memory map. With the increased use of insert_resource, it seems to me
> > that we should instead reparent the newly orphaned resources. Before
> > we do that, let's make sure that nobody's actually relying on the current
> > semantics.
> >
> > Signed-off-by: Matthew Wilcox <[email protected]>
> >
> > diff -urpNX dontdiff linus-2.6/kernel/resource.c parisc-2.6/kernel/resource.c
> > --- linus-2.6/kernel/resource.c 2006-03-20 07:29:06.000000000 -0700
> > +++ parisc-2.6/kernel/resource.c 2006-03-20 07:00:47.000000000 -0700
> > @@ -181,6 +181,8 @@ static int __release_resource(struct res
> > {
> > struct resource *tmp, **p;
> >
> > + BUG_ON(old->child);
> > +
>
> Is this expressely forbidden at this stage, or just "not recommended"?
> if the latter, WARN_ON() might be more appropriate.
>

Yes, there's no way we can make changes like this to either -mm or to
mainline. Making people's perfectly-working kernels go splat helps neither
them nor us.

A WARN_ON() which shuts itself up after one or three invokations would be
appropriate here.