mm/khugepaged: collapse_shmem() stop if punched or truncated
Subsystems (3)
[email protected]
maintainerPATCH 24/31 mm/khugepaged: collapse_shmem() stop if punched or truncated
From: Hugh Dickins <[email protected]>
Subject: mm/khugepaged: collapse_shmem() stop if punched or truncated
Huge tmpfs testing showed that although collapse_shmem() recognizes a concurrently truncated or hole-punched page correctly, its handling of holes was liable to refill an emptied extent. Add check to stop that.
Fixes f3f0e1d2150b2 ("khugepaged: add support of collapse for tmpfs/shmem pages")
Signed-off-by Hugh Dickins <[email protected]>
Reviewed-by Matthew Wilcox <[email protected]>
Cc Kirill A. Shutemov <[email protected]>
Cc Jerome Glisse <[email protected]>
Cc Konstantin Khlebnikov <[email protected]>
Cc <[email protected]> [4.8+]
Signed-off-by Andrew Morton <[email protected]>
---
mm/khugepaged.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
mm/khugepaged.c renamed from mm/khugepaged.c~mm-khugepaged-collapse_shmem-stop-if-punched-or-truncated +11 -0
@@ -1359,6 +1359,17 @@ static void collapse_shmem(struct mm_strVM_BUG_ON (index != xas.xa_index);if (!page) { +/* +* Stop if extent has been truncated or hole-punched, +* and is now completely empty. +*/ +if (index == start) { +if (!xas_next_entry (&xas, end -1 )) { + result =SCAN_TRUNCATED ; +break ; + } +xas_set (&xas, index); + }if (!shmem_charge (mapping->host,1 )) { result =SCAN_FAIL ;break ;
_