]> Pileus Git - ~andy/linux/blobdiff - drivers/hv/connection.c
Merge branch 'for-v3.11' of git://git.linaro.org/people/mszyprowski/linux-dma-mapping
[~andy/linux] / drivers / hv / connection.c
index 253a74ba245cb0011706f1644fca674f67a52441..ec3b8cdf1e043fe6a987929c24739fa8df282ba7 100644 (file)
@@ -246,12 +246,26 @@ struct vmbus_channel *relid2channel(u32 relid)
        struct vmbus_channel *channel;
        struct vmbus_channel *found_channel  = NULL;
        unsigned long flags;
+       struct list_head *cur, *tmp;
+       struct vmbus_channel *cur_sc;
 
        spin_lock_irqsave(&vmbus_connection.channel_lock, flags);
        list_for_each_entry(channel, &vmbus_connection.chn_list, listentry) {
                if (channel->offermsg.child_relid == relid) {
                        found_channel = channel;
                        break;
+               } else if (!list_empty(&channel->sc_list)) {
+                       /*
+                        * Deal with sub-channels.
+                        */
+                       list_for_each_safe(cur, tmp, &channel->sc_list) {
+                               cur_sc = list_entry(cur, struct vmbus_channel,
+                                                       sc_list);
+                               if (cur_sc->offermsg.child_relid == relid) {
+                                       found_channel = cur_sc;
+                                       break;
+                               }
+                       }
                }
        }
        spin_unlock_irqrestore(&vmbus_connection.channel_lock, flags);