datapath: Correctly set error code in queue_userspace_packets().
authorJesse Gross <jesse@nicira.com>
Mon, 19 Sep 2011 23:23:25 +0000 (16:23 -0700)
committerJesse Gross <jesse@nicira.com>
Mon, 19 Sep 2011 23:50:58 +0000 (16:50 -0700)
In a few places in queue_userspace_packets() when we encounter an
error, we don't actually set the 'err' variable.  Although we
free the packets we don't correctly account for these packets as
being lost.

Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
datapath/datapath.c

index ccdcb75..b5e9019 100644 (file)
@@ -458,8 +458,10 @@ static int queue_userspace_packets(struct datapath *dp, struct sk_buff *skb,
                if (unlikely(err))
                        goto err_kfree_skbs;
 
-               if (nla_attr_size(skb->len) > USHRT_MAX)
+               if (nla_attr_size(skb->len) > USHRT_MAX) {
+                       err = -EFBIG;
                        goto err_kfree_skbs;
+               }
 
                len = sizeof(struct odp_header);
                len += nla_total_size(skb->len);
@@ -474,6 +476,7 @@ static int queue_userspace_packets(struct datapath *dp, struct sk_buff *skb,
                user_skb = genlmsg_new(len, GFP_ATOMIC);
                if (!user_skb) {
                        netlink_set_err(INIT_NET_GENL_SOCK, 0, group, -ENOBUFS);
+                       err = -ENOMEM;
                        goto err_kfree_skbs;
                }