list_for_each_entry(cl, &dev->file_list, link) {
                if (mei_cl_hbm_equal(cl, mei_hdr)) {
                        cl_dbg(dev, cl, "got a message\n");
-                       break;
+                       ret = mei_cl_irq_read_msg(cl, mei_hdr, meta_hdr, cmpl_list);
+                       goto reset_slots;
                }
        }
 
        /* if no recipient cl was found we assume corrupted header */
-       if (&cl->link == &dev->file_list) {
-               /* A message for not connected fixed address clients
-                * should be silently discarded
-                * On power down client may be force cleaned,
-                * silently discard such messages
-                */
-               if (hdr_is_fixed(mei_hdr) ||
-                   dev->dev_state == MEI_DEV_POWER_DOWN) {
-                       mei_irq_discard_msg(dev, mei_hdr, mei_hdr->length);
-                       ret = 0;
-                       goto reset_slots;
-               }
-               dev_err(dev->dev, "no destination client found 0x%08X\n",
-                               dev->rd_msg_hdr[0]);
-               ret = -EBADMSG;
-               goto end;
+       /* A message for not connected fixed address clients
+        * should be silently discarded
+        * On power down client may be force cleaned,
+        * silently discard such messages
+        */
+       if (hdr_is_fixed(mei_hdr) ||
+           dev->dev_state == MEI_DEV_POWER_DOWN) {
+               mei_irq_discard_msg(dev, mei_hdr, mei_hdr->length);
+               ret = 0;
+               goto reset_slots;
        }
-
-       ret = mei_cl_irq_read_msg(cl, mei_hdr, meta_hdr, cmpl_list);
-
+       dev_err(dev->dev, "no destination client found 0x%08X\n", dev->rd_msg_hdr[0]);
+       ret = -EBADMSG;
+       goto end;
 
 reset_slots:
        /* reset the number of slots and header */