From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 17F54C7115A for ; Wed, 18 Jun 2025 17:41:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6758D6B00B5; Wed, 18 Jun 2025 13:40:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5D6C86B00B6; Wed, 18 Jun 2025 13:40:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 47B276B00B7; Wed, 18 Jun 2025 13:40:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 30D166B00B5 for ; Wed, 18 Jun 2025 13:40:56 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id C6584100D90 for ; Wed, 18 Jun 2025 17:40:55 +0000 (UTC) X-FDA: 83569236870.27.7499334 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf17.hostedemail.com (Postfix) with ESMTP id 86A0940010 for ; Wed, 18 Jun 2025 17:40:53 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="K/YFpcQ3"; spf=pass (imf17.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750268453; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=HE4ZFr/3yO/kcvQGBFxRWJWFhigh7sWDavgkH8Q96v8=; b=E24UFsU0azTsR3A0e0QI9uhbOT2fPF3zlkEF8SD+cvv6IfO3R11haiaAzHnAo+6J6vzQlE lRzV5Cp2FkR5BSywY10kN6FS0m0O2i7Fh2maYRJB1hjg+rk00FloggTARz/wSe34clHC/q ncNNkcMS9CRLEkHI5IOu1t5ulEluQfM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750268453; a=rsa-sha256; cv=none; b=7x2IGD/Sn/ATeoLqPlzIFaHNxDzwGXRDa2p5iz+ByLxmOg8WOO21C6Sb0IGb19c23QH7ep SGVXjxt3UeWoonhOKtOVVJH6USk4vvNhy3j3BJouot2jaLiSJXdUir4edcehILQ13yFRlK ZLh0eAh7m28w2pOWb1SGnSCGEkQQQC4= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="K/YFpcQ3"; spf=pass (imf17.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1750268452; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HE4ZFr/3yO/kcvQGBFxRWJWFhigh7sWDavgkH8Q96v8=; b=K/YFpcQ3G+12GwD4fz3kXUm+VDiN2cCOWCbL3/1TROiyh4MhBLAyE4iwpR20QBGUTGyOTl bkVP6BRaRtrpPVdFoqoG3pdGE92piCv6MO5EUSokeLH0do8SU/GvxY94vrGX1cK6cZadQR L6XOgnSAqIL3LqXK8Fn0cvcsgq7aIHc= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-487-SUvP_EFJMISFGN56DFMXsA-1; Wed, 18 Jun 2025 13:40:51 -0400 X-MC-Unique: SUvP_EFJMISFGN56DFMXsA-1 X-Mimecast-MFC-AGG-ID: SUvP_EFJMISFGN56DFMXsA_1750268450 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-45311704cdbso37818065e9.1 for ; Wed, 18 Jun 2025 10:40:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750268449; x=1750873249; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HE4ZFr/3yO/kcvQGBFxRWJWFhigh7sWDavgkH8Q96v8=; b=F37RAOhvdqr3kJv7JcABmMCtjsxhC3e7nl/TmmuqUH/cl0b0AbRqK4F2ZE1gFNID0r F0SQF2R1pPMo/JS9PpXPNgO6+06ywdMPeXVEJPBGM7chnvhGtZkgRSYT1KIU707noDz/ EDSS92tsTJVCANkR+bI75rOE3qGSnndyAWPK70T9ZCE0LP8rxe15gq47zLS9zMdj5xld jloiKFb4t4cINHgvldzvvcbW1ERa6VaFSJFV0zY25GBaa8Sed8qhCJfLMpTZT14249cQ voDbJBCqHTAyY928KOhJ4ELXd4Y5ciSTf+9oAcQBQYWmZ8SOipO07AE0NxxDT+wIqO3j 9N2Q== X-Gm-Message-State: AOJu0YyroOOBCbMeJJHaEYcJ6cCou/hM7GlM5mxCbDbiaSTDNkHbTDL4 +vcrxe+RX02gSVFmwVbO0/l2/DtmzpN0Fy1b/nH8pqplA9JthPmWhCzRCJnM6FeBDXa3ureAqfI U2C2rmbvoqCe5GLp4WjuUfBEBaGWYjmKFh8b3X0Vz+BdRrTVf69nv X-Gm-Gg: ASbGncsKvn78V3r6PLXeStnRiKzy+wHX44jIcL17c6/hgu0dGTyCrr5fGYG2HBBBS0D 8FPZ6iszxFTHuw0+vNj40o3m/ivJTJwAA5sOGRO8MZg/3taqxt9+L2u/x7MMp3nk0WOcnJUHLqj 8cWBmNYqLCJXsCq/HDgtqVxmBp61eRnjnFhIkxl9CYwdtNNAbOzuP8ox+p23E8V8OK9X1jwuEQS KRwRmOU1n19f48nixqoLbg6nRoFaa/nSSgvTdUrLZzF7atG8hncVZEe2I/2JKScIVVXpXwVbRFe KKoKXF7OVSL0Ki6dcIZWXA2uzoVL6tezuFNXgCsgoUZrp52H3QrpfobZoJh5HEKtWbmO4KCIry5 Er4SfHg== X-Received: by 2002:a05:600c:1d8c:b0:43c:e70d:44f0 with SMTP id 5b1f17b1804b1-4533caad0aemr171064435e9.19.1750268449484; Wed, 18 Jun 2025 10:40:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGznKIGl3nAorQ6sfOY/mgzfowzauuqoYlpxs90ugUrSAZIVXpSWN8Es+fpzvWy+uQJD/IOZw== X-Received: by 2002:a05:600c:1d8c:b0:43c:e70d:44f0 with SMTP id 5b1f17b1804b1-4533caad0aemr171064285e9.19.1750268449019; Wed, 18 Jun 2025 10:40:49 -0700 (PDT) Received: from localhost (p200300d82f2d2400405203b5fff94ed0.dip0.t-ipconnect.de. [2003:d8:2f2d:2400:4052:3b5:fff9:4ed0]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-4535e983c76sm3664265e9.10.2025.06.18.10.40.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 18 Jun 2025 10:40:48 -0700 (PDT) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-doc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, virtualization@lists.linux.dev, linux-fsdevel@vger.kernel.org, David Hildenbrand , Andrew Morton , Jonathan Corbet , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Jerrin Shaji George , Arnd Bergmann , Greg Kroah-Hartman , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Alexander Viro , Christian Brauner , Jan Kara , Zi Yan , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , "Matthew Wilcox (Oracle)" , Minchan Kim , Sergey Senozhatsky , Brendan Jackman , Johannes Weiner , Jason Gunthorpe , John Hubbard , Peter Xu , Xu Xin , Chengming Zhou , Miaohe Lin , Naoya Horiguchi , Oscar Salvador , Rik van Riel , Harry Yoo , Qi Zheng , Shakeel Butt Subject: [PATCH RFC 12/29] mm/zsmalloc: stop using __ClearPageMovable() Date: Wed, 18 Jun 2025 19:39:55 +0200 Message-ID: <20250618174014.1168640-13-david@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250618174014.1168640-1-david@redhat.com> References: <20250618174014.1168640-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: Gbtm_0H3orkIAf6hO60fyjBZDOsqI38zl63RNbmiujo_1750268450 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 86A0940010 X-Stat-Signature: idac9gbz1zy9sb38x7mxs88w95fhsgas X-Rspam-User: X-HE-Tag: 1750268453-359639 X-HE-Meta: U2FsdGVkX1812n3ehOAmpuI3iRYP27qq7pawB5OqOQLPBRm2jje0rr5FJSj9y68aYvtt6v4KeMFk3Y1ZEENzC0vCvK56Be7OZIi80G0g6coEBWMXoSD9dz3SRnDVMyqqmSHvMOtjVb0OUr7k3CAXJ/mjsLK65V8NdpcNxFpjuTbFQlHCPa2THg1UVBbhjygp2B/RTEPedQ5KKPwOORZpMLv3O8/Zm9CYMFdbfSN8O/M/YwkVVPU8a3O5Rt7W8gAWLItpAea/lj24k5r3yFgsnZ2XAsBV7H5dFOJevveQhgxAkQJDbEXTBynl8C3uy4lTASwg1o3EfLLpKy21iWnwv2pXRdJCq6KkfVQ6Pz1O+/q/etBHotq8wI9V6+3b7kmKrB8Dc1H8cBAR24+kXeNfx6THZUQ2kpBJisMPe185vS68d7ND8AoQl7KKlj4Z0q43WE8ilxcATh+/ycMJFOxvLsmKZfTDVg/1/FmIeuWb2PB+0McvmAbzIXt7F479nY6YQxbPODbQosLVsdF/60NUBojB9+1z2K7sK0E3px08rT3IN/sFW0A3BZbvsl5eyzACRcro57MJZ/Wmg7hzUNPOQ9hGpVcjMSwMCc9bWEU3PbLC9Kmiz8SEeTdLpOMNSmKj/QPNNL3r5IXHycb60R3HIYc9+DqQDtBMFpeoE9VJzch+Wo8CqyhdRhGncRGqy4YKV9TDNE/nIWxa8ESoxTvKffQ6ahw2xWz8rmHi7AXKmxK5nt7S0+kHtI2JMBK1mtcngk7VYBuuVpNRVkym7MtvNfKJf0g9USR2GHb4G32L3ROWzwtYXCDAvcqYk1iRbucOwQSui6cFMuKZm3s4gjdOO9DXl6/jbbFaMwNK5OlpwD/olGsEqawC2DcXYclmoVcN4Tr+Q/G0sMhpgVU4aeWv+egQkWBfw1ype8KCWPNM0dGH7W1wfZ1kUC+Og9ACPrvmqqJPJjQsyQ1LtYxymPA h3mBKM9i ruL8oAW3TxfB0IwkOtk7oQI5RvSJMQzlMnVpD/OAC29RFOMLkNX57ioP3+qPqPN2dO1q0xsx+Nb6L3vRquQvkIu/MduIIL6HRdEDGpzBPf/7A8rAzSiYAFiYA9lWbPoQfktWG+GtrWBPmhx/BWwkOm9Bd/F51TSNOMbHHRUi6WdrUw5tU/4wFOvg5ntj8mJbL790WaxG22oSJmEVc9vfhg0YMIyqR9H0cVhH/v9MKYZ8bafz92Ho95Odv7DxkH48dBVPMXTydf8lONvax8fJPhnmWhUv+H81kn7I1jkVHWd+OS+PtzAOeItYBtAN30uupAoqBtA/MoW8ipIlx17wPFagIuNNzD+iUVUvexkwN/07Y1GbNqqLPv49QrTtGPd5d2fQOL+WIxJBjtWr+HiTjiSCHBoIBPGVC6g0B6kVpaneAb8Kgwxvi3rKcc7Vmy1l78vu2Hp/27uH9dOYYJYUYew7shAtustMJk7kcMNmWcn0hG3u/n4ayEadXqOWz6X7M4rSYt6+XHdMe651M39Hb+3zoa/159RjjadNdICtnkQ9leNhdQd326xfEzIiK66cJnmS5MFS/TthqsNYeZxeb3d1z/Nb43yqM+aDh X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Instead, let's check in the callbacks if the page was already destroyed, which can be checked by looking at zpdesc->zspage (see reset_zpdesc()). If we detect that the page was destroyed: (1) Fail isolation, just like the migration core would (2) Fake migration success just like the migration core would In the putback case there is nothing to do, as we don't do anything just like the migration core would do. In the future, we should look into not letting these pages get destroyed while they are isolated -- and instead delaying that to the putback/migration call. Add a TODO for that. Signed-off-by: David Hildenbrand --- mm/zsmalloc.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index f98747aed4330..72c2b7562c511 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -876,7 +876,6 @@ static void reset_zpdesc(struct zpdesc *zpdesc) { struct page *page = zpdesc_page(zpdesc); - __ClearPageMovable(page); ClearPagePrivate(page); zpdesc->zspage = NULL; zpdesc->next = NULL; @@ -1715,10 +1714,11 @@ static void replace_sub_page(struct size_class *class, struct zspage *zspage, static bool zs_page_isolate(struct page *page, isolate_mode_t mode) { /* - * Page is locked so zspage couldn't be destroyed. For detail, look at - * lock_zspage in free_zspage. + * Page is locked so zspage can't be destroyed concurrently + * (see free_zspage()). But if the page was already destroyed + * (see reset_zpdesc()), refuse isolation here. */ - return true; + return page_zpdesc(page)->zspage; } static int zs_page_migrate(struct page *newpage, struct page *page, @@ -1736,6 +1736,13 @@ static int zs_page_migrate(struct page *newpage, struct page *page, unsigned long old_obj, new_obj; unsigned int obj_idx; + /* + * TODO: nothing prevents a zspage from getting destroyed while + * isolated: we should disallow that and defer it. + */ + if (!zpdesc->zspage) + return MIGRATEPAGE_SUCCESS; + /* The page is locked, so this pointer must remain valid */ zspage = get_zspage(zpdesc); pool = zspage->pool; -- 2.49.0