From patchwork Wed May 24 03:12:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Zhang X-Patchwork-Id: 13253242 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 ACE05C77B7E for ; Wed, 24 May 2023 03:13:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 506CB280003; Tue, 23 May 2023 23:13:43 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 466D7280001; Tue, 23 May 2023 23:13:43 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 292FF280003; Tue, 23 May 2023 23:13:43 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 16A79280001 for ; Tue, 23 May 2023 23:13:43 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id DDA0F120240 for ; Wed, 24 May 2023 03:13:42 +0000 (UTC) X-FDA: 80823678684.15.225B072 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) by imf11.hostedemail.com (Postfix) with ESMTP id 0CF1B4000C for ; Wed, 24 May 2023 03:13:39 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=fos9Fr5j; spf=pass (imf11.hostedemail.com: domain of zhangpeng.00@bytedance.com designates 209.85.210.174 as permitted sender) smtp.mailfrom=zhangpeng.00@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684898020; 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=WgqFNmLUsjBpqCt/LIT5GKl+BluIQMtFefGaXd2M17I=; b=PMbGm6BJqTGmfvzTz3J5jKU5otb2DfnWX5c8VYk0ud08sGrtk/UpYai8YBApbMm8X7S5v8 pJ/rwTbu27mCy5QAdGWxYk1cL3LC5AzMJ4eDU7QEseNaa0jL9onLoETWGafiLcNcpnefap /DH0fWW22Ixh7E1VdOHRt9QrDbH3Aq8= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=fos9Fr5j; spf=pass (imf11.hostedemail.com: domain of zhangpeng.00@bytedance.com designates 209.85.210.174 as permitted sender) smtp.mailfrom=zhangpeng.00@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684898020; a=rsa-sha256; cv=none; b=QswhRsokTFWw9l9Wco70I5kXsVZZg/GPcOdQsqHESnT7hvbthh5Vvp7w8ZA4APONfYfefi eMKuJHV4/bwpPdpCtucDjPvco/++SCYhPkp+LG6x9zom4I0ohEc56LD5evpmS6kwqnGoQR Um3Gs0LZjfI3+pe7vr17pplynoc7cVM= Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-64d2e8a842cso239927b3a.3 for ; Tue, 23 May 2023 20:13:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1684898019; x=1687490019; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WgqFNmLUsjBpqCt/LIT5GKl+BluIQMtFefGaXd2M17I=; b=fos9Fr5j7HfGCNewdVHPba52r/od/Xq+HkXaE/eBVHR4axkXK0nFdYi0oZZCCy7z6j Ot3MbKyYncgN49VuQuaicHywCvA4q8+r4AghQkyphciFzgep109ZY4LKjb9lhUwztXIN 3/uF6rSQdy/dt6dBkGKhxdSBO/qF8l3nH6p6sko1NwTHkLuOXTIZfQFKqDzJxlNwdaBv iN3+WueQq+mUfyQka+huDH6Wr5Qh3iNEDtj3hoYY+4m/M5HAVkQ0MjI2Rvdv3KlzAk79 nA32aCjmUw7mldHuv/7K7VxjoffhtwdiZMB6hXpYIWjVpcOEuWGegvx55XSCg40ZM/Jp 2d5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684898019; x=1687490019; 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=WgqFNmLUsjBpqCt/LIT5GKl+BluIQMtFefGaXd2M17I=; b=At8r/hvi4s+RRXQwuL+J/z2vd3mm8Kd98uW2rIblHlsm5gmbWODSTrfB/N7KV3fM4D N+A5G4/Xx5JCNqfB1DbtAbjMT9KoDbYP7hrc385saiWQ/93dXa7F04PFURC+L4WdbM7H Xs6KlKAUtBaXEaxHRgB/oWZ1Kzd2w+WbxZ+z6P6bnreifLfQ1UlMEqcq7m+RbOY/TNpA A+JaxnNeDbRLFygJZYeDF2hi0zcw4M/SUWBZKkMGFfIMHRr8pEsiYzMRrEMYbVwrINC6 ytTtVfM1GzJZ/kHmau7M39+bXyFhlImr5NdhUlNyzTcRjIiBohTzJt9A9BNMV0nxuN7f 0z7A== X-Gm-Message-State: AC+VfDz0bpe7Kd45Jmy17jSsV270bqt9ZS703vqZghl3hYwrQ4CrJZI2 wXP2CJn2EAzs80LHYyflMRyexg== X-Google-Smtp-Source: ACHHUZ4u5qWVuJZ5LJ1wZwJuBtkbV2DwExZQW26B04OfbrwVGraCJfjD+4T7DSMkKkHQBxFPv3ONfw== X-Received: by 2002:a17:902:efd3:b0:1ad:164:74ee with SMTP id ja19-20020a170902efd300b001ad016474eemr15460302plb.15.1684898018881; Tue, 23 May 2023 20:13:38 -0700 (PDT) Received: from GL4FX4PXWL.bytedance.net ([139.177.225.249]) by smtp.gmail.com with ESMTPSA id i4-20020a17090332c400b001ab061e352bsm7480769plr.195.2023.05.23.20.13.36 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 23 May 2023 20:13:38 -0700 (PDT) From: Peng Zhang To: Liam.Howlett@oracle.com Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, maple-tree@lists.infradead.org, Peng Zhang Subject: [PATCH v4 09/10] maple_tree: Simplify and clean up mas_wr_node_store() Date: Wed, 24 May 2023 11:12:46 +0800 Message-Id: <20230524031247.65949-10-zhangpeng.00@bytedance.com> X-Mailer: git-send-email 2.37.0 (Apple Git-136) In-Reply-To: <20230524031247.65949-1-zhangpeng.00@bytedance.com> References: <20230524031247.65949-1-zhangpeng.00@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 0CF1B4000C X-Rspam-User: X-Stat-Signature: xatnaskt9nzbn6k3ix4ywybkejr5jpn3 X-Rspamd-Server: rspam01 X-HE-Tag: 1684898019-273853 X-HE-Meta: U2FsdGVkX1/dB6BGvHPCK60fxIIFTOOoAxwupgtn6u4thziWk8zouSadALXR9rdc6diIUc3OEN5GyjOun7qYXmTjo7UsdVeak9V0u9WnPEwQ4JqHPgEZdwwxzc4aUvyGqWA5FPJq/zXcIa1d3P6sgu1CfDp/QpXnW8bIiRDAXvV3iOYhXSQi2fXsBwADEZoyK34wNqpT9XUnC1ndicwmImlZQ7lz0Cr+9M5d/Wp3zemjSdnZ60osZ55+3/vvatVlHzB9tTQMBtvdq+Td15cmwZkbtH5vmlMvJpDTGtxL5BDUjJTncvoIhOKcSGzSY7hXceqdkUOXP6D/VAIcpT7PRNgvnrXgl8pAOUv7RSQMBHcNpiCiezkpUuvr2VOxvFeYLzGySao4W+F2ZhdXPrKzlpXWoe48L+Qas9xhiN0avhDIOGyJ3AuwonJ2HZCAPECc+poDLpK2IpNjNDdFjB7BLUXsJaIPhYwUblTaKi/qNW3ru6xtFSnXmkntDWMwvN5493suMvdMI8G4nrtlXUvtc+yN7AG9OyS33x8Df287GGk9VJYGYQB7GCe4hh3TWOydJn/2RhTJhvwjMFfZasNwGuVE6aeMrdx/rU2kEHt3QTXGoPE3v8nihCm8hpEGqhk5DTzZl5O6E6NKaJCLX7cf2snMsfW3eajiCED1MgNxtwzx5PzM3xwuc3jzxdBjqB4bB0Rgf0dHYWfxRTgi7YboSwjdRLknlD4HDrCd6WKIujd3izVry/RjI/qkCgo262JZbK85rWbU5NF2CybcklItJ2cPBiZNQldPexm00JefgG9csPRrV5e+oJDXpxSZp1xllrP73TQ1RHpvtuLq77nmTk5ipe6LZfYdSOEKTGArSNm6db/1LBMPbG6mnRh5vYhjMNVOcqG9DVknZgkkVzdOaLl345QVW6Q6kmOgod+3/DRDIoVKnQ6xABxIxNh2OJL/Ttyno5lDWLx4IRH5dOA 6CDV2mL1 z1+MMYclDeuAliHd6XjEZBXnyOIWZLxUUETRAbnFnruoxEbfA3JAfpTp7jx6/7OKhzXK4OlrzR1niZQ4Z1uXxRDhF03ZJ28m2KX9JzEEcuJxQ/wt1+Y55iyyzizXoQ80YDApVSMFv64ZEkCNE0BqaU+8RhvqCcU96wM0Jw3WTlnijfIbUNP8hdQxfDd6ojIL7ORt1N/1tEwgZyreX8rDcFcX9q2Nfw3c8MKHcXHMWGdjEHFw4UhDP4eiN/E3JUMZUjyxlSS7YMdp6XThgWNk5SluP1D3AJHd0FB8IrfpziQh9VZ5HRKNw025kUU2LmPsxQtsML51N5O7niu/EUL9ZE/Li9rwJq8XWlufVT1z1/SfNVqz6EmnEGRwKJh+feX1wH2dY4qJPPTUwSVJH0bEgu0vqSNQEpy2BmhVOvsyYQl2kc/iIKV5mQ0Na3lPcdbx+sagIVHtzD62QQQoOpT4yF5APoWO1n6GQfI8v 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: Simplify and clean up mas_wr_node_store(), remove unnecessary code. Signed-off-by: Peng Zhang Reviewed-by: Liam R. Howlett --- lib/maple_tree.c | 87 +++++++++++++++--------------------------------- 1 file changed, 26 insertions(+), 61 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 1a2b9bb9c014..bfffbb7cab26 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -4074,52 +4074,27 @@ static inline int mas_wr_spanning_store(struct ma_wr_state *wr_mas) * * Return: True if stored, false otherwise */ -static inline bool mas_wr_node_store(struct ma_wr_state *wr_mas) +static inline bool mas_wr_node_store(struct ma_wr_state *wr_mas, + unsigned char new_end) { struct ma_state *mas = wr_mas->mas; void __rcu **dst_slots; unsigned long *dst_pivots; - unsigned char dst_offset; - unsigned char new_end = wr_mas->node_end; - unsigned char offset; - unsigned char node_slots = mt_slots[wr_mas->type]; + unsigned char dst_offset, offset_end = wr_mas->offset_end; struct maple_node reuse, *newnode; - unsigned char copy_size, max_piv = mt_pivots[wr_mas->type]; + unsigned char copy_size, node_pivots = mt_pivots[wr_mas->type]; bool in_rcu = mt_in_rcu(mas->tree); - offset = mas->offset; - if (mas->last == wr_mas->r_max) { - /* runs right to the end of the node */ - if (mas->last == mas->max) - new_end = offset; - /* don't copy this offset */ - wr_mas->offset_end++; - } else if (mas->last < wr_mas->r_max) { - /* new range ends in this range */ - if (unlikely(wr_mas->r_max == ULONG_MAX)) - mas_bulk_rebalance(mas, wr_mas->node_end, wr_mas->type); - - new_end++; - } else { - if (wr_mas->end_piv == mas->last) - wr_mas->offset_end++; - - new_end -= wr_mas->offset_end - offset - 1; - } - - /* new range starts within a range */ - if (wr_mas->r_min < mas->index) - new_end++; - - /* Not enough room */ - if (new_end >= node_slots) - return false; - - /* Not enough data. */ + /* Check if there is enough data. The room is enough. */ if (!mte_is_root(mas->node) && (new_end <= mt_min_slots[wr_mas->type]) && !(mas->mas_flags & MA_STATE_BULK)) return false; + if (mas->last == wr_mas->end_piv) + offset_end++; /* don't copy this offset */ + else if (unlikely(wr_mas->r_max == ULONG_MAX)) + mas_bulk_rebalance(mas, wr_mas->node_end, wr_mas->type); + /* set up node. */ if (in_rcu) { mas_node_count(mas, 1); @@ -4136,47 +4111,36 @@ static inline bool mas_wr_node_store(struct ma_wr_state *wr_mas) dst_pivots = ma_pivots(newnode, wr_mas->type); dst_slots = ma_slots(newnode, wr_mas->type); /* Copy from start to insert point */ - memcpy(dst_pivots, wr_mas->pivots, sizeof(unsigned long) * (offset + 1)); - memcpy(dst_slots, wr_mas->slots, sizeof(void *) * (offset + 1)); - dst_offset = offset; + memcpy(dst_pivots, wr_mas->pivots, sizeof(unsigned long) * mas->offset); + memcpy(dst_slots, wr_mas->slots, sizeof(void *) * mas->offset); /* Handle insert of new range starting after old range */ if (wr_mas->r_min < mas->index) { - mas->offset++; - rcu_assign_pointer(dst_slots[dst_offset], wr_mas->content); - dst_pivots[dst_offset++] = mas->index - 1; + rcu_assign_pointer(dst_slots[mas->offset], wr_mas->content); + dst_pivots[mas->offset++] = mas->index - 1; } /* Store the new entry and range end. */ - if (dst_offset < max_piv) - dst_pivots[dst_offset] = mas->last; - mas->offset = dst_offset; - rcu_assign_pointer(dst_slots[dst_offset], wr_mas->entry); + if (mas->offset < node_pivots) + dst_pivots[mas->offset] = mas->last; + rcu_assign_pointer(dst_slots[mas->offset], wr_mas->entry); /* * this range wrote to the end of the node or it overwrote the rest of * the data */ - if (wr_mas->offset_end > wr_mas->node_end || mas->last >= mas->max) { - new_end = dst_offset; + if (offset_end > wr_mas->node_end) goto done; - } - dst_offset++; + dst_offset = mas->offset + 1; /* Copy to the end of node if necessary. */ - copy_size = wr_mas->node_end - wr_mas->offset_end + 1; - memcpy(dst_slots + dst_offset, wr_mas->slots + wr_mas->offset_end, + copy_size = wr_mas->node_end - offset_end + 1; + memcpy(dst_slots + dst_offset, wr_mas->slots + offset_end, sizeof(void *) * copy_size); - if (dst_offset < max_piv) { - if (copy_size > max_piv - dst_offset) - copy_size = max_piv - dst_offset; - - memcpy(dst_pivots + dst_offset, - wr_mas->pivots + wr_mas->offset_end, - sizeof(unsigned long) * copy_size); - } + memcpy(dst_pivots + dst_offset, wr_mas->pivots + offset_end, + sizeof(unsigned long) * (copy_size - 1)); - if ((wr_mas->node_end == node_slots - 1) && (new_end < node_slots - 1)) + if (new_end < node_pivots) dst_pivots[new_end] = mas->max; done: @@ -4378,7 +4342,8 @@ static inline void mas_wr_modify(struct ma_wr_state *wr_mas) if (new_end == wr_mas->node_end && mas_wr_slot_store(wr_mas)) return; - else if (mas_wr_node_store(wr_mas)) + + if (mas_wr_node_store(wr_mas, new_end)) return; if (mas_is_err(mas))