tcp_do_sendmsg() allocation still broken ?

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

  • Next message: Andre Hedrick: "Re: Linux 2.2.18pre18"

    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 : Sat Oct 28 2000 - 19:14:23 EDT