Hey Gang:

I just re-subscribed to netdev.... Earlier today I  brought up 
something I don't understand with some of the heavy weights
but still don't feel I understand what's happening. It could
be a kgdb cache flushing problem or some magic/land-mines
in the kernel that I'm not familiar with. 

We are running a modified 2.6.12 kernel, yea I know that's
old -- we are working on that.  In the past I've expected the
timer list to "look empty" when the sock structure is released;
that is when the refcnt drops to zero.

Shouldn't the tcp timers have LIST_POISON1 and LIST_POISON2
in their list heads when we drop the last reference to a sk?

We noticed our tcp timers have unexpected values in them
and wondering how to explain it. 

Attached is a copy of a tcp_sock just prior to our freeing it;
as see by kgdb on our 2.6.12 with tcp modified to support being
a proxy. The structure members without sk_ prefixed to it are
additional info that we have added to implement a TCP proxy.

sk->sk_timer looks as expected with LIST_POISON in both list
head pointers. 

The retransmit_timer on the other hand appears to have valid
pointers in it, so I'm wondering if we have a timer reference
count problem.

The tcp_sock is zero'd out on allocation, so I doubt it's 
just stale pointers from a previous incarnation of a tcp_sock.

The delack_timer also has absurd values in it.

I'll add some debug code to try to understand this; if any
of you have some thought on this, it might save me some time
trying to understanding it.
 
-piet

-- 
Piet Delaney
BlueLane Teck
W: (408) 200-5256; [EMAIL PROTECTED]
H: (408) 243-8872; [EMAIL PROTECTED]

(gdb) print *second_saved_tcp_sk
$4 = {
  inet = {
    sk = {
      __sk_common = {
        skc_family = 2, 
        skc_state = 7 '\a', 
        skc_reuse = 0 '\0', 
        skc_bound_dev_if = 0, 
        skc_node = {
          next = 0x0, 
          pprev = 0x0
        }, 
        skc_bind_node = {
          next = 0x0, 
          pprev = 0x0
        }, 
        skc_refcnt = {
          counter = 1
        }
      }, 
      sk_shutdown = 3 '\003', 
      sk_no_check = 0 '\0', 
      sk_userlocks = 0 '\0', 
      sk_protocol = 6 '\006', 
      sk_type = 1, 
      sk_rcvbuf = 87380, 
      sk_lock = {
        slock = {
          slock = 1, 
          magic = 3735899821
        }, 
        owner = 0x0, 
        wq = {
          lock = {
            slock = 1, 
            magic = 3735899821
          }, 
          task_list = {
            next = 0xe779054c, 
            prev = 0xe779054c
          }
        }
      }, 
      sk_sleep = 0x0, 
      sk_dst_cache = 0x0, 
      sk_policy =         {0x0,
        0x0}, 
      sk_dst_lock = {
        lock = 16777216, 
        magic = 3736018669
      }, 
      sk_rmem_alloc = {
        counter = 0
      }, 
      sk_wmem_alloc = {
        counter = 0
      }, 
      sk_omem_alloc = {
        counter = 0
      }, 
      sk_receive_queue = {
        next = 0xe7790578, 
        prev = 0xe7790578, 
        qlen = 0, 
        lock = {
          slock = 1, 
          magic = 3735899821
        }
      }, 
      sk_write_queue = {
        next = 0xe779058c, 
        prev = 0xe779058c, 
        qlen = 0, 
        lock = {
          slock = 1, 
          magic = 3735899821
        }
      }, 
      sk_wmem_queued = 0, 
      sk_forward_alloc = 0, 
      sk_allocation = 208, 
      sk_sndbuf = 16384, 
      sk_route_caps = 7081, 
      sk_hashent = 260506, 
      sk_flags = 49929, 
      sk_lingertime = 0, 
      sk_backlog = {
        head = 0x0, 
        tail = 0x0
      }, 
      sk_error_queue = {
        next = 0xe77905c8, 
        prev = 0xe77905c8, 
        qlen = 0, 
        lock = {
          slock = 1, 
          magic = 3735899821
        }
      }, 
      sk_prot = 0xc06befe0, 
      sk_prot_creator = 0xc06befe0, 
      sk_callback_lock = {
        lock = 16777216, 
        magic = 3736018669
      }, 
      sk_err = 104, 
      sk_err_soft = 0, 
      sk_ack_backlog = 0, 
      sk_max_ack_backlog = 8192, 
      sk_priority = 0, 
      sk_peercred = {
        pid = 0, 
        uid = 4294967295, 
        gid = 4294967295
      }, 
      sk_rcvlowat = 1, 
      sk_rcvtimeo = 2147483647, 
      sk_sndtimeo = 2147483647, 
      sk_filter = 0x0, 
      sk_protinfo = 0x0, 
      sk_timer = {
        entry = {
          next = 0x100100, 
          prev = 0x200200
        }, 
        expires = 7723632, 
        lock = {
          slock = 1, 
          magic = 3735899821
        }, 
        magic = 1267182958, 
        function = 0xc045e090 <tcp_keepalive_timer>, 
        data = 3883468052, 
        base = 0x0
      }, 
      sk_stamp = {
        tv_sec = -1, 
        tv_usec = -1
      }, 
      sk_socket = 0x0, 
      sk_user_data = 0x0, 
      sk_sndmsg_page = 0x0, 
      sk_send_head = 0x0, 
      sk_sndmsg_off = 0, 
      sk_write_pending = 0, 
      sk_security = 0x0, 
      sk_state_change = 0xc03b5c05 <sock_def_wakeup>, 
      sk_data_ready = 0xc03b5d1e <sock_def_readable>, 
      sk_write_space = 0xc03c4db5 <sk_stream_write_space>, 
      sk_error_report = 0xc03b5c84 <sock_def_error_report>, 
      sk_backlog_rcv = 0xc0466cca <tcp_v4_do_rcv>, 
      sk_destruct = 0xc049857e <inet_sock_destruct>, 
      peer_sock = 0xe7790a04, 
      socket_type = 2, 
      peer_sk_state = 7 '\a', 
      flag_tcp_done = 1 '\001', 
      flag_tcp_destroy = 1 '\001', 
      flag_write_queue_purge = 1 '\001', 
      flag_new_server_ack = 0 '\0', 
      do_rst_processing = 0 '\0', 
      do_srv_finack_processing = 0 '\0', 
      rst_processing_done = 1 '\001', 
      flag_tw_present = 0 '\0', 
      default_ttl = 64 '@', 
      tcp_close_processing_index = 0, 
      conndev = 0xc25ff000, 
      ha =         "\000\023Fdè3", '\0' <repeats 25 times>, 
      l2type = 0 '\0', 
      l2addlen = 0 '\0', 
      l2header =         '\0' <repeats 31 times>, 
      vproxy_wmem_queued_data_size = 0, 
      vproxy_max_ubytes = 128000, 
      sk_umem_alloc = 0, 
      sk_ubytes_alloc = 0, 
      num_backlogged_packet = 0, 
      ready_list = {
        next = 0xe77906ec, 
        prev = 0xe77906ec
      }, 
      user_zbuf_queue = {
        next = 0xe77906f4, 
        prev = 0xe77906f4
      }, 
      vproxy_id = 0, 
      listener_id = 0, 
      socket_fd = -1, 
      thrd_id = 0, 
      proper_close_flag = 0 '\0', 
      accepted_flag = 0 '\0', 
      close_sent_flag = 0 '\0', 
      close_with_reset = 0 '\0', 
      synq_high_water_mark = 1, 
      acceptq_high_water_mark = 1, 
      backlog_accept_queue = 0x0, 
      backlog_accept_queue_tail = 0x0, 
      sk_backlog_acceptq_len = 0, 
      backlog_acceptq_high_water_mark = 0, 
      peer_clock = 4053694621, 
      default_protocol = 2048, 
      dproxy_port = 0, 
      sa_session_id = 7, 
      recv_tstamp = 0
    }, 
    daddr = 0, 
    rcv_saddr = 0, 
    dport = 0, 
    num = 0, 
    saddr = 3885070188, 
    uc_ttl = 31132, 
    cmsg_flags = 59281, 
    opt = 0xe791776c, 
    sport = 31132, 
    id = 59281, 
    tos = 2 '\002', 
    mc_ttl = 0 '\0', 
    pmtudisc = 8 '\b', 
    recverr = 0, 
    freebind = 0, 
    hdrincl = 0, 
    mc_loop = 0, 
    mc_index = 0, 
    mc_addr = 0, 
    mc_list = 0xc2b449a8, 
    cork = {
      flags = 0, 
      fragsize = 0, 
      opt = 0x7, 
      rt = 0x10603, 
      length = 133792, 
      addr = 1, 
      fl = {
        oif = -559067475, 
        iif = 0, 
        nl_u = {
          ip4_u = {
            daddr = 1, 
            saddr = 3735899821, 
            fwmark = 3883469372, 
            tos = 60 '<', 
            scope = 10 '\n'
          }, 
          ip6_u = {
            daddr = {
              in6_u = {
                u6_addr8 =                   "\001\000\000\000­N­Þ<\nyç<\nyç", 
                u6_addr16 =                   {1,
                  0,
                  20141,
                  57005,
                  2620,
                  59257,
                  2620,
                  59257}, 
                u6_addr32 =                   {1,
                  3735899821,
                  3883469372,
                  3883469372}
              }
            }, 
            saddr = {
              in6_u = {
                u6_addr8 =                   '\0' <repeats 15 times>, 
                u6_addr16 =                   {0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0,
                  0}, 
                u6_addr32 =                   {0,
                  0,
                  0,
                  0}
              }
            }, 
            flowlabel = 16777216
          }, 
          dn_u = {
            daddr = 1, 
            saddr = 0, 
            fwmark = 3735899821, 
            scope = 60 '<'
          }
        }, 
        proto = 237 'í', 
        flags = 30 '\036', 
        uli_u = {
          ports = {
            sport = 0, 
            dport = 0
          }, 
          icmpt = {
            type = 0 '\0', 
            code = 0 '\0'
          }, 
          dnports = {
            sport = 0, 
            dport = 0, 
            objnum = 0 '\0', 
            objnamel = 0 '\0', 
            objname =               "\000\000\000\000\000\000h\nyçh\nyç\000"
          }, 
          spi = 0
        }
      }
    }
  }, 
  tcp_header_len = 1, 
  pred_flags = 3735899821, 
  rcv_nxt = 3883469436, 
  snd_nxt = 3883469436, 
  snd_una = 0, 
  snd_sml = 1, 
  rcv_tstamp = 3735899821, 
  lsndtime = 0, 
  bind_hash = 0x0, 
  ack = {
    pending = 208 'Ð', 
    quick = 0 '\0', 
    pingpong = 0 '\0', 
    blocked = 0 '\0', 
    ato = 16384, 
    timeout = 7081, 
    lrcvtime = 214170, 
    last_seg_size = 33547, 
    rcv_mss = 0
  }, 
  ucopy = {
    prequeue = {
      next = 0x0, 
      prev = 0x0, 
      qlen = 0, 
      lock = {
        slock = 3883469496, 
        magic = 3883469496
      }
    }, 
    task = 0x0, 
    iov = 0x1, 
    memory = -559067475, 
    len = -1066668064
  }, 
  snd_wl1 = 3228299232, 
  snd_wnd = 16777216, 
  max_window = 3736018669, 
  pmtu_cookie = 0, 
  mss_cache = 0, 
  mss_cache_std = 0, 
  ext_header_len = 8192, 
  ca_state = 0 '\0', 
  retransmits = 0 '\0', 
  advmss = 0, 
  window_clamp = 0, 
  rcv_ssthresh = 4294967295, 
  frto_highmark = 4294967295, 
  reordering = 1 '\001', 
  frto_counter = 0 '\0', 
  adv_cong = 0 '\0', 
  defer_accept = 0 '\0', 
  srtt = 2147483647, 
  mdev = 2147483647, 
  mdev_max = 0, 
  rttvar = 0, 
  rtt_seq = 3883468316, 
  rto = 3254917928, 
  packets_out = 7723632, 
  left_out = 1, 
  retrans_out = 3735899821, 
  backoff = 110 'n', 
  nonagle = 173 '­', 
  keepalive_probes = 135 '\207', 
  probes_out = 75 'K', 
  rx_opt = {
    ts_recent_stamp = -1069162352, 
    ts_recent = 3883469316, 
    rcv_tsval = 3254914784, 
    rcv_tsecr = 4294967295, 
    saw_tstamp = 1, 
    tstamp_ok = 1, 
    dsack = 1, 
    wscale_ok = 1, 
    sack_ok = 15, 
    snd_wscale = 15, 
    rcv_wscale = 15, 
    eff_sacks = 255 'ÿ', 
    num_sacks = 255 'ÿ', 
    user_mss = 0, 
    mss_clamp = 0
  }, 
  snd_ssthresh = 0, 
  snd_cwnd = 0, 
  snd_cwnd_cnt = 0, 
  snd_cwnd_clamp = 0, 
  snd_cwnd_used = 0, 
  snd_cwnd_stamp = 0, 
  timeout = 0, 
  retransmit_timer = {
    entry = {
      next = 0xc0533cd2, 
      prev = 0xc0533cf2
    }, 
    expires = 3225177525, 
    lock = {
      slock = 3226680535, 
      magic = 3225840842
    }, 
    magic = 3226043774, 
    function = 0xe7790514, 
    data = 262145, 
    base = 0x0
  }, 
  delack_timer = {
    entry = {
      next = 0x40000000, 
      prev = 0x0
    }, 
    expires = 3261071360, 
    lock = {
      slock = 33263616, 
      magic = 20134
    }, 
    magic = 0, 
    function = 0, 
    data = 0, 
    base = 0x0
  }, 
  out_of_order_queue = {
    next = 0x0, 
    prev = 0x0, 
    qlen = 0, 
    lock = {
      slock = 0, 
      magic = 0
    }
  }, 
  af_specific = 0x0, 
  rcv_wnd = 0, 
  rcv_wup = 0, 
  write_seq = 0, 
  pushed_seq = 0, 
  copied_seq = 0, 
  duplicate_sack =     {{
      start_seq = 0, 
      end_seq = 128000
    }}, 
  selective_acks =     {{
      start_seq = 0, 
      end_seq = 0
    },
    {
      start_seq = 0, 
      end_seq = 3883469788
    },
    {
      start_seq = 3883469788, 
      end_seq = 3883469796
    },
    {
      start_seq = 3883469796, 
      end_seq = 3
    }}, 
  syn_retries = 1 '\001', 
  ecn_flags = 0 '\0', 
  prior_ssthresh = 0, 
  lost_out = 33, 
  sacked_out = 1, 
  fackets_out = 65793, 
  high_seq = 1, 
  retrans_stamp = 1, 
  undo_marker = 0, 
  undo_retrans = 0, 
  urg_seq = 0, 
  urg_data = 0, 
  pending = 0 '\0', 
  urg_mode = 0 '\0', 
  snd_up = 4053696949, 
  total_retrans = 2048, 
  syn_wait_lock = {
    lock = 7, 
    magic = 0
  }, 
  listen_opt = 0x0, 
  accept_queue = 0x0, 
  accept_queue_tail = 0x296, 
  keepalive_time = 262146, 
  keepalive_intvl = 0, 
  linger2 = 0, 
  last_synq_overflow = 3267336616, 
  rcv_rtt_est = {
    rtt = 0, 
    seq = 0, 
    time = 6
  }, 
  rcvq_space = {
    space = 67072, 
    seq = 87380, 
    time = 1
  }, 
  westwood = {
    bw_ns_est = 3735899821, 
    bw_est = 0, 
    rtt_win_sx = 1, 
    bk = 3735899821, 
    snd_una = 3883468108, 
    cumul_ack = 3883468108, 
    accounted = 0, 
    rtt = 0, 
    rtt_min = 0
  }, 
  vegas = {
    beg_snd_nxt = 0, 
    beg_snd_una = 16777216, 
    beg_snd_cwnd = 3736018669, 
    doing_vegas_now = 0 '\0', 
    cntRTT = 0, 
    minRTT = 0, 
    baseRTT = 0
  }, 
  bictcp = {
    cnt = 3883468152, 
    last_max_cwnd = 3883468152, 
    last_cwnd = 0, 
    last_stamp = 1
  }
}
(gdb) 

Reply via email to