ipc: move rcu lock out of ipc_addid
[linux.git] / ipc / msg.c
index d0c6d967b390a888b913812d772db2c9bf366810..996feb81924816e7a8608624dd92e7bb7d09e132 100644 (file)
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -199,9 +199,7 @@ static int newque(struct ipc_namespace *ns, struct ipc_params *params)
                return retval;
        }
 
-       /*
-        * ipc_addid() locks msq
-        */
+       /* ipc_addid() locks msq upon success. */
        id = ipc_addid(&msg_ids(ns), &msq->q_perm, ns->msg_ctlmni);
        if (id < 0) {
                security_msg_queue_free(msq);
@@ -218,7 +216,8 @@ static int newque(struct ipc_namespace *ns, struct ipc_params *params)
        INIT_LIST_HEAD(&msq->q_receivers);
        INIT_LIST_HEAD(&msq->q_senders);
 
-       msg_unlock(msq);
+       spin_unlock(&msq->q_perm.lock);
+       rcu_read_unlock();
 
        return msq->q_perm.id;
 }