RDMA/core: Use simplified list_for_each
authorParav Pandit <parav@mellanox.com>
Tue, 28 Aug 2018 12:08:42 +0000 (15:08 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 6 Sep 2018 19:45:38 +0000 (13:45 -0600)
While traversing client_data_list in following conditions, linked list is
only read, no elements of the list are removed.  Therefore, use
list_for_each_entry(), instead of list_for_each_safe().

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

index 9bc5ba2f488ebbe896e300ca6de31411509ca39b..559fbe6a97c2cb46b7c19c675c6acc47fe703a27 100644 (file)
@@ -587,13 +587,12 @@ void ib_unregister_device(struct ib_device *device)
        down_write(&lists_rwsem);
        list_del(&device->core_list);
        spin_lock_irqsave(&device->client_data_lock, flags);
-       list_for_each_entry_safe(context, tmp, &device->client_data_list, list)
+       list_for_each_entry(context, &device->client_data_list, list)
                context->going_down = true;
        spin_unlock_irqrestore(&device->client_data_lock, flags);
        downgrade_write(&lists_rwsem);
 
-       list_for_each_entry_safe(context, tmp, &device->client_data_list,
-                                list) {
+       list_for_each_entry(context, &device->client_data_list, list) {
                if (context->client->remove)
                        context->client->remove(device, context->data);
        }
@@ -663,7 +662,7 @@ EXPORT_SYMBOL(ib_register_client);
  */
 void ib_unregister_client(struct ib_client *client)
 {
-       struct ib_client_data *context, *tmp;
+       struct ib_client_data *context;
        struct ib_device *device;
        unsigned long flags;
 
@@ -678,7 +677,7 @@ void ib_unregister_client(struct ib_client *client)
 
                down_write(&lists_rwsem);
                spin_lock_irqsave(&device->client_data_lock, flags);
-               list_for_each_entry_safe(context, tmp, &device->client_data_list, list)
+               list_for_each_entry(context, &device->client_data_list, list)
                        if (context->client == client) {
                                context->going_down = true;
                                found_context = context;