RDS: Fix locking in send on m_rs_lock
authorAndy Grover <andy.grover@oracle.com>
Mon, 29 Mar 2010 23:50:54 +0000 (16:50 -0700)
committerAndy Grover <andy.grover@oracle.com>
Thu, 9 Sep 2010 01:12:18 +0000 (18:12 -0700)
Do not nest m_rs_lock under c_lock

Disable interrupts in {rdma,atomic}_send_complete

Signed-off-by: Andy Grover <andy.grover@oracle.com>
net/rds/send.c

index 15b715a85fd5e2cccead0f8b0c4a4db139880de2..ecda3e6c432c3f7e083b55389dffdae49fc4bc87 100644 (file)
@@ -468,8 +468,9 @@ void rds_atomic_send_complete(struct rds_message *rm, int status)
        struct rds_sock *rs = NULL;
        struct rm_atomic_op *ao;
        struct rds_notifier *notifier;
+       unsigned long flags;
 
-       spin_lock(&rm->m_rs_lock);
+       spin_lock_irqsave(&rm->m_rs_lock, flags);
 
        ao = &rm->atomic;
        if (test_bit(RDS_MSG_ON_SOCK, &rm->m_flags)
@@ -486,7 +487,7 @@ void rds_atomic_send_complete(struct rds_message *rm, int status)
                ao->op_notifier = NULL;
        }
 
-       spin_unlock(&rm->m_rs_lock);
+       spin_unlock_irqrestore(&rm->m_rs_lock, flags);
 
        if (rs) {
                rds_wake_sk_sleep(rs);