<html><head><meta http-equiv="content-type" content="text/html; charset=us-ascii"><style>body { line-height: 1.5; }blockquote { margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em; }body { font-size: 14px; font-family: 'Microsoft YaHei UI'; color: rgb(0, 0, 0); line-height: 1.5; }</style></head><body><div>sorry,</div>
unsigned long available_ram = SAFE_READ_MEMINFO("MemAvailable:"); <div>---><blockquote style="margin-Top: 0px; margin-Bottom: 0px; margin-Left: 0.5em; margin-Right: inherit">unsigned long available_ram = 1024 * SAFE_READ_MEMINFO("MemAvailable:"); <div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm"><div style="PADDING-RIGHT: 8px; PADDING-LEFT: 8px; FONT-SIZE: 12px;FONT-FAMILY:tahoma;COLOR:#000000; BACKGROUND: #efefef; PADDING-BOTTOM: 8px; PADDING-TOP: 8px"><div><b>From:</b> <a href="mailto:liuxp11@chinatelecom.cn">Xinpeng Liu</a></div><div><b>Date:</b> 2021-01-25 21:18</div><div><b>To:</b> <a href="mailto:ltp@lists.linux.it">ltp</a></div><div><b>CC:</b> <a href="mailto:liuxp11@chinatelecom.cn">Xinpeng Liu</a></div><div><b>Subject:</b> [PATCH v2 1/2] syscalls/ioctl: ioctl_sg01.c: ioctl_sg01 invoked oom-killer</div></div></div><div><div>Kernel version is 5.4.81+,the available RAM is less than free,as follow:</div>
<div>[root@liuxp mywork]# head /proc/meminfo</div>
<div>MemTotal:       198101744 kB</div>
<div>MemFree:        189303148 kB</div>
<div>MemAvailable:   188566732 kB</div>
<div> </div>
<div>So use available RAM to avoid OOM killer.</div>
<div>---</div>
<div> lib/tst_memutils.c | 11 ++++++++---</div>
<div> 1 file changed, 8 insertions(+), 3 deletions(-)</div>
<div> </div>
<div>diff --git a/lib/tst_memutils.c b/lib/tst_memutils.c</div>
<div>index dd09db4..8596005 100644</div>
<div>--- a/lib/tst_memutils.c</div>
<div>+++ b/lib/tst_memutils.c</div>
<div>@@ -18,6 +18,7 @@ void tst_pollute_memory(size_t maxsize, int fillchar)</div>
<div>     size_t i, map_count = 0, safety = 0, blocksize = BLOCKSIZE;</div>
<div>     void **map_blocks;</div>
<div>     struct sysinfo info;</div>
<div>+    unsigned long available_ram = SAFE_READ_MEMINFO("MemAvailable:");</div>
<div> </div>
<div>     SAFE_SYSINFO(&info);</div>
<div>     safety = MAX(4096 * SAFE_SYSCONF(_SC_PAGESIZE), 128 * 1024 * 1024);</div>
<div>@@ -26,15 +27,19 @@ void tst_pollute_memory(size_t maxsize, int fillchar)</div>
<div>     if (info.freeswap > safety)</div>
<div>             safety = 0;</div>
<div> </div>
<div>+    /*"MemAvailable" field maybe not exist, or freeram less than available_ram*/</div>
<div>+    if(available_ram == 0 || info.freeram < available_ram)</div>
<div>+            available_ram = info.freeram;</div>
<div>+</div>
<div>     /* Not enough free memory to avoid invoking OOM killer */</div>
<div>-    if (info.freeram <= safety)</div>
<div>+    if (available_ram <= safety)</div>
<div>             return;</div>
<div> </div>
<div>     if (!maxsize)</div>
<div>             maxsize = SIZE_MAX;</div>
<div> </div>
<div>-    if (info.freeram - safety < maxsize / info.mem_unit)</div>
<div>-            maxsize = (info.freeram - safety) * info.mem_unit;</div>
<div>+    if (available_ram - safety < maxsize / info.mem_unit)</div>
<div>+            maxsize = (available_ram - safety) * info.mem_unit;</div>
<div> </div>
<div>     blocksize = MIN(maxsize, blocksize);</div>
<div>     map_count = maxsize / blocksize;</div>
<div>-- </div>
<div>1.8.3.1</div>
<div> </div>
</div></blockquote>
</div></body></html>