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 6F637C8303D for ; Fri, 4 Jul 2025 10:25:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E1DC06B801E; Fri, 4 Jul 2025 06:25:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DF3DA6B800A; Fri, 4 Jul 2025 06:25:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CE2D36B801E; Fri, 4 Jul 2025 06:25:34 -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 AFCD96B800A for ; Fri, 4 Jul 2025 06:25:34 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id B94D4140260 for ; Fri, 4 Jul 2025 10:25:33 +0000 (UTC) X-FDA: 83626200546.29.748CEE5 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf30.hostedemail.com (Postfix) with ESMTP id 6DE9D80005 for ; Fri, 4 Jul 2025 10:25:31 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=hkA8riY7; spf=pass (imf30.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=1751624731; 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: references:dkim-signature; bh=Sro688HYIitAmPcvBgChCRtb9/I9qH1hXgFepSE52NI=; b=8gUko/Sfxigz8g/4aX4WhjXf4reaAIPPngNWuNRY1POf8Q5i33e0U7WBvTwkl3neJvaC3i n5CYJYH/OS1CUF1+bprmbu3+Ao+TaScdQnBWvn/BIqnNFq+q/a0uosxSFNhPhB7TMr8G7A gi1fXcKHBFAvGg3X+ve1GXkcEZxQTfE= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=hkA8riY7; spf=pass (imf30.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=1751624731; a=rsa-sha256; cv=none; b=u118NqlnLK6iFyBjTbcq/BDKraJx3NBj5ybAACnSXGabJ12T/iqqG51NIr1uMbITwGmyf7 BDZAIsaGGNfbz5KsUiDN1LWYSXp0X9l9M90kzPvNmng05NWEEDsBXQKyDpS7oh9kG8v84P likluXHmRMXkABxyWlJ+lWIN45x0ZV4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751624730; 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; bh=Sro688HYIitAmPcvBgChCRtb9/I9qH1hXgFepSE52NI=; b=hkA8riY7B5nxfOljOaW5musyCa2F/SmSOcFAgDFOv34DvmOcH/eUK2xcUolqr7huvvenjq LBY8bAdXl9uIPuxyljuM+dpsa8LjOGkg7y6xC/9pf65DIrJr0UzDzFz/jvtIvof45JDXWy zxzcy32OoBgP3FbhhM4R8i0T4iW0SIk= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-524-leUWrKBEPsW-mNNNCIjZxQ-1; Fri, 04 Jul 2025 06:25:29 -0400 X-MC-Unique: leUWrKBEPsW-mNNNCIjZxQ-1 X-Mimecast-MFC-AGG-ID: leUWrKBEPsW-mNNNCIjZxQ_1751624729 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-3a4e9252ba0so467243f8f.0 for ; Fri, 04 Jul 2025 03:25:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751624728; x=1752229528; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Sro688HYIitAmPcvBgChCRtb9/I9qH1hXgFepSE52NI=; b=nbtPJNVYe9+mHXib5PKlhDD72IVQkzkeDZZCcMsV3A9hNW3rqiwKrPUgoCimUiF070 z6YPh9yofIOryMDgm+sP394W8m01QCBV7AWJGfcXwafX4MijMqow5sx59JND21srpcuR 9YPLp8XVWcnxy8gBdAgvO8pBPqTHQA8AJMYRvxJqLpQCPs8xD0C4Ydylsm7GtvSFIqwc nFxKSBS+S2Jt73lwwKxfOACdtb5o7xqkCeb/UPnOPqFJcjWRiSGxRe3pjGzAdNpaHuY5 +TcAX58dFcyT2qfFk/oU01iKfMw79qj5YH3FV43A/gSQD7u0cmlniKncesa8KQU88/kX AeEA== X-Gm-Message-State: AOJu0YyhjFBkuz/KI9yc6rV6iEcOktXbrUl8AzNByguO5qQLjMSdYXFV neodXK7oQXaOI0ZK4JrFfeYPCtI5WC5Xhz7wlZm6XzYjp6XaNKNdRa/Wga8YN6MNiClZIJw3uhS 5tTysRVZyZlHZbl04k0lJJPdQqdf27mmQ0J6GS7JUoqZvOc/3rzCa X-Gm-Gg: ASbGncsfQ8yjADrq2vU3+ZEUEt/mj88CvKU2pCHZ442vM7hmWO3GZs8WzEM8I4TXQNa yspElxV3XB+OvD0/hIlcoZNic+zLDmttfq8jWT/h5n1o684ELVOhBMTFferPUEwLePQplfbPnqo T/xioo0qiju7rvYsgGxaxhhWgmZ8MSLRsFB6H695aOcI20C1ud/ZLlzdqP7XhmZV37us10E/8DN 1kFiyhlE3RhDGObnjit35RXuFr/oVzZvyV23gdK5cAZak1ehZacPrcGgoUWDHPJv1e+/nr33Wmp 38ThZkUIARmz4aaJnKATAatFU7psTGtZfS6jgr+2ldmQWYsqyTpm+Uk3fhLRCuQ5JEVKo2TyNyR lSUgmvg== X-Received: by 2002:a05:6000:2dc7:b0:3a5:75a6:73b9 with SMTP id ffacd0b85a97d-3b4964f4d95mr1608823f8f.11.1751624728237; Fri, 04 Jul 2025 03:25:28 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHCjrfOCujVRy/tLPuq2vX5bnaQezkrR11WICwCcdt0ejgdnjfY6QZ4FsoDRZ4Yte6IkVy/1Q== X-Received: by 2002:a05:6000:2dc7:b0:3a5:75a6:73b9 with SMTP id ffacd0b85a97d-3b4964f4d95mr1608748f8f.11.1751624727474; Fri, 04 Jul 2025 03:25:27 -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 ffacd0b85a97d-3b4708d094csm2102185f8f.28.2025.07.04.03.25.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 04 Jul 2025 03:25:26 -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 00/29] mm/migration: rework movable_ops page migration (part 1) Date: Fri, 4 Jul 2025 12:24:54 +0200 Message-ID: <20250704102524.326966-1-david@redhat.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: ACgig0Xckf1wC25RzBk2lbFW6Q8ftX3PPvzDLhKbiDk_1751624729 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: 6DE9D80005 X-Rspamd-Server: rspam09 X-Stat-Signature: o7m8ymz9xy7i7ota64rxshpw95e83sst X-HE-Tag: 1751624731-827164 X-HE-Meta: U2FsdGVkX19Ob7XFmTOlsgkPgxoIJENGKLcwX7xENN/T8O3GRP2SfYtC3ZMpdIhMVpXqPRbm1EXVqp/ZGScHaX2drqh+eipWXAS3rcXTTldGnxcwlTdfRXbqW0Gu6ElcNhhyCrY7sJEsD9T8tSAp6c+2vgMiuzJxW9E+/znBmlmyBp9smh+XWPNQj4ANG/8TaR5b0Zlrb1Oq28p3rgA4kWvDxDCWdgjZLFF/NiS0D2Nl9Zoq0o4hBXpgdWJsd07apCY3FjJFIltHyqJ2m+IOvsfrfJousMSiPRb1aZ7VacrEvqkM6s2eMdLThDxsKjEAy64RdmDz8YOVQoIkfwPWgO5i8rl6+4lEX0Qwu8tchTJh8FDkOFeLspkmi/L5o1RYWshYxwqDpVK8QjTf/03/CJkLN/m9lpLWC/I14K3+0rbQaZe2zDDlHgAsPeEyq8krthzMTH6X3mP5n2tFrcARkaTA8HZ3OKkPJaj3TiaG9xZF5GVzUE+7S2T78DyFbC13ciiY4QD2BdvZUuefiyOMQXl6N6TS5qJ/1bn5FZQ5S7p+V9v+IvQFcGqmI4ChwxxBBz8um0HOXj7i8bRu1AY+0hgmkEP8kPEUyB7QU1H2PGl9L7WUXL2htJLmUUwjHktYH0srCbVWONQuWB5s4WFXX0T6GAIBiMTpTGswwIoASZTSCh2nUphq4S7X2K3h7GHe/zaAycKKIiu9WEClDhk9NbhnQBXWsZqq7D7YWcVQkHciqwAXdwNdHN2wz8CM3V3kuwJHf75LSV9FOLXy7SlkS+FvnWKe0fJekgKgiMKxavE2IU4lcHTU1I3Ajxc/ZU4/DJhZZb2WH+37ztEUyl/7bPs3oB/Tf/7Cwsweb8ghG1nAOZpSqjGgOo5hBvttXgeDTtvN+oD5a5ELPIJZCh/RJp1d1HOcoY/5LACrskHAqWGIxSxv4B/xXFm7NUt2afXU1txV5cKHvMKYgaC198Q 1wHJwLhe MlmoGZZgqiagJImdK2pi7YEqOifYl4n7+UoEeseJuqVdwgx6pDMsTJv+x6KanmKhxib+Mt5baymC2jPrvoWBQcj0f70Q7uYXRYJSAU1rZaY0kZ7lQNTq7c4Av6Gk40mPrPgQxIdvvWGGZMGy+8qfnOgvtlc0JqDM2nCyIhnxV1YAE9l+5CtavvSCc4ualM2sZW5pfD+G20WsdUawYaoZbjyVtLSWqPWcZwNDPQZyQAUFxR701+QrfcoEUbE0kH956o1Rj+QNtqv7hNFEGO+ghQilvq8CnaOjQR+ysKpyAJE4PErHsiZGJQzqGV4sB5PtwfI4h3y9aCaXe2jQim77jqziXhHxtdGUUy7+QNqRKQEDg6lGwaw+vPzqdPtZFb/ds5ssRMXjMk9iKRNneEeCPirHCntM9EvzpQC+oYZJNthrdm2lo6kbyw2yFX9aviHDVmjhjynFBSuy6QDSr/7lnVbN6cya8Q5juKfkl5qYhzcVNf6rPKZJBFUV0q0Y6OiGEfoSH//1wnCZKtCfA6KqThRye+qEF1WNr6V6tJEQ13zd+ONAWgtTuuoMfjTUt0xda6byuE/3rGRk0FB8M61tv5rvxX/+gcBvXFc2uYFpaxO8CNhzzPoUSDXetxqV0WPq8KY18//F0VIp2TyO1xzKzu/ULm9M7k6EGaVj+KKWqKON0pr5vt+8nW/h3oJxMRRqBKodBdqcR9Cl/EUoc7H3//cjFi9E2WGD1M5bxuPLbLOECfGNBijC1mzLfoiH2n/f3u296Nz8aOCt7bWyPwgJrLiJ+QwwnxyxlGHIIfqSa9W3YMdHZafzKn+WovAsM+hDS/1rIOnMPeqoTseyeMCiLOHkCAxPx4y5jlW/+4/oZJ2k/+G9QdkDvqV+KcwwSHUFefIk5lFqifmwtxPUyS4mFuey40+G+Cs2Q7C++9OQxTE1Xm7ul3ZiSUJyEmfAoxyPjSDDpEyU0j1Czs1f1MgT6e1mJv4TF gSxYpsmH wpKIjB4dY+NVGgj9H6LetOYjjGfU31dPZWzgRERQCH4CX9djIe6bDoHkMpxkXeM1Zx5CQxpwH8+0kPgypX4YHSYkWKQbgp7RFZpRRGJCVzt50tEWgzfPI6U2I5vmvEkS40H6nJUuOexQB1Pg7YlI4rtGa5BpyJ+HnCfkuYKwW8KK7yPuQ4Mlbpiy326GfQgEKOhX3XYIMrZ8jB8lLs70Z3YYprFd5I1nqRWXHg2c43is/UOSsurP4UpmvPuP7o340x0d0QoLIMq5pdxPRV9uEEezLE0BqSLXjUTZyGkhIH+qTsy++6nIt6jpiuX8fkis+BazO5ysemDkrEv5LC3XvCTinigJ5RB5II8+foNVjOERJooe6Lij7PsWjt1kQuZ2Z/G0mrPuIoFsWTHig4YWAoNTDOaORxnF/ukf4SkNbCKazM/+NKUhQeBLx3u/llL8maR3Ad2GrHHikQnua0uN8TNNspmCBD9DWHOjtZaO3sAhvyH92K1TyGQDnvhJ9SqfiettA6CCLZ+Ul4iEhp60b8/PmdImclJPQpEJ1w5KEo+ErrmsuTudGRSbojWlAUxVI49EzLoyPJId16kdWJy754nzzAiIGJwGLFvFewyUd82kjSZforzSsQ== 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: Based on mm/mm-new. In the future, as we decouple "struct page" from "struct folio", pages that support "non-lru page migration" -- movable_ops page migration such as memory balloons and zsmalloc -- will no longer be folios. They will not have ->mapping, ->lru, and likely no refcount and no page lock. But they will have a type and flags 🙂 This is the first part (other parts not written yet) of decoupling movable_ops page migration from folio migration. In this series, we get rid of the ->mapping usage, and start cleaning up the code + separating it from folio migration. Migration core will have to be further reworked to not treat movable_ops pages like folios. This is the first step into that direction. Heavily tested with virtio-balloon and lightly tested with zsmalloc on x86-64. Cross-compile-tested. v1 -> v2: * "mm/balloon_compaction: convert balloon_page_delete() to balloon_page_finalize()" -> Extended patch description * "mm/page_alloc: let page freeing clear any set page type" -> Add comment * "mm/zsmalloc: make PageZsmalloc() sticky until the page is freed" -> Add comment * "mm/migrate: factor out movable_ops page handling into migrate_movable_ops_page()" -> Extended patch description * "mm/migrate: remove folio_test_movable() and folio_movable_ops()" -> Extended patch description * "mm/zsmalloc: stop using __ClearPageMovable()" -> Clarify+extend comment * "mm/migration: remove PageMovable()" -> Adjust patch description * "mm: rename __PageMovable() to page_has_movable_ops()" -> Update comment in scan_movable_pages() * "mm: convert "movable" flag in page->mapping to a page flag" -> Updated+extended patch description -> Use TESTPAGEFLAG+SETPAGEFLAG only -> Adjust comments for #else + #endif * "mm/page-alloc: remove PageMappingFlags()" -> Extend patch description * "docs/mm: convert from "Non-LRU page migration" to "movable_ops page migration"" -> Fixup usage of page_movable_ops() * Smaller patch description changes * Collect RBs+Acks (thanks everybody!) RFC -> v1: * Some smaller fixups + comment changes + subject/description updates * Added ACKs/RBs (hope I didn't miss any) * "mm/migrate: move movable_ops page handling out of move_to_new_folio()" -> Fix goto out; vs goto out_unlock_both; * "mm: remove __folio_test_movable()" -> Fix page_has_movable_ops() checking wrong page Cc: Andrew Morton Cc: Jonathan Corbet Cc: Madhavan Srinivasan Cc: Michael Ellerman Cc: Nicholas Piggin Cc: Christophe Leroy Cc: Jerrin Shaji George Cc: Arnd Bergmann Cc: Greg Kroah-Hartman Cc: "Michael S. Tsirkin" Cc: David Hildenbrand Cc: Jason Wang Cc: Xuan Zhuo Cc: "Eugenio Pérez" Cc: Alexander Viro Cc: Christian Brauner Cc: Jan Kara Cc: Zi Yan Cc: Matthew Brost Cc: Joshua Hahn Cc: Rakie Kim Cc: Byungchul Park Cc: Gregory Price Cc: Ying Huang Cc: Alistair Popple Cc: Lorenzo Stoakes Cc: "Liam R. Howlett" Cc: Vlastimil Babka Cc: Mike Rapoport Cc: Suren Baghdasaryan Cc: Michal Hocko Cc: "Matthew Wilcox (Oracle)" Cc: Minchan Kim Cc: Sergey Senozhatsky Cc: Brendan Jackman Cc: Johannes Weiner Cc: Jason Gunthorpe Cc: John Hubbard Cc: Peter Xu Cc: Xu Xin Cc: Chengming Zhou Cc: Miaohe Lin Cc: Naoya Horiguchi Cc: Oscar Salvador Cc: Rik van Riel Cc: Harry Yoo Cc: Qi Zheng Cc: Shakeel Butt David Hildenbrand (29): mm/balloon_compaction: we cannot have isolated pages in the balloon list mm/balloon_compaction: convert balloon_page_delete() to balloon_page_finalize() mm/zsmalloc: drop PageIsolated() related VM_BUG_ONs mm/page_alloc: let page freeing clear any set page type mm/balloon_compaction: make PageOffline sticky until the page is freed mm/zsmalloc: make PageZsmalloc() sticky until the page is freed mm/migrate: rename isolate_movable_page() to isolate_movable_ops_page() mm/migrate: rename putback_movable_folio() to putback_movable_ops_page() mm/migrate: factor out movable_ops page handling into migrate_movable_ops_page() mm/migrate: remove folio_test_movable() and folio_movable_ops() mm/migrate: move movable_ops page handling out of move_to_new_folio() mm/zsmalloc: stop using __ClearPageMovable() mm/balloon_compaction: stop using __ClearPageMovable() mm/migrate: remove __ClearPageMovable() mm/migration: remove PageMovable() mm: rename __PageMovable() to page_has_movable_ops() mm/page_isolation: drop __folio_test_movable() check for large folios mm: remove __folio_test_movable() mm: stop storing migration_ops in page->mapping mm: convert "movable" flag in page->mapping to a page flag mm: rename PG_isolated to PG_movable_ops_isolated mm/page-flags: rename PAGE_MAPPING_MOVABLE to PAGE_MAPPING_ANON_KSM mm/page-alloc: remove PageMappingFlags() mm/page-flags: remove folio_mapping_flags() mm: simplify folio_expected_ref_count() mm: rename PAGE_MAPPING_* to FOLIO_MAPPING_* docs/mm: convert from "Non-LRU page migration" to "movable_ops page migration" mm/balloon_compaction: "movable_ops" doc updates mm/balloon_compaction: provide single balloon_page_insert() and balloon_mapping_gfp_mask() Documentation/mm/page_migration.rst | 39 ++-- arch/powerpc/platforms/pseries/cmm.c | 2 +- drivers/misc/vmw_balloon.c | 3 +- drivers/virtio/virtio_balloon.c | 4 +- fs/proc/page.c | 4 +- include/linux/balloon_compaction.h | 90 ++++----- include/linux/fs.h | 2 +- include/linux/migrate.h | 46 +---- include/linux/mm.h | 4 +- include/linux/mm_types.h | 1 - include/linux/page-flags.h | 106 +++++++---- include/linux/pagemap.h | 2 +- include/linux/zsmalloc.h | 2 + mm/balloon_compaction.c | 21 ++- mm/compaction.c | 44 +---- mm/gup.c | 4 +- mm/internal.h | 2 +- mm/ksm.c | 4 +- mm/memory-failure.c | 4 +- mm/memory_hotplug.c | 10 +- mm/migrate.c | 271 ++++++++++++++++----------- mm/page_alloc.c | 13 +- mm/page_isolation.c | 12 +- mm/rmap.c | 16 +- mm/util.c | 6 +- mm/vmscan.c | 6 +- mm/zpdesc.h | 15 +- mm/zsmalloc.c | 33 ++-- 28 files changed, 373 insertions(+), 393 deletions(-) base-commit: 31a2460cb90e6ac3604c72fb54e936b8129fec05 -- 2.49.0