• Coly Li's avatar
    bcache: ignore pending signals when creating gc and allocator thread · 0b96da63
    Coly Li authored
    When run a cache set, all the bcache btree node of this cache set will
    be checked by bch_btree_check(). If the bcache btree is very large,
    iterating all the btree nodes will occupy too much system memory and
    the bcache registering process might be selected and killed by system
    OOM killer. kthread_run() will fail if current process has pending
    signal, therefore the kthread creating in run_cache_set() for gc and
    allocator kernel threads are very probably failed for a very large
    bcache btree.
    
    Indeed such OOM is safe and the registering process will exit after
    the registration done. Therefore this patch flushes pending signals
    during the cache set start up, specificly in bch_cache_allocator_start()
    and bch_gc_thread_start(), to make sure run_cache_set() won't fail for
    large cahced data set.
    Signed-off-by: default avatarColy Li <colyli@suse.de>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    0b96da63
btree.c 61 KB