Re: [PATCH v7] mm: slub: move sysfs slab alloc/free interfaces to debugfs
From: Faiyaz Mohammed <hidden>
Date: 2021-05-25 08:57:28
Also in:
lkml
On 5/25/2021 1:23 PM, Greg KH wrote:
On Tue, May 25, 2021 at 01:08:05PM +0530, Faiyaz Mohammed wrote:quoted
alloc_calls and free_calls implementation in sysfs have two issues, one is PAGE_SIZE limitiation of sysfs and other is it does not adhere to "one value per file" rule. To overcome this issues, move the alloc_calls and free_calls implemeation to debugfs. Rename the alloc_calls/free_calls to alloc_traces/free_traces, to be inline with what it does. Reported-by: kernel test robot <redacted> Reported-by: Dan Carpenter <redacted> Signed-off-by: Faiyaz Mohammed <redacted> --- changes in V7: - Drop the older alloc_calls and free_calls interface. changes in v6: - https://lore.kernel.org/linux-mm/1621341949-26762-1-git-send-email-faiyazm@codeaurora.org/ (local) changes in v5: - https://lore.kernel.org/linux-mm/1620296523-21922-1-git-send-email-faiyazm@codeaurora.org/ (local) changes in v4: - https://lore.kernel.org/linux-mm/1618583239-18124-1-git-send-email-faiyazm@codeaurora.org/ (local) changes in v3: - https://lore.kernel.org/linux-mm/1617712064-12264-1-git-send-email-faiyazm@codeaurora.org/ (local) changes in v2: - https://lore.kernel.org/linux-mm/3ac1d3e6-6207-96ad-16a1-0f5139d8b2b5@codeaurora.org/ (local) changes in v1: - https://lore.kernel.org/linux-mm/1610443287-23933-1-git-send-email-faiyazm@codeaurora.org/ (local) include/linux/slub_def.h | 8 ++ mm/slab_common.c | 9 ++ mm/slub.c | 353 ++++++++++++++++++++++++++++++++++------------- 3 files changed, 276 insertions(+), 94 deletions(-)diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index dcde82a..b413ebe 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h@@ -159,6 +159,14 @@ static inline void sysfs_slab_release(struct kmem_cache *s) } #endif +#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_SLUB_DEBUG) +#define SLAB_SUPPORTS_DEBUGFS +void debugfs_slab_release(struct kmem_cache *); +#else +static inline void debugfs_slab_release(struct kmem_cache *s) +{ +} +#endif void object_err(struct kmem_cache *s, struct page *page, u8 *object, char *reason);diff --git a/mm/slab_common.c b/mm/slab_common.c index a4a5714..873dd79 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c@@ -455,6 +455,9 @@ static void slab_caches_to_rcu_destroy_workfn(struct work_struct *work) #else slab_kmem_cache_release(s); #endif +#ifdef SLAB_SUPPORTS_DEBUGFS + debugfs_slab_release(s); +#endifWhy do you need these #ifdef if your slub_dev.h file already provides an "empty" function for this?
We are not including slub_def.h directly. mm/slab.h includes the slub_def.h if CONFIG_SLUB enable, from mm/slab.h #ifdef CONFIG_SLAB #include <linux/slab_def.h> #endif #ifdef CONFIG_SLUB #include <linux/slub_def.h> #endif so if CONFIG_SLAB is enable then mm/slab.h includes slab_def.h, to avoid undefined reference error added SLAB_SUPPORTS_DEBUGFS like SLAB_SUPPORTS_SYSFS.
quoted
} }@@ -472,6 +475,9 @@ static int shutdown_cache(struct kmem_cache *s) #ifdef SLAB_SUPPORTS_SYSFS sysfs_slab_unlink(s); #endif +#ifdef SLAB_SUPPORTS_DEBUGFS + debugfs_slab_release(s); +#endifSame here.quoted
list_add_tail(&s->list, &slab_caches_to_rcu_destroy); schedule_work(&slab_caches_to_rcu_destroy_work); } else {@@ -482,6 +488,9 @@ static int shutdown_cache(struct kmem_cache *s) #else slab_kmem_cache_release(s); #endif +#ifdef SLAB_SUPPORTS_DEBUGFS + debugfs_slab_release(s); +#endifAnd here. What is wrong with your .h file that keeps the need for #ifdef in the .c file? I thought I've asked about this a number of times in the past, what am I missing? thanks, greg k-h