All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hao Ge <hao.ge@linux.dev>
To: Paulo Alcantara <pc@manguebit.org>,
	Erhard Furtner <erhard_f@mailbox.org>
Cc: linux-cifs@vger.kernel.org, David Howells <dhowells@redhat.com>,
	netfs@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: client side "current->alloc_tag not set WARNING: ./include/linux/alloc_tag.h:161" at accessing CIFS share
Date: Wed, 16 Sep 2026 17:42:08 +0800	[thread overview]
Message-ID: <cfcba100-609a-4016-9b47-186346709634@linux.dev> (raw)
In-Reply-To: <0e8961201179ba88038de511c587ddc7@manguebit.org>

Hi Paulo


Sorry to jump in.

On 2026/9/2 07:19, Paulo Alcantara wrote:
> Erhard Furtner <erhard_f@mailbox.org> writes:
> 
>> Getting this "current->alloc_tag not set WARNING:" every time on my 
>> client PC when I open files on the CIFS share (exported via KSMBD) from 
>> my host PC:
> 
> The warning is triggered by running the following in
> netfs_alloc_request() with CONFIG_MEM_ALLOC_PROFILING_DEBUG=y kernels:
> 
>         rreq = mempool->alloc(gfp, mempool->pool_data);
> 
> for the non-writeback path.
> 
> @mempool->alloc is set to mempool_alloc_slab(), which calls
> kmem_cache_alloc_noprof() directly and expects the caller to have
> already set current->alloc_tag.
> 
> It doesn't occur in the writeback path, however, because we call
> mempool_alloc() macro that wraps to
> 
>         alloc_hooks(mempool_alloc_noprof(...))
> 
> and it sets current->alloc_tag before the allocation.
>

Right - and there's one more instance of the same pattern.
Erhard's second warning (alloc_tag was not set on free) comes from
netfs_folioq_alloc(), which does the same for the folio_queue:
	
	fq = netfs_folioq_pool.alloc(gfp, netfs_folioq_pool.pool_data);

When I first saw the report I wondered why no other mempool user trips over this,
so I had a look around the tree:

Everyone else gets their elements through the mempool_alloc() macro, so the tag is
set at their callsite and the callbacks see a valid current->alloc_tag.

I went back to the commit that introduced the raw call, 1d78d56c43ef ("netfs: Fix folio_queue ENOMEM in
writeback by adding a mempool") and OK, I think I roughly understand the story now.

Here is my proposed fix patch. I don't have a test environment handy though. What do you think?

diff --git a/fs/netfs/internal.h b/fs/netfs/internal.h
index 420ee7b26580..373be970ec31 100644
--- a/fs/netfs/internal.h
+++ b/fs/netfs/internal.h
@@ -45,6 +45,9 @@ extern mempool_t netfs_request_pool;
 extern mempool_t netfs_subrequest_pool;
 extern mempool_t netfs_folioq_pool;
 
+#define mempool_alloc_element(_pool, _gfp)				\
+	alloc_hooks((_pool)->alloc(_gfp, (_pool)->pool_data))
+
 #ifdef CONFIG_PROC_FS
 static inline void netfs_proc_add_rreq(struct netfs_io_request *rreq)
 {
diff --git a/fs/netfs/objects.c b/fs/netfs/objects.c
index 01461a74642d..18f5c64d404e 100644
--- a/fs/netfs/objects.c
+++ b/fs/netfs/objects.c
@@ -34,7 +34,7 @@ struct netfs_io_request *netfs_alloc_request(struct address_space *mapping,
 
 		rreq = mempool_alloc(mempool, gfp);
 	} else {
-		rreq = mempool->alloc(gfp, mempool->pool_data);
+		rreq = mempool_alloc_element(mempool, gfp);
 		if (!rreq)
 			return ERR_PTR(-ENOMEM);
 	}
@@ -206,7 +206,7 @@ struct netfs_io_subrequest *netfs_alloc_subrequest(struct netfs_io_request *rreq
 	struct kmem_cache *cache = mempool->pool_data;
 
 	if (rreq->gfp == GFP_KERNEL)
-		subreq = mempool->alloc(rreq->gfp, mempool->pool_data);
+		subreq = mempool_alloc_element(mempool, rreq->gfp);
 	else
 		subreq = mempool_alloc(mempool, rreq->gfp);
 	if (!subreq)
diff --git a/fs/netfs/rolling_buffer.c b/fs/netfs/rolling_buffer.c
index 8c0026836f9c..d1ae6e081664 100644
--- a/fs/netfs/rolling_buffer.c
+++ b/fs/netfs/rolling_buffer.c
@@ -29,7 +29,7 @@ struct folio_queue *netfs_folioq_alloc(unsigned int rreq_id, gfp_t gfp,
 	struct folio_queue *fq;
 
 	if (gfp == GFP_KERNEL)
-		fq = netfs_folioq_pool.alloc(gfp, netfs_folioq_pool.pool_data);
+		fq = mempool_alloc_element(&netfs_folioq_pool, gfp);
 	else
 		fq = mempool_alloc(&netfs_folioq_pool, gfp);
 	if (fq) {
-- 
2.25.1

Thanks
Best Regards
Hao

> I'll look for a possible solution and then let you know.
> 
> Thanks for the report.

  reply	other threads:[~2026-09-16  9:41 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-01 14:54 client side "current->alloc_tag not set WARNING: ./include/linux/alloc_tag.h:161" at accessing CIFS share Erhard Furtner
2026-09-01 23:19 ` Paulo Alcantara
2026-09-16  9:42   ` Hao Ge [this message]
2026-09-20 19:08     ` Erhard Furtner

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=cfcba100-609a-4016-9b47-186346709634@linux.dev \
    --to=hao.ge@linux.dev \
    --cc=dhowells@redhat.com \
    --cc=erhard_f@mailbox.org \
    --cc=linux-cifs@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netfs@lists.linux.dev \
    --cc=pc@manguebit.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.