Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751335AbdIOMAu (ORCPT ); Fri, 15 Sep 2017 08:00:50 -0400 Received: from www262.sakura.ne.jp ([202.181.97.72]:18335 "EHLO www262.sakura.ne.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751184AbdIOMAt (ORCPT ); Fri, 15 Sep 2017 08:00:49 -0400 Subject: Re: [PATCH 3/3] mm: oom: show unreclaimable slab info when kernel panic To: Yang Shi , cl@linux.com, penberg@kernel.org, rientjes@google.com, iamjoonsoo.kim@lge.com, akpm@linux-foundation.org Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <1505409289-57031-1-git-send-email-yang.s@alibaba-inc.com> <1505409289-57031-4-git-send-email-yang.s@alibaba-inc.com> From: Tetsuo Handa Message-ID: <2f7b69d1-8aa2-c2b8-92bd-167998145a28@I-love.SAKURA.ne.jp> Date: Fri, 15 Sep 2017 21:00:43 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <1505409289-57031-4-git-send-email-yang.s@alibaba-inc.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1051 Lines: 42 On 2017/09/15 2:14, Yang Shi wrote: > @@ -1274,6 +1276,29 @@ static int slab_show(struct seq_file *m, void *p) > return 0; > } > > +void show_unreclaimable_slab() > +{ > + struct kmem_cache *s = NULL; > + struct slabinfo sinfo; > + > + memset(&sinfo, 0, sizeof(sinfo)); > + > + printk("Unreclaimable slabs:\n"); > + mutex_lock(&slab_mutex); Please avoid sleeping locks which potentially depend on memory allocation. There are mutex_lock(&slab_mutex); kmalloc(GFP_KERNEL); mutex_unlock(&slab_mutex); users which will fail to call panic() if they hit this path. > + list_for_each_entry(s, &slab_caches, list) { > + if (!is_root_cache(s)) > + continue; > + > + get_slabinfo(s, &sinfo); > + > + if (!is_reclaimable(s) && sinfo.num_objs > 0) > + printk("%-17s %luKB\n", cache_name(s), K(sinfo.num_objs * s->size)); > + } > + mutex_unlock(&slab_mutex); > +} > +EXPORT_SYMBOL(show_unreclaimable_slab); > +#undef K > + > #if defined(CONFIG_MEMCG) && !defined(CONFIG_SLOB) > void *memcg_slab_start(struct seq_file *m, loff_t *pos) > { >