return ret;
 }
 
-/* We go to the (large) trouble of VLAN tagging ARP frames because
- * switches in VLAN mode (especially if ports are configured as
- * "native" to a VLAN) might not pass non-tagged frames.
- */
-static void bond_arp_send(struct slave *slave, int arp_op, __be32 dest_ip,
-                         __be32 src_ip, struct bond_vlan_tag *tags)
+static bool bond_handle_vlan(struct slave *slave, struct bond_vlan_tag *tags,
+                            struct sk_buff *skb)
 {
-       struct sk_buff *skb;
-       struct bond_vlan_tag *outer_tag = tags;
-       struct net_device *slave_dev = slave->dev;
        struct net_device *bond_dev = slave->bond->dev;
-
-       slave_dbg(bond_dev, slave_dev, "arp %d on slave: dst %pI4 src %pI4\n",
-                 arp_op, &dest_ip, &src_ip);
-
-       skb = arp_create(arp_op, ETH_P_ARP, dest_ip, slave_dev, src_ip,
-                        NULL, slave_dev->dev_addr, NULL);
-
-       if (!skb) {
-               net_err_ratelimited("ARP packet allocation failed\n");
-               return;
-       }
+       struct net_device *slave_dev = slave->dev;
+       struct bond_vlan_tag *outer_tag = tags;
 
        if (!tags || tags->vlan_proto == VLAN_N_VID)
-               goto xmit;
+               return true;
 
        tags++;
 
                                                tags->vlan_id);
                if (!skb) {
                        net_err_ratelimited("failed to insert inner VLAN tag\n");
-                       return;
+                       return false;
                }
 
                tags++;
                                       outer_tag->vlan_id);
        }
 
-xmit:
-       arp_xmit(skb);
+       return true;
+}
+
+/* We go to the (large) trouble of VLAN tagging ARP frames because
+ * switches in VLAN mode (especially if ports are configured as
+ * "native" to a VLAN) might not pass non-tagged frames.
+ */
+static void bond_arp_send(struct slave *slave, int arp_op, __be32 dest_ip,
+                         __be32 src_ip, struct bond_vlan_tag *tags)
+{
+       struct net_device *bond_dev = slave->bond->dev;
+       struct net_device *slave_dev = slave->dev;
+       struct sk_buff *skb;
+
+       slave_dbg(bond_dev, slave_dev, "arp %d on slave: dst %pI4 src %pI4\n",
+                 arp_op, &dest_ip, &src_ip);
+
+       skb = arp_create(arp_op, ETH_P_ARP, dest_ip, slave_dev, src_ip,
+                        NULL, slave_dev->dev_addr, NULL);
+
+       if (!skb) {
+               net_err_ratelimited("ARP packet allocation failed\n");
+               return;
+       }
+
+       if (bond_handle_vlan(slave, tags, skb))
+               arp_xmit(skb);
+       return;
 }
 
 /* Validate the device path between the @start_dev and the @end_dev.