From nobody Mon Sep 28 09:59:13 2026 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F17233A383A for ; Sun, 23 Aug 2026 19:41:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787514078; cv=none; b=tXOdOSzjZUug+4XZ3B5h5La9wkBJzgQ7sXIODfI7t4HWraZL5s5LzV8QXGZegWgWPucwisy2hqeDSjgEwfZhOliy3KyKeqy80F0YaDJQqx9F+nskzAC1ggfJqxqarD026VS2WbwPYkYxzFCJ1HSek44h804YyQnTrxy13/Z1qWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787514078; c=relaxed/simple; bh=vCHjJBFQNgP1MdM2vs0H0cX8vGGek8P/ghWBajkazgE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=d/j8DSVc3gJ1pt6J41luUYor0YqDNgVRVXraByE4ZsvlY0FwQ6J2vNnDou+Tvut6prBwk1rlpr66nHbXTJLQzda1wnaKe2HRehz3wUg1lUwzWZcYqFq8O93ad+M+i3TONq5huDyemQUYGXNj9GljmqEF7Juy5i8MUQRAtgRpnxk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=bQqm+fLb; arc=none smtp.client-ip=209.85.214.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="bQqm+fLb" Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2ce7dff6253so36318095ad.1 for ; Sun, 23 Aug 2026 12:41:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787514074; x=1788118874; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=+PLLVRLXNNRd7Ed/uUOsyNVCmInoOvgLdAuldbbtEw8=; b=bQqm+fLbhhKyuldFic2GLo4TcZ6T0KskLKy1Mu+JCqzxwIHpZKJFyAoF00tQiWZV6P NihoYzk3Et8CfI9h4t8ewVqrDXqfFIKffyzSQKUeHKCMbk7w6hsKFEge2uTXdCMOJ7p0 bR/e7OU/lbfr7mlwNrDoXWJinYD3QCrX861rUuKqjJtSvTKEXsT3/Nf/j+FS3Up5/5nW J9fQTPnKhV4h1PRjTUzyKbCD5DMwcrpDDa0Vk/efhNKMf1gShEv3EDBp+qzmOoXtx5wj /OJ/u/2rwBcHNQKxpgsQnRIGkodTQRvDVmlKcjYSo7Ds8zjTji9A6W6Oj19fYPOL14t/ rvRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787514074; x=1788118874; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=+PLLVRLXNNRd7Ed/uUOsyNVCmInoOvgLdAuldbbtEw8=; b=JnEHiNiHo7HsupAoS533wIStL9N+PMOqy5iW8KoyGf4++EnpqE3Qm/dTwfJgPRRPd1 nMU9CTjxf2lWe8u6c8CazFGtQKsQ1to2zpwEnxNgqWSr9OgRKhZTOYmQZnoMPaYJKbAa RcObpbnPAoO3xf7nFJZlCzjNsGUZqscn606stpZR8AaG3+gG+mgdB4Uhr+pTa/RKlmnJ gl7zkyq8Pk+Wdu1Zy7fDYQOu4uuNFYjPW/rgYJKTNvDDULzr4vKQX/7udWl1bWsY+cLr yPYcSTiXVh+c8N3k381uq9SfPQoc/WCnQEC6VmGR/RKL88uKXL59Ecz0R4txBZ9UHN7a EvxQ== X-Forwarded-Encrypted: i=1; AHgh+RpbQJajCC2EKKgot/BTnyj7wg5KSy3vUi3Y+MsR75M8GzAaSK284QGlyJDPWL7ehAGWEzEDo//UjQKDSTg=@vger.kernel.org X-Gm-Message-State: AFuF++li6vxw4lb/o+dUJ0iCDB3QuA5xK8YorbrpVcqZXDwp9V+WB2Ek DQL96r8LAXkpER0Tq5cNFkqeiMaNQiyjAyG67nPrF5j1/V+kNEa0N97YS1zi+/zZL0UF3352GRS vQ8R3zQ== X-Received: from plgu17.prod.google.com ([2002:a17:902:e811:b0:2cf:e9e8:7776]) (user=wyihan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:19c8:b0:2bc:e299:4b3f with SMTP id d9443c01a7336-2d6501d2265mr232088365ad.10.1787514074179; Sun, 23 Aug 2026 12:41:14 -0700 (PDT) Date: Sun, 23 Aug 2026 19:40:54 +0000 In-Reply-To: <20260823-memory-failure-mf-delayed-fix-v5-0-d97a5703e45a@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260823-memory-failure-mf-delayed-fix-v5-0-d97a5703e45a@google.com> X-Developer-Key: i=wyihan@google.com; a=ed25519; pk=cRi0fKzS5BMxlHyHY2pJv3w/1zcgfYKr6EYGYppdMYc= X-Developer-Signature: v=1; a=ed25519-sha256; t=1787514072; l=2540; i=wyihan@google.com; s=20260319; h=from:subject:message-id; bh=vCHjJBFQNgP1MdM2vs0H0cX8vGGek8P/ghWBajkazgE=; b=2sOGcjZM07dUbENkG7ka8LU+3w8x7MPjDTsuM6RqhzWcVud3VEqIB1Z/Pld7tKcRttGXPnsFr /62srT92oGsA7CVfqsivq5aDykS/C493DC4/WQwo3KfT2kM0654yUZf X-Mailer: b4 0.14.3 Message-ID: <20260823-memory-failure-mf-delayed-fix-v5-1-d97a5703e45a@google.com> Subject: [PATCH v5 1/5] mm: memory_failure: Clarify the MF_DELAYED definition From: Lisa Wang To: Miaohe Lin , Naoya Horiguchi , Andrew Morton , Paolo Bonzini , Shuah Khan , Hugh Dickins , Baolin Wang , David Hildenbrand , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , linux-mm@kvack.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org, Andi Kleen , Hidehiro Kawai , Rik van Riel , Yu Zhang , Lorenzo Stoakes , "Liam R. Howlett" Cc: rientjes@google.com, seanjc@google.com, ackerleytng@google.com, vannapurve@google.com, michael.roth@amd.com, jiaqiyan@google.com, tabba@google.com, dave.hansen@linux.intel.com, Lisa Wang , Isaku Yamahata , Xiaoyao Li Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable This patch clarifies the definition of MF_DELAYED to represent cases where a folio's removal is initiated but not immediately completed (e.g., due to remaining metadata references). Acked-by: David Hildenbrand (Arm) Acked-by: Miaohe Lin Reviewed-by: Ackerley Tng Signed-off-by: Lisa Wang --- mm/memory-failure.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index aaf14608b30e..e698d0e9711d 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -847,24 +847,25 @@ static int kill_accessing_process(struct task_struct = *p, unsigned long pfn, } =20 /* - * MF_IGNORED - The m-f() handler marks the page as PG_hwpoisoned'ed. + * MF_IGNORED - The m-f() handler marks the page as PG_hwpoison'ed. * But it could not do more to isolate the page from being accessed again, * nor does it kill the process. This is extremely rare and one of the * potential causes is that the page state has been changed due to * underlying race condition. This is the most severe outcomes. * - * MF_FAILED - The m-f() handler marks the page as PG_hwpoisoned'ed. + * MF_FAILED - The m-f() handler marks the page as PG_hwpoison'ed. * It should have killed the process, but it can't isolate the page, * due to conditions such as extra pin, unmap failure, etc. Accessing * the page again may trigger another MCE and the process will be killed * by the m-f() handler immediately. * - * MF_DELAYED - The m-f() handler marks the page as PG_hwpoisoned'ed. - * The page is unmapped, and is removed from the LRU or file mapping. - * An attempt to access the page again will trigger page fault and the - * PF handler will kill the process. + * MF_DELAYED - The m-f() handler marks the page as PG_hwpoison'ed. + * It means the page was unmapped and partially isolated (e.g. removed from + * file mapping or the LRU) but full cleanup is deferred (e.g. the metadata + * for the memory, as in struct page/folio, is still referenced). Any + * further access to the page will result in the process being killed. * - * MF_RECOVERED - The m-f() handler marks the page as PG_hwpoisoned'ed. + * MF_RECOVERED - The m-f() handler marks the page as PG_hwpoison'ed. * The page has been completely isolated, that is, unmapped, taken out of * the buddy system, or hole-punched out of the file mapping. */ --=20 2.55.0.766.g2966f0265a-goog From nobody Mon Sep 28 09:59:13 2026 Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B98483AFAE6 for ; Sun, 23 Aug 2026 19:41:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787514077; cv=none; b=Ywf22Z0bnGW7LvEx/1vlXwrmlTyd1LiQHj0eL5tbQZ+JmPGw8e/FLu/0LFCY+WU/mlO8t8W44blDF6wWuzydMz25WF19Ku/QV35Df2jC8pbsOu7p5G41P0OZBRIR8HEEZYFeSIe2BtarNBVFMVWQPsp3jHZmRQAV6KHV0w+Pl2Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787514077; c=relaxed/simple; bh=DG04WuEmB+N8qtRetaF/4g/eNDjDsfwar1GsdNmj7GI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=C3eOyzDoUWAdNwpUwR9+dPhuJcQH/CVZSkCCn/bokn2qsjjj6tM4EH57LKUpGvHV9lqCs6XP+4/OiOB0XphawBqhQZmAaVZcBVfKfwvlT1o5ujGbnBtHKdY6fKRilDhPTCqyPB4ac1FdM4UiFvERVT4j1Zn1cXRghUJG+WsCX50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=RNXzCD3v; arc=none smtp.client-ip=209.85.214.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="RNXzCD3v" Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2cccfa32670so44304935ad.2 for ; Sun, 23 Aug 2026 12:41:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787514075; x=1788118875; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=o+OpOp2FYZHZK1eqhH9cUqizMST4EcGgJtULK4xaToU=; b=RNXzCD3vOko/nKExKIT86PSSNFlHNaSbGua1nV8lmeiK/azmP26k+liu4LINOC/bzJ nBKPV/ZUUhbzKeD6GhknYD1d2vHGOD+ITyEjhPGscpVz2J6YXIH7J1Z12fjyg1LdGTOV 33X0vKZ2EqmkngQCWkP3w+EuP8ZawtSzfJcFJaV8I4zB1x66jrV9lHwaWQkw89nJ5SQe bizAEqJZzl70vpGWBMIa+Ees2+f4mP4ZU35luPcXZvpWOm3ix5Ux0CNjzN65dbBYUkZd LMUX4QjCnHYqlHP4n26D9F2I1UtelLuTgLu5UTUgv4e25Iv7XCfi0QUnxLWr0WRBrvAF 5aXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787514075; x=1788118875; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=o+OpOp2FYZHZK1eqhH9cUqizMST4EcGgJtULK4xaToU=; b=JWZP2jIYXITBlF8gmK4Hg9XZkWsPYq6oZKtmuJgO4EV7Am/zbaWYLcvCl6nb0bxfJ+ WcHQScMX9Uk01zKqzioKFj2/i8hIZVsjrFNpOI8/53YeaRTIUTe3lH6HFKeqmF7/GG2B ykXfuSH3VP6gznle4l62N0qhN65KFAlGtyFrLpeCZNv9qnYbpudu4Cips1pQXFDf918m XmpkCtRVcf3A3YcyxMbJt7fyOWPdXGAXS///46gIN8H0m4X6Tbq/EjxpMJ8le2QsLUYp Vpa9dpTQvtucs6GvCNR4/3UXURPsC9ivVSRjYDeivKY+5LCL8+CXdA1TZ4Q653Bo8VkN iuHw== X-Forwarded-Encrypted: i=1; AHgh+RrzwZwsSLAAtlKl+VTSPGSgYNyhVH4gUlxn43AiOt5GnZJ0ir+XUG2TeLzJM3XwWYzbjpiRjm0985VrA8M=@vger.kernel.org X-Gm-Message-State: AFuF++l/YCufh9erwm/g7+h1WuldHQPGkWWDWJvLGPLw2jTgbvuzgnBa Qgi7r80rGOd2s95OZfa3vHeQmOUGeWHAnb7Y37G3923XyjE3ZpnGPDUbemdalKL1tBguFQUqlSn pF2ShdQ== X-Received: from plml14.prod.google.com ([2002:a17:903:184e:b0:2d3:7166:b1a6]) (user=wyihan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3904:b0:2c7:ebfb:618f with SMTP id d9443c01a7336-2d670d299bdmr242569585ad.14.1787514075026; Sun, 23 Aug 2026 12:41:15 -0700 (PDT) Date: Sun, 23 Aug 2026 19:40:55 +0000 In-Reply-To: <20260823-memory-failure-mf-delayed-fix-v5-0-d97a5703e45a@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260823-memory-failure-mf-delayed-fix-v5-0-d97a5703e45a@google.com> X-Developer-Key: i=wyihan@google.com; a=ed25519; pk=cRi0fKzS5BMxlHyHY2pJv3w/1zcgfYKr6EYGYppdMYc= X-Developer-Signature: v=1; a=ed25519-sha256; t=1787514072; l=2009; i=wyihan@google.com; s=20260319; h=from:subject:message-id; bh=DG04WuEmB+N8qtRetaF/4g/eNDjDsfwar1GsdNmj7GI=; b=l3Mv9NFzVojO4X30lik/YxnXTp8odsky55GCF49Ybs0TwqNB3EpJZR4IWtMFjUh+RZrz/DSlr kyCzx6aZvHqDNzH3hGWJjzxiWsVRAHFhzpzByW10l57CWxucdyf1HjT X-Mailer: b4 0.14.3 Message-ID: <20260823-memory-failure-mf-delayed-fix-v5-2-d97a5703e45a@google.com> Subject: [PATCH v5 2/5] mm: memory_failure: Allow truncate_error_folio to return MF_DELAYED From: Lisa Wang To: Miaohe Lin , Naoya Horiguchi , Andrew Morton , Paolo Bonzini , Shuah Khan , Hugh Dickins , Baolin Wang , David Hildenbrand , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , linux-mm@kvack.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org, Andi Kleen , Hidehiro Kawai , Rik van Riel , Yu Zhang , Lorenzo Stoakes , "Liam R. Howlett" Cc: rientjes@google.com, seanjc@google.com, ackerleytng@google.com, vannapurve@google.com, michael.roth@amd.com, jiaqiyan@google.com, tabba@google.com, dave.hansen@linux.intel.com, Lisa Wang , Isaku Yamahata , Xiaoyao Li Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The .error_remove_folio a_ops is used by different filesystems to handle folio truncation upon discovery of a memory failure in the memory associated with the given folio. Currently, MF_DELAYED is treated as an error, causing "Failed to punch page" to be written to the console. MF_DELAYED is then relayed to the caller of truncate_error_folio() as MF_FAILED. This further causes memory_failure() to return -EBUSY, which then always causes a SIGBUS. This is also implies that regardless of whether the thread's memory corruption kill policy is PR_MCE_KILL_EARLY or PR_MCE_KILL_LATE, a memory failure with MF_DELAYED will always cause a SIGBUS. Update truncate_error_folio() to return MF_DELAYED to the caller if the .error_remove_folio() callback reports MF_DELAYED. Acked-by: David Hildenbrand (Arm) Acked-by: Miaohe Lin Reviewed-by: Ackerley Tng Fixes: 6a46079cf57a ("HWPOISON: The high level memory error handler in the = VM v7") Fixes: a7800aa80ea4 ("KVM: Add KVM_CREATE_GUEST_MEMFD ioctl() for guest-spe= cific backing memory") Signed-off-by: Lisa Wang --- mm/memory-failure.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index e698d0e9711d..37ea23489b75 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -939,10 +939,12 @@ static int truncate_error_folio(struct folio *folio, = unsigned long pfn, if (mapping->a_ops->error_remove_folio) { int err =3D mapping->a_ops->error_remove_folio(mapping, folio); =20 - if (err !=3D 0) + if (err =3D=3D MF_DELAYED) + ret =3D err; + else if (err !=3D 0) pr_info("%#lx: Failed to punch page: %d\n", pfn, err); else if (!filemap_release_folio(folio, GFP_NOIO)) - pr_info("%#lx: failed to release buffers\n", pfn); + pr_info("%#lx: Failed to release buffers\n", pfn); else ret =3D MF_RECOVERED; } else { --=20 2.55.0.766.g2966f0265a-goog From nobody Mon Sep 28 09:59:13 2026 Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D521E3AEF5A for ; Sun, 23 Aug 2026 19:41:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787514078; cv=none; b=EE5VeIsnmctxxAGV3+fWSKFZcSPPaReAokoi7ufmOI7++s4H9WAqyxCgyfv49ZC8b/n3hkfg9u0doOiFeEQhQ9ikMCOLzYeRSOxPcXQ11OpCoReXB0Xxzarxn7LTiYKz4EdDlWyl9cIyPzjLU9FyMb16JK/RTLiCuzbvzzi23aE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787514078; c=relaxed/simple; bh=7+x/sWXp759BrhYESvsKCOdad1Y/iKVS+soYyV1CIy4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=N7vg0YWKJ2Xgt16WjTUgb/je5j6SNoa6V/m1v4sdF8t78hsEhLz+vGA2/Zi8+qtwBIfiES4gqK/iDQe/YPNImTyqvbma8bdd+/abKd+UEOT1d4T40RlTWoawcFWl0pTf0RmA9lObo0xHm4g9hVe4IHbtnj0obwcOTzM4BTk+nlg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=u8RvJLR0; arc=none smtp.client-ip=209.85.210.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="u8RvJLR0" Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-848568a6f62so2884248b3a.0 for ; Sun, 23 Aug 2026 12:41:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787514076; x=1788118876; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Iy2xP8SK9yJbNhS8FwmPsx22x8G5GrN0of+eDDc1n/E=; b=u8RvJLR0yxFVR6jcOjKWIW400PtBj+qi4xP+lw/Qc+HrihxEcROpsqCOS6fxq549YK 7c/iK3pnI2f4JxPK94gvQNw7IuLL78W/SlH0pR7X3AC2FJFc3tckevDP4mq1f+VhnAwt 1lco/wa1l/KYL8gLBrnJhaOLzN2mGjEm6hHih2VUw6pQdJIRXgy2yOTnRpNeLsFXY269 pLy5BoSBCu893qo9MbkQ0658bCQ7d6MzW3AnB3mHjaTZyFg05Mo/a00IYBrudUPQu5Sp a5IbvHUQU23LX/K53nwCGAc1OpogzfS1kAExyJxfyBDxoItYhsfeHlFSjcNpcMrTBWV+ sezg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787514076; x=1788118876; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Iy2xP8SK9yJbNhS8FwmPsx22x8G5GrN0of+eDDc1n/E=; b=QvvdfgfUKE/K5vRWIp0NF2gjO7E+1iJCUtdzyaBBoQiO+lus852VBZBnRpAbsLzF1E zLuPhMKp9WvbeDa5PeMmHchTJT/t2IiM975oHpPFi/Vp0kwiIXY23apUf1vFGZ3NiW3f GkQgaWIf1YfqF7j5+mysL2cWkn4kGnv7EghkCaHelw3EkKPUbai8MkQbN2isK21qASCi /W0UoRc6JAdPBZxiizfn7Rn4fX7MNMMd6fle7MPR9dfMTqvkXQ3UcY1HnSf08KRSnQXD GrRQ8fWMwAZgWEKiK6893acjuqF9ngKZTwlh8EoLJUZ79yyCFSZ7efWrgjg5UlBdODNh 6F6Q== X-Forwarded-Encrypted: i=1; AHgh+Rq79WavpmJyNAu3k6j0imnfTvsKxmWAqyinGTQkid3vHY0rkdjSurrzUUa5220frRD60CB2EC0xJyKr4lc=@vger.kernel.org X-Gm-Message-State: AFuF++m2vsCVRLcMKlpjjyPGdqbQhU2VyyQeReXgMMX4hvUKPHfCEUnU DMR2XgpxkiN5RKUb8KcCtIlP8u/+uVcB9nXeQ7Mc1sGGdpb+W9ZvxBm/F86eWWvS+YLt1W1FANT MXVbQ8A== X-Received: from pfve12.prod.google.com ([2002:a05:6a00:1a8c:b0:84f:d0db:d487]) (user=wyihan job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2998:b0:848:2ab3:ddeb with SMTP id d2e1a72fcca58-851f9fc70e9mr36741015b3a.14.1787514075918; Sun, 23 Aug 2026 12:41:15 -0700 (PDT) Date: Sun, 23 Aug 2026 19:40:56 +0000 In-Reply-To: <20260823-memory-failure-mf-delayed-fix-v5-0-d97a5703e45a@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260823-memory-failure-mf-delayed-fix-v5-0-d97a5703e45a@google.com> X-Developer-Key: i=wyihan@google.com; a=ed25519; pk=cRi0fKzS5BMxlHyHY2pJv3w/1zcgfYKr6EYGYppdMYc= X-Developer-Signature: v=1; a=ed25519-sha256; t=1787514072; l=1748; i=wyihan@google.com; s=20260319; h=from:subject:message-id; bh=7+x/sWXp759BrhYESvsKCOdad1Y/iKVS+soYyV1CIy4=; b=t6KDI83BTgefmAewaihHmX8c+a3Z2iVi2HmHLIEX8ewkBOpraGu5znzx83qmcqz9NkbqAA93K XHaFoPVbaLMCwjlTnZrExtl4UfWAk0GR1XY30NzM8pr0DtLo35T2mE1 X-Mailer: b4 0.14.3 Message-ID: <20260823-memory-failure-mf-delayed-fix-v5-3-d97a5703e45a@google.com> Subject: [PATCH v5 3/5] mm: shmem: Update shmem handler to the MF_DELAYED definition From: Lisa Wang To: Miaohe Lin , Naoya Horiguchi , Andrew Morton , Paolo Bonzini , Shuah Khan , Hugh Dickins , Baolin Wang , David Hildenbrand , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , linux-mm@kvack.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org, Andi Kleen , Hidehiro Kawai , Rik van Riel , Yu Zhang , Lorenzo Stoakes , "Liam R. Howlett" Cc: rientjes@google.com, seanjc@google.com, ackerleytng@google.com, vannapurve@google.com, michael.roth@amd.com, jiaqiyan@google.com, tabba@google.com, dave.hansen@linux.intel.com, Lisa Wang , Isaku Yamahata , Xiaoyao Li Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable To align with the definition of MF_DELAYED, update shmem_error_remove_folio() to return MF_DELAYED. shmem handles memory failures but defers the actual file truncation. The function's return value should therefore be MF_DELAYED to accurately reflect the state. Currently, this logical error does not cause a bug, because: - For shmem folios, folio->private is not set. - As a result, filemap_release_folio() is a no-op and returns true. - This, in turn, causes truncate_error_folio() to incorrectly return MF_RECOVERED. - The caller then treats MF_RECOVERED as a success condition, masking the issue. The previous patch relays MF_DELAYED to the caller of truncate_error_folio() before any logging, so returning MF_DELAYED from shmem_error_remove_folio() will retain the original behavior of not adding any logs. The return value of truncate_error_folio() is consumed in action_result(), which treats MF_DELAYED the same way as MF_RECOVERED, hence action_result() also returns the same thing after this change. Acked-by: David Hildenbrand (Arm) Acked-by: Miaohe Lin Reviewed-by: Ackerley Tng Signed-off-by: Lisa Wang --- mm/shmem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/shmem.c b/mm/shmem.c index 774f4b18ff5c..d6f94786e709 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -5136,7 +5136,7 @@ static void __init shmem_destroy_inodecache(void) static int shmem_error_remove_folio(struct address_space *mapping, struct folio *folio) { - return 0; + return MF_DELAYED; } =20 static const struct address_space_operations shmem_aops =3D { --=20 2.55.0.766.g2966f0265a-goog From nobody Mon Sep 28 09:59:13 2026 Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2BA583AFD02 for ; Sun, 23 Aug 2026 19:41:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787514081; cv=none; b=jZOyZQcqXYZfFXVQ+v/SLxvGPiwSzJu9C/0q7713L06ZRwUgIjwrkxyfiVBa8mUq7XKejy83IblvWe0MUKv+ghVhcMH8BkLpho6Ur7ouTl1MEo8J1t0HTDUR8FgmAhYDB0f1vWfavhy7dUB0UrU8ZC9tGOHWEqnfgFyhYag/7GQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787514081; c=relaxed/simple; bh=M2qr6lCxGvnWbypTSRZIOkbIWHxFsLVgiK9mM+E8odY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ZNTF6GB82QOQ+VfupVAFnajjBlEjFdt5MSJU1HbqZvpXjFcjDZL8v4HNKWOcJa3PVkjiPtpyHDswohNoVAV7liuaJxX98bzVzcU2Z191UHbxYQyy6GXnFEzj4vlmmgotzwUaCCi2nv5QgYN9jm7QEei/UBhCPb0BTnqkWVSrQfY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=eACy3+TL; arc=none smtp.client-ip=209.85.210.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="eACy3+TL" Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-8484ba00601so3065464b3a.1 for ; Sun, 23 Aug 2026 12:41:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787514078; x=1788118878; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=vW4yOfIAs8YLh9FZCJuAriQaRtqPfpKolhm3EvkTWjA=; b=eACy3+TL/HyNscfvyopbIjS/rOc3aPM4/y2zLiIosHg8sJ2ulGRyd/FYF2X0bzb12G l/FUXOeieVYjzo/HP+Xof/mIY4N25i6tNMz7JyESxVa42WvMXCQMCNVajujTN4BuVkK/ pNEjwPKgSG9HArCv58tIWqUDpocyTs926Trin2xu2bYWc0d3JcvxKdwxqMjVswN9YWR+ guHwooer4wmE5hdvTfoTRl5sVoUeho0ZUGBZtZs6jvWGrbX94riTuv9+Yc1tNIAn8KO8 Gl0sid0OXngvsnCfGk2ZctS1S/F7fzVpGm4UooynCaMYFqg5SMtcHflzAXDIguwlyvpn hx9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787514078; x=1788118878; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=vW4yOfIAs8YLh9FZCJuAriQaRtqPfpKolhm3EvkTWjA=; b=HfkkD3DvvrQ23JvWFMafjtsyyg1/GsfvceAMyrdTLXOWz0uF5GhLKkEZNddRkUCeEz kN9i8YDokPx/piFb0PSF9cDcgxVImjZBvYyhVmJwX8aYBNTse1fG2Muq9iJKsXoZs/Ao 0fKJo7EaYRcX/YTCmKEiIh0azsiRyeKrEnCqqEG4CfHeoRzKW8pmpJGeMqhPbMeU6IGL 2bWcAVpzgL6SwW96odimw4KKc6RCeYpc/hc5YN2WZt2TNwQEvJLmPE47Ze6F/qUF2j7b Z40+uAn8Kl5Qn+OLb2QRTWsnLQ07Y/eo8uqR8nErUwDQqnnWp/nc4Nzm2ISFUT0Uq7Jb 9qpQ== X-Forwarded-Encrypted: i=1; AHgh+RpOTXLQ41JXrESjRUBfjNI5QKgVtDjBXQK6FrpefxPE+0cEhezKUcYeq2cb7T4VjjWO9UIsCvYYUaU2WBM=@vger.kernel.org X-Gm-Message-State: AFuF++ktmAdkQKE6DNwJDQr+wrnkyLgVkziizH0BJ+nyDZiBUsKRPflt zmu/XBCx0xOMg1cM2YpBhUMuFRhzJQcEkG3wFrUBTWa7vwlAOVFlu337EamOTGYzgxq1H3JKkGU HDMS3/Q== X-Received: from pgby19-n1.prod.google.com ([2002:a05:6a02:6513:10b0:cc1:960c:15b1]) (user=wyihan job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2d28:b0:845:e8b5:8c49 with SMTP id d2e1a72fcca58-851f9f39cd1mr32509544b3a.10.1787514078336; Sun, 23 Aug 2026 12:41:18 -0700 (PDT) Date: Sun, 23 Aug 2026 19:40:57 +0000 In-Reply-To: <20260823-memory-failure-mf-delayed-fix-v5-0-d97a5703e45a@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260823-memory-failure-mf-delayed-fix-v5-0-d97a5703e45a@google.com> X-Developer-Key: i=wyihan@google.com; a=ed25519; pk=cRi0fKzS5BMxlHyHY2pJv3w/1zcgfYKr6EYGYppdMYc= X-Developer-Signature: v=1; a=ed25519-sha256; t=1787514072; l=1693; i=wyihan@google.com; s=20260319; h=from:subject:message-id; bh=M2qr6lCxGvnWbypTSRZIOkbIWHxFsLVgiK9mM+E8odY=; b=bd+N1aGdqQ3cc8pEFS9Y7bF9mKDfVbYMU2k/ThMMa54u9kS1Z3odwN1SSgUef8uc2QmPWF/Sl WVWnSzs0S3YCNF3JkKpTzl9HEIlQBvjr3CCKD4lyyX1EO4Ea75pfji3 X-Mailer: b4 0.14.3 Message-ID: <20260823-memory-failure-mf-delayed-fix-v5-4-d97a5703e45a@google.com> Subject: [PATCH v5 4/5] mm: memory_failure: Generalize extra_pins handling to all MF_DELAYED cases From: Lisa Wang To: Miaohe Lin , Naoya Horiguchi , Andrew Morton , Paolo Bonzini , Shuah Khan , Hugh Dickins , Baolin Wang , David Hildenbrand , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , linux-mm@kvack.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org, Andi Kleen , Hidehiro Kawai , Rik van Riel , Yu Zhang , Lorenzo Stoakes , "Liam R. Howlett" Cc: rientjes@google.com, seanjc@google.com, ackerleytng@google.com, vannapurve@google.com, michael.roth@amd.com, jiaqiyan@google.com, tabba@google.com, dave.hansen@linux.intel.com, Lisa Wang , Isaku Yamahata , Xiaoyao Li Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Generalize extra_pins handling to all MF_DELAYED cases not only shmem_mapping. If MF_DELAYED is returned, the filemap continues to hold refcounts on the folio. Hence, take that into account when checking for extra refcounts. As clarified in an earlier patch, a return value of MF_DELAYED implies that the page still has elevated refcounts. Hence, set extra_pins to true if the return value is MF_DELAYED. This is aligned with the implementation in me_swapcache_dirty(), where, if a folio is still in the swap cache, ret is set to MF_DELAYED and extra_pins is set to true. Acked-by: David Hildenbrand (Arm) Acked-by: Miaohe Lin Reviewed-by: Ackerley Tng Signed-off-by: Lisa Wang --- mm/memory-failure.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 37ea23489b75..c7a00c7be368 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1039,18 +1039,14 @@ static int me_pagecache_clean(struct page_state *ps= , struct page *p) goto out; } =20 - /* - * The shmem page is kept in page cache instead of truncating - * so is expected to have an extra refcount after error-handling. - */ - extra_pins =3D shmem_mapping(mapping); - /* * Truncation is a bit tricky. Enable it per file system for now. * * Open: to take i_rwsem or not for this? Right now we don't. */ ret =3D truncate_error_folio(folio, page_to_pfn(p), mapping); + + extra_pins =3D ret =3D=3D MF_DELAYED; if (has_extra_refcount(ps, p, extra_pins)) ret =3D MF_FAILED; =20 --=20 2.55.0.766.g2966f0265a-goog From nobody Mon Sep 28 09:59:13 2026 Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 63C083AE718 for ; Sun, 23 Aug 2026 19:41:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787514082; cv=none; b=r1BYzZYBbEF5U+o4QrAvmR9zI1LUAPf1QKRA28oQ2zm/7GmqIrC4ZoDI/kAaUcJy/wdMMtEEljuGGCNfywlp4nxbzQSpUXAjm+33aFeRQW4VUl6IU9K+0gtDSIw1MttwDPIUgHahKLqew0+pCJb2rDXeC8HRKYZDaNxJRcfdNFY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787514082; c=relaxed/simple; bh=6H/urXyqo0R+eZVEoqxfnPvxrvulOJIGV7ZBXfbSyS8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=JvJlnVyLaHttAeADBZ12yeYKhnzMHJj1BlIwG1Tj/NNPSpIiiiwp/GY0m7qh/auMT9hf/A+K6yq99gYbIvnbZTnYbPq9KN9YibBrP1Efeay11EaAMuS+qyIX46bJAIyUrkFOflzfkDgs0xaKsUIlyOsP8sL6CMQbuFqDU5St8bc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=vob8eWkT; arc=none smtp.client-ip=209.85.214.200 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--wyihan.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="vob8eWkT" Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2cc73f47bdcso33896865ad.3 for ; Sun, 23 Aug 2026 12:41:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787514079; x=1788118879; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=KyxwXzW/e6yZkOmQq00SGFMBQuYBpdvqua93AJie1gM=; b=vob8eWkT74uhbwnbqDbh52jxxsrNQplHLbXUlwCMCEWsYqPd4uFhJxpRAQlPzWF52d gDgIhxUJMlKXkvQW76sizXjLF2r/t3FCjDphREX/k9Ua8qMajo+9juRlZEV36i0xu1sd IaIYIQus5n2aA9wui2LncdszA3ANE5VLONohG6BZRCBWxLbR6Az5kpR2XtXhZvI1DISQ EU2yO6xdZRWpikHiThnlDNBKdQ+XEUBmcLpCn3UFre0xNV8w9oVpVeR/fcETdmyjomjx 3E+2J+iNlNYTuPGonikygzlvhqeWoyO5X7IrVes0mIEMdCVKXam2QD2TepQfM8fxpFGF QMqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787514079; x=1788118879; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=KyxwXzW/e6yZkOmQq00SGFMBQuYBpdvqua93AJie1gM=; b=qIaY6KLihvJwzHDHyBcls0musbEjqE/ek4QpTZQwZRMDYYoXzHjrwbVHy34/pBu3sv 2VTOxIHiuKkX/Jcb/D5JHbNC6LhIAYDfvI3t/bOmyPKyVepPhmnGmJNdIPB0k0MNUAfW w9gXpP3FPJKMynMEDAMzFex8npVl2TIWHUsVpWtBxvl3aDtMsu0Z/x3fOWHcjqp0DALM fbzppWe1ZpVR3fZvJArJPLIsDAXrgxu0kLOGUuOn0/0It/4734HL1nf85tUp53RwPYKA G5lhWeo2QbWbhAxoRj9SP0rO+66GvWZ4ms3PGOASMn8IjUVdCTCKDW8/KgMNJMKrkwLP R9kQ== X-Forwarded-Encrypted: i=1; AHgh+RrOx30DILpP4KZkANKulexgqrR9zMg/vTClT44+cdXKFxev8YNyUzflhbVNpfBgk0H8XZg5FOTwEJp0z+w=@vger.kernel.org X-Gm-Message-State: AFuF++mf7r4+oSQVHRhfVVMcxnc2aKILzsGon0V/rhlw7FOYJtmsY06L FlBe6xrsovvwu1e4W5uPDhOY7kUIeh6MjkGPvwdugZyCuq6k/n5LsjPqOk8Hsrqif6tWxmbKw+6 8MdAppg== X-Received: from plho9.prod.google.com ([2002:a17:903:23c9:b0:2c9:a5a0:a677]) (user=wyihan job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f693:b0:2d3:7c58:b0e1 with SMTP id d9443c01a7336-2d64a9a6dadmr341194815ad.0.1787514079265; Sun, 23 Aug 2026 12:41:19 -0700 (PDT) Date: Sun, 23 Aug 2026 19:40:58 +0000 In-Reply-To: <20260823-memory-failure-mf-delayed-fix-v5-0-d97a5703e45a@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260823-memory-failure-mf-delayed-fix-v5-0-d97a5703e45a@google.com> X-Developer-Key: i=wyihan@google.com; a=ed25519; pk=cRi0fKzS5BMxlHyHY2pJv3w/1zcgfYKr6EYGYppdMYc= X-Developer-Signature: v=1; a=ed25519-sha256; t=1787514072; l=5373; i=wyihan@google.com; s=20260319; h=from:subject:message-id; bh=6H/urXyqo0R+eZVEoqxfnPvxrvulOJIGV7ZBXfbSyS8=; b=cfUM1tjzhEk88mj+/xQKY18Tt+IgfKj4f4BWzGxytwJR3RDp3E/1P4wLOfG3mtNtrmLJ7RP7q DWeg3JebmrBC9/hzRqFcen3nbsG48on5ZN3oWRga2CjGRq3Ol71dSNW X-Mailer: b4 0.14.3 Message-ID: <20260823-memory-failure-mf-delayed-fix-v5-5-d97a5703e45a@google.com> Subject: [PATCH v5 5/5] mm: selftests: Add shmem into memory failure test From: Lisa Wang To: Miaohe Lin , Naoya Horiguchi , Andrew Morton , Paolo Bonzini , Shuah Khan , Hugh Dickins , Baolin Wang , David Hildenbrand , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , linux-mm@kvack.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org, Andi Kleen , Hidehiro Kawai , Rik van Riel , Yu Zhang , Lorenzo Stoakes , "Liam R. Howlett" Cc: rientjes@google.com, seanjc@google.com, ackerleytng@google.com, vannapurve@google.com, michael.roth@amd.com, jiaqiyan@google.com, tabba@google.com, dave.hansen@linux.intel.com, Lisa Wang , Isaku Yamahata , Xiaoyao Li Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add a shmem memory failure selftest to test the shmem memory failure is correct after modifying shmem return value. Specifically, test the expected behavior under various scenarios combining page dirtiness (dirty vs clean) and failure types (hard vs soft): + Dirty + Hard: Trigger a SIGBUS on injection, and trigger another SIGBUS when reading the page again. + Dirty + Soft: No SIGBUS is triggered, and the original value can be read successfully. + Clean + Hard: No SIGBUS is triggered on injection, but trigger a SIGBUS when trying to read the page again. + Clean + Soft: No SIGBUS is triggered, and the page can be read successfully. Acked-by: Miaohe Lin Signed-off-by: Lisa Wang --- tools/testing/selftests/mm/memory-failure.c | 118 ++++++++++++++++++++++++= +++- 1 file changed, 115 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/mm/memory-failure.c b/tools/testing/se= lftests/mm/memory-failure.c index 1a5a32e22cce..5b26f0c44664 100644 --- a/tools/testing/selftests/mm/memory-failure.c +++ b/tools/testing/selftests/mm/memory-failure.c @@ -20,6 +20,10 @@ =20 #include "vm_util.h" =20 +#ifndef fallthrough +# define fallthrough __attribute__((__fallthrough__)) +#endif + enum inject_type { MADV_HARD, MADV_SOFT, @@ -29,9 +33,14 @@ enum result_type { MADV_HARD_ANON, MADV_HARD_CLEAN_PAGECACHE, MADV_HARD_DIRTY_PAGECACHE, + MADV_HARD_CLEAN_SHMEM, + MADV_HARD_DIRTY_SHMEM, MADV_SOFT_ANON, MADV_SOFT_CLEAN_PAGECACHE, MADV_SOFT_DIRTY_PAGECACHE, + MADV_SOFT_CLEAN_SHMEM, + MADV_SOFT_DIRTY_SHMEM, + READ_ERROR, }; =20 static jmp_buf signal_jmp_buf; @@ -157,17 +166,22 @@ static void check(struct __test_metadata *_metadata, = FIXTURE_DATA(memory_failure case MADV_HARD_CLEAN_PAGECACHE: case MADV_SOFT_CLEAN_PAGECACHE: case MADV_SOFT_DIRTY_PAGECACHE: - /* It is not expected to receive a SIGBUS signal. */ - ASSERT_EQ(setjmp, 0); - + case MADV_SOFT_DIRTY_SHMEM: /* The page content should remain unchanged. */ ASSERT_TRUE(check_memory(vaddr, self->page_size)); + fallthrough; + case MADV_HARD_CLEAN_SHMEM: + case MADV_SOFT_CLEAN_SHMEM: + /* It is not expected to receive a SIGBUS signal. */ + ASSERT_EQ(setjmp, 0); =20 /* The backing pfn of addr should have changed. */ ASSERT_NE(pagemap_get_pfn(self->pagemap_fd, vaddr), self->pfn); break; case MADV_HARD_ANON: case MADV_HARD_DIRTY_PAGECACHE: + case MADV_HARD_DIRTY_SHMEM: + case READ_ERROR: /* The SIGBUS signal should have been received. */ ASSERT_EQ(setjmp, 1); =20 @@ -263,6 +277,20 @@ static int prepare_file(const char *fname, unsigned lo= ng size) return fd; } =20 +static int prepare_shmem(const char *fname, unsigned long size) +{ + int fd; + + fd =3D memfd_create(fname, 0); + if (fd < 0) + return -1; + if (ftruncate(fd, size) < 0) { + close(fd); + return -1; + } + return fd; +} + /* Borrowed from mm/gup_longterm.c. */ static int get_fs_type(int fd) { @@ -355,4 +383,88 @@ TEST_F(memory_failure, dirty_pagecache) ASSERT_EQ(close(fd), 0); } =20 +TEST_F(memory_failure, dirty_shmem) +{ + int fd; + char *addr; + int ret; + + fd =3D prepare_shmem("shmem-file", self->page_size); + if (fd < 0) + SKIP(return, "failed to open test shmem-file.\n"); + + addr =3D mmap(0, self->page_size, PROT_READ | PROT_WRITE, + MAP_SHARED, fd, 0); + if (addr =3D=3D MAP_FAILED) { + close(fd); + SKIP(return, "mmap failed, not enough memory.\n"); + } + memset(addr, 0xce, self->page_size); + + prepare(_metadata, self, addr); + + ret =3D sigsetjmp(signal_jmp_buf, 1); + if (!ret && !self->injection_attempted) { + self->injection_attempted =3D true; + ASSERT_EQ(variant->inject(self, addr), 0); + } + + if (variant->type =3D=3D MADV_HARD) { + check(_metadata, self, addr, MADV_HARD_DIRTY_SHMEM, ret); + ret =3D sigsetjmp(signal_jmp_buf, 1); + if (ret =3D=3D 0) + FORCE_READ(*addr); + check(_metadata, self, addr, READ_ERROR, ret); + } else { + check(_metadata, self, addr, MADV_SOFT_DIRTY_SHMEM, ret); + } + + ASSERT_EQ(munmap(addr, self->page_size), 0); + + ASSERT_EQ(close(fd), 0); +} + +TEST_F(memory_failure, clean_shmem) +{ + int fd; + char *addr; + int ret; + + fd =3D prepare_shmem("shmem-file", self->page_size); + if (fd < 0) + SKIP(return, "failed to open test shmem-file.\n"); + + addr =3D mmap(0, self->page_size, PROT_READ | PROT_WRITE, + MAP_SHARED, fd, 0); + if (addr =3D=3D MAP_FAILED) { + close(fd); + SKIP(return, "mmap failed, not enough memory.\n"); + } + FORCE_READ(*addr); + + prepare(_metadata, self, addr); + + ret =3D sigsetjmp(signal_jmp_buf, 1); + if (!ret && !self->injection_attempted) { + self->injection_attempted =3D true; + ASSERT_EQ(variant->inject(self, addr), 0); + } + + if (variant->type =3D=3D MADV_HARD) { + check(_metadata, self, addr, MADV_HARD_CLEAN_SHMEM, ret); + ret =3D sigsetjmp(signal_jmp_buf, 1); + if (ret =3D=3D 0) + FORCE_READ(*addr); + check(_metadata, self, addr, READ_ERROR, ret); + } else { + /* Test the address accessability without check_memory(). */ + FORCE_READ(*addr); + check(_metadata, self, addr, MADV_SOFT_CLEAN_SHMEM, ret); + } + + ASSERT_EQ(munmap(addr, self->page_size), 0); + + ASSERT_EQ(close(fd), 0); +} + TEST_HARNESS_MAIN --=20 2.55.0.766.g2966f0265a-goog