if (msk->pm.addr_signal & BIT(MPTCP_ADD_ADDR_SIGNAL))
                        return;
 
-               if (local) {
-                       if (mptcp_pm_alloc_anno_list(msk, &local->addr)) {
-                               __clear_bit(local->addr.id, msk->pm.id_avail_bitmap);
-                               msk->pm.add_addr_signaled++;
-                               mptcp_pm_announce_addr(msk, &local->addr, false);
-                               mptcp_pm_nl_addr_send_ack(msk);
-                       }
-               }
+               if (!local)
+                       goto subflow;
+
+               if (!mptcp_pm_alloc_anno_list(msk, &local->addr))
+                       goto subflow;
+
+               __clear_bit(local->addr.id, msk->pm.id_avail_bitmap);
+               msk->pm.add_addr_signaled++;
+               mptcp_pm_announce_addr(msk, &local->addr, false);
+               mptcp_pm_nl_addr_send_ack(msk);
        }
 
+subflow:
        /* check if should create a new subflow */
        while (msk->pm.local_addr_used < local_addr_max &&
               msk->pm.subflows < subflows_max) {