It is difficult to make sure the state of the interrupt when this
function is called. As such, it is safer to use spin_lock_irqsave
than spin_lock_irq.

Cc: Joe Jin <joe....@oracle.com>
Cc: Junxiao Bi <junxiao...@oracle.com>
Signed-off-by: Zhu Yanjun <yanjun....@oracle.com>
---
 net/rds/ib_cm.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/rds/ib_cm.c b/net/rds/ib_cm.c
index eca3d5f..87ec4dd 100644
--- a/net/rds/ib_cm.c
+++ b/net/rds/ib_cm.c
@@ -963,6 +963,7 @@ void rds_ib_conn_free(void *arg)
 {
        struct rds_ib_connection *ic = arg;
        spinlock_t      *lock_ptr;
+       unsigned long   flags;
 
        rdsdebug("ic %p\n", ic);
 
@@ -973,9 +974,9 @@ void rds_ib_conn_free(void *arg)
         */
        lock_ptr = ic->rds_ibdev ? &ic->rds_ibdev->spinlock : 
&ib_nodev_conns_lock;
 
-       spin_lock_irq(lock_ptr);
+       spin_lock_irqsave(lock_ptr, flags);
        list_del(&ic->ib_node);
-       spin_unlock_irq(lock_ptr);
+       spin_unlock_irqrestore(lock_ptr, flags);
 
        rds_ib_recv_free_caches(ic);
 
-- 
2.7.4

Reply via email to