From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 086E734402D for ; Tue, 24 Feb 2026 22:11:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771971098; cv=none; b=YDPeedL98ouU2fycDMjsStqQrq8RyhenXlmLYidb99U1piaDo4mNxe/QdzDP0LKPlKSqauw/rX/OaxrqfqhpgQDcszye521fJAFnH9qqXIonj3tnlG8AeAmWp9IbzjAol85uGthxkSHXAKQXcC3vrYD3vpSx4pr9H2eX+CeE+iw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771971098; c=relaxed/simple; bh=4mM2+2P+pb9NoijT6/Nf8QKn00Rd9ZhMD8PMQIVZpII=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=Tl7SjmC/Eb4gYEfGJZrSjEeKsnDJxH8uRIOfN7no9nIlhLYDvLXpqoq6qxq3CxrOxqPXddXm/aCaOrclOFy/umPv2cVL66zWW9lQv3p8qDYDKUlAvfe+OY9+Qq5oZ1D17A8BjwFXlm+s821520I1zS2r2Jfy7wal2JFKGTyD7i0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--surenb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gk2ySPaK; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--surenb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gk2ySPaK" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2bdc1b30ac8so1968628eec.1 for ; Tue, 24 Feb 2026 14:11:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771971096; x=1772575896; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=qycKKgU6VgldoipiskPTW54PIVBltJjFeFRiKOAJQio=; b=gk2ySPaKsp4CS9hT8Y/pnX4iRW+jMpsIQ5ReP7RxK+enBRjZrEBd/R2XBE6H3+uPhE kM70F7Rnp2uyU31kAscvOFHEtoZaYdnEATPedBPnY7D+9YjZJUSNqWU6UuU6s0/319y8 vZUe2h1tsln4NVLmVAoQrivqiDZ9wl/jF5PSfOV45mxZk0wEV05yHB9MoSNvzEdcu92e 17NqYLbZ/Rr6FOLRnRQw7a/GQg9O4xCxBS0aEkJoYy93rUlW7ioVBniDgIcFNpTpVguN x03fUmeBIfCPbTPx/+19037Xx7x6VHng3Pytdx+JdSLtvT71v+Bqa6N8XkfQYE/neptR Su/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771971096; x=1772575896; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=qycKKgU6VgldoipiskPTW54PIVBltJjFeFRiKOAJQio=; b=OOfLAuuwG8ofsoc3Of1cNnFkfy83Idtfk8QpGYnOtoYCsQVCJWabNcJNiMqTrABBjv Svnq2OoOtcLWF6BLzLU3rXzFgaCHwow9/uIB9XQkwluy4P5DAX+Ny0kQnMfgxja/L4Em bGY5PfBBeC9tWrt1esPedWpIfesTbeCfw9vMolKy+vNxPiE6XV1fCb5nH8PE5PqR66ih M5hscIZkZy0qRvB8Cq70eucjfj1tItSisEuyV9nyX+cjORxarG8njMFwMQLiByzN94WP iTCyQ5uiRHm8LzJ5B18yT/B8wPVovH1CNpjheZyh1wZy+zbi0ce59tqpc+4QOwviZUYE EgXQ== X-Forwarded-Encrypted: i=1; AJvYcCWfQBo3bNsTH5JszDsrgWCSWsCKcFwE/skzqDd4KwhF6Og4LsS8NydWQ6QFfoOVf0abUMGfiKeB4vZXvuk=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+Xbg77wISNkLFk1U4sjxO3mE68pwd5HfcmVVRniYj3Wr+ph+Z 5KIGUCgcaotZwPW4tvXBNtMDWaXX3qG53lrU7wK7+Gle5nTE+O1Y66ndNwfgJmg8KzbqOT3Rus3 lRwqPtQ== X-Received: from dybcy37.prod.google.com ([2002:a05:7300:b725:b0:2b8:6bda:d37d]) (user=surenb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:6085:b0:2b7:f33:34e7 with SMTP id 5a478bee46e88-2bd7bd711c0mr6268330eec.35.1771971095833; Tue, 24 Feb 2026 14:11:35 -0800 (PST) Date: Tue, 24 Feb 2026 14:11:32 -0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.53.0.414.gf7e9f6c205-goog Message-ID: <20260224221132.1702713-1-surenb@google.com> Subject: [PATCH v2 1/1] mm/slab: mark alloc tags empty for sheafs allocated with __GFP_NO_OBJ_EXT From: Suren Baghdasaryan To: akpm@linux-foundation.org Cc: vbabka@suse.cz, harry.yoo@oracle.com, 00107082@163.com, cl@gentwo.org, rientjes@google.com, roman.gushchin@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Suren Baghdasaryan Content-Type: text/plain; charset="UTF-8" alloc_empty_sheaf() allocates sheafs from SLAB_KMALLOC caches using __GFP_NO_OBJ_EXT to avoid recursion, however it does not mark their allocation tags empty before freeing, which results in a warning when CONFIG_MEM_ALLOC_PROFILING_DEBUG is set. Fix this by marking allocation tags for such allocations as empty. Reported-by: David Wang <00107082@163.com> Closes: https://lore.kernel.org/all/20260223155128.3849-1-00107082@163.com/ Analyzed-by: Harry Yoo Signed-off-by: Suren Baghdasaryan --- mm/slab.h | 4 ++-- mm/slub.c | 23 +++++++++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/mm/slab.h b/mm/slab.h index 71c7261bf822..f6ef862b60ef 100644 --- a/mm/slab.h +++ b/mm/slab.h @@ -290,14 +290,14 @@ static inline void *nearest_obj(struct kmem_cache *cache, /* Determine object index from a given position */ static inline unsigned int __obj_to_index(const struct kmem_cache *cache, - void *addr, void *obj) + void *addr, const void *obj) { return reciprocal_divide(kasan_reset_tag(obj) - addr, cache->reciprocal_size); } static inline unsigned int obj_to_index(const struct kmem_cache *cache, - const struct slab *slab, void *obj) + const struct slab *slab, const void *obj) { if (is_kfence_address(obj)) return 0; diff --git a/mm/slub.c b/mm/slub.c index 862642c165ed..5c76e55eee7d 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -2041,18 +2041,18 @@ static inline void dec_slabs_node(struct kmem_cache *s, int node, #ifdef CONFIG_MEM_ALLOC_PROFILING_DEBUG -static inline void mark_objexts_empty(struct slabobj_ext *obj_exts) +static inline void mark_objexts_empty(const void *obj) { - struct slab *obj_exts_slab; + struct slab *obj_slab; unsigned long slab_exts; - obj_exts_slab = virt_to_slab(obj_exts); - slab_exts = slab_obj_exts(obj_exts_slab); + obj_slab = virt_to_slab(obj); + slab_exts = slab_obj_exts(obj_slab); if (slab_exts) { get_slab_obj_exts(slab_exts); - unsigned int offs = obj_to_index(obj_exts_slab->slab_cache, - obj_exts_slab, obj_exts); - struct slabobj_ext *ext = slab_obj_ext(obj_exts_slab, + unsigned int offs = obj_to_index(obj_slab->slab_cache, + obj_slab, obj); + struct slabobj_ext *ext = slab_obj_ext(obj_slab, slab_exts, offs); if (unlikely(is_codetag_empty(&ext->ref))) { @@ -2090,7 +2090,7 @@ static inline void handle_failed_objexts_alloc(unsigned long obj_exts, #else /* CONFIG_MEM_ALLOC_PROFILING_DEBUG */ -static inline void mark_objexts_empty(struct slabobj_ext *obj_exts) {} +static inline void mark_objexts_empty(const void *obj) {} static inline bool mark_failed_objexts_alloc(struct slab *slab) { return false; } static inline void handle_failed_objexts_alloc(unsigned long obj_exts, struct slabobj_ext *vec, unsigned int objects) {} @@ -2312,6 +2312,10 @@ static void alloc_slab_obj_exts_early(struct kmem_cache *s, struct slab *slab) #else /* CONFIG_SLAB_OBJ_EXT */ +static inline void mark_objexts_empty(const void *obj) +{ +} + static inline void init_slab_obj_exts(struct slab *slab) { } @@ -2783,6 +2787,9 @@ static inline struct slab_sheaf *alloc_empty_sheaf(struct kmem_cache *s, static void free_empty_sheaf(struct kmem_cache *s, struct slab_sheaf *sheaf) { + if (s->flags & SLAB_KMALLOC) + mark_objexts_empty(sheaf); + kfree(sheaf); stat(s, SHEAF_FREE); base-commit: 7dff99b354601dd01829e1511711846e04340a69 -- 2.53.0.414.gf7e9f6c205-goog