From patchwork Tue Nov 28 16:06:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Tammela X-Patchwork-Id: 13471416 X-Patchwork-Delegate: kuba@kernel.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mojatatu-com.20230601.gappssmtp.com header.i=@mojatatu-com.20230601.gappssmtp.com header.b="u4xuGGkm" Received: from mail-pl1-x62f.google.com (mail-pl1-x62f.google.com [IPv6:2607:f8b0:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CEA8012A for ; Tue, 28 Nov 2023 08:06:53 -0800 (PST) Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-1cfa5840db3so36103835ad.2 for ; Tue, 28 Nov 2023 08:06:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mojatatu-com.20230601.gappssmtp.com; s=20230601; t=1701187613; x=1701792413; darn=vger.kernel.org; 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=gRYnfsB83r2Y3EpTtj+KZgbH+GMrURwzjA60UCxP2YI=; b=u4xuGGkmNrWibqhlsyQRXnWfIkbtfFPPqTXcvfdvajlWkrEXo9y8UeduQjt8etR0yK buYihoqnoHvXj3ITDXXuJRUL68+PP8hihHbZDbN4sjP7m2GYbXNQDhDwMQVDuTKRHN1D eDN0VPu1n17z38JDHv5lXU2BwFYL+iAsJiuw6XoGFaP3yM3OuMUBIbizI26g5VS7Jk+k VoxJkc9sO8KhhgSOyjWo6/zLrcgu/UGJRRviWWnxA0Yv0U+5OgNM48wle76I+y2qQnhx zYlp39ZIKb4nhPFTYNLr9ZnU9EX3SRmYXEag2VBTvjdk1mvzCsJ/d9eDLe2I0R74ZCWU nWKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701187613; x=1701792413; 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=gRYnfsB83r2Y3EpTtj+KZgbH+GMrURwzjA60UCxP2YI=; b=l1GYboeRcyW7Z0R124McwiJdmbpmiusoLATvrvoO2TcuCPuaQNrjId4y+F+Uz8HrW9 kQEYCkuuAqtrQGYwknt5+zmEVphPfM8/creLsZAMF/TEnq7az/N2qllNXbYu+sqaP7JV eNMmFW/yJoeZRacrW38WNW99tfuT+aWAWosqSDQEOFr6Pfo21mv20a1RK7Y2qHZ4XA4r u1cUoZvhcayPwb1jTHz2WgMjDll49rU+gbgH09f69/2RBLWMWnvBZMpONtkHJsZXjXRJ Z5ZtTJuT1NxjsMTbBsnfyL6zDZVn9pImfqx9fZ/tfWWFHK4iZBBfR5w38hVaOaaT4jaG Cr+Q== X-Gm-Message-State: AOJu0Yw5ClIi7/cITQGuQu2i5m40glJBUyW97KdpSDzp8mXANt6KPlA9 DHxfmP1vg3G9Hipoo318T/VkFPjWy/GdVvzX3kM= X-Google-Smtp-Source: AGHT+IEJQFuvq4Lgnsr/IXokZXR3o+vEMRcqrQsBatKcS1YxqVylYy0Lf1O6WY5mDcqUd52JQW/zDg== X-Received: by 2002:a17:902:e5c7:b0:1cf:a4e8:d2be with SMTP id u7-20020a170902e5c700b001cfa4e8d2bemr18271114plf.12.1701187613073; Tue, 28 Nov 2023 08:06:53 -0800 (PST) Received: from rogue-one.tail33bf8.ts.net ([201.17.86.134]) by smtp.gmail.com with ESMTPSA id i4-20020a170902c94400b001bf52834696sm8510504pla.207.2023.11.28.08.06.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Nov 2023 08:06:52 -0800 (PST) From: Pedro Tammela To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jhs@mojatatu.com, xiyou.wangcong@gmail.com, jiri@resnulli.us, vladbu@nvidia.com, mleitner@redhat.com, Pedro Tammela Subject: [PATCH RFC net-next 1/4] net/sched: act_api: rely on rcu in tcf_idr_check_alloc Date: Tue, 28 Nov 2023 13:06:28 -0300 Message-Id: <20231128160631.663351-2-pctammela@mojatatu.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231128160631.663351-1-pctammela@mojatatu.com> References: <20231128160631.663351-1-pctammela@mojatatu.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org X-Patchwork-State: RFC Instead of relying only on the idrinfo->lock mutex for bind/alloc logic, rely on a combination of rcu + mutex + atomics to better scale the case where multiple rtnl-less filters are binding to the same action object. Action binding happens when an action index is specified explicitly and an action exists which such index exists. Example: tc actions add action drop index 1 tc filter add ... matchall action drop index 1 tc filter add ... matchall action drop index 1 tc filter add ... matchall action drop index 1 tc filter ls ... filter protocol all pref 49150 matchall chain 0 filter protocol all pref 49150 matchall chain 0 handle 0x1 not_in_hw action order 1: gact action drop random type none pass val 0 index 1 ref 4 bind 3 filter protocol all pref 49151 matchall chain 0 filter protocol all pref 49151 matchall chain 0 handle 0x1 not_in_hw action order 1: gact action drop random type none pass val 0 index 1 ref 4 bind 3 filter protocol all pref 49152 matchall chain 0 filter protocol all pref 49152 matchall chain 0 handle 0x1 not_in_hw action order 1: gact action drop random type none pass val 0 index 1 ref 4 bind 3 When no index is specified, as before, grab the mutex and allocate in the idr the next available id. In this version, as opposed to before, it's simplified to store the -EBUSY pointer instead of the previous alloc + replace combination. When an index is specified, rely on rcu to find if there's an object in such index. If there's none, fallback to the above, serializing on the mutex and reserving the specified id. If there's one, it can be an -EBUSY pointer, in which case we just try again until it's an action, or an action. Given the rcu guarantees, the action found could be dead and therefore we need to bump the refcount if it's not 0, handling the case it's in fact 0. As bind and the action refcount are already atomics, these increments can happen without the mutex protection while many tcf_idr_check_alloc race to bind to the same action instance. Signed-off-by: Pedro Tammela --- net/sched/act_api.c | 56 +++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/net/sched/act_api.c b/net/sched/act_api.c index c39252d61ebb..048e660aba30 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c @@ -824,43 +824,55 @@ int tcf_idr_check_alloc(struct tc_action_net *tn, u32 *index, struct tcf_idrinfo *idrinfo = tn->idrinfo; struct tc_action *p; int ret; + u32 max; -again: - mutex_lock(&idrinfo->lock); if (*index) { +again: + rcu_read_lock(); p = idr_find(&idrinfo->action_idr, *index); + if (IS_ERR(p)) { /* This means that another process allocated * index but did not assign the pointer yet. */ - mutex_unlock(&idrinfo->lock); + rcu_read_unlock(); goto again; } - if (p) { - refcount_inc(&p->tcfa_refcnt); - if (bind) - atomic_inc(&p->tcfa_bindcnt); - *a = p; - ret = 1; - } else { - *a = NULL; - ret = idr_alloc_u32(&idrinfo->action_idr, NULL, index, - *index, GFP_KERNEL); - if (!ret) - idr_replace(&idrinfo->action_idr, - ERR_PTR(-EBUSY), *index); + if (!p) { + /* Empty slot, try to allocate it */ + max = *index; + rcu_read_unlock(); + goto new; + } + + if (!refcount_inc_not_zero(&p->tcfa_refcnt)) { + /* Action was deleted in parallel */ + rcu_read_unlock(); + return -ENOENT; } + + if (bind) + atomic_inc(&p->tcfa_bindcnt); + *a = p; + + rcu_read_unlock(); + + return 1; } else { + /* Find a slot */ *index = 1; - *a = NULL; - ret = idr_alloc_u32(&idrinfo->action_idr, NULL, index, - UINT_MAX, GFP_KERNEL); - if (!ret) - idr_replace(&idrinfo->action_idr, ERR_PTR(-EBUSY), - *index); + max = UINT_MAX; } + +new: + *a = NULL; + + mutex_lock(&idrinfo->lock); + ret = idr_alloc_u32(&idrinfo->action_idr, ERR_PTR(-EBUSY), index, max, + GFP_KERNEL); mutex_unlock(&idrinfo->lock); + return ret; } EXPORT_SYMBOL(tcf_idr_check_alloc); From patchwork Tue Nov 28 16:06:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Tammela X-Patchwork-Id: 13471417 X-Patchwork-Delegate: kuba@kernel.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mojatatu-com.20230601.gappssmtp.com header.i=@mojatatu-com.20230601.gappssmtp.com header.b="dBZjOYfh" Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3DD58D51 for ; Tue, 28 Nov 2023 08:06:57 -0800 (PST) Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-1cfc1512df1so20734295ad.2 for ; Tue, 28 Nov 2023 08:06:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mojatatu-com.20230601.gappssmtp.com; s=20230601; t=1701187616; x=1701792416; darn=vger.kernel.org; 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=Cpbgqexz+gfCDSTA1ICezbvaRJ8TZbvyWTHgolUElmU=; b=dBZjOYfh44hVuX8ErvPxA6oxh5LV9xJUxxge210FYyq5N5lbmHP5830Vh4meDfqzYj pqmIFjtIKl07yO+qxaMgegbtqARXCJdsWqzang9RsIkEru9AcveD8IsBqvig9LdwVWrM JMn79s6MDajyqHWXmGqEISD8YKkgNmDq49PjKfffhoEM6zr5rTsSGgcEGbvALHp2aaFU vrYGhxIv66PJ87HgBSKfbz7SogQ0hrbzI2EyDkL3KM8gf0FBigkcTF3R9qZ2ERrkWjWP vDxoWFYgFf20NBhVnSaxBKCmf2DNT3l0IQq/i1vm7ihwQD8pzdHmsUtILNdzuZ4VZ32h Rc+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701187616; x=1701792416; 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=Cpbgqexz+gfCDSTA1ICezbvaRJ8TZbvyWTHgolUElmU=; b=m+CCnKA/IKIaEiQskX/8BY8bc3h7ZXZ2Y5n3UmFsdB/983zxlBe1sOf0T8945qVVwt 7kvXQstSZXoOsMako2ke95/i7TGH/S6JSuY874kuTlcaWSLDV9WuXYQDCviFxJioMnX3 +ET8q9r3hxAM10DKnys7cWvgIS2w3RoJ9PvbAFeJ/3XHGn79W//8TQVLxDALklmKT4bA aXH9luBcVNdmONvyUCd4YJH65ifFuTWg2APauV0rs7aGRp3cZs++Lmzfuv3bIneZziom a04kpJ0X7dSLmFn53mzjZm47TtHhiZqw9R7KLtB4H2v7DsxLnpGZBKUMJ1Qdo8oX7ZGm xxwg== X-Gm-Message-State: AOJu0Yy7cbCpZKDVDNjjsNfVyEw46md84YLUy0BrhOifjKUIafZkGOY7 VzSpn6fh8P/cYl2jLMXieC62uFcyzaCRaNcR+38= X-Google-Smtp-Source: AGHT+IFk36905yO8e9pZvRfy84E5O/QYkFiK32d8UGhQjPw1I1xca/tMRQcjDD2BqwQ62PfwdjomJg== X-Received: by 2002:a17:902:f68e:b0:1cf:9bd1:aaea with SMTP id l14-20020a170902f68e00b001cf9bd1aaeamr18787952plg.11.1701187616444; Tue, 28 Nov 2023 08:06:56 -0800 (PST) Received: from rogue-one.tail33bf8.ts.net ([201.17.86.134]) by smtp.gmail.com with ESMTPSA id i4-20020a170902c94400b001bf52834696sm8510504pla.207.2023.11.28.08.06.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Nov 2023 08:06:56 -0800 (PST) From: Pedro Tammela To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jhs@mojatatu.com, xiyou.wangcong@gmail.com, jiri@resnulli.us, vladbu@nvidia.com, mleitner@redhat.com, Pedro Tammela Subject: [PATCH RFC net-next 2/4] net/sched: act_api: skip idr replace on bound actions Date: Tue, 28 Nov 2023 13:06:29 -0300 Message-Id: <20231128160631.663351-3-pctammela@mojatatu.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231128160631.663351-1-pctammela@mojatatu.com> References: <20231128160631.663351-1-pctammela@mojatatu.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org X-Patchwork-State: RFC tcf_idr_insert_many will replace the allocated -EBUSY pointer in tcf_idr_check_alloc with the real action pointer, exposing it to all operations. This operation is only needed when the action pointer is created (ACT_P_CREATED). For actions which are bound to (returned 0), the pointer already resides in the idr making such operation a nop. Even though it's a nop, it's still not a cheap operation as internally the idr code walks the idr and then does a replace on the appropriate slot. So if the action was bound, better skip the idr replace entirely. Signed-off-by: Pedro Tammela --- include/net/act_api.h | 2 +- net/sched/act_api.c | 11 ++++++----- net/sched/cls_api.c | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/include/net/act_api.h b/include/net/act_api.h index 4ae0580b63ca..ea13e1e4a7c2 100644 --- a/include/net/act_api.h +++ b/include/net/act_api.h @@ -191,7 +191,7 @@ int tcf_idr_create_from_flags(struct tc_action_net *tn, u32 index, struct nlattr *est, struct tc_action **a, const struct tc_action_ops *ops, int bind, u32 flags); -void tcf_idr_insert_many(struct tc_action *actions[]); +void tcf_idr_insert_many(struct tc_action *actions[], int init_res[]); void tcf_idr_cleanup(struct tc_action_net *tn, u32 index); int tcf_idr_check_alloc(struct tc_action_net *tn, u32 *index, struct tc_action **a, int bind); diff --git a/net/sched/act_api.c b/net/sched/act_api.c index 048e660aba30..bf6f9ca15a30 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c @@ -1286,7 +1286,7 @@ static const struct nla_policy tcf_action_policy[TCA_ACT_MAX + 1] = { [TCA_ACT_HW_STATS] = NLA_POLICY_BITFIELD32(TCA_ACT_HW_STATS_ANY), }; -void tcf_idr_insert_many(struct tc_action *actions[]) +void tcf_idr_insert_many(struct tc_action *actions[], int init_res[]) { int i; @@ -1296,11 +1296,12 @@ void tcf_idr_insert_many(struct tc_action *actions[]) if (!a) continue; + if (init_res[i] == 0) /* Bound */ + continue; + idrinfo = a->idrinfo; mutex_lock(&idrinfo->lock); - /* Replace ERR_PTR(-EBUSY) allocated by tcf_idr_check_alloc if - * it is just created, otherwise this is just a nop. - */ + /* Replace ERR_PTR(-EBUSY) allocated by tcf_idr_check_alloc */ idr_replace(&idrinfo->action_idr, a, a->tcfa_index); mutex_unlock(&idrinfo->lock); } @@ -1500,7 +1501,7 @@ int tcf_action_init(struct net *net, struct tcf_proto *tp, struct nlattr *nla, /* We have to commit them all together, because if any error happened in * between, we could not handle the failure gracefully. */ - tcf_idr_insert_many(actions); + tcf_idr_insert_many(actions, init_res); *attr_size = tcf_action_full_attrs_size(sz); err = i - 1; diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 1976bd163986..6391b341284e 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -3309,7 +3309,7 @@ int tcf_exts_validate_ex(struct net *net, struct tcf_proto *tp, struct nlattr ** act->type = exts->type = TCA_OLD_COMPAT; exts->actions[0] = act; exts->nr_actions = 1; - tcf_idr_insert_many(exts->actions); + tcf_idr_insert_many(exts->actions, init_res); } else if (exts->action && tb[exts->action]) { int err; From patchwork Tue Nov 28 16:06:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Tammela X-Patchwork-Id: 13471418 X-Patchwork-Delegate: kuba@kernel.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mojatatu-com.20230601.gappssmtp.com header.i=@mojatatu-com.20230601.gappssmtp.com header.b="MN3vjqNa" Received: from mail-pl1-x629.google.com (mail-pl1-x629.google.com [IPv6:2607:f8b0:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9259BDA for ; Tue, 28 Nov 2023 08:07:00 -0800 (PST) Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1cfcc9b3b5cso21237085ad.0 for ; Tue, 28 Nov 2023 08:07:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mojatatu-com.20230601.gappssmtp.com; s=20230601; t=1701187620; x=1701792420; darn=vger.kernel.org; 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=d9fU8LS0NXal051e/f+ednnLG9vP7ieRto8Kul0MqzI=; b=MN3vjqNa6LJva++FOqiqEjGOIeJiM4RnVej6tETInoSzCLBpwo6Wf6OdZG3gfvNQTf M3gioSmUG0o6HArEjr8rknmOD8eroXNv6cGXorkXoxRduJeQmPVpQGYZgTv8xBfyQGu3 G2SjUSaZqajs96UKE9Y6jLWPRVJ2173mBCTrEkWddrhdYcO6G5GZm/8QIa2bJLa7pVs/ M+GBacrPsJUq11Wdbyd+9SGcY9mKGYAC90FJJN2BwbYVom/UUMlVUessoEr8371iLatX 5IoQtusq/tGpggKzSUh9N7bk5SEvI5h9BTaf1vW17J8MpP6b8oMzuWXCm5uOmqGlnyE0 +R/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701187620; x=1701792420; 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=d9fU8LS0NXal051e/f+ednnLG9vP7ieRto8Kul0MqzI=; b=ll9ch3CyiKnoL72Ccvfdx7fKa7ZGNIY1NA4Xiwc1z4n6nmcioN2tJY4+0ACVtcA5Gw QTIqbhct8woj4ztviN6AhvIT77D/azTV44bQHTl12QhPbJhA090uflJzBJU5QA+lHUkQ J0IvvxDHZ9U0i0pDPNWXd72c25w+MqHnnUO64MyYP9bmpuwV6u20hnz3EnjW1jpzp/ZC 80SLJMwgtWlV35TgHzGVDT5zAqrDNNYCZEGiafGpjdID7at6jofmzHNO/R2hXWtXvZ3O vLeBgDDFFMy5vQlhpS5s2fZ6VB/zyKpOMPqyZQ1kigIavGhIZCzTjZRgQQAM/xBNIrqb FY3Q== X-Gm-Message-State: AOJu0YzOX15gZXHOIBmpQMNKaq4/lqUyr/iQtDwQ9B5pupKyUS4xd6XC 2vDG5PdBKKhaWA7PDFXv7ugHaNZbS+0nZqwbsl4= X-Google-Smtp-Source: AGHT+IEiPa0BlWGrxmCvE7QZ482cVqrQIvdb5t2rwMkrjaLeNILrPsTWgS60CMeF97qR7zTfadbOzw== X-Received: by 2002:a17:902:d4d2:b0:1cf:b57a:5055 with SMTP id o18-20020a170902d4d200b001cfb57a5055mr14806836plg.0.1701187619771; Tue, 28 Nov 2023 08:06:59 -0800 (PST) Received: from rogue-one.tail33bf8.ts.net ([201.17.86.134]) by smtp.gmail.com with ESMTPSA id i4-20020a170902c94400b001bf52834696sm8510504pla.207.2023.11.28.08.06.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Nov 2023 08:06:59 -0800 (PST) From: Pedro Tammela To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jhs@mojatatu.com, xiyou.wangcong@gmail.com, jiri@resnulli.us, vladbu@nvidia.com, mleitner@redhat.com, Pedro Tammela Subject: [PATCH RFC net-next 3/4] net/sched: act_api: stop loop over ops array on NULL in tcf_action_init Date: Tue, 28 Nov 2023 13:06:30 -0300 Message-Id: <20231128160631.663351-4-pctammela@mojatatu.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231128160631.663351-1-pctammela@mojatatu.com> References: <20231128160631.663351-1-pctammela@mojatatu.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org X-Patchwork-State: RFC The ops array is contiguous, so stop processing whenever a NULL is found Signed-off-by: Pedro Tammela --- net/sched/act_api.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/net/sched/act_api.c b/net/sched/act_api.c index bf6f9ca15a30..8517bfbd69a6 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c @@ -1510,10 +1510,8 @@ int tcf_action_init(struct net *net, struct tcf_proto *tp, struct nlattr *nla, err: tcf_action_destroy(actions, flags & TCA_ACT_FLAGS_BIND); err_mod: - for (i = 0; i < TCA_ACT_MAX_PRIO; i++) { - if (ops[i]) - module_put(ops[i]->owner); - } + for (i = 0; i < TCA_ACT_MAX_PRIO && ops[i]; i++) + module_put(ops[i]->owner); return err; } From patchwork Tue Nov 28 16:06:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Tammela X-Patchwork-Id: 13471419 X-Patchwork-Delegate: kuba@kernel.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mojatatu-com.20230601.gappssmtp.com header.i=@mojatatu-com.20230601.gappssmtp.com header.b="c8PbyFSu" Received: from mail-pl1-x629.google.com (mail-pl1-x629.google.com [IPv6:2607:f8b0:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4BA0DDA for ; Tue, 28 Nov 2023 08:07:04 -0800 (PST) Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1cc9b626a96so43085375ad.2 for ; Tue, 28 Nov 2023 08:07:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mojatatu-com.20230601.gappssmtp.com; s=20230601; t=1701187623; x=1701792423; darn=vger.kernel.org; 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=FK/VzK7W81OA+pk8VXhpBSRA3B9QewhHJnuQBEzuyas=; b=c8PbyFSumS4NzjTjZDRtLMIDiLhC7kS/7LmnaSM7YwRCpqKLEU27dGrMnz9piUNzcP echJEAPJQNmaazRhPBxfnJKyOmrv46Tf8FcihhcTe4GzVEg+3iQ+40fn200w533tkwJT F3Jbog/hIQms9VeD7kYKSJd2zyvcSDZnSkqLmCTAjnTKBwFIAwEt56bsEmh2Fj7aPGS8 rJ62/rpTftFiRFKD/5KJjfRmg5GH/hjgHeTcDEVcv2Yts5qu5i5JxHT7omVZgEwnhs1K mWRKgd2JwuYIn/LlX5Mnh/qAoF9A6TYbOqtvNDZV5Tu3Q8zIOx9Uio8wNOONQ4Jj+dsb SVgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701187623; x=1701792423; 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=FK/VzK7W81OA+pk8VXhpBSRA3B9QewhHJnuQBEzuyas=; b=SJeACvP7cvu/2pyLEnp6zzLUSr6HPGsNKmSbCJKE/4ZCguNNwygouqhXe9FVv8zEzb jWk46TXAzUxJVdXQUwBpUTtiLrPwS+CxKn1lGIPlstqMeZXt5+1LoOJF8cq6dH9a8SVm 9yCa6YbnJm349qtFs60DMzO+ybT7zPXAVVVchqJKxvhi07TFHLVxHF6DLB+2FjdWlD6W fYjPTyCNeCZhf516L483XQrn8OVIc6iBH2VKizXq6zEpZ4OWWwjyMS/+8zMHtQjfhvnT oqythRfYh/r/XnUXzeCVgFBMYtqAjFyP9uaq6zorQBRqVkZCk/Feu5/ALYqaxxQ5/4J2 HZxA== X-Gm-Message-State: AOJu0Yw/PNHKVJA0kP4TD48ipleOMApl6F4n5hKfbtU5DSW0zbQ3+bOR tr95H86xifCjr3Frfh7fsWbiq5p3ZIP/HdjkkVo= X-Google-Smtp-Source: AGHT+IFHkWQDl7ypo+M84XS22yPeoT3u8yyYE8IqoskblXFwRgn4aG1ktTsGOVZJENMduAVYPZsRlQ== X-Received: by 2002:a17:902:ee82:b0:1cf:96a0:e4eb with SMTP id a2-20020a170902ee8200b001cf96a0e4ebmr15225081pld.37.1701187623610; Tue, 28 Nov 2023 08:07:03 -0800 (PST) Received: from rogue-one.tail33bf8.ts.net ([201.17.86.134]) by smtp.gmail.com with ESMTPSA id i4-20020a170902c94400b001bf52834696sm8510504pla.207.2023.11.28.08.07.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Nov 2023 08:07:03 -0800 (PST) From: Pedro Tammela To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jhs@mojatatu.com, xiyou.wangcong@gmail.com, jiri@resnulli.us, vladbu@nvidia.com, mleitner@redhat.com, Pedro Tammela Subject: [PATCH RFC net-next 4/4] net/sched: act_api: stop loop over actions array on NULL in tcf_idr_insert_many Date: Tue, 28 Nov 2023 13:06:31 -0300 Message-Id: <20231128160631.663351-5-pctammela@mojatatu.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231128160631.663351-1-pctammela@mojatatu.com> References: <20231128160631.663351-1-pctammela@mojatatu.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org X-Patchwork-State: RFC The actions array is contiguous, so stop processing whenever a NULL is found. This is already the assumption for tcf_action_destroy[1], which is called from tcf_actions_init. [1] https://elixir.bootlin.com/linux/v6.7-rc3/source/net/sched/act_api.c#L1115 Signed-off-by: Pedro Tammela --- net/sched/act_api.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/net/sched/act_api.c b/net/sched/act_api.c index 8517bfbd69a6..980dd3b51dd0 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c @@ -1290,12 +1290,10 @@ void tcf_idr_insert_many(struct tc_action *actions[], int init_res[]) { int i; - for (i = 0; i < TCA_ACT_MAX_PRIO; i++) { + for (i = 0; i < TCA_ACT_MAX_PRIO && actions[i]; i++) { struct tc_action *a = actions[i]; struct tcf_idrinfo *idrinfo; - if (!a) - continue; if (init_res[i] == 0) /* Bound */ continue;