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 6148AC8303D for ; Fri, 4 Jul 2025 10:26:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CE4E26B802A; Fri, 4 Jul 2025 06:26:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C951E6B800A; Fri, 4 Jul 2025 06:26:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B5D4F6B802A; Fri, 4 Jul 2025 06:26:08 -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 A0FEE6B800A for ; Fri, 4 Jul 2025 06:26:08 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 7604DB7D4D for ; Fri, 4 Jul 2025 10:26:08 +0000 (UTC) X-FDA: 83626202016.29.DE758F7 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf26.hostedemail.com (Postfix) with ESMTP id 42C43140007 for ; Fri, 4 Jul 2025 10:26:06 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=bBVhM5W8; spf=pass (imf26.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=1751624766; 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=eEGwdfNaBPNS/8dJw0FmIxAN0KCCoCPylWzGW8IBtSE=; b=qY5qR7e56twWcqmqG1KYq94aIszo2V6xAUjtv5Bxtrg6SpXuowvGPE349Dher47XozA73X ROkXlORPOM5v6n/LXr8yYqNrGDy+acaqPeNriUVZ8eiNmpnL9OnGABqUnOwSlzEvY8DbcP 6FlaHoSM1OMpaq48xWwOUCXpmTyc/ws= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=bBVhM5W8; spf=pass (imf26.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-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751624766; a=rsa-sha256; cv=none; b=AmWcSTTG+MW9GcKqLgw/VcnrKj3DOdymy8czGiHMONirXvoJpVW22rupJrHwVNi7wner35 n5s8u2Gx+N5K77tpIeYmJ/n37jVcr8XTwan98E5MSmafOS05GqU+qTPbOhbSj6I0Li9bH8 gH7NwCEh3lcOk2qIU9mgPb+HuF30S54= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751624765; 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=eEGwdfNaBPNS/8dJw0FmIxAN0KCCoCPylWzGW8IBtSE=; b=bBVhM5W8Y9zCQtfQyVTpB2vMFL7CeC5hll0dMyDJKw624408Bgd/zfyI4pN+Yki8BTp6h0 hWuILH7YYe5K3RhCC+f2MZTFOrtAwori9CL+Fyg1rh+swv7r2jwaMpcOoU0DTupHesgX7V Gg/sYCxTrW1I900kRAGRHdUCqBs8ijA= 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-458-qvUHEliYMROI0ZQP-6EsKg-1; Fri, 04 Jul 2025 06:26:04 -0400 X-MC-Unique: qvUHEliYMROI0ZQP-6EsKg-1 X-Mimecast-MFC-AGG-ID: qvUHEliYMROI0ZQP-6EsKg_1751624764 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4535ee06160so6598575e9.3 for ; Fri, 04 Jul 2025 03:26:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751624763; x=1752229563; 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=eEGwdfNaBPNS/8dJw0FmIxAN0KCCoCPylWzGW8IBtSE=; b=hZIWPcN8o0sYplDKKDgCs6F8bLy6WIAQOFdNOCNxhJHhNxTXlJGSIQZ4WyZH3KXS1S 3pFWDgtjtj64/B7LN1cm0cmimzDdMMQDbE7aBneQWFvtXj+hS5oVPJodbruLxqzrh/2n bkAS1YlIC8lrCChU9Lbb/ckKqnaG0vCZhA+MD1UR74JCrInL45KYCv/ET+6koXoqC/OV EzqckqPmy0hYQypDS+GY7aVVXmLmEUjF7FXlbGWW1GQzUZ88o3fqin2EjImff8DT7Zqy hLAfFZT660bRSM3UeOlX3i/7JtV53mmexdeRxStu0V5hNqWezhBg9gmIR2LKVPUFSOqB +VTg== X-Gm-Message-State: AOJu0Yxut5Sxa1XBrZRTcR2dJlvL6DfnvMkKLdY5kvOqy3HqhBEsswrq H2zszpiNzIFO9mIIowzf0OW02md7uzYzfPS4bo3uAAzk2ExZQGy10eUUUaKRsFht/lZQ1XZJQwK JPk2mXdRoRr0afuVuvtpwkRfSiSYlBTvKrlcxjIax9hP4UJUmupGM X-Gm-Gg: ASbGncs4ROeNpDM7P5K0Yj/vu6vgMp/paI8RR0S6/F3on024CfbWQ09gunRi3SL4Gxn OFZNPxi+UIwq82G3nu1lGkAFBWz2KzjE5O1XiBO2EiE6QOpNSAtNuaDZNJiHiGsyG1V7q1Zo0mv 3rRMetEN4i/bO+y8Xo5BktQgrTnh68Pz2RgwEuwUG+b3VbokemWp9LDgupA+ad5JFp9n1NSCMmW wM+n/4SpQQXjCsWPCL6c6s41ITX/QqYGfMGpJp5i0njmYDtEDLHzKt61UE2uzB3Yp4lii5nquj1 pZy0h6zKC7O3FiMuS6Bgfs3hiqwhYuCifwtiP51zgEZiblMzKcsGSkw5lP3myxz5cB/JyuPC7bF JQgYRSQ== X-Received: by 2002:a05:600c:6488:b0:441:d437:e3b8 with SMTP id 5b1f17b1804b1-454b30fd93dmr18455135e9.23.1751624763382; Fri, 04 Jul 2025 03:26:03 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEaIuaoI26pT9FgBV1ege1h6FCnLUNFU1vB3jXtS4mgBNx0jG0s+pACxWtozwax9rYlgVZB5g== X-Received: by 2002:a05:600c:6488:b0:441:d437:e3b8 with SMTP id 5b1f17b1804b1-454b30fd93dmr18454285e9.23.1751624762724; Fri, 04 Jul 2025 03:26:02 -0700 (PDT) Received: from localhost (p200300d82f2c5500098823f9faa07232.dip0.t-ipconnect.de. [2003:d8:2f2c:5500:988:23f9:faa0:7232]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-454a9bde3b9sm52654415e9.28.2025.07.04.03.26.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 04 Jul 2025 03:26:02 -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 v2 12/29] mm/zsmalloc: stop using __ClearPageMovable() Date: Fri, 4 Jul 2025 12:25:06 +0200 Message-ID: <20250704102524.326966-13-david@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250704102524.326966-1-david@redhat.com> References: <20250704102524.326966-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: wK2IpB5vFFJ-rY_m2VADrUMhw9Otf-el3dlguy66ro0_1751624764 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Stat-Signature: jaafqonwgt4ddpeesugs5cza1bf9s3wj X-Rspamd-Queue-Id: 42C43140007 X-Rspamd-Server: rspam11 X-Rspam-User: X-HE-Tag: 1751624766-65066 X-HE-Meta: U2FsdGVkX1+XY+cKXa7kAms/lPd/L4EXgohlNccYxHsjqoifozOxiSryulT3BUyVovMi2eJjzHo8mj4rvcXRPmKJLuOzVungg/hR1muyrnd3kcf0gY5TGXuPC+civiA6bqgnBF9W0DZl4kldgl3B9Lp5JAbCLa076y4TG4COrPeVaoUMM0TNRAndcNQcdM3ZpaH0K1OhTw39NEISQ11lcklNsquW5emq55aqYli8o6oKo4TvklRC0VXD1o7iDz2pOH/Lwl7SR9k1rn5bgPi+1Ojufac8eQmeqnglZBA6KHyaeINb8N2OllwVeIgLEta0+yepPt2rw9QlR+PkTdtqu7JKQI2JSWmbCU8Jxw9cx6m95LpnO5UKPRWX0a3kaq04/Z5+GyDrNGkGUXB4Yl6JdIoJTCeZz4m4gbiIJgGM9vVdvsZv+1tRzEpqINUVmj8BDKhGr9yjCnPwSQZF0sMdVjsXvIjW65sy18DVx9yYKK9+bRbiMWoFp8xCeRrka2MBXtRZ8+HFyTeN9TNH3ujtRC9umTcUUTW6ybl71iRYwRFt0tTDedbURuo/YLw/UQPzAS0dKdHlc/LJWTT7mMxBYvMirU9u2dV/aUdJw+l3yfxtjReQmOjUjWZFOxAgW8epXbQvuGWdSG6fbdI9OWIAZUokkdLp0hTFyf6psHfEUgcHs9XwxDkS8zCGFa0WwBXbZcrXs0WcsU7uQzG1c2XSeJY4Iy3ue1Tl0fNaSRbe44933IGkKBN5tuT17qF6mmZfTvQAIUEoJ4DSsZTB3MLe7nO3WUk+3nnKtH0KZy2pp6fuO/yz/NpteAUouD9O9xaDJjJ0BbDpmdtJDcdXms1hUiey9JunXnjEhw0GVbBZvAK0wWGnXHtaw/wyGxx/62LUr3VOzA+Ad/pDwFR9elk925jkSRHuTmOuRv5SFOTluNyONqFx2epKCd5jQOAZ/nQxfiuzQbpU6/21VQfhl14 mgO5+f4M kgrwjeP0W9Sz7JCuKg5KHj4jXYZsKu/fdUVAywaaQMdrM5Ml5Iz0kT/Yt3NgwbHpTjfgT58ZIbczdlYsQKbrIJvoT5NUzOJPmcXK9yM/uuT83FpL12jwTNLRNiF4WH8EdP6IZPXVfoZ05VAC/ol3EWdFSBBFyAqocQZR/7nW+0X7qygBxfJIamfj1/gCODn6TKAHiZpTHcvBLCEqSaMLjZ2wFm4fg/R9GEiqkyfsBy4Jjkg4y6HnXtU3TviZyO105O026B1WFCSrUvS+kGkUl46ho41UyOqttR/r9QSA7sIQaJ3kbynGWB3jdI1oPNhWALTK1DStT8XBrCqTfL12uaPXaR7W0FsLzsyfB6d9LxtvJ99ICoMVBcSV3hFDUVKiWpFu3Cyl5enCwFhwXnGyUPS0ZOT/RySYWx1UbVmFtVrxSiVKCGFTqZISUyltu4oZQP0nbvO7DeZNxt68ILav4Hlz2vM7mptXwHqHFp9FQbjsKK4Bfw6tKG18E/aqtwcFCUwQGU1FYgLMYQ4ZIjKaQNw6zsnKtvJ0JLQFjALo2q7/UH0iQxURRmOOldoKNGSoC8H5WZAH/ORShlr3oOudEjpamC5AR3Uv2hRyFrk1WtdPpeZYXK+iTEyqvcYAL3f7Ogwsxq+XXIq3kvcoKvS3XEHFVQw== 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. Reviewed-by: Harry Yoo Reviewed-by: Lorenzo Stoakes Signed-off-by: David Hildenbrand --- mm/zsmalloc.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 626f09fb27138..b12250e219bb7 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -877,7 +877,6 @@ static void reset_zpdesc(struct zpdesc *zpdesc) { struct page *page = zpdesc_page(zpdesc); - __ClearPageMovable(page); ClearPagePrivate(page); zpdesc->zspage = NULL; zpdesc->next = NULL; @@ -1716,10 +1715,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, @@ -1737,6 +1737,16 @@ 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 + * it is isolated for migration, as the page lock is temporarily + * dropped after zs_page_isolate() succeeded: we should rework that + * and defer destroying such pages once they are un-isolated (putback) + * instead. + */ + 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