tcp_do_sendmsg() allocation still broken ?

From: Marcelo Tosatti (marcelo@conectiva.com.br)
Date: Sat Oct 28 2000 - 16:12:44 EST


David,

tcp_do_sendmsg() still allocates using GFP_KERNEL when it can't, it seems:

int tcp_do_sendmsg(struct sock *sk, struct msghdr *msg)
{
...
                     TCP_SKB_CB(skb)->seq = tp->write_seq;
                        TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(skb)->seq +
copy;

                        /* This advances tp->write_seq for us. */
                        tcp_send_skb(sk, skb, queue_it);
                        ^^^^^^^^^^^^
 
                }
        }
        sk->err = 0;
...
}

Now what we can find at tcp_send_skb? :)

void tcp_send_skb(struct sock *sk, struct sk_buff *skb, int force_queue,
unsigned cur_mss) {

...

    if (!force_queue && tp->send_head == NULL && tcp_snd_test(tp, skb,
cur_mss, 1)) {
                /* Send it out now. */
                TCP_SKB_CB(skb)->when = tcp_time_stamp;
                if (tcp_transmit_skb(sk, skb_clone(skb, GFP_KERNEL)) == 0) {
                                                        ^^^^^^^^^^^^
                        tp->snd_nxt = TCP_SKB_CB(skb)->end_seq;

...

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Oct 31 2000 - 21:00:24 EST