[PATCH] IB/sa_query: avoid unnecessary list scan
authorMichael S. Tsirkin <mst@mellanox.co.il>
Thu, 1 Sep 2005 16:19:44 +0000 (09:19 -0700)
committerRoland Dreier <rolandd@cisco.com>
Wed, 7 Sep 2005 16:48:52 +0000 (09:48 -0700)
Using ib_get_client_data in SA event handler performs a list scan.
It's better to use container_of to get the sa device directly.

Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/core/sa_query.c

index 126ac80db7b84f3e71b83211188b8b8024e07912..9191793c9007a7b4c07bebdea79cabf16f5570c8 100644 (file)
@@ -431,8 +431,8 @@ static void ib_sa_event(struct ib_event_handler *handler, struct ib_event *event
            event->event == IB_EVENT_LID_CHANGE  ||
            event->event == IB_EVENT_PKEY_CHANGE ||
            event->event == IB_EVENT_SM_CHANGE) {
-               struct ib_sa_device *sa_dev =
-                       ib_get_client_data(event->device, &sa_client);
+               struct ib_sa_device *sa_dev;
+               sa_dev = container_of(handler, typeof(*sa_dev), event_handler);
 
                schedule_work(&sa_dev->port[event->element.port_num -
                                            sa_dev->start_port].update_task);