In preparation to limit the scope of a list iterator to the list
traversal loop, use a dedicated pointer to point to the found element [1].

Before, the code implicitly used the head when no element was found
when using &pos->list. Since the new variable is only set if an
element was found, the list_add() is performed within the loop
and only done after the loop if it is done on the list head directly.

Link: 
https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=ehreask5sqxpwr9y7k9sa6cwx...@mail.gmail.com/
 [1]
Signed-off-by: Jakob Koschel <jakobkosc...@gmail.com>
---
 drivers/net/dsa/sja1105/sja1105_vl.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/net/dsa/sja1105/sja1105_vl.c 
b/drivers/net/dsa/sja1105/sja1105_vl.c
index b7e95d60a6e4..cfcae4d19eef 100644
--- a/drivers/net/dsa/sja1105/sja1105_vl.c
+++ b/drivers/net/dsa/sja1105/sja1105_vl.c
@@ -27,20 +27,24 @@ static int sja1105_insert_gate_entry(struct 
sja1105_gating_config *gating_cfg,
        if (list_empty(&gating_cfg->entries)) {
                list_add(&e->list, &gating_cfg->entries);
        } else {
-               struct sja1105_gate_entry *p;
+               struct sja1105_gate_entry *p = NULL, *iter;
 
-               list_for_each_entry(p, &gating_cfg->entries, list) {
-                       if (p->interval == e->interval) {
+               list_for_each_entry(iter, &gating_cfg->entries, list) {
+                       if (iter->interval == e->interval) {
                                NL_SET_ERR_MSG_MOD(extack,
                                                   "Gate conflict");
                                rc = -EBUSY;
                                goto err;
                        }
 
-                       if (e->interval < p->interval)
+                       if (e->interval < iter->interval) {
+                               p = iter;
+                               list_add(&e->list, iter->list.prev);
                                break;
+                       }
                }
-               list_add(&e->list, p->list.prev);
+               if (!p)
+                       list_add(&e->list, gating_cfg->entries.prev);
        }
 
        gating_cfg->num_entries++;
-- 
2.25.1

Reply via email to