<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
This patch is for ready kernel only. For new release the following patch should be used.</div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<span style="font-weight: 600;">[PATCH VZ9] fs/fuse kio: Refactor pcs_mr to avoid large contiguous memory allocation</span></div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Liu Kui &lt;kui.liu@virtuozzo.com&gt;<br>
<b>Sent:</b> 01 August 2025 20:55<br>
<b>To:</b> devel@openvz.org &lt;devel@openvz.org&gt;<br>
<b>Cc:</b> Alexey Kuznetsov &lt;kuznet@virtuozzo.com&gt;; Andrey Zaitsev &lt;azaitsev@virtuozzo.com&gt;; Konstantin Khorenko &lt;khorenko@virtuozzo.com&gt;; Kui Liu &lt;kui.liu@virtuozzo.com&gt;<br>
<b>Subject:</b> [PATCH VZ9] fs/fuse kio: Use kvcalloc to prevent failure in fragmented systems</font>
<div>&nbsp;</div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Address large memory allocation failure by replacing kcalloc with<br>
kvcalloc. This allows fallback to vmalloc for large allocations,<br>
as virtually contiguous meomory is sufficient here, improving<br>
reliability in highly fragmented systems<br>
<br>
Related to: #VSTOR-112413<br>
<a href="https://virtuozzo.atlassian.net/browse/VSTOR-112413">https://virtuozzo.atlassian.net/browse/VSTOR-112413</a><br>
<br>
Signed-off-by: Liu Kui &lt;kui.liu@virtuozzo.com&gt;<br>
---<br>
&nbsp;fs/fuse/kio/pcs/pcs_mr.c | 4 ++--<br>
&nbsp;1 file changed, 2 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/fs/fuse/kio/pcs/pcs_mr.c b/fs/fuse/kio/pcs/pcs_mr.c<br>
index cbd3b440dd1b..28e04d1b2639 100644<br>
--- a/fs/fuse/kio/pcs/pcs_mr.c<br>
+++ b/fs/fuse/kio/pcs/pcs_mr.c<br>
@@ -17,7 +17,7 @@ void pcs_umem_release(struct pcs_umem *umem)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unpin_user_pages(umem-&gt;pages, umem-&gt;npages);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; atomic64_sub(umem-&gt;npages, &amp;mm_s-&gt;pinned_vm);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mmdrop(mm_s);<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kfree(umem-&gt;pages);<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kvfree(umem-&gt;pages);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kfree(umem);<br>
&nbsp;}<br>
&nbsp;<br>
@@ -48,7 +48,7 @@ struct pcs_umem *pcs_umem_get(u64 start, u64 len)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mmap_read_lock(mm_s);<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; umem-&gt;fp_addr = fp_va;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; umem-&gt;pages = kcalloc(npages, sizeof(struct page *), GFP_KERNEL);<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; umem-&gt;pages = kvcalloc(npages, sizeof(struct page *), GFP_KERNEL);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!umem-&gt;pages) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = -ENOMEM;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto out_err;<br>
-- <br>
2.39.5 (Apple Git-154)<br>
<br>
</div>
</span></font></div>
</body>
</html>