From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2FF9831F985 for ; Tue, 18 Aug 2026 10:08:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787047713; cv=none; b=J22iRFE3rr49tyISNIAo9V125HeNQ3ZuZUckfh9OzN/YRz13PkbdZE9Djq8muaq9uk/XzLjbrPsx/3mICBTfDVpPrnzK4YEVJiWlAsUAVz1Wlk/V1c3niuPTBPAlctj8/hcs77xuqKTL+IG1ZV/msdS2drKIUdLOk09b8QsQYZQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787047713; c=relaxed/simple; bh=EpRekKeJErc7riNVvzlHY4uk5Q+1vBOCn/GZz1HUxJs=; h=From:Subject:Date:Message-Id:MIME-Version:Content-Type:To:Cc; b=BOfmTued9SglvAIiJv4I378XDYBispBri2Z8pLUq+ckQhLC1sz/GKNQJoBPsr7jw4AMnKwQTJYgbn2p6gjs9LdguQJR4KgK0AykS80istKAUPw4WbUz2lFDhHypoCRMp/KD9MJr5TeTfaaDBfDwh1TibHkqtQ3keWexsDBg37SU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=YBOGYUwO; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="YBOGYUwO" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:Content-Transfer-Encoding: Content-Type:MIME-Version:Message-Id:Date:Subject:From:Reply-To:Content-ID: Content-Description:In-Reply-To:References; bh=R6QECPvjuHnzWoy68tQycu/tvoKdkiIsFj22ZtQoL9w=; b=YBOGYUwOyBZAQnT9YSZhWh+OKb +VvM6EvZqlyaya736wv/HKh4jxVIhWWlEDWpL0Ys4V601J7GkV5LLW/wKPyxWFS4vSqOZyy5riYB/ TFgnuCcpS8Zp29uz+Lt2AVAZxpD+hWSeI+h5jiqDukP4NpPUBdriA4bJQwisKyXdu7WBQV7cJSRUC Twc/b43n6xwM469iKSPBxogbgfNZj4JVszAjFPGPaGWU9GxhJuDw5hMy7RjBNlJf8m+Oi6x8tzMfr 7INf3As29XenBUwxwSzBQh3HEljmm34qTfXvE17fRkJ8Ljdw3mGX5A1AcjflYPi1NbfOrinla2ChW /0aADtVw==; Received: from authenticated-user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) (envelope-from ) id 1wwGju-008wGE-0G; Tue, 18 Aug 2026 10:08:15 +0000 From: Breno Leitao Subject: [PATCH v3 0/2] mm, swap: don't spin on a bad swap entry Date: Tue, 18 Aug 2026 03:06:22 -0700 Message-Id: <20260818-swap-v3-0-d3fa52598a59@debian.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-B4-Tracking: v=1; b=H4sIAJ4uhGoC/13MTQ6CMBBA4as0s2bMMED5WXkP46KUAboB0pKqI dzdQFyo25e8b4Mg3kmARm3gJbrg5gkalSUK7GimQdB10ChgYk1VShgeZkEucqa+tlVrakgULF5 69zyZ2z1RMLqwzv51qjE96h8QUyTMykJ6KnXJpK+dtM5Ml9kPcAiRv6/sczES5kZzYa1pOyM/1 77vb1CeMIPPAAAA X-Change-ID: 20260810-swap-25420f9c8ba9 To: Andrew Morton , Chris Li , Kairui Song , Kemeng Shi , Nhat Pham , Baoquan He , Barry Song , Youngjun Park , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato , Hugh Dickins , Baolin Wang , Peter Xu , Johannes Weiner , Yosry Ahmed , Chengming Zhou Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-team@meta.com, Breno Leitao X-Mailer: b4 0.16-dev-f8e9d X-Developer-Signature: v=1; a=openpgp-sha256; l=4282; i=leitao@debian.org; h=from:subject:message-id; bh=EpRekKeJErc7riNVvzlHY4uk5Q+1vBOCn/GZz1HUxJs=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBqhC8HdheuIRdy8cccDbH5livISsOm7LqZewDOA kGie1OrtY6JAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaoQvBwAKCRA1o5Of/Hh3 bbS/EACLHmfM1kpeEcqpyG0wiicw7JowaCWTHzM5xk1jZcH98yp8UMEF+XxTvcL+IeLNbgISVrI GZ4Yg1yRuEdCHQr9oo/OeXWzb9gYERqaS+hCQOA86mLKZePipWHc2Wcqk7JDgyCbgETKehYV6Ch IKqrk5nj4q1CdoGeShz4uUoB1YxXQwXwX6NqTATW950lROXLroR8RO1ZTDdrxoHxRtKmMu9V8c2 xoJnwBoBGRoRlHPoYGMtRzDlzXKrPe4PhC3B1wKfY6hA1iUonucx734eZzFMuT7HUOO+tlg0tow avdb6dHag00l54nmfHZHRFh7c3yKWWC9d2o2ZsvFcRP4/gZhHjFyLqqKJrLJPIZO9nIrtAn1sVg WNrNTMTmugrqUyG1quAwJJ/jEijM7lAUJIiNuukoZYV5eYG6TqiTU4tKcm+ou7m2qrp2GjnCS04 cCZ8aVjK13WDSkvTSioA2xE/kpKFUCbNkmZaXMsj7mg4OG8Y1q+4kZi5XDPSRk/ZzaRcsLQoNC/ 8hPMeIC/afLCf+elN4ruqM9PtJcY+05VRfBw2dk0gGOxA9OGahkfRMx6ni7ihe8HVrQMZVHlRgo Ab77Rgz7ZHCWO79JIQ1zEQQnqu5xItooAI7PHAQquvsT8eFnxVezI4/pcfk7f9G2jD3dvmH03xU 2DUc044qWXTwQVA== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao I've seen some machines at Meta fleet that show the following type of problem: 1) It gets some weird warning: BUG: Bad page map in process khugepaged pte:f000eef300000017 pmd:00000067 addr:00007f57c0a01000 vm_flags:20200073 anon_vma:ffff88829af7c340 mapping:0000000000000000 index:7f57c0a01 The corruption is most likely the collapse/PT_RECLAIM race fixed by commit 366a4532d96f ("mm: fix the race between collapse and PT_RECLAIM under per-vma lock"). But this series is not about this one. 2) Then the fault never makes progress. do_swap_page() returns 0 when get_swap_device() fails, so the fault is retried, reads the same entry and faults again. Nothing in the round trip changes the PTE, and the same line comes out on every pass: get_swap_device: Bad swap offset entry 3ffffffc043c5 Patch 1 makes get_swap_device() return ERR_PTR(-EIO) for a malformed entry, keeping NULL for a device swapoff is taking away, and converts the callers. No functional change expected. Patch 2 uses that to return VM_FAULT_SIGBUS instead of retrying. The rate limiting patch that used to open this series was split out and posted on its own as a backportable hotfix [1], per Andrew's request. It should land first: patch 1 here touches the lines next to it in get_swap_device(). This patch will probably conflict with [1], but the merge should be trivial, given the only change in [1] is the addition of the __ratelimited() suffix. pr_err("%s: %s%08lx\n", __func__, Bad_file, entry.val); pr_err_ratelimited("%s: %s%08lx\n", __func__, Bad_file, entry.val); I am happy to respin, in case you prefer [1] https://patch.msgid.link/20260818-swap_part_one-v1-1-a4fc58119fc0@debian.org --- Changes in v3: - Split the rate limiting patch out and posted it separately as a hotfix, with a Fixes: tag and cc:stable (Andrew) - Drop the si = NULL dance in do_swap_page() and move_pages_ptes(), and let the paths that drop the reference skip an error pointer instead (Barry) - Link to v2: https://patch.msgid.link/20260813-swap-v2-0-4a625ccabdae@debian.org Changes in v2: - Rate limit swap_dup_entry_direct()'s print too (Andrew) - Drop "in get_swap_device()" from patch 1's subject, it now covers all three prints - Return ERR_PTR(-EIO) rather than ERR_PTR(-EINVAL) for a malformed entry; -EINVAL is too soft for a corrupt page table (David) - Document the malformed entry case in get_swap_device()'s kerneldoc, in patch 2 instead of patch 3 (David) - Reword patch 2's changelog, "an entry that can never name a slot on any device" was unclear (David) - Link to v1: https://patch.msgid.link/20260810-swap-v1-0-375ef0767206@debian.org To: Andrew Morton To: David Hildenbrand To: Lorenzo Stoakes To: "Liam R. Howlett" To: Vlastimil Babka To: Mike Rapoport To: Suren Baghdasaryan To: Michal Hocko To: Jann Horn To: Pedro Falcato To: Hugh Dickins To: Baolin Wang To: Chris Li To: Kairui Song To: Kemeng Shi To: Nhat Pham To: Baoquan He To: Barry Song To: Youngjun Park To: Peter Xu To: Johannes Weiner To: Yosry Ahmed To: Chengming Zhou Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- Breno Leitao (2): mm, swap: distinguish a malformed swap entry from a dying device mm: fail the fault on a malformed swap entry instead of retrying it mm/memory.c | 9 ++++++--- mm/mincore.c | 2 +- mm/shmem.c | 2 +- mm/swap_state.c | 4 ++-- mm/swapfile.c | 14 +++++++++----- mm/userfaultfd.c | 4 ++-- mm/zswap.c | 2 +- 7 files changed, 22 insertions(+), 15 deletions(-) --- base-commit: 6b8c8af514d739d0335f5579b585e02babe8a727 change-id: 20260810-swap-25420f9c8ba9 Best regards, -- Breno Leitao