lkml.org 
[lkml]   [2016]   [Apr]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] mm/zpool: use workqueue for zpool_destroy
    On Mon, Apr 25, 2016 at 05:20:10PM -0400, Dan Streetman wrote:
    > Add a work_struct to struct zpool, and change zpool_destroy_pool to
    > defer calling the pool implementation destroy.
    >
    > The zsmalloc pool destroy function, which is one of the zpool
    > implementations, may sleep during destruction of the pool. However
    > zswap, which uses zpool, may call zpool_destroy_pool from atomic
    > context. So we need to defer the call to the zpool implementation
    > to destroy the pool.
    >
    > This is essentially the same as Yu Zhao's proposed patch to zsmalloc,
    > but moved to zpool.

    Thanks, Dan. Sergey also mentioned another call path that triggers the
    same problem (BUG: scheduling while atomic):
    rcu_process_callbacks()
    __zswap_pool_release()
    zswap_pool_destroy()
    zswap_cpu_comp_destroy()
    cpu_notifier_register_begin()
    mutex_lock(&cpu_add_remove_lock);
    So I was thinking zswap_pool_destroy() might be done in workqueue in zswap.c.
    This way we fix both call paths.

    Or you have another patch to fix the second call path?

    \
     
     \ /
      Last update: 2016-04-26 00:41    [W:2.789 / U:0.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site