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 9466FC8302F for ; Mon, 30 Jun 2025 13:01:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BAF236B00B7; Mon, 30 Jun 2025 09:00:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B60B86B00B8; Mon, 30 Jun 2025 09:00:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A28096B00B9; Mon, 30 Jun 2025 09:00:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 90CCB6B00B7 for ; Mon, 30 Jun 2025 09:00:58 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 622791404CD for ; Mon, 30 Jun 2025 13:00:58 +0000 (UTC) X-FDA: 83612076996.02.893A919 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf04.hostedemail.com (Postfix) with ESMTP id EECEA40015 for ; Mon, 30 Jun 2025 13:00:55 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=Wnr7Ksbu; spf=pass (imf04.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.133.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=1751288456; 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=2HMj2lVXlGHUJ4uO4aUw0oXHfs+Jcwi2C/X9oHCDdoXfCepchVLrmlAD4VBKLvV9QxHFxp BTPTv/vo6o9YSt5lReOwUpWFfQPnFj7e5fjJem8gakxdvZDF5FMvm0B5Alwt9uit7Wrd00 rYmVwGhy1NYoXyUsg77D4LbPaj8hQBs= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751288456; a=rsa-sha256; cv=none; b=1zEmXhso1hBATRED2K16fEQZY4LN9QpSY08iONsrhDLOppjHSSG7bGg0qFGoxcUz894C9s c64L3ZuXOc6qYMCv3/Z+qVTPzRYI5zmhZBPh0Om03Wbg35e+E+V4nF9cDpMNQsGWLg0ICQ WbvgZZ7B2lXRpcyRkccAiaWWUx1bi2o= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=Wnr7Ksbu; spf=pass (imf04.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.133.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=1751288455; 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=Wnr7KsbuCqm3xnlFAojmIdtuYsV1z6Z9GVn3rqlRL8wo2RDUen/RFhOXF98QR8JWcsnFLj mqn/82luA2g43g0kPDP3enbidsM8YQg4mAc0ec64NiyVfymg5OsFfms18Gw+uj4VAo9uAU IYdf/Baa5fpp4mE9khQqoDsxMAxaHyA= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-346-KDcGnL67OdmsdqgUYWYDJQ-1; Mon, 30 Jun 2025 09:00:50 -0400 X-MC-Unique: KDcGnL67OdmsdqgUYWYDJQ-1 X-Mimecast-MFC-AGG-ID: KDcGnL67OdmsdqgUYWYDJQ_1751288449 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a56b3dee17so2652104f8f.0 for ; Mon, 30 Jun 2025 06:00:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751288449; x=1751893249; 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=a1UTTBh5wKaEgLka7OB9BoI/RnVB25l7alO2DyeXdciuYyuILP+tn6WhMON9wjAUiB hOcfGuwwo+9iqiQoYnXlXHaRJhF2DJcDkmdGLe7PC2yHCJmkYLsJywqLHQ0N+HQZqrf3 DHhHz80gxc43ZF4Ryhk2V9e2HVmngZ2a0M7mXEv9/dzxiJKhXQodlj7e+MLp4B4MBXdi yT/MeNq7WstbB/V/47bzSf35LLD+6dbLGF357ovpOgORDmMVmdIBaoSuRh/fueEIPIgb fwlrnFNso6DTeZvXaeOW1Z8sYhfJOeuDQnbGrrqgw3RYngurO8hlSuJq38LzXNXqYABr txGg== X-Gm-Message-State: AOJu0Yx52rNIQt6JKh8r6ZZOFpqsd55fF+9MRtwiGdXBlAbjKSVs6Ltl uECuqCwZRH9q6prsAjzLs5HN1/ooHtdMRpfsSd4LJH1b3lpYAm3MqztB7tXMGfiOs5nHRNUKq5n +0cHHOZoFk6Uo+neu9rDDdkO9bF5HHlFQjxhSxiKNOmPGdCh6u6Ll X-Gm-Gg: ASbGncsmqarsQN4jJwOSZR8scXulrDYpMSfRxOYytnHJ+ifi+YYQ7/PhGiDNquqxCDh ecrzZnL1SbxGHqSY1xU/5EgyY2LoFngNF9Mev4wXbMKmSZ5hrrZIGexyV7p0qcCwFyN23vxMh9S QQXVGuTk5x6PMhDjfBAIK2Xqefd+54ZIi79PZeY0MD0nQVah19dhi9x9fyGFaNWN5D9mqkeHQsa z2Gy0D8yAOfXJqN10fOS7EjQrWPLPgErgKW1/rpN906aarxh/KVr8iDynh9YsDftAQ5VZCIeKb0 vypkGaBgivof4e0LNDXcTxKvC5e0s93TRLbgWySXMZueFTrqPXOyddoNG+GxR5p57M76WgWXSUv T5kNserc= X-Received: by 2002:a05:6000:2186:b0:3aa:ac7b:705a with SMTP id ffacd0b85a97d-3aaac7b761amr5970049f8f.11.1751288448893; Mon, 30 Jun 2025 06:00:48 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHB1TGCDIUZET9zX0pBSLAtGHjOK3AMuobCCTliN5r8xMP/2a92mQUobTb4bSUGBJMrG9p6Jg== X-Received: by 2002:a05:6000:2186:b0:3aa:ac7b:705a with SMTP id ffacd0b85a97d-3aaac7b761amr5969952f8f.11.1751288447748; Mon, 30 Jun 2025 06:00:47 -0700 (PDT) Received: from localhost (p200300d82f40b30053f7d260aff47256.dip0.t-ipconnect.de. [2003:d8:2f40:b300:53f7:d260:aff4:7256]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3a88c80b5aesm10252042f8f.44.2025.06.30.06.00.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 30 Jun 2025 06:00:47 -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 v1 12/29] mm/zsmalloc: stop using __ClearPageMovable() Date: Mon, 30 Jun 2025 14:59:53 +0200 Message-ID: <20250630130011.330477-13-david@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250630130011.330477-1-david@redhat.com> References: <20250630130011.330477-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 8heg74smriLHvRxo-eJTCCkRA9dp6hUTydGUn2IRF8A_1751288449 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: EECEA40015 X-Stat-Signature: qck7imogcjojye6s373qog3q84o3mins X-HE-Tag: 1751288455-314644 X-HE-Meta: U2FsdGVkX182/YEJOLzny/vcKoN3Rp6jgNqzjxj8vf5HZyrfEDqOymUOZQEw3v9KLGMu4WpUvaCEXk6UHumd8orlZPn03NTV+uDUjRvT47LUNV+ge18DAOvyEhc8wdXmq/V7ycVK8RIGj3gV++go4DRavosWL70YQTfKWnQzJqusinBepVCH0uvOhLKU+bu3oQW9F9b6L/ZJM7NYNfy6vnINHcKSEK2aSvHdvPMwpmmO9FTs6DsqoNhdWUjJdJfOEqBZjVGY2QUcYlMIqLXmeppz/a44sfW+qQ8gnw7Yol6Jcc/cgautajRfO1r3nfRbXqg2RL9DizzH1J+NsCAkVO3EbIJFzasNoUiKJfbyEhFLSv4Bir1i+o/9MhEdj2VCJrq4k2urlO9m8zMJeciM3o4ckZICfR5bsNrj7rhJDynrHVsJKtjGHtKNbJEHjhws7QoptdTxtQNIISGqgciz2fobxRMgNU6qnum6zqn9ZY/qPnCMTTMpEiVTapxCYzZCwGX7uvXaxQIO5B5LsVyJqZoD+bCfcOCtDXyw2JtiedMzc/tgfCq1WqQRSGJzDBPikuu5VOGogmU5dB9QwQqJe5RWIUWbD4XwkkClm48Uzbx15PWt51Z5opQPHCiV86490envgAoPDcWb2oC907bc86pYz/PDxb8fRag0R8SzKWiOJo+X/UsM2L+QxxNpX4i4uY+jRx4rQ3MXOcKGpVFt7U/mOWeS9/Ua4bzFdy5VfmTNefuZoclY8i0K6GGeqo6ww+kct2je+hAkZGSVzYBgJsfYF49FKNOidiI9fm3tAloTSR0f2YujAPChlXNPVV3Y3iWccX3sEHXuj4Cj18m5bqskbPoKHpXcrb/XRz0wy+OJNWYC93OmO+XI+9Z2zIP6kZnOSLdwFNrfkG5cu22P9tVZPwFjZ56lSV8VMgnLJ5xd+hNiu2jbWUGkNS0vculLTJoJs2wjr6whnLFSCS+ V71Y4YV3 3WJGCGyn55ZsN5DKwEF7KstNGK+nlpa6f2nRHya4pK+oyq7sV/WdoxdtBFHAgqUKxsr3e4ZE2PK2v15X/qKiKztkBdaXud33n7PHXwqYknLL9jpBzRC9cE7MBeq+8T/pnWfTvXVOSo3X8/U5FE0E/H4XzP7Xlh2aHlZOlQ8dY7mgNTXDOunl0E5TUnHaIRvV1npO2gXQ4bFK0Cp84hNzvni2PrejmOAkjU4gpRbQeys1ynaK4qoVY4vJwxQLetrwXcuNUkgbxp47ytf0IX2LNIFLpoBBLFxz1d5I8DIePgQkGKkQ4tmwb7bImyDQDNuaPz72Iv5c2sCOJh/uYY3UYxzB7UfSG13wQuSSCp/l3IF4Y6ABugKBEBKMvJqbSXvxmVui7QJaF3JtnLkNdQ6ewYpcb23FBi56sbtHoz2A+bp3yQgWTXebJGkE/j9ipP++yqEFpIitpnVpiYf0GvApcNwHdMAFDYD50pEe8Q48sbM9siHTjR5C4zLQKIRNM2IYLjc5eqr8tOeZMzzmOPjiyFEBXtDS+tqaJ9wHNZcX6QD6xAyj8Fbbj+Cgxmkwa1EX6QlP7/kGOnNlHawAa3VMsUQhW9A== 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