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 193CAC7EE24 for ; Thu, 18 May 2023 06:10:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5603D280001; Thu, 18 May 2023 02:10:18 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 50DC4900003; Thu, 18 May 2023 02:10:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3D6F0280001; Thu, 18 May 2023 02:10:18 -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 2ADD0900003 for ; Thu, 18 May 2023 02:10:18 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 024DA1406FE for ; Thu, 18 May 2023 06:10:17 +0000 (UTC) X-FDA: 80802350916.19.B34A84B Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) by imf24.hostedemail.com (Postfix) with ESMTP id 405DF18000F for ; Thu, 18 May 2023 06:10:15 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Hr9LZpzV; spf=pass (imf24.hostedemail.com: domain of zhangpeng.00@bytedance.com designates 209.85.215.173 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=1684390216; a=rsa-sha256; cv=none; b=kPutjYFwHeLYmVPz1z9ZdIfBqeBBqHQsPN4d/wVNM04hw9mt7lQQkPjjZYy0iByd19bWfx +UNY9ilbx5wppjgFfbgsiX0Gw0lIHeFQ4HBN2c0qSuixyfScJNvMqDW+BqLXhsY6+NOBxq 21HHU6H8yFwabaIHSWZd8FciJepgtLA= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=Hr9LZpzV; spf=pass (imf24.hostedemail.com: domain of zhangpeng.00@bytedance.com designates 209.85.215.173 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=1684390216; 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=EdZ6lNhcTbmmawstm709fk1BlCRQMqv9MWk98EMtELc=; b=CIDjsX6/dU8wn407TeN8Pl0yTqSlpdgXErCnX1WmET5B2mRnv9+FQAmBzd1d77+HAEpnNq A6kj3qKMZx8KFR+GnPM6EqA+OLxgy4izKd8G65dyePRSIKBHJWjAvKPspdReDai7AKIh12 nNSJcwmJ9k7+Xq2azVolQstxv9KCdhk= Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-52cbd7d0c37so1073531a12.3 for ; Wed, 17 May 2023 23:10:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1684390214; x=1686982214; h=content-transfer-encoding:in-reply-to:cc:from:references:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=EdZ6lNhcTbmmawstm709fk1BlCRQMqv9MWk98EMtELc=; b=Hr9LZpzVKqkv/NoDxfKbctB0AkqASrbXWw0Y8F5k56hgMvxyAm9fH4SGHO7keZa3v4 u3+Ko71OWoRFbnSermH4sg7VfGMb9e6sXM6F5aiYMaoNXUX09COMAYi2KqQr1+KGAV3u Y4G7qctWM2WE4LZE3PKhNkeMLhqRC8er1km548aD0YfjICyoLZhCTc4/3T+jXxmWw5en x9qWdJei7EuVQan81wAEX5lJ/SB9bGnFHEv4VWD9ft4UeDT3VDtQ2HPpc9SL1SaXa9JE w5m55F+x6epYun0g1dBBqgzsL3t/BkqDdf2ryUdj2DS0wAPI20ctIorQLSzNQGOZDp+F 8IuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684390214; x=1686982214; h=content-transfer-encoding:in-reply-to:cc:from:references:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=EdZ6lNhcTbmmawstm709fk1BlCRQMqv9MWk98EMtELc=; b=cJvqh88RzenXu/J04mYgmF90s31BPitKpiyDDpG8NdIp1nEfHg61GEbuIScXi0Y+1x yjzycnU09pZRFooXlIgZycyMsgCl3KqREr/zzs8vMdjW0I/oIMF/ifJVeO1q7J1RilDT jxoYolRExeQs8mOa5d1aO+LyX1Os1FzE2EB/DVzNJn+bYu5V7aD1NjDp4Qx5Y6Su2MmB n3ZZMK7G7OdguMAnHQ6wYIy1z9HECwcTuj67JR0Yta9AyoSt6BoW6iT8NTvxkV0iZl+S WfA5Z8BW66ZABI9Uuqf2F8NZWshHN1FiUSha1kZgE4PHm92f45zotO4RrQZByCZonrtY 2Ogg== X-Gm-Message-State: AC+VfDyvRh07tbJR0Sj9/C/MGg2YsNJkta1KI7BXaLOcUNzVxNBFZE1b upMC03zLPdqBELOIBT1s73XqEQ== X-Google-Smtp-Source: ACHHUZ51QNXw8Dk8XUEA5xx3HJZPUbxG8rgdCAe7mewpu3s98RFRjFORkhocUeOAp+Bri6Hv4tPxww== X-Received: by 2002:a17:902:934a:b0:1ad:e364:10c7 with SMTP id g10-20020a170902934a00b001ade36410c7mr1384378plp.12.1684390213855; Wed, 17 May 2023 23:10:13 -0700 (PDT) Received: from [10.200.9.101] ([139.177.225.249]) by smtp.gmail.com with ESMTPSA id f13-20020a170902684d00b001ac7c6fd129sm478744pln.43.2023.05.17.23.10.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 17 May 2023 23:10:13 -0700 (PDT) Message-ID: Date: Thu, 18 May 2023 14:10:09 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.10.1 Subject: Re: [PATCH v2 01/10] maple_tree: Rework mtree_alloc_{range,rrange}() To: "Liam R. Howlett" References: <20230517085809.86522-1-zhangpeng.00@bytedance.com> <20230517085809.86522-2-zhangpeng.00@bytedance.com> <20230517181705.rdfffvfhqzlsjjlm@revolver> From: Peng Zhang Cc: Peng Zhang , akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, maple-tree@lists.infradead.org In-Reply-To: <20230517181705.rdfffvfhqzlsjjlm@revolver> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspam-User: X-Stat-Signature: itobaf5f75qcpbxwgjopds4kw314ox3m X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 405DF18000F X-HE-Tag: 1684390214-870004 X-HE-Meta: U2FsdGVkX1+1Eu7fo28/l96ibVQTfxEJMEGgJ74Qpk4ImfuRzH9PbxGgihRxyyksY5khPuLMY2BJ8yQSduaXNeyYEKCQZmK77oXfdzM6VFCrfTd1BPAqWPMLeIUiQKbItn8Jylrb83H4VxF+FM08PHxVqdGWWK4+gK+1Elst9MhB911U8Vv+JCcJuEWJwjGg0rqjtHppzROUCATYvfgw+cmBWITeQI9qRbe6IkKefEoefpWAKD/WsIxeYdLVv8F6DQ+W7k0RPSqslFXQ1ooJFIpmk9HUMxTTceDPtdyzmL72jchZJTzk7nDv8hZ4gBXnQkluGyPxpQwbhZiBy+0bszvTyxo5nynieqxmwNfTGfk8vEwHZCMfkGt5sh6UQj0LE8MP9pSEo5Fyqr+o56olc2SUqkVJRgUgQ/c7VdZH6D0Zg0JSp8FzbCo0dtLHKh0MJXZX5n1ZWWcUVDmAxcesvL9Lf/X3ez4KYEci45Z5JAyU0bFj3XxrdMgpY460HJCxMD3e+xzYZP4ZX9PGq8CY9TWjBPJ+OFWoekcxGpBMOl7aaCSwBU2P0d4AQ81LEAirRX4fITgYh8iFnyGszscxOPTss58Mq/NOfDVUkuJ7c0za+R/Z7hYKy0nSzGcZHWvMPn82eSiYb7hohlkP0TKi04l5oCLH8A2rvfoAh7GtBU047+oEY13Q+JYFJumXIVjGyPYITVkzukRn/DnS+Tf8Oaz9MuL+rHVOLS27/i69E1G6fArC9Ni27uGHVkVTxe5er4QFsOqfaQv1rzzPvgJrRXVsSx/z+wHLfDyfW3cRDZfL8+zIUT+smgvUaSwquft4Oa09uNaRy7sDF+5nb8M8xCVRZv9R8day2K0AJh9IpvIWY8fDjLEMW5VItuCLRSuD/Erggy4mNBjnPXSKs49luaPm6cpAUk3jO/Cgetg7glVsKMJBybsdyN0uyy7NZDDTL/uwsAaGmP/NIoZQQG3 lLzfrhHf uSMhYl9kN3xadaHjgv5BarX5SjAuOWIhUq1HpGfHAREY2ClV2rWv9aiIDa/p5tmuaXAt+FLYjK81dcj8ReFk2LHZ7Q3wKH1EtzsUuitNpPKoWmXVHGHlRPW6LdrMEwlyxaHNSyOy3nDnPbOlJBSWo9CU8NJ4NuPd1+8k4QvO1je8riw1GLXXCUESdKYcQkHLkGbO3KriRLbWh/RR0vMDJl+aLFKUVvd0Tzrvd4MN3Xoi2Hu8OBD2mH/HcwX+PzIWh6c70yBQhgumS+B4SsLZSsJXPc7t95DPLj2C+t6E5IcZoa23s82UACcjWnu89vmwIAyKEiUdumuWgJ9NfubRO2ld7oRg7ISaEqzWBeQPMr3JxheG9tcRh56zIrurfxvDiz0bEXOXijUR/MF6+vAU39p7ajOI8hlSNhCKIJzIbiTfmi2+qD8Vb8OQ0wAqOyOdR5mS9CwsqrzrpE9OelY0MDf7QHg== 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: 在 2023/5/18 02:17, Liam R. Howlett 写道: > * Peng Zhang [230517 04:58]: >> Use mas_empty_area{_rev}() to refactor mtree_alloc_{range,rrange}() >> >> Signed-off-by: Peng Zhang >> --- >> lib/maple_tree.c | 63 ++++++++++++++++++++++++------------------------ >> 1 file changed, 32 insertions(+), 31 deletions(-) >> >> diff --git a/lib/maple_tree.c b/lib/maple_tree.c >> index 4eb220008f72..e1820e90f167 100644 >> --- a/lib/maple_tree.c >> +++ b/lib/maple_tree.c >> @@ -6493,32 +6493,31 @@ int mtree_alloc_range(struct maple_tree *mt, unsigned long *startp, >> { >> int ret = 0; >> >> - MA_STATE(mas, mt, min, min); >> + MA_STATE(mas, mt, 0, 0); >> if (!mt_is_alloc(mt)) >> return -EINVAL; >> >> if (WARN_ON_ONCE(mt_is_reserved(entry))) >> return -EINVAL; >> >> - if (min > max) >> - return -EINVAL; >> - >> - if (max < size) >> - return -EINVAL; >> - >> - if (!size) >> - return -EINVAL; >> - >> mtree_lock(mt); >> retry: >> - mas.offset = 0; >> - mas.index = min; >> - mas.last = max - size + 1; >> - ret = mas_alloc(&mas, entry, size, startp); >> - if (mas_nomem(&mas, gfp)) >> - goto retry; >> - >> + ret = mas_empty_area(&mas, min, max, size); >> + if (!ret) { >> + mas_insert(&mas, entry); >> + /* >> + * mas_nomem() may release the lock, causing the allocated area >> + * to be unavailable, so try to allocate a free area again. >> + */ >> + if (mas_nomem(&mas, gfp)) >> + goto retry; >> + } >> mtree_unlock(mt); >> + if (!ret) { > > Checking for a mas_is_err() should probably be outside if (!ret) > statement. If mas_insert() returns something besides ENOMEM, we will > not detect the error. I'm not sure if this is possible today since this > should never return an -EEXISTS, but having it this way doesn't add much > to the overhead. I don't think there will be error that can't be detected here. In fact, there are two sources of errors: 1. mas_empty_area(), the error number is in the variable ret, and may also be in mas->node, but ret must contain all errors. 2. mas_insert(), the error number is in mas->node When we check errors, we should first check errors from mas_empty_area(). If there is no error in mas_empty_area(), we will check errors from mas_insert(). So, mas_is_err() is inside the if (!ret) statement, no problem here. Of course, even if mas_insert() returns -EEXISTS, it can be detected under the current encoding, because "if (!ret)" is true in this case. But I don't think this can happen, if it happens, it's a bug of maple tree. I don't think it's good to put mas_is_err() outside, because the error number stored in mas->node may come from mas_empty_area(). We should use the ret variable to detect the error from mas_empty_area() first. > >> + if (mas_is_err(&mas)) >> + return xa_err(mas.node); >> + *startp = mas.index; >> + } >> return ret; >> } >> EXPORT_SYMBOL(mtree_alloc_range); >> @@ -6529,29 +6528,31 @@ int mtree_alloc_rrange(struct maple_tree *mt, unsigned long *startp, >> { >> int ret = 0; >> >> - MA_STATE(mas, mt, min, max - size + 1); >> + MA_STATE(mas, mt, 0, 0); >> if (!mt_is_alloc(mt)) >> return -EINVAL; >> >> if (WARN_ON_ONCE(mt_is_reserved(entry))) >> return -EINVAL; >> >> - if (min > max) >> - return -EINVAL; >> - >> - if (max < size - 1) >> - return -EINVAL; >> - >> - if (!size) >> - return -EINVAL; >> - >> mtree_lock(mt); >> retry: >> - ret = mas_rev_alloc(&mas, min, max, entry, size, startp); >> - if (mas_nomem(&mas, gfp)) >> - goto retry; >> - >> + ret = mas_empty_area_rev(&mas, min, max, size); >> + if (!ret) { >> + mas_insert(&mas, entry); >> + /* >> + * mas_nomem() may release the lock, causing the allocated area >> + * to be unavailable, so try to allocate a free area again. >> + */ >> + if (mas_nomem(&mas, gfp)) >> + goto retry; >> + } >> mtree_unlock(mt); >> + if (!ret) { > > Same here. > >> + if (mas_is_err(&mas)) >> + return xa_err(mas.node); >> + *startp = mas.index; >> + } >> return ret; >> } >> EXPORT_SYMBOL(mtree_alloc_rrange); >> -- >> 2.20.1 >>