lkml.org 
[lkml]   [2014]   [Feb]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 104/104] powerpc: Make sure "cache" directory is removed when offlining cpu
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Paul Mackerras <paulus@samba.org>

    commit 91b973f90c1220d71923e7efe1e61f5329806380 upstream.

    The code in remove_cache_dir() is supposed to remove the "cache"
    subdirectory from the sysfs directory for a CPU when that CPU is
    being offlined. It tries to do this by calling kobject_put() on
    the kobject for the subdirectory. However, the subdirectory only
    gets removed once the last reference goes away, and the reference
    being put here may well not be the last reference. That means
    that the "cache" subdirectory may still exist when the offlining
    operation has finished. If the same CPU subsequently gets onlined,
    the code tries to add a new "cache" subdirectory. If the old
    subdirectory has not yet been removed, we get a WARN_ON in the
    sysfs code, with stack trace, and an error message printed on the
    console. Further, we ultimately end up with an online cpu with no
    "cache" subdirectory.

    This fixes it by doing an explicit kobject_del() at the point where
    we want the subdirectory to go away. kobject_del() removes the sysfs
    directory even though the object still exists in memory. The object
    will get freed at some point in the future. A subsequent onlining
    operation can create a new sysfs directory, even if the old object
    still exists in memory, without causing any problems.

    Signed-off-by: Paul Mackerras <paulus@samba.org>
    Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/powerpc/kernel/cacheinfo.c | 3 +++
    1 file changed, 3 insertions(+)

    --- a/arch/powerpc/kernel/cacheinfo.c
    +++ b/arch/powerpc/kernel/cacheinfo.c
    @@ -788,6 +788,9 @@ static void remove_cache_dir(struct cach
    {
    remove_index_dirs(cache_dir);

    + /* Remove cache dir from sysfs */
    + kobject_del(cache_dir->kobj);
    +
    kobject_put(cache_dir->kobj);

    kfree(cache_dir);



    \
     
     \ /
      Last update: 2014-02-05 05:41    [W:3.082 / U:0.680 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site