Skip to contentSkip to conversation

mm/khugepaged: collapse_shmem() stop if punched or truncated

PATCH New [email protected] 1 participant 1 message Dec 1, 2018

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

PATCH 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")
Cc Kirill A. Shutemov <[email protected]>
Cc Jerome Glisse <[email protected]>
Cc Konstantin Khlebnikov <[email protected]>
Cc <[email protected]> [4.8+]

---

 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_str
 
 		VM_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;

_