driver core: register_memory/unregister_memory clean ups and bugfix
register_memory()/unregister_memory() never gets called with "root". unregister_memory() is accessing kobject_name of the object just freed up. Since no one uses the code, lets take the code out. And also, make register_memory() static. Another bug fix - before calling unregister_memory() remove_memory_block() gets a ref on kobject. unregister_memory() need to drop that ref before calling sysdev_unregister(). Signed-off-by: Badari Pulavarty <pbadari@us.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
da19cbcf71
commit
00a41db522
|
@ -62,8 +62,8 @@ void unregister_memory_notifier(struct notifier_block *nb)
|
|||
/*
|
||||
* register_memory - Setup a sysfs device for a memory block
|
||||
*/
|
||||
int register_memory(struct memory_block *memory, struct mem_section *section,
|
||||
struct node *root)
|
||||
static
|
||||
int register_memory(struct memory_block *memory, struct mem_section *section)
|
||||
{
|
||||
int error;
|
||||
|
||||
|
@ -71,26 +71,18 @@ int register_memory(struct memory_block *memory, struct mem_section *section,
|
|||
memory->sysdev.id = __section_nr(section);
|
||||
|
||||
error = sysdev_register(&memory->sysdev);
|
||||
|
||||
if (root && !error)
|
||||
error = sysfs_create_link(&root->sysdev.kobj,
|
||||
&memory->sysdev.kobj,
|
||||
kobject_name(&memory->sysdev.kobj));
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
static void
|
||||
unregister_memory(struct memory_block *memory, struct mem_section *section,
|
||||
struct node *root)
|
||||
unregister_memory(struct memory_block *memory, struct mem_section *section)
|
||||
{
|
||||
BUG_ON(memory->sysdev.cls != &memory_sysdev_class);
|
||||
BUG_ON(memory->sysdev.id != __section_nr(section));
|
||||
|
||||
/* drop the ref. we got in remove_memory_block() */
|
||||
kobject_put(&memory->sysdev.kobj);
|
||||
sysdev_unregister(&memory->sysdev);
|
||||
if (root)
|
||||
sysfs_remove_link(&root->sysdev.kobj,
|
||||
kobject_name(&memory->sysdev.kobj));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -345,7 +337,7 @@ static int add_memory_block(unsigned long node_id, struct mem_section *section,
|
|||
mutex_init(&mem->state_mutex);
|
||||
mem->phys_device = phys_device;
|
||||
|
||||
ret = register_memory(mem, section, NULL);
|
||||
ret = register_memory(mem, section);
|
||||
if (!ret)
|
||||
ret = mem_create_simple_file(mem, phys_index);
|
||||
if (!ret)
|
||||
|
@ -396,7 +388,7 @@ int remove_memory_block(unsigned long node_id, struct mem_section *section,
|
|||
mem_remove_simple_file(mem, phys_index);
|
||||
mem_remove_simple_file(mem, state);
|
||||
mem_remove_simple_file(mem, phys_device);
|
||||
unregister_memory(mem, section, NULL);
|
||||
unregister_memory(mem, section);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue