netlink: make nlmsg_end() and genlmsg_end() void
[deliverable/linux.git] / net / bridge / br_netlink.c
index 0b03879488c41a9a7ec52061e7f92f39991603ce..528cf2790a5f6c5f66390056212e1b005e6599f0 100644 (file)
@@ -105,7 +105,7 @@ static int br_fill_ifvlaninfo_compressed(struct sk_buff *skb,
                                         const struct net_port_vlans *pv)
 {
        u16 vid_range_start = 0, vid_range_end = 0;
-       u16 vid_range_flags;
+       u16 vid_range_flags = 0;
        u16 pvid, vid, flags;
        int err = 0;
 
@@ -142,12 +142,14 @@ initvars:
                vid_range_flags = flags;
        }
 
-       /* Call it once more to send any left over vlans */
-       err = br_fill_ifvlaninfo_range(skb, vid_range_start,
-                                      vid_range_end,
-                                      vid_range_flags);
-       if (err)
-               return err;
+       if (vid_range_start != 0) {
+               /* Call it once more to send any left over vlans */
+               err = br_fill_ifvlaninfo_range(skb, vid_range_start,
+                                              vid_range_end,
+                                              vid_range_flags);
+               if (err)
+                       return err;
+       }
 
        return 0;
 }
@@ -261,7 +263,8 @@ static int br_fill_ifinfo(struct sk_buff *skb,
        }
 
 done:
-       return nlmsg_end(skb, nlh);
+       nlmsg_end(skb, nlh);
+       return 0;
 
 nla_put_failure:
        nlmsg_cancel(skb, nlh);
@@ -567,6 +570,11 @@ int br_dellink(struct net_device *dev, struct nlmsghdr *nlh)
 
        err = br_afspec((struct net_bridge *)netdev_priv(dev), p,
                        afspec, RTM_DELLINK);
+       if (err == 0)
+               /* Send RTM_NEWLINK because userspace
+                * expects RTM_NEWLINK for vlan dels
+                */
+               br_ifinfo_notify(RTM_NEWLINK, p);
 
        return err;
 }
This page took 0.02432 seconds and 5 git commands to generate.