From patchwork Thu Aug 10 16:36:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vlastimil Babka X-Patchwork-Id: 13349720 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 56C87C001E0 for ; Thu, 10 Aug 2023 16:36:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6F36A6B007E; Thu, 10 Aug 2023 12:36:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6CC316B007B; Thu, 10 Aug 2023 12:36:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3233C6B0082; Thu, 10 Aug 2023 12:36:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id F295E6B007B for ; Thu, 10 Aug 2023 12:36:36 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id AE9D11CA140 for ; Thu, 10 Aug 2023 16:36:36 +0000 (UTC) X-FDA: 81108748392.18.3ACDC07 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf15.hostedemail.com (Postfix) with ESMTP id A1D9AA0009 for ; Thu, 10 Aug 2023 16:36:34 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b="vGJ6/1Wt"; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=9x9XyqLN; spf=pass (imf15.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691685394; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=81VWuf1Jqzz86k9wDN7LrYfBK2s1ZDCqD4SXLtwC3uA=; b=RCmA9F2mKm/GCYrRH5iIs6z6bH+WnLmWeBApJJqDt2Tnqvn7L+D2i3kCOgVZduA6oDdpez 84sSO8QTcfOkWzdAlXajI7v+7Irg0a5QQrQ398WKZOoLKBTcrlHKYHu2GcWr6z6NyoOBoe V8atX4fXV3IbaO5vdcmTZRrkqTuFwm8= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b="vGJ6/1Wt"; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=9x9XyqLN; spf=pass (imf15.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691685394; a=rsa-sha256; cv=none; b=wxEn9/DLz/0rq/gsr7pFoqQA+fr9Vr7NmOmGjmZh/0kWbgnJC1ytMlC+CBcXnV5PSOVcNi 0u1bHBeLXBW9euVdaM4pdNs/yxwLmKYmi/yX4E4i4DHVBOo7JcD6+YH0pB1rcXeJgUnP+Z e9Su07wk8RotdT8cOAxRUZiTJAT1Fjc= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 614A21F750; Thu, 10 Aug 2023 16:36:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1691685393; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=81VWuf1Jqzz86k9wDN7LrYfBK2s1ZDCqD4SXLtwC3uA=; b=vGJ6/1WteLNGdLHhKpW6hrMYCuWBe6WzoYcWBYsk/0kPZb7z0w1EKu7Caou9OwoQqM0QPD hTllK+yJdN9fv7kLVpgI2tCN5xKxsmExHBA4r/mVMBQaMFAfb4YFTFCu538cEnR6H1DKSn dLBkK+T1U+VHRemqTiutB021iD242/0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1691685393; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=81VWuf1Jqzz86k9wDN7LrYfBK2s1ZDCqD4SXLtwC3uA=; b=9x9XyqLN8gJpEQKeJMyMY/R1t7RGpoiajCpyEbPmS092cPUZLAJeo+as7qvBiBUDFncs97 rZ5jw5kHYfhuUuBA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 329D1139D1; Thu, 10 Aug 2023 16:36:33 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id GPC5CxES1WSEPQAAMHmgww (envelope-from ); Thu, 10 Aug 2023 16:36:33 +0000 From: Vlastimil Babka To: "Liam R. Howlett" , Matthew Wilcox , Suren Baghdasaryan , Christoph Lameter , David Rientjes , Pekka Enberg , Joonsoo Kim Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>, Roman Gushchin , linux-mm@kvack.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, Vlastimil Babka Subject: [RFC v2 5/7] maple_tree: Remove MA_STATE_PREALLOC Date: Thu, 10 Aug 2023 18:36:33 +0200 Message-ID: <20230810163627.6206-14-vbabka@suse.cz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230810163627.6206-9-vbabka@suse.cz> References: <20230810163627.6206-9-vbabka@suse.cz> MIME-Version: 1.0 X-Rspamd-Queue-Id: A1D9AA0009 X-Rspam-User: X-Stat-Signature: k7r3dcdyhdjiqinyf3okqmojhpuupzeb X-Rspamd-Server: rspam01 X-HE-Tag: 1691685394-99795 X-HE-Meta: U2FsdGVkX1/NbAWfXUoaCJjV+xrqNlv+zJrkbjGz+V44JIYmpKuPwId9wwB/ACZq4snZRhW5DTZHtRm1kuVxo2EHgV6VKZz82OmPEehM2uqZ2MgcYILPDe+FuWTiNxENV8pu/QtR4mBOKqVkSc7IUojA8jyUEdXgY/DohY7hvxLvRq/urYr/QHqO1El105S3VeNl7Mp2lhOkZHfGVHnnVU4iIuZin3LnV2LSGsXwZnO6/1MSQexhsSBDdFKP9XusjdONKdxV1ew9FxQCnhyyJ/zMlCA9EYm4Vb40L5uvDjFFeuXK+GKuIaZm/oHw0+tJZd8tuyAF16TK/ObGZePxkF9Bq3J0lfJREdn8tRGctBwTZxv0mbTZ3Z0fLtfl21qtbs9z4tZTl6dJuDbKEJvEUb2YYQaU97mhsTo8AFu9UjPFkAsuXFAijiXZXPd+m1Ptzt6Js4BpIqwJUQLnpCdUm0vItoK39s+K009V7p2hzOKLB5yel+FsBPOQrm9sD1KibVhUvXg0sQQSEVSlgPC8BBRKsqrTPXthMbPhTTNcN/DyI4umybDALLLiDUl0RueRBjU6QdXzOlyb6LTpoEIPTVcGG30gbK1U/MfRvKP5vEgzpgOfR2EzwzPXFV2d4yoIxVQxo/VCNHPGTpoeOS2zi2wDzSkzojBoOYr9YkYhhi1iAnwFDanU2RbZ++k9kqOhU+Ei7nF3+efUfX1vsLsVqCWAUoSYnlyqA/gXPvoo1EMx/qatXGHBCXRO36DYS5OSBsCsfqjA1NAcl6DmSnDnBwipN2d84qy7Z43YgaN6484r8UQcgtQYrKM/h0jYFLctctv0l68/PLFE3/OhZMNyAfq2B/81jz8eCKrbEgc4c2cBr08spDx93Moz4l76MdaGl4Yd1o3+cNIC9sH8C2vXzCUFtXg0TQNFWkjHOIVOyH7XsJKHxye+6vxrZURaPWseESkIgYI+HwlGjPuOr/F AN5xVlgk 7hhHeRzulx3tAqd5RRz2ITBuzhOqUlesn+M/b96Gn8TStPXVg0fqrbyChLuojsp+JKNxUoZGmUXTvXT8nkFAsovf5EzDYrVYUEG9gU1tqnvqUUWwnzWoYcpYbxcyKVClfiOFpgmFf1cSdpVxg9ExZH+gOXXQjlpkJ0fys0kCBYFRYauXxXPTR2SsDxU/4KzuNktiNrwp/ppt25WxAJdlfuWLQY4zemlAvXBAQqIEjuhc6f0d54omskc3OYzhqfwEfbccB6OKqYrNavJxDWtgnaNsLFFnxlDeHz2QzbAQf6WBEX6QCN37tHqY9UaZAMlZtwrh8ASWOKnWaUME= 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: From: "Liam R. Howlett" MA_SATE_PREALLOC was added to catch any writes that try to allocate when the maple state is being used in preallocation mode. This can safely be removed in favour of the percpu array of nodes. Note that mas_expected_entries() still expects no allocations during operation and so MA_STATE_BULK can be used in place of preallocations for this case, which is primarily used for forking. Signed-off-by: Liam R. Howlett Signed-off-by: Vlastimil Babka --- lib/maple_tree.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 926bee7a274a..8bd4a79537d8 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -68,11 +68,9 @@ * Maple state flags * * MA_STATE_BULK - Bulk insert mode * * MA_STATE_REBALANCE - Indicate a rebalance during bulk insert - * * MA_STATE_PREALLOC - Preallocated nodes, WARN_ON allocation */ #define MA_STATE_BULK 1 #define MA_STATE_REBALANCE 2 -#define MA_STATE_PREALLOC 4 #define ma_parent_ptr(x) ((struct maple_pnode *)(x)) #define ma_mnode_ptr(x) ((struct maple_node *)(x)) @@ -1280,11 +1278,8 @@ static inline void mas_alloc_nodes(struct ma_state *mas, gfp_t gfp) return; mas_set_alloc_req(mas, 0); - if (mas->mas_flags & MA_STATE_PREALLOC) { - if (allocated) - return; - WARN_ON(!allocated); - } + if (mas->mas_flags & MA_STATE_BULK) + return; if (!allocated || mas->alloc->node_count == MAPLE_ALLOC_SLOTS) { node = (struct maple_alloc *)mt_alloc_one(gfp); @@ -5596,7 +5591,7 @@ void mas_destroy(struct ma_state *mas) mas->mas_flags &= ~MA_STATE_REBALANCE; } - mas->mas_flags &= ~(MA_STATE_BULK|MA_STATE_PREALLOC); + mas->mas_flags &= ~MA_STATE_BULK; total = mas_allocated(mas); while (total) { @@ -5645,9 +5640,6 @@ int mas_expected_entries(struct ma_state *mas, unsigned long nr_entries) * of nodes during the operation. */ - /* Optimize splitting for bulk insert in-order */ - mas->mas_flags |= MA_STATE_BULK; - /* * Avoid overflow, assume a gap between each entry and a trailing null. * If this is wrong, it just means allocation can happen during @@ -5664,8 +5656,9 @@ int mas_expected_entries(struct ma_state *mas, unsigned long nr_entries) /* Add working room for split (2 nodes) + new parents */ mas_node_count(mas, nr_nodes + 3); - /* Detect if allocations run out */ - mas->mas_flags |= MA_STATE_PREALLOC; + /* Optimize splitting for bulk insert in-order */ + mas->mas_flags |= MA_STATE_BULK; + if (!mas_is_err(mas)) return 0;