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
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