Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
[pandora-kernel.git] / net / ipv4 / raw.c
index 2979f14..ebb1e58 100644 (file)
@@ -375,7 +375,7 @@ static int raw_send_hdrinc(struct sock *sk, void *from, size_t length,
        err = NF_HOOK(PF_INET, NF_INET_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
                      dst_output);
        if (err > 0)
-               err = inet->recverr ? net_xmit_errno(err) : 0;
+               err = net_xmit_errno(err);
        if (err)
                goto error;
 out:
@@ -386,6 +386,8 @@ error_fault:
        kfree_skb(skb);
 error:
        IP_INC_STATS(net, IPSTATS_MIB_OUTDISCARDS);
+       if (err == -ENOBUFS && !inet->recverr)
+               err = 0;
        return err;
 }
 
@@ -576,8 +578,11 @@ back_from_confirm:
                                        &ipc, &rt, msg->msg_flags);
                if (err)
                        ip_flush_pending_frames(sk);
-               else if (!(msg->msg_flags & MSG_MORE))
+               else if (!(msg->msg_flags & MSG_MORE)) {
                        err = ip_push_pending_frames(sk);
+                       if (err == -ENOBUFS && !inet->recverr)
+                               err = 0;
+               }
                release_sock(sk);
        }
 done: