Thread (36 messages) 36 messages, 8 authors, 2025-11-20

Re: [PATCH 2/2] mm/khugepaged: return EAGAIN for transient dirty pages in MADV_COLLAPSE

From: Garg, Shivank <hidden>
Date: 2025-11-19 07:01:08
Also in: linux-mm, lkml


On 11/10/2025 7:16 PM, Dev Jain wrote:
On 10/11/25 5:02 pm, Shivank Garg wrote:
quoted
When MADV_COLLAPSE encounters dirty file-backed pages, it currently
returns -EINVAL, this is misleading as EINVAL suggests invalid arguments,
whereas dirty pages are a transient condition that may resolve on retry.

Introduce SCAN_PAGE_DIRTY and map it to -EAGAIN. For khugepaged, this
is harmless as it will revisit the range after async writeback completes.
Taking a cursory look at enum scan_result, I am sure there are other error
codes as well which redirect to -EINVAL when they actually should to something
else...
quoted
quoted
@@ -1967,7 +1968,7 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr,
                   */
                  xas_unlock_irq(&xas);
                  filemap_flush(mapping);
-                result = SCAN_FAIL;
+                result = SCAN_PAGE_DIRTY;
                  goto xa_unlocked;
              } else if (folio_test_writeback(folio)) {
                  xas_unlock_irq(&xas);
Now that you are at it, it would make sense to redirect this folio_test_writeback()
branch also to -EAGAIN, and call the common error code SCAN_PAGE_UNDER_WRITEBACK.
Good point about the folio_test_writeback() case.
I think we can use a single error code "SCAN_PAGE_NOT_CLEAN" to cover both dirty and writeback states.

Thanks,
Shivank
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help