* Re: client side "current->alloc_tag not set WARNING: ./include/linux/alloc_tag.h:161" at accessing CIFS share [not found] <0b004319-9ef7-437c-a4dd-174d6a9a83db@mailbox.org> @ 2026-09-01 23:19 ` Paulo Alcantara 2026-09-16 9:42 ` Hao Ge 0 siblings, 1 reply; 3+ messages in thread From: Paulo Alcantara @ 2026-09-01 23:19 UTC (permalink / raw) To: Erhard Furtner, linux-kernel; +Cc: linux-cifs, David Howells, netfs 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. I'll look for a possible solution and then let you know. Thanks for the report. ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: client side "current->alloc_tag not set WARNING: ./include/linux/alloc_tag.h:161" at accessing CIFS share 2026-09-01 23:19 ` client side "current->alloc_tag not set WARNING: ./include/linux/alloc_tag.h:161" at accessing CIFS share Paulo Alcantara @ 2026-09-16 9:42 ` Hao Ge 2026-09-20 19:08 ` Erhard Furtner 0 siblings, 1 reply; 3+ messages in thread From: Hao Ge @ 2026-09-16 9:42 UTC (permalink / raw) To: Paulo Alcantara, Erhard Furtner Cc: linux-cifs, David Howells, netfs, linux-kernel 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. ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: client side "current->alloc_tag not set WARNING: ./include/linux/alloc_tag.h:161" at accessing CIFS share 2026-09-16 9:42 ` Hao Ge @ 2026-09-20 19:08 ` Erhard Furtner 0 siblings, 0 replies; 3+ messages in thread From: Erhard Furtner @ 2026-09-20 19:08 UTC (permalink / raw) To: Hao Ge, Paulo Alcantara; +Cc: linux-cifs, David Howells, netfs, linux-kernel On 9/16/26 11:42, Hao Ge wrote: > 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) { Thanks for your patch Hao! On my side I can confirm it applies on v7.3-rc3 and fixes "the current->alloc_tag not set WARNING:" Regards, Erhard ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-09-20 19:08 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <0b004319-9ef7-437c-a4dd-174d6a9a83db@mailbox.org>
2026-09-01 23:19 ` client side "current->alloc_tag not set WARNING: ./include/linux/alloc_tag.h:161" at accessing CIFS share Paulo Alcantara
2026-09-16 9:42 ` Hao Ge
2026-09-20 19:08 ` Erhard Furtner
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox