From: Hao Li <hao.li@linux.dev>
To: Pengpeng Hou <pengpeng@iscas.ac.cn>
Cc: Vlastimil Babka <vbabka@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, Harry Yoo <harry@kernel.org>,
Christoph Lameter <cl@gentwo.org>,
David Rientjes <rientjes@google.com>,
Roman Gushchin <roman.gushchin@linux.dev>,
David Hildenbrand <david@kernel.org>,
Lorenzo Stoakes <ljs@kernel.org>,
liam@infradead.org, Mike Rapoport <rppt@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Michal Hocko <mhocko@suse.com>, Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/4] mm/slub: factor user tracking metadata size calculation
Date: Wed, 17 Jun 2026 12:26:08 +0800 [thread overview]
Message-ID: <ajIg4JCDhz_yAnOX@fedora> (raw)
In-Reply-To: <20260616141410.52117-2-pengpeng@iscas.ac.cn>
On Tue, Jun 16, 2026 at 10:14:07PM +0800, Pengpeng Hou wrote:
> SLAB_STORE_USER currently stores two struct track records in the per-object
> debug metadata. The size is open-coded as 2 * sizeof(struct track) in
> several layout and offset calculations.
>
> Add TRACK_NR and a small helper for the user-tracking metadata size. This
> keeps all offset calculations tied to the number of track records and makes
> the following extension less error-prone.
>
> No functional change.
Do we really need a user_tracking_size helper? This seems introducing some
redundant checking for SLAB_STORE_USER.
For example in set_orig_size(), obj_exts_offset_in_object() and
check_pad_bytes()
redundant checking may be confused...
>
> Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
> ---
> mm/slub.c | 25 ++++++++++++++++---------
> 1 file changed, 16 insertions(+), 9 deletions(-)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index f87e693aca5d..43d4febd5bf2 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -327,7 +327,15 @@ struct track {
> unsigned long when; /* When did the operation occur */
> };
>
> -enum track_item { TRACK_ALLOC, TRACK_FREE };
> +enum track_item { TRACK_ALLOC, TRACK_FREE, TRACK_NR };
> +
> +static inline unsigned int user_tracking_size(slab_flags_t flags)
> +{
> + if (flags & SLAB_STORE_USER)
> + return TRACK_NR * sizeof(struct track);
> +
> + return 0;
> +}
>
> #ifdef SLAB_SUPPORTS_SYSFS
> static int sysfs_slab_add(struct kmem_cache *);
> @@ -751,7 +759,7 @@ static inline void set_orig_size(struct kmem_cache *s,
> return;
>
> p += get_info_end(s);
> - p += sizeof(struct track) * 2;
> + p += user_tracking_size(s->flags);
>
> *(unsigned long *)p = orig_size;
> }
> @@ -767,7 +775,7 @@ static inline unsigned long get_orig_size(struct kmem_cache *s, void *object)
> return s->object_size;
>
> p += get_info_end(s);
> - p += sizeof(struct track) * 2;
> + p += user_tracking_size(s->flags);
>
> return *(unsigned long *)p;
> }
> @@ -885,7 +893,7 @@ static unsigned int obj_exts_offset_in_object(struct kmem_cache *s)
> unsigned int offset = get_info_end(s);
>
> if (kmem_cache_debug_flags(s, SLAB_STORE_USER))
> - offset += sizeof(struct track) * 2;
> + offset += user_tracking_size(s->flags);
>
> if (slub_debug_orig_size(s))
> offset += sizeof(unsigned long);
> @@ -1088,7 +1096,7 @@ static void init_tracking(struct kmem_cache *s, void *object)
> return;
>
> p = get_track(s, object, TRACK_ALLOC);
> - memset(p, 0, 2*sizeof(struct track));
> + memset(p, 0, user_tracking_size(s->flags));
> }
>
> static void print_track(const char *s, struct track *t, unsigned long pr_time)
> @@ -1196,8 +1204,7 @@ static void print_trailer(struct kmem_cache *s, struct slab *slab, u8 *p)
>
> off = get_info_end(s);
>
> - if (s->flags & SLAB_STORE_USER)
> - off += 2 * sizeof(struct track);
> + off += user_tracking_size(s->flags);
>
> if (slub_debug_orig_size(s))
> off += sizeof(unsigned long);
> @@ -1401,7 +1408,7 @@ static int check_pad_bytes(struct kmem_cache *s, struct slab *slab, u8 *p)
>
> if (s->flags & SLAB_STORE_USER) {
> /* We also have user information there */
> - off += 2 * sizeof(struct track);
> + off += user_tracking_size(s->flags);
>
> if (s->flags & SLAB_KMALLOC)
> off += sizeof(unsigned long);
> @@ -7820,7 +7827,7 @@ static int calculate_sizes(struct kmem_cache_args *args, struct kmem_cache *s)
> * Need to store information about allocs and frees after
> * the object.
> */
> - size += 2 * sizeof(struct track);
> + size += user_tracking_size(flags);
>
> /* Save the original kmalloc request size */
> if (flags & SLAB_KMALLOC)
> --
> 2.43.0
>
--
Thanks,
Hao
next prev parent reply other threads:[~2026-06-17 4:26 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-16 14:14 [PATCH 0/4] mm/slub: preserve previous object lifetime Pengpeng Hou
2026-06-16 14:14 ` [PATCH 1/4] mm/slub: factor user tracking metadata size calculation Pengpeng Hou
2026-06-17 4:26 ` Hao Li [this message]
2026-06-16 14:14 ` [PATCH 2/4] mm/slub: preserve previous object lifetime in user tracking Pengpeng Hou
2026-06-17 7:54 ` Hao Li
2026-06-16 14:14 ` [PATCH 3/4] mm/slub: test previous lifetime tracking Pengpeng Hou
2026-06-16 14:14 ` [PATCH 4/4] Documentation/mm: document SLUB " Pengpeng Hou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ajIg4JCDhz_yAnOX@fedora \
--to=hao.li@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=cl@gentwo.org \
--cc=corbet@lwn.net \
--cc=david@kernel.org \
--cc=harry@kernel.org \
--cc=liam@infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@suse.com \
--cc=pengpeng@iscas.ac.cn \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=rppt@kernel.org \
--cc=skhan@linuxfoundation.org \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.