The documentation for ignore_rlimit_data says that it will print a warning
at first misuse. Yet it doesn't seem to do that. Fix the code to print
the warning even when we allow the process to continue.

Signed-off-by: David Woodhouse <d...@amazon.co.uk>
---
We should probably also do what Linus suggested in 
https://lkml.org/lkml/2016/9/16/585

 mm/mmap.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/mm/mmap.c b/mm/mmap.c
index 9efdc021..dd76ea3 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -3184,13 +3184,15 @@ bool may_expand_vm(struct mm_struct *mm, vm_flags_t 
flags, unsigned long npages)
                if (rlimit(RLIMIT_DATA) == 0 &&
                    mm->data_vm + npages <= rlimit_max(RLIMIT_DATA) >> 
PAGE_SHIFT)
                        return true;
-               if (!ignore_rlimit_data) {
-                       pr_warn_once("%s (%d): VmData %lu exceed data ulimit 
%lu. Update limits or use boot option ignore_rlimit_data.\n",
-                                    current->comm, current->pid,
-                                    (mm->data_vm + npages) << PAGE_SHIFT,
-                                    rlimit(RLIMIT_DATA));
+
+               pr_warn_once("%s (%d): VmData %lu exceed data ulimit %lu. 
Update limits%s.\n",
+                            current->comm, current->pid,
+                            (mm->data_vm + npages) << PAGE_SHIFT,
+                            rlimit(RLIMIT_DATA),
+                            ignore_rlimit_data ? "" : " or use boot option 
ignore_rlimit_data");
+
+               if (!ignore_rlimit_data)
                        return false;
-               }
        }
 
        return true;
-- 
2.7.4

Reply via email to