diff mbox series

[v2] mm: add warning if __vm_enough_memory fails

Message ID 20220726145428.8030-1-wangkefeng.wang@huawei.com (mailing list archive)
State New
Headers show
Series [v2] mm: add warning if __vm_enough_memory fails | expand

Commit Message

Kefeng Wang July 26, 2022, 2:54 p.m. UTC
If a process has no enough memory to allocate a new virtual mapping, we
may meet kinds of error, eg, fork cannot allocate memory, SIGBUS error
in shmem, but it is difficult to confirm them, let's add some debug
information to easy to check this scenario if __vm_enough_memory fails.

Reported-by: Yongqiang Liu <liuyongqiang13@huawei.com>
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
v2: use pr_warn_ratelimited, suggested by David Hildenbrand

 mm/util.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Kefeng Wang Aug. 9, 2022, 8:32 a.m. UTC | #1
Hi maintainer, any comments, thanks

On 2022/7/26 22:54, Kefeng Wang wrote:
> If a process has no enough memory to allocate a new virtual mapping, we
> may meet kinds of error, eg, fork cannot allocate memory, SIGBUS error
> in shmem, but it is difficult to confirm them, let's add some debug
> information to easy to check this scenario if __vm_enough_memory fails.
>
> Reported-by: Yongqiang Liu <liuyongqiang13@huawei.com>
> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
> ---
> v2: use pr_warn_ratelimited, suggested by David Hildenbrand
>
>   mm/util.c | 2 ++
>   1 file changed, 2 insertions(+)
>
> diff --git a/mm/util.c b/mm/util.c
> index 1266a33a49ea..c786e21c6051 100644
> --- a/mm/util.c
> +++ b/mm/util.c
> @@ -1020,6 +1020,8 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
>   	if (percpu_counter_read_positive(&vm_committed_as) < allowed)
>   		return 0;
>   error:
> +	pr_warn_ratelimited("%s: pid: %d, comm: %s, no enough memory for the allocation\n",
> +			    __func__, current->pid, current->comm);
>   	vm_unacct_memory(pages);
>   
>   	return -ENOMEM;
Andrew Morton Aug. 10, 2022, 2:02 a.m. UTC | #2
On Tue, 9 Aug 2022 16:32:46 +0800 Kefeng Wang <wangkefeng.wang@huawei.com> wrote:

> Hi maintainer, any comments, thanks

Looks great to me - I have it saved away.

I prefer not to add new material during the merge window prior to MM
being fully merged up.  In fact, I think this might be against
Stephen's rules-for-linux-next.  Even during the merge window,
linux-next remains the testing ground for Linus's "next" release,
so adding next+1 material will weaken that testing.
Kefeng Wang Aug. 10, 2022, 6:19 a.m. UTC | #3
On 2022/8/10 10:02, Andrew Morton wrote:
> On Tue, 9 Aug 2022 16:32:46 +0800 Kefeng Wang <wangkefeng.wang@huawei.com> wrote:
>
>> Hi maintainer, any comments, thanks
> Looks great to me - I have it saved away.
>
> I prefer not to add new material during the merge window prior to MM
> being fully merged up.  In fact, I think this might be against
> Stephen's rules-for-linux-next.  Even during the merge window,
> linux-next remains the testing ground for Linus's "next" release,
> so adding next+1 material will weaken that testing.
Got it, thanks~
> .
David Hildenbrand Aug. 10, 2022, 8:32 a.m. UTC | #4
On 26.07.22 16:54, Kefeng Wang wrote:
> If a process has no enough memory to allocate a new virtual mapping, we
> may meet kinds of error, eg, fork cannot allocate memory, SIGBUS error
> in shmem, but it is difficult to confirm them, let's add some debug
> information to easy to check this scenario if __vm_enough_memory fails.
> 
> Reported-by: Yongqiang Liu <liuyongqiang13@huawei.com>
> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
> ---
> v2: use pr_warn_ratelimited, suggested by David Hildenbrand
> 
>  mm/util.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/mm/util.c b/mm/util.c
> index 1266a33a49ea..c786e21c6051 100644
> --- a/mm/util.c
> +++ b/mm/util.c
> @@ -1020,6 +1020,8 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
>  	if (percpu_counter_read_positive(&vm_committed_as) < allowed)
>  		return 0;
>  error:
> +	pr_warn_ratelimited("%s: pid: %d, comm: %s, no enough memory for the allocation\n",
> +			    __func__, current->pid, current->comm);
>  	vm_unacct_memory(pages);
>  
>  	return -ENOMEM;

Acked-by: David Hildenbrand <david@redhat.com>
diff mbox series

Patch

diff --git a/mm/util.c b/mm/util.c
index 1266a33a49ea..c786e21c6051 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -1020,6 +1020,8 @@  int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
 	if (percpu_counter_read_positive(&vm_committed_as) < allowed)
 		return 0;
 error:
+	pr_warn_ratelimited("%s: pid: %d, comm: %s, no enough memory for the allocation\n",
+			    __func__, current->pid, current->comm);
 	vm_unacct_memory(pages);
 
 	return -ENOMEM;