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 72F69C8302D for ; Mon, 30 Jun 2025 13:01:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8EF546B00B6; Mon, 30 Jun 2025 09:00:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 879336B00B7; Mon, 30 Jun 2025 09:00:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 78E796B00B8; Mon, 30 Jun 2025 09:00:52 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 68F376B00B6 for ; Mon, 30 Jun 2025 09:00:52 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 357711061BA for ; Mon, 30 Jun 2025 13:00:52 +0000 (UTC) X-FDA: 83612076744.10.A98B190 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf13.hostedemail.com (Postfix) with ESMTP id DFEDE20028 for ; Mon, 30 Jun 2025 13:00:49 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=S0fAKJlz; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf13.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751288449; 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=rLSy27pHIWSaumHdHZbZB7d4Xse7WARvWeqJ4bM0kJg=; b=JqwDESeabTBi33HwUUQ8yu1rJSrS/CvzpQXJsydR1PLk/365s4JNIhygZFxu8z6pIE4k6q hUzKaS4TnCBOlSFvecFaKNG0lC/Inp9wv8H+V8cbU2TM0/CqdE5C17mw23SyMD082AtL3r qiLMVwDWju0vZYXF3ElX0wKx2jRyzF8= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751288449; a=rsa-sha256; cv=none; b=LUKI4A6IRSui5LmTFwo95HSz27YSTI8d7PbbUiLtz/IeOI3t8OKbUhambrlYZZR6xU3BYZ eNS9t1J4hicd53vQcgZemeINl6ETLcsSqyaVARC6UN3hdPzKZmdcLwMZENL0MEftMLSK9u V90SbOffxobiK79mPRiBUXBo5RHngg4= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=S0fAKJlz; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf13.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751288449; 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=rLSy27pHIWSaumHdHZbZB7d4Xse7WARvWeqJ4bM0kJg=; b=S0fAKJlz3k0GOIKTm1+NwYII2cp1kPgQnYezQazh1TZ1e5OJ6Qe0v4hUI7CD+f/i9w/8Wx NXBspU0GJ6QLvTBfFzRYVL2NtSQ2/o3ou/Ln3pURrHG5FLSiXvO5OhXIQHFDlnfw6L3LFL xPVNTHgDwHYhnGLBEiHhxNwvMs7fwPw= 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-407-Uu7Uc9ttMIyNssoP3WnvVg-1; Mon, 30 Jun 2025 09:00:47 -0400 X-MC-Unique: Uu7Uc9ttMIyNssoP3WnvVg-1 X-Mimecast-MFC-AGG-ID: Uu7Uc9ttMIyNssoP3WnvVg_1751288446 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a523ce0bb2so1134398f8f.0 for ; Mon, 30 Jun 2025 06:00:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751288446; x=1751893246; 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=rLSy27pHIWSaumHdHZbZB7d4Xse7WARvWeqJ4bM0kJg=; b=lJkLTcsN47SBxCiJIxr0yMWQ3gGLvl1TVdQGnyje6vNvKMmJ//QzXncYsxL2/QnPse wgTcMufqaSyrzsEUyK7zOcU6xC1sblYvJgzhF3DaZV8UET5YsXbbT1BLS4IUBYboQIWI QQx9sebf9q00m0nu3KxeRxTbodgivGJajPOH2kxbR+6Hrwkfs+V/JHr1V7j3f+ByIwwg fCBDoKPoh+kOdkqHrEYqz0go9q2qLdYLWqP0rqciW/nyX5T09BMNisK+r68va/bOTNII Y0YXtr+OawiwyjUk6ejkHoHJbJdmK6M54iZr/eyxt7eTKDGQLU6s+wQq4pipWDk8PUju b+Mw== X-Gm-Message-State: AOJu0YxJBm+z+aH/HIOPpaw6IkW8b6B+XJT+6uMVMrU8OB++H1GAhXvk 3Vxhcnb59/lYEl8qk2F4QouCNSYQyb/oKvxbWvniiIT0jwGg1K+hyvtmRKZreFrRY3AsGFWEv2k PIzBFJ5g5y+UmiWtWHlgjSxF4tOHanCpV3cXpqeBPhG0pldOo/IhhHbax6vHst2A= X-Gm-Gg: ASbGncu8Fe10QVcZqF0sphYv1X/REKO0BL6wzHkosUNcrdWN9dQWbTmRXtiFjaTgx8L jYOyd5bGgBkO+Q0xYgqOSvBP/CwqrEqHwKDFDepAgZt1oSIyaGpUUAQoqzGMi1BS+zq0SGJH9Fd +ujjVNkLki3urGzAsUzObWXZFPBCyCerW9lGy78xc4gswQegRE2YHxT6AgQTTEL+9b+HoKlrDW2 hw2o5kfZ7l3anN4IS8zoLrlY0dky8Jk0mKgGaZ/2WKNmC4Z3WO4X+8B0lJzu6f1/NzvoyDkpUA5 FITgeWCNM8SWqnB623v1J6YGyqJMpiQikyrq3F5nAoubUfk5NgQlXE1OZQx/5ULdGcb3NtSxv15 UOT95H9I= X-Received: by 2002:a05:6000:440b:b0:3a5:287b:da02 with SMTP id ffacd0b85a97d-3a8fe4bd16fmr7883151f8f.40.1751288445799; Mon, 30 Jun 2025 06:00:45 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEZT4aB5+IKBjQnh+yncb7ZFTxj1NuN2dDZeVwVJqvRnlRrWkNRGfP/el4NU32fGgywSRoLtA== X-Received: by 2002:a05:6000:440b:b0:3a5:287b:da02 with SMTP id ffacd0b85a97d-3a8fe4bd16fmr7883079f8f.40.1751288445063; Mon, 30 Jun 2025 06:00:45 -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-3a88c7e72c1sm10293032f8f.1.2025.06.30.06.00.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 30 Jun 2025 06:00:44 -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 11/29] mm/migrate: move movable_ops page handling out of move_to_new_folio() Date: Mon, 30 Jun 2025 14:59:52 +0200 Message-ID: <20250630130011.330477-12-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: AO05jvYTC4As4KLNuNfsLEtJLkJTO83hlgvsv1kfYwQ_1751288446 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Stat-Signature: isftiqwe9mx5s39f1fi98w68udf1u7c9 X-Rspamd-Queue-Id: DFEDE20028 X-Rspam-User: X-Rspamd-Server: rspam07 X-HE-Tag: 1751288449-39598 X-HE-Meta: U2FsdGVkX1/Mgz5sNDnKtd+K1skoRLYGYPz9ggk3VLsQSbIE21oFKf5gKyrLrpJ/m/ssfdes7LyE3XgradAFTl8MbP9HLOy6uZAkRP9MgE5tn/wTT7We5jS7j9JqOUsNrob4ZBX3gb7QqQWXoGC/IsNYUZUlm+3hPhqwB3/VQhucOMf1GOyxFa7qoOeBrr/SyPpT4W+z5XOpGLfNvBDT0/W7j/ql8Mx9xNAD1/iqX7NDJeNwVcdNxWI/ePV0gWg8lj3UL/6SgZ975nvKiZPnCyazTVs2+QfT4mB4UItuFZk2Yb568ehhAd3TQAq1F5a78SWqr+3Bx+gOYG416Zw0WScnhL0Uc+dcVGRNOFjebCixTsMSnmxAwFr8MnO3CeC07y8pgS4xMmErypSqrdF4wBUD5tFc83fyInWweh+CYVT2/PEpQr5PlJAdKC3okLZA3caRFiTdzDcHE7hQaZdcejXoVHUrANiOuC43JXwGgsFQyYgcbvNSml8LR18gd/z4whncqq/sVpcjZ82ozED3TaykEWIUuT0dvglC7zyn8u04geZwzAVY9p13tBwd0Lr3Ig0BjOl5lIwCs54J0MNARydVKtCCkRV7ov2DULfAzO+yPRoYIwirh+jFxaUVSx8iO6Hrk67t5aMgFeLgmWgOsiEgXzpCTSGeKQEikAqxbw//0jT24NHIyL5e+0eGx30Y+OCq7ARrK/t2NjwwcZQg8e7FSq2c8SYY8Ut8sMi8RZua/sB92ZJkR/+HeEyMJzAvIf+xtP8zYKJmlsXmC1tV6WYgt7BY6v2N4AcTmfBtKxfXWnzeGFYi3kZ/Bwn+6o9dvELrAItxpf6Nh6gvW5aDza6JjMvv474sKaXkK0W3bxpT//0CneTlGNi8N0lFz75Q3qg7cHoX0bJjtNkzpXAVRLIH2ncXpfd0Ym3Qcv2U1+/EfBp6siJGjBS6Wd2eYDVQu0S1GhpyCPNfKPERgsc VW//Xo4J PX9MGDpCuz0lxpfaDkU5q2T0zstYspj5SyvkH1Y1K9R64W2Ytv/121boXKM7hH1jS9ylfhc67MCABxf0+e5XjYX97syRYNEiGMO0DaUKof90FRarWNvtfyAXOlZh7LFoaPUyqOlgdQNiOtWbau2t/ifI24Que9NLaruIPyvcEIAaBE62OgtuLsVGilcCc5PzymVqm6f5710481GmtBMMuS90i7d/nzv/BYBVGYYeHvtlu/l+I861PVB0QYtHqf1sTfi0Fomk1HGXtI5v6DB+hlMIAL6Rn8as25cqS5uToitSPZfnt9P7zKxl8+Z9d2Z8vg70QdVjaWDItvuDrhXSOKiI6Be2lXfK8X3Fc7uI+4ulyE4os7mjX50Oz6YvAmbtlkkhAdLJM0nRvwc242+dpoZJN6i/jGVn8kC+SWUbboOt9mc4qf4zR16CGCoft7mDgiVEcRoWxnuLMdKMD1f8ia4Lmt2eCOV8ceZA7ODj5OayhYnhizg5zFWXX02l2PYAC5kep4Hf2MawqOXtlrXYY7t+SUP3ZMAAI82mP/9FPUYCudhEpNur5PQBhCmVVDkxoZUSQSmIp1u3PryFjZyUkJJ6qRT4nbRE9b7yZB8/si+GzdgyDhCoJIRpG0IOfP5MkDTcAfs49JfG1jnDCuVz//GVptw== 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: Let's move that handling directly into migrate_folio_move(), so we can simplify move_to_new_folio(). While at it, fixup the documentation a bit. Note that unmap_and_move_huge_page() does not care, because it only deals with actual folios. (we only support migration of individual movable_ops pages) Reviewed-by: Zi Yan Signed-off-by: David Hildenbrand --- mm/migrate.c | 63 +++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/mm/migrate.c b/mm/migrate.c index 0898ddd2f661f..22c115710d0e2 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1024,11 +1024,12 @@ static int fallback_migrate_folio(struct address_space *mapping, } /* - * Move a page to a newly allocated page - * The page is locked and all ptes have been successfully removed. + * Move a src folio to a newly allocated dst folio. * - * The new page will have replaced the old page if this function - * is successful. + * The src and dst folios are locked and the src folios was unmapped from + * the page tables. + * + * On success, the src folio was replaced by the dst folio. * * Return value: * < 0 - error code @@ -1037,34 +1038,30 @@ static int fallback_migrate_folio(struct address_space *mapping, static int move_to_new_folio(struct folio *dst, struct folio *src, enum migrate_mode mode) { + struct address_space *mapping = folio_mapping(src); int rc = -EAGAIN; - bool is_lru = !__folio_test_movable(src); VM_BUG_ON_FOLIO(!folio_test_locked(src), src); VM_BUG_ON_FOLIO(!folio_test_locked(dst), dst); - if (likely(is_lru)) { - struct address_space *mapping = folio_mapping(src); - - if (!mapping) - rc = migrate_folio(mapping, dst, src, mode); - else if (mapping_inaccessible(mapping)) - rc = -EOPNOTSUPP; - else if (mapping->a_ops->migrate_folio) - /* - * Most folios have a mapping and most filesystems - * provide a migrate_folio callback. Anonymous folios - * are part of swap space which also has its own - * migrate_folio callback. This is the most common path - * for page migration. - */ - rc = mapping->a_ops->migrate_folio(mapping, dst, src, - mode); - else - rc = fallback_migrate_folio(mapping, dst, src, mode); + if (!mapping) + rc = migrate_folio(mapping, dst, src, mode); + else if (mapping_inaccessible(mapping)) + rc = -EOPNOTSUPP; + else if (mapping->a_ops->migrate_folio) + /* + * Most folios have a mapping and most filesystems + * provide a migrate_folio callback. Anonymous folios + * are part of swap space which also has its own + * migrate_folio callback. This is the most common path + * for page migration. + */ + rc = mapping->a_ops->migrate_folio(mapping, dst, src, + mode); + else + rc = fallback_migrate_folio(mapping, dst, src, mode); - if (rc != MIGRATEPAGE_SUCCESS) - goto out; + if (rc == MIGRATEPAGE_SUCCESS) { /* * For pagecache folios, src->mapping must be cleared before src * is freed. Anonymous folios must stay anonymous until freed. @@ -1074,10 +1071,7 @@ static int move_to_new_folio(struct folio *dst, struct folio *src, if (likely(!folio_is_zone_device(dst))) flush_dcache_folio(dst); - } else { - rc = migrate_movable_ops_page(&dst->page, &src->page, mode); } -out: return rc; } @@ -1328,20 +1322,23 @@ static int migrate_folio_move(free_folio_t put_new_folio, unsigned long private, int rc; int old_page_state = 0; struct anon_vma *anon_vma = NULL; - bool is_lru = !__folio_test_movable(src); struct list_head *prev; __migrate_folio_extract(dst, &old_page_state, &anon_vma); prev = dst->lru.prev; list_del(&dst->lru); + if (unlikely(__folio_test_movable(src))) { + rc = migrate_movable_ops_page(&dst->page, &src->page, mode); + if (rc) + goto out; + goto out_unlock_both; + } + rc = move_to_new_folio(dst, src, mode); if (rc) goto out; - if (unlikely(!is_lru)) - goto out_unlock_both; - /* * When successful, push dst to LRU immediately: so that if it * turns out to be an mlocked page, remove_migration_ptes() will -- 2.49.0