]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
RDS: IB: remove delayed queuing of address change
authorSantosh Shilimkar <santosh.shilimkar@oracle.com>
Wed, 3 Aug 2016 00:44:47 +0000 (17:44 -0700)
committerSantosh Shilimkar <santosh.shilimkar@oracle.com>
Wed, 12 Oct 2016 17:20:24 +0000 (10:20 -0700)
There is no good reason to delay the address change event. Remove
the delayed work and use the function directly.

Orabug: 22347191

Tested-by: Michael Nowak <michael.nowak@oracle.com>
Tested-by: Rafael Alejandro Peralez <rafael.peralez@oracle.com>
Tested-by: Liwen Huang <liwen.huang@oracle.com>
Tested-by: Hong Liu <hong.x.liu@oracle.com>
Reviewed-by: Mukesh Kacker <mukesh.kacker@oracle.com>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
net/rds/ib.c
net/rds/ib.h

index 467471b247a515287a0480e92f2ebc24313da540..bf3adf93138e07c13e1fffe213638d50e66e3e1e 100644 (file)
@@ -581,20 +581,16 @@ static int rds_ib_addr_exist(struct net_device *ndev,
        return found;
 }
 
-static void rds_ib_notify_addr_change(struct work_struct *_work)
+static void rds_ib_notify_addr_change(__be32 addr)
 {
-       struct rds_ib_addr_change_work  *work =
-               container_of(_work, struct rds_ib_addr_change_work, work.work);
-       struct sockaddr_in      sin;
-       int ret;
+       struct sockaddr_in sin;
 
        sin.sin_family = AF_INET;
-       sin.sin_addr.s_addr = work->addr;
+       sin.sin_addr.s_addr = addr;
        sin.sin_port = 0;
-
-       ret = rdma_notify_addr_change((struct sockaddr *)&sin);
-
-       kfree(work);
+       if (rdma_notify_addr_change((struct sockaddr *)&sin))
+               pr_err("RDS/IP: %pI4 address change notification failed\n",
+                      &addr);
 }
 
 static int rds_ib_move_ip(char                 *from_dev,
@@ -619,8 +615,6 @@ static int rds_ib_move_ip(char                      *from_dev,
        u8                      active_port;
        struct in_device        *in_dev;
        struct rds_ib_device *rds_ibdev;
-       struct rds_ib_conn_drop_work *work;
-       struct rds_ib_addr_change_work *work_addrchange;
 
        page = alloc_page(GFP_HIGHUSER);
        if (!page) {
@@ -743,14 +737,7 @@ static int rds_ib_move_ip(char                     *from_dev,
                if (!rds_ibdev)
                        goto out;
 
-               work_addrchange = kzalloc(sizeof *work, GFP_ATOMIC);
-               if (!work_addrchange) {
-                       printk(KERN_WARNING "RDS/IP: failed to allocate work\n");
-                       goto out;
-               }
-               work_addrchange->addr = addr;
-               INIT_DELAYED_WORK(&work_addrchange->work, rds_ib_notify_addr_change);
-               queue_delayed_work(rds_wq, &work_addrchange->work, 10);
+               rds_ib_notify_addr_change(addr);
        }
 
 out:
index 0202c1c8f4794ea3060d6db57a6fd9ff46109177..95b7e857a2a5f00acee94e2ef18b1c1901da7196 100644 (file)
@@ -411,11 +411,6 @@ struct rds_ib_conn_destroy_work {
        struct rds_connection          *conn;
 };
 
-struct rds_ib_addr_change_work {
-       struct delayed_work             work;
-       __be32                          addr;
-};
-
 enum {
        RDS_IB_MR_8K_POOL,
        RDS_IB_MR_1M_POOL,