Hi Slawa,
On 10/13/16 4:38 PM, Slawa Olhovchenkov wrote:> On Thu, Oct 13, 2016 at 01:56:21PM +0200, Julien Charbon wrote:
>>>> Something like:
>>>
>>> Yes, thanks!
>>
>> Proposed changes added in the review:
>>
>> https://reviews.freebsd.org/D8211
>>
>> tell me when you have three days without issue with this change.
>>
>>>> tcp_detach() {
>>>>
>>>> ...
>>>> if (inp->inp_flags & INP_TIMEWAIT) {
>>>>
>>>> ...
>>>> if (inp->inp_flags & INP_DROPPED) {
>>>>
>>>> in_pcbdetach(inp);
>>>> if (__predict_true(tp == NULL)) {
>>>> in_pcbfree(inp);
>>>> } else {
>>>> #ifdef INVARIANTS
>>>> panic("tcp_detach: tp != NULL, That's not good
because 'blah'\n");
>>>> #else
>>>> log(LOG_ERR, "tcp_detach: tp != NULL, That's
not good because
>>>> 'blah'\n");
>>>
>>> May be some more info in log can help to detect root cause of
issuse?
>>> I am don't know what info, may be flags or number of
references?
>>
>> For this kind of issue, the useful part is the stacktrace. INVARIANT
>
> Like this?
>
> #ifdef KDB
> kdb_backtrace();
> #endif
>
> as found in sys/netgraph/ng_base.c
It is overkill dtrace can do that.
>> will give you that trace in the core, and without INVARIANT then it is
>> better to use dtrace:
>>
>> $ cat tcp-twstart-dropped.d
>> fbt::tcp_twstart:entry
>> /args[0]->t_inpcb->inp_flags & 0x04000000/
>> {
>> stack();
>> printf("INP_DROPPED in tcp_twstart: %x",
args[0]->t_inpcb->inp_flags);
>> }
>
> Same code may be insert there too, IMHO.
Hmm, I don't think so:
- If you have INVARIANT, the kernel will panic in tcp_twstart() or
tcp_detach() and you will have everything you need to debug.
- If you don't, dtrace is the right tool to use in all cases anyway.
--
Julien
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 496 bytes
Desc: OpenPGP digital signature
URL:
<http://lists.freebsd.org/pipermail/freebsd-stable/attachments/20161013/7b7adcda/attachment.sig>