* [PATCH 0/2] Fix bugs in HugeTLB allocation when mem_cgroup_charge_hugetlb() fails
@ 2026-09-02 8:22 Ackerley Tng via B4 Relay
2026-09-02 8:22 ` [PATCH 1/2] mm: hugetlb: Return -ENOSPC on memcg charge failure Ackerley Tng via B4 Relay
2026-09-02 8:22 ` [PATCH 2/2] mm: hugetlb: Drop refcount before freeing " Ackerley Tng via B4 Relay
0 siblings, 2 replies; 6+ messages in thread
From: Ackerley Tng via B4 Relay @ 2026-09-02 8:22 UTC (permalink / raw)
To: Alex Shi, Andrew Morton, David Hildenbrand, Dongliang Mu,
Hongxiang Lou, Johannes Weiner, Jonathan Corbet, Joshua Hahn,
Liam R. Howlett, Lorenzo Stoakes, Miaohe Lin, Michal Hocko,
Mike Rapoport, Muchun Song, Nhat Pham, Oscar Salvador, Peter Xu,
Roman Gushchin, Shakeel Butt, Shuah Khan, jthoughton, fvdl,
rientjes, vannapurve, Suren Baghdasaryan, Vlastimil Babka,
Wupeng Ma, Yanteng Si
Cc: linux-kernel, linux-mm, Ackerley Tng, stable
In hugetlb_alloc_folio(), when mem_cgroup_charge_hugetlb() fails, there are
2 issues:
1. free_huge_folio() expects a non-refcounted folio and will
VM_BUG_ON_FOLIO().
2. -ENOMEM is returned, causing an infinite loop retrying the fault.
This patch series is a subset of patches in [1].
Note: [1] was applied on an earlier version of HugeTLB allocation. In that
earlier version, VMA reservations were not undone on
mem_cgroup_charge_hugetlb() failure.
5737df3826dee: ("mm: hugetlb: refactor out hugetlb_alloc_folio()") fixed
that, since returning an error from hugetlb_alloc_folio() causes
alloc_hugetlb_folio() to execute vma_end_reservation().
In [2], an earlier revision of [1], "mm: hugetlb: Drop refcount before
freeing on memcg charge failure" was named "mm: hugetlb: Fix folio refcount
mismatch on memcg charge failure".
[1] https://lore.kernel.org/all/20260722-hugetlb-alloc-failure-fixes-v4-0-88e8b81970dc@google.com/
[2] https://lore.kernel.org/all/20260708-hugetlb-alloc-failure-fixes-v2-0-c7f27cbb462b@google.com/
Here's a reproducer to trigger mem_cgroup_charge_hugetlb() failure:
static void write_file_val(const char *path, const char *val)
{
int fd = open(path, O_WRONLY);
if (fd < 0) {
fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno));
exit(1);
}
if (write(fd, val, strlen(val)) < 0) {
fprintf(stderr, "Failed to write %s to %s: %s\n", val, path, strerror(errno));
close(fd);
exit(1);
}
close(fd);
}
static int is_hugetlb_accounting_enabled(void)
{
char spec[256], file[256], type[256], opts[512];
char line[1024];
int enabled = 0;
FILE *fp;
fp = fopen("/proc/mounts", "r");
if (!fp) {
perror("fopen /proc/mounts");
return -1;
}
while (fgets(line, sizeof(line), fp)) {
if (sscanf(line, "%255s %255s %255s %511s", spec, file, type, opts) == 4) {
if (strcmp(file, CGROUP_PATH) == 0 && strcmp(type, "cgroup2") == 0) {
if (strstr(opts, "memory_hugetlb_accounting") != NULL)
enabled = 1;
break;
}
}
}
fclose(fp);
return enabled;
}
static int enable_hugetlb_accounting(void)
{
int ret;
printf("Attempting to remount cgroup2 with memory_hugetlb_accounting...\n");
ret = system("mount -o remount,memory_hugetlb_accounting " CGROUP_PATH);
if (ret != 0) {
fprintf(stderr, "Failed to remount: system() returned %d\n", ret);
return -1;
}
return 0;
}
int main(int argc, char **argv)
{
struct stat st;
size_t size;
void *addr;
pid_t pid;
int enabled;
int status;
int fd;
if (stat(CGROUP_PATH, &st) != 0 || !S_ISDIR(st.st_mode)) {
fprintf(stderr, "cgroup v2 not mounted at %s\n", CGROUP_PATH);
return 1;
}
enabled = is_hugetlb_accounting_enabled();
if (enabled < 0)
return 1;
if (!enabled) {
if (enable_hugetlb_accounting() != 0) {
fprintf(stderr, "Could not enable memory_hugetlb_accounting\n");
return 1;
}
/* Re-check */
enabled = is_hugetlb_accounting_enabled();
if (enabled <= 0) {
fprintf(stderr, "Failed to enable memory_hugetlb_accounting (re-check failed)\n");
return 1;
}
printf("Successfully enabled memory_hugetlb_accounting\n");
} else {
printf("memory_hugetlb_accounting is already enabled\n");
}
/* Enable memory controller in subtree */
fd = open(CGROUP_PATH "/cgroup.subtree_control", O_WRONLY);
if (fd >= 0) {
(void)write(fd, "+memory", 7);
close(fd);
}
if (mkdir(TEST_CGROUP_PATH, 0755) != 0) {
if (errno != EEXIST) {
perror("mkdir test_reproducer");
return 1;
}
}
/* Set memory limit to 1MB (less than 2MB hugepage) */
write_file_val(TEST_CGROUP_PATH "/memory.max", "1M");
pid = fork();
if (pid < 0) {
perror("fork");
return 1;
}
if (pid == 0) {
/* Child: Move to cgroup */
write_file_val(TEST_CGROUP_PATH "/cgroup.procs", "0");
printf("Child: Attempting to allocate and touch 2MB hugepage...\n");
/* Allocate 2MB hugepage */
size = 2 * 1024 * 1024;
addr = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
if (addr == MAP_FAILED) {
perror("Child: mmap MAP_HUGETLB");
exit(1);
}
printf("Child: mmap succeeded at %p, touching it now...\n", addr);
*(char *)addr = 1;
printf("Child: Successfully touched page (bug not triggered?).\n");
munmap(addr, size);
exit(0);
}
/* Parent */
waitpid(pid, &status, 0);
printf("Parent: Child exited. Cleaning up.\n");
rmdir(TEST_CGROUP_PATH);
if (WIFSIGNALED(status)) {
printf("Parent: Child killed by signal %d (%s)\n",
WTERMSIG(status), strsignal(WTERMSIG(status)));
if (WTERMSIG(status) == SIGBUS)
printf("Parent: Child got SIGBUS as expected.\n");
} else if (WIFEXITED(status)) {
printf("Parent: Child exited with status %d\n", WEXITSTATUS(status));
}
return 0;
}
Signed-off-by: Ackerley Tng <ackerleytng@google.com>
---
Ackerley Tng (2):
mm: hugetlb: Return -ENOSPC on memcg charge failure
mm: hugetlb: Drop refcount before freeing on memcg charge failure
mm/hugetlb.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
---
base-commit: cee9395acd8043be0644b25c34bfa86623f2b935
change-id: 20260901-hugetlb-alloc-folio-memcg-charge-error-handling-5862e632e5f5
Best regards,
--
Ackerley Tng <ackerleytng@google.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] mm: hugetlb: Return -ENOSPC on memcg charge failure
2026-09-02 8:22 [PATCH 0/2] Fix bugs in HugeTLB allocation when mem_cgroup_charge_hugetlb() fails Ackerley Tng via B4 Relay
@ 2026-09-02 8:22 ` Ackerley Tng via B4 Relay
2026-09-02 8:52 ` Muchun Song
2026-09-04 17:14 ` Joshua Hahn
2026-09-02 8:22 ` [PATCH 2/2] mm: hugetlb: Drop refcount before freeing " Ackerley Tng via B4 Relay
1 sibling, 2 replies; 6+ messages in thread
From: Ackerley Tng via B4 Relay @ 2026-09-02 8:22 UTC (permalink / raw)
To: Alex Shi, Andrew Morton, David Hildenbrand, Dongliang Mu,
Hongxiang Lou, Johannes Weiner, Jonathan Corbet, Joshua Hahn,
Liam R. Howlett, Lorenzo Stoakes, Miaohe Lin, Michal Hocko,
Mike Rapoport, Muchun Song, Nhat Pham, Oscar Salvador, Peter Xu,
Roman Gushchin, Shakeel Butt, Shuah Khan, jthoughton, fvdl,
rientjes, vannapurve, Suren Baghdasaryan, Vlastimil Babka,
Wupeng Ma, Yanteng Si
Cc: linux-kernel, linux-mm, Ackerley Tng, stable
From: Ackerley Tng <ackerleytng@google.com>
When mem_cgroup_charge_hugetlb() fails with -ENOMEM, alloc_hugetlb_folio()
currently propagates this error. This results in the page fault handler
returning VM_FAULT_OOM.
Because HugeTLB allocations are high-order and use __GFP_RETRY_MAYFAIL,
they bypass the OOM killer. Returning VM_FAULT_OOM to the #PF handler
without triggering the OOM killer (or having it make progress) leads to
an infinite loop of retrying the fault.
Avoid this loop by returning -ENOSPC when charging fails, which maps to
VM_FAULT_SIGBUS, terminating the process cleanly.
Make mem_cgroup_charge_hugetlb() fault handling use a common error handling
path, the same handling used for hugetlb_cgroup_uncharge_cgroup{,_rsvd}(),
which also don't trigger the OOM killer and hence opt to terminate the
process with a SIGBUS.
Fixes: 991135774c0e0 ("memcg/hugetlb: introduce mem_cgroup_charge_hugetlb")
Cc: stable@vger.kernel.org
Signed-off-by: Ackerley Tng <ackerleytng@google.com>
---
mm/hugetlb.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 7857728457952..01b57f6d3b804 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -2823,7 +2823,6 @@ void wait_for_freed_hugetlb_folios(void)
*
* Return: A pointer to the allocated folio, or an ERR_PTR on failure.
* -ENOSPC if cgroup charging fails or no folio is available.
- * -ENOMEM if mem cgroup charging fails.
*/
struct folio *hugetlb_alloc_folio(struct hstate *h,
struct mempolicy_interpreted *mpoli, u8 alloc_flags)
@@ -2896,7 +2895,18 @@ struct folio *hugetlb_alloc_folio(struct hstate *h,
* were committed to the folio and freeing the folio
* would have cleared those up.
*/
- return ERR_PTR(ret);
+ /*
+ * Return -ENOSPC when this function fails to allocate
+ * or charge a huge page. If a standard (PAGE_SIZE)
+ * page allocation fails, the OOM killer is given a
+ * chance to run, which may resolve the failure on
+ * retry. However, for HugeTLB allocations, the OOM
+ * killer is not triggered. Returning -ENOMEM (or
+ * anything resulting in VM_FAULT_OOM) would leak to
+ * the #PF handler, causing it to loop indefinitely
+ * retrying the fault.
+ */
+ return ERR_PTR(-ENOSPC);
}
return folio;
--
2.55.0.970.g62bdec98f9-goog
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2] mm: hugetlb: Drop refcount before freeing on memcg charge failure
2026-09-02 8:22 [PATCH 0/2] Fix bugs in HugeTLB allocation when mem_cgroup_charge_hugetlb() fails Ackerley Tng via B4 Relay
2026-09-02 8:22 ` [PATCH 1/2] mm: hugetlb: Return -ENOSPC on memcg charge failure Ackerley Tng via B4 Relay
@ 2026-09-02 8:22 ` Ackerley Tng via B4 Relay
2026-09-04 17:23 ` Joshua Hahn
1 sibling, 1 reply; 6+ messages in thread
From: Ackerley Tng via B4 Relay @ 2026-09-02 8:22 UTC (permalink / raw)
To: Alex Shi, Andrew Morton, David Hildenbrand, Dongliang Mu,
Hongxiang Lou, Johannes Weiner, Jonathan Corbet, Joshua Hahn,
Liam R. Howlett, Lorenzo Stoakes, Miaohe Lin, Michal Hocko,
Mike Rapoport, Muchun Song, Nhat Pham, Oscar Salvador, Peter Xu,
Roman Gushchin, Shakeel Butt, Shuah Khan, jthoughton, fvdl,
rientjes, vannapurve, Suren Baghdasaryan, Vlastimil Babka,
Wupeng Ma, Yanteng Si
Cc: linux-kernel, linux-mm, Ackerley Tng, stable
From: Ackerley Tng <ackerleytng@google.com>
When mem_cgroup_charge_hugetlb(folio, gfp) returns -ENOMEM, the folio has
its refcount set to 1 via folio_ref_unfreeze(folio, 1).
The error path calls free_huge_folio(folio) directly, which expects a
refcount of 0. Hence, VM_BUG_ON_FOLIO(folio_ref_count(folio), folio) is
triggered.
Even with CONFIG_DEBUG_VM disabled, returning a folio with refcount 1 to
the freelist can corrupt allocator state later.
Use folio_put(folio) instead of free_huge_folio(folio) to properly drop the
reference before freeing it.
Fixes: 991135774c0e0 ("memcg/hugetlb: introduce mem_cgroup_charge_hugetlb")
Cc: stable@vger.kernel.org
Signed-off-by: Ackerley Tng <ackerleytng@google.com>
Reviewed-by: Muchun Song <muchun.song@linux.dev>
---
mm/hugetlb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 01b57f6d3b804..97c06f227ef8a 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -2889,7 +2889,7 @@ struct folio *hugetlb_alloc_folio(struct hstate *h,
lruvec_stat_mod_folio(folio, NR_HUGETLB, nr_pages);
if (ret == -ENOMEM) {
- free_huge_folio(folio);
+ folio_put(folio);
/*
* Skip uncharging hugetlb_cgroup since the charges
* were committed to the folio and freeing the folio
--
2.55.0.970.g62bdec98f9-goog
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] mm: hugetlb: Return -ENOSPC on memcg charge failure
2026-09-02 8:22 ` [PATCH 1/2] mm: hugetlb: Return -ENOSPC on memcg charge failure Ackerley Tng via B4 Relay
@ 2026-09-02 8:52 ` Muchun Song
2026-09-04 17:14 ` Joshua Hahn
1 sibling, 0 replies; 6+ messages in thread
From: Muchun Song @ 2026-09-02 8:52 UTC (permalink / raw)
To: ackerleytng
Cc: Alex Shi, Andrew Morton, David Hildenbrand, Dongliang Mu,
Hongxiang Lou, Johannes Weiner, Jonathan Corbet, Joshua Hahn,
Liam R. Howlett, Lorenzo Stoakes, Miaohe Lin, Michal Hocko,
Mike Rapoport, Nhat Pham, Oscar Salvador, Peter Xu,
Roman Gushchin, Shakeel Butt, Shuah Khan, jthoughton, fvdl,
rientjes, vannapurve, Suren Baghdasaryan, Vlastimil Babka,
Wupeng Ma, Yanteng Si, linux-kernel, linux-mm, stable
> On Sep 2, 2026, at 16:22, Ackerley Tng via B4 Relay <devnull+ackerleytng.google.com@kernel.org> wrote:
>
> From: Ackerley Tng <ackerleytng@google.com>
>
> When mem_cgroup_charge_hugetlb() fails with -ENOMEM, alloc_hugetlb_folio()
> currently propagates this error. This results in the page fault handler
> returning VM_FAULT_OOM.
>
> Because HugeTLB allocations are high-order and use __GFP_RETRY_MAYFAIL,
> they bypass the OOM killer. Returning VM_FAULT_OOM to the #PF handler
> without triggering the OOM killer (or having it make progress) leads to
> an infinite loop of retrying the fault.
>
> Avoid this loop by returning -ENOSPC when charging fails, which maps to
> VM_FAULT_SIGBUS, terminating the process cleanly.
>
> Make mem_cgroup_charge_hugetlb() fault handling use a common error handling
> path, the same handling used for hugetlb_cgroup_uncharge_cgroup{,_rsvd}(),
> which also don't trigger the OOM killer and hence opt to terminate the
> process with a SIGBUS.
>
> Fixes: 991135774c0e0 ("memcg/hugetlb: introduce mem_cgroup_charge_hugetlb")
> Cc: stable@vger.kernel.org
> Signed-off-by: Ackerley Tng <ackerleytng@google.com>
It looks like someone fixed a similar issue before, but I don't remember the
details. Anyway:
Reviewed-by: Muchun Song <muchun.song@linux.dev>
Thanks.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] mm: hugetlb: Return -ENOSPC on memcg charge failure
2026-09-02 8:22 ` [PATCH 1/2] mm: hugetlb: Return -ENOSPC on memcg charge failure Ackerley Tng via B4 Relay
2026-09-02 8:52 ` Muchun Song
@ 2026-09-04 17:14 ` Joshua Hahn
1 sibling, 0 replies; 6+ messages in thread
From: Joshua Hahn @ 2026-09-04 17:14 UTC (permalink / raw)
To: Ackerley Tng via B4 Relay
Cc: Alex Shi, Andrew Morton, David Hildenbrand, Dongliang Mu,
Hongxiang Lou, Johannes Weiner, Jonathan Corbet, Liam R. Howlett,
Lorenzo Stoakes, Miaohe Lin, Michal Hocko, Mike Rapoport,
Muchun Song, Nhat Pham, Oscar Salvador, Peter Xu, Roman Gushchin,
Shakeel Butt, Shuah Khan, jthoughton, fvdl, rientjes, vannapurve,
Suren Baghdasaryan, Vlastimil Babka, Wupeng Ma, Yanteng Si,
linux-kernel, linux-mm, Ackerley Tng, stable
On Wed, 02 Sep 2026 01:22:56 -0700 Ackerley Tng via B4 Relay <devnull+ackerleytng.google.com@kernel.org> wrote:
> From: Ackerley Tng <ackerleytng@google.com>
>
> When mem_cgroup_charge_hugetlb() fails with -ENOMEM, alloc_hugetlb_folio()
> currently propagates this error. This results in the page fault handler
> returning VM_FAULT_OOM.
>
> Because HugeTLB allocations are high-order and use __GFP_RETRY_MAYFAIL,
> they bypass the OOM killer. Returning VM_FAULT_OOM to the #PF handler
> without triggering the OOM killer (or having it make progress) leads to
> an infinite loop of retrying the fault.
>
> Avoid this loop by returning -ENOSPC when charging fails, which maps to
> VM_FAULT_SIGBUS, terminating the process cleanly.
>
> Make mem_cgroup_charge_hugetlb() fault handling use a common error handling
> path, the same handling used for hugetlb_cgroup_uncharge_cgroup{,_rsvd}(),
> which also don't trigger the OOM killer and hence opt to terminate the
> process with a SIGBUS.
Hi Ackerley,
I hope you are doing well! IIRC, this is the same fix as the one in
[1] (in spirit) right?
I prefer this change since it is more obvious that we return
-ENOSPC right there and then. Since this is a fix please feel free to
add:
Reviewed-by: Joshua Hahn <joshua.hahnjy@gmail.com>
> Fixes: 991135774c0e0 ("memcg/hugetlb: introduce mem_cgroup_charge_hugetlb")
> Cc: stable@vger.kernel.org
> Signed-off-by: Ackerley Tng <ackerleytng@google.com>
> ---
> mm/hugetlb.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 7857728457952..01b57f6d3b804 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -2823,7 +2823,6 @@ void wait_for_freed_hugetlb_folios(void)
> *
> * Return: A pointer to the allocated folio, or an ERR_PTR on failure.
> * -ENOSPC if cgroup charging fails or no folio is available.
> - * -ENOMEM if mem cgroup charging fails.
> */
> struct folio *hugetlb_alloc_folio(struct hstate *h,
> struct mempolicy_interpreted *mpoli, u8 alloc_flags)
> @@ -2896,7 +2895,18 @@ struct folio *hugetlb_alloc_folio(struct hstate *h,
> * were committed to the folio and freeing the folio
> * would have cleared those up.
> */
> - return ERR_PTR(ret);
> + /*
> + * Return -ENOSPC when this function fails to allocate
> + * or charge a huge page. If a standard (PAGE_SIZE)
> + * page allocation fails, the OOM killer is given a
> + * chance to run, which may resolve the failure on
> + * retry. However, for HugeTLB allocations, the OOM
> + * killer is not triggered. Returning -ENOMEM (or
> + * anything resulting in VM_FAULT_OOM) would leak to
> + * the #PF handler, causing it to loop indefinitely
> + * retrying the fault.
> + */
NIT: I do feel like this comment block is a bit verbose, though. We just
want to explain why we return -ENOSPC rather than -ENOMEM, maybe we can
just explain that OOM killer not triggered --> retrying is futile?
The change itself looks good though : -) and I don't want to block the
fix. We can change the comment later.
> + return ERR_PTR(-ENOSPC);
> }
>
> return folio;
>
> --
> 2.55.0.970.g62bdec98f9-goog
[1] https://lore.kernel.org/linux-mm/20260720-hugetlb-alloc-failure-fixes-v3-2-7d2a169aa9ee@google.com/
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] mm: hugetlb: Drop refcount before freeing on memcg charge failure
2026-09-02 8:22 ` [PATCH 2/2] mm: hugetlb: Drop refcount before freeing " Ackerley Tng via B4 Relay
@ 2026-09-04 17:23 ` Joshua Hahn
0 siblings, 0 replies; 6+ messages in thread
From: Joshua Hahn @ 2026-09-04 17:23 UTC (permalink / raw)
To: Ackerley Tng via B4 Relay
Cc: Alex Shi, Andrew Morton, David Hildenbrand, Dongliang Mu,
Hongxiang Lou, Johannes Weiner, Jonathan Corbet, Liam R. Howlett,
Lorenzo Stoakes, Miaohe Lin, Michal Hocko, Mike Rapoport,
Muchun Song, Nhat Pham, Oscar Salvador, Peter Xu, Roman Gushchin,
Shakeel Butt, Shuah Khan, jthoughton, fvdl, rientjes, vannapurve,
Suren Baghdasaryan, Vlastimil Babka, Wupeng Ma, Yanteng Si,
linux-kernel, linux-mm, Ackerley Tng, stable
On Wed, 02 Sep 2026 01:22:57 -0700 Ackerley Tng via B4 Relay <devnull+ackerleytng.google.com@kernel.org> wrote:
> From: Ackerley Tng <ackerleytng@google.com>
>
> When mem_cgroup_charge_hugetlb(folio, gfp) returns -ENOMEM, the folio has
> its refcount set to 1 via folio_ref_unfreeze(folio, 1).
>
> The error path calls free_huge_folio(folio) directly, which expects a
> refcount of 0. Hence, VM_BUG_ON_FOLIO(folio_ref_count(folio), folio) is
> triggered.
>
> Even with CONFIG_DEBUG_VM disabled, returning a folio with refcount 1 to
> the freelist can corrupt allocator state later.
>
> Use folio_put(folio) instead of free_huge_folio(folio) to properly drop the
> reference before freeing it.
LGTM, thank you Ackerley!
Reviewed-by: Joshua Hahn <joshua.hahnjy@gmail.com>
> Fixes: 991135774c0e0 ("memcg/hugetlb: introduce mem_cgroup_charge_hugetlb")
> Cc: stable@vger.kernel.org
> Signed-off-by: Ackerley Tng <ackerleytng@google.com>
> Reviewed-by: Muchun Song <muchun.song@linux.dev>
> ---
> mm/hugetlb.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 01b57f6d3b804..97c06f227ef8a 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -2889,7 +2889,7 @@ struct folio *hugetlb_alloc_folio(struct hstate *h,
> lruvec_stat_mod_folio(folio, NR_HUGETLB, nr_pages);
>
> if (ret == -ENOMEM) {
> - free_huge_folio(folio);
> + folio_put(folio);
> /*
> * Skip uncharging hugetlb_cgroup since the charges
> * were committed to the folio and freeing the folio
>
> --
> 2.55.0.970.g62bdec98f9-goog
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-09-04 17:23 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-02 8:22 [PATCH 0/2] Fix bugs in HugeTLB allocation when mem_cgroup_charge_hugetlb() fails Ackerley Tng via B4 Relay
2026-09-02 8:22 ` [PATCH 1/2] mm: hugetlb: Return -ENOSPC on memcg charge failure Ackerley Tng via B4 Relay
2026-09-02 8:52 ` Muchun Song
2026-09-04 17:14 ` Joshua Hahn
2026-09-02 8:22 ` [PATCH 2/2] mm: hugetlb: Drop refcount before freeing " Ackerley Tng via B4 Relay
2026-09-04 17:23 ` Joshua Hahn
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®