Skip to content

Commit

Permalink
sched: more robust sd-sysctl entry freeing
Browse files Browse the repository at this point in the history
It occurred to me this morning that the procname field was dynamically
allocated and needed to be freed.  I started to put in break statements
when allocation failed but it was approaching 50% error handling code.

I came up with this alternative of looping while entry->mode is set and
checking proc_handler instead of ->table.  Alternatively, the string
version of the domain name and cpu number could be stored the structs.

I verified by compiling CONFIG_DEBUG_SLAB and checking the allocation
counts after taking a cpuset exclusive and back.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Milton Miller authored and Ingo Molnar committed Oct 17, 2007
1 parent ebb3e82 commit cd79007
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions kernel/sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -5272,11 +5272,20 @@ static struct ctl_table *sd_alloc_ctl_entry(int n)

static void sd_free_ctl_entry(struct ctl_table **tablep)
{
struct ctl_table *entry = *tablep;
struct ctl_table *entry;

for (entry = *tablep; entry->procname; entry++)
/*
* In the intermediate directories, both the child directory and
* procname are dynamically allocated and could fail but the mode
* will always be set. In the lowest directory the names are
* static strings and all have proc handlers.
*/
for (entry = *tablep; entry->mode; entry++) {
if (entry->child)
sd_free_ctl_entry(&entry->child);
if (entry->proc_handler == NULL)
kfree(entry->procname);
}

kfree(*tablep);
*tablep = NULL;
Expand Down

0 comments on commit cd79007

Please sign in to comment.