IB/core: Refactor to avoid unnecessary check on GID lookup miss
authorParav Pandit <parav@mellanox.com>
Tue, 14 Nov 2017 12:52:05 +0000 (14:52 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 18 Dec 2017 22:37:08 +0000 (15:37 -0700)
Currently on every gid entry comparison miss found variable is checked;
which is not needed as those two comparison fail already indicate that
GID is not found yet.
So refactor to avoid such check and copy the GID index when found.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Reviewed-by: Daniel Jurgens <danielj@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/cache.c

index 77515638c55cc1449ad09b5572bcd0813c58955e..43300b8e6341ace5c6ad0d7e0dd2aad5da4c82ca 100644 (file)
@@ -573,27 +573,24 @@ static int ib_cache_gid_find_by_filter(struct ib_device *ib_dev,
                struct ib_gid_attr attr;
 
                if (table->data_vec[i].props & GID_TABLE_ENTRY_INVALID)
-                       goto next;
+                       continue;
 
                if (memcmp(gid, &table->data_vec[i].gid, sizeof(*gid)))
-                       goto next;
+                       continue;
 
                memcpy(&attr, &table->data_vec[i].attr, sizeof(attr));
 
-               if (filter(gid, &attr, context))
+               if (filter(gid, &attr, context)) {
                        found = true;
-
-next:
-               if (found)
+                       if (index)
+                               *index = i;
                        break;
+               }
        }
        read_unlock_irqrestore(&table->rwlock, flags);
 
        if (!found)
                return -ENOENT;
-
-       if (index)
-               *index = i;
        return 0;
 }