Tcache code filled with BUG_ON() checks. However the most cases issues that BUG_ON() supposed to catch are not serious enough to kill machine. So relax it's to WARN_ON. Remove BUG_ON() in tcache_init_fs(), because it's useless. It's called from the only one place in the kernel, which looks like this: pool_id = cleancache_ops->init_fs(PAGE_SIZE);
https://jira.sw.ru/browse/PSBM-77154 Signed-off-by: Andrey Ryabinin <aryabi...@virtuozzo.com> --- mm/tcache.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/mm/tcache.c b/mm/tcache.c index b5157d9861d0..31a2d0250fc8 100644 --- a/mm/tcache.c +++ b/mm/tcache.c @@ -446,6 +446,7 @@ static void tcache_destroy_pool(int id) { int i; struct tcache_pool *pool; + unsigned long nr_nodes; spin_lock(&tcache_pool_lock); pool = idr_find(&tcache_pool_idr, id); @@ -473,7 +474,9 @@ static void tcache_destroy_pool(int id) for (i = 0; i < num_node_trees; i++) tcache_invalidate_node_tree(&pool->node_tree[i]); - BUG_ON(atomic_long_read(&pool->nr_nodes) != 0); + nr_nodes = atomic_long_read(&pool->nr_nodes); + if (WARN(nr_nodes != 0, "pool->nr_nodes %ld", nr_nodes)) + return; kfree(pool->node_tree); kfree_rcu(pool, rcu); @@ -590,9 +593,10 @@ retry: spin_unlock_irqrestore(&tree->lock, flags); if (node) { - BUG_ON(node->pool != pool); if (node != new_node) kfree(new_node); + if (WARN_ON(node->pool != pool)) + node = NULL; return node; } @@ -696,9 +700,9 @@ tcache_invalidate_node_tree(struct tcache_node_tree *tree) struct tcache_node, tree_node); /* Remaining nodes must be held solely by their pages */ - BUG_ON(atomic_read(&node->kref.refcount) != 1); - BUG_ON(node->nr_pages == 0); - BUG_ON(node->invalidated); + WARN_ON(atomic_read(&node->kref.refcount) != 1); + WARN_ON(node->nr_pages == 0); + WARN_ON(node->invalidated); tcache_hold_node(node); tcache_invalidate_node_pages(node); @@ -1182,7 +1186,8 @@ static unsigned long tcache_shrink_scan(struct shrinker *shrink, struct page **pages = get_cpu_var(tcache_page_vec); int nr_isolated, nr_reclaimed; - BUG_ON(sc->nr_to_scan > TCACHE_SCAN_BATCH); + if (WARN_ON(sc->nr_to_scan > TCACHE_SCAN_BATCH)) + sc->nr_to_scan = TCACHE_SCAN_BATCH; nr_isolated = tcache_lru_isolate(sc->nid, pages, sc->nr_to_scan); if (!nr_isolated) { @@ -1209,7 +1214,6 @@ struct shrinker tcache_shrinker = { static int tcache_cleancache_init_fs(size_t pagesize) { - BUG_ON(pagesize != PAGE_SIZE); return tcache_create_pool(); } -- 2.13.6 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel