]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/iucv/af_iucv.c
Merge branch 'master' of git://git.kernel.org/pub/scm/fs/xfs/xfs
[karo-tx-linux.git] / net / iucv / af_iucv.c
index 9cfdaaddc5b2756bfb6d2d859b4c6008347545d0..b51c9187c3476652b2e4f1f01c4e7c52dc637e07 100644 (file)
@@ -1124,6 +1124,8 @@ static void iucv_callback_rx(struct iucv_path *path, struct iucv_message *msg)
                return;
        }
 
+       spin_lock(&iucv->message_q.lock);
+
        if (!list_empty(&iucv->message_q.list) ||
            !skb_queue_empty(&iucv->backlog_skb_q))
                goto save_message;
@@ -1137,9 +1139,8 @@ static void iucv_callback_rx(struct iucv_path *path, struct iucv_message *msg)
        if (!skb)
                goto save_message;
 
-       spin_lock(&iucv->message_q.lock);
        iucv_process_message(sk, skb, path, msg);
-       spin_unlock(&iucv->message_q.lock);
+       goto out_unlock;
 
        return;
 
@@ -1150,8 +1151,9 @@ save_message:
        save_msg->path = path;
        save_msg->msg = *msg;
 
-       spin_lock(&iucv->message_q.lock);
        list_add_tail(&save_msg->list, &iucv->message_q.list);
+
+out_unlock:
        spin_unlock(&iucv->message_q.lock);
 }