lkml.org 
[lkml]   [2008]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 09/36] driver core: register_memory/unregister_memory clean ups and bugfix
    Date
    From: Badari Pulavarty <pbadari@us.ibm.com>

    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>
    ---
    drivers/base/memory.c | 22 +++++++---------------
    1 files changed, 7 insertions(+), 15 deletions(-)

    diff --git a/drivers/base/memory.c b/drivers/base/memory.c
    index 1f3801a..7891f7c 100644
    --- a/drivers/base/memory.c
    +++ b/drivers/base/memory.c
    @@ -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;
    }
    --
    1.5.4.5


    \
     
     \ /
      Last update: 2008-04-20 12:45    [W:0.025 / U:30.996 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site