Partha et al, Thanks for the heads-up. Also note that our user-space applications were built against headers (i.e. /usr/include/...) that came from the 4.4.0 kernel. Are there any backward-compatibility issues running these binaries against the newly built 4.9.11-based TIPC kernel module? It is my understanding that kernel code is meant to be backward-compatible in principle...
Peter -----Original Message----- From: Parthasarathy Bhuvaragan [mailto:parthasarathy.bhuvara...@ericsson.com] Sent: February-27-17 7:37 AM To: Butler, Peter <pbut...@sonusnet.com> Cc: Jon Maloy <jon.ma...@ericsson.com>; tipc-discussion@lists.sourceforge.net Subject: Re: TIPC Oops in tipc_sk_recv On 02/24/2017 04:15 PM, Butler, Peter wrote: > Hi Partha, > > > > In our situation we do not need to support the delivery of RPMs in any > way. Literally the only thing we are changing on the target systems > is the tipc.ko file. That is, the original 4.4.0 kernel and all other > 4.4.0-specific kernel modules will be left untouched. > > > > I am doing this actually removing the include/uapi/linux/tipc* and > net/tipc/* files from within our 4.4.0 kernel source tree, and > replacing them with the files from kernel 4.9.11. (Note that kernel > 4.9.11 actually has a couple more TIPC-related files than the 4.4.0 > kernel.) To accomplish I had to make a few changes (as per the email > thread between Jon and myself) to get it to compile. > > > > Then, when I kick off a 'make' (no 'make clean' is performed) at the > top level of the kernel source tree the build process detects that > everything TIPC-related requires building, and a new tipc.ko is > generated. This tipc.ko is literally taken and installed onto the > existing 4.4.0 systems without any other changes (e.g. no new bzImage > is installed - the original kernel file is left untouched). > > > > We're not concerned about maintainability for now, as we plan on doing > a full upgrade of the entire kernel at some point in the next few months. > The hybrid of a 4.4.0 kernel running a TIPC source from 4.9.11 is only > a stop-gap measure for an emergency fix needed asap. > > > > If you can foresee any issues with our short-term plan here let me > know. As it stands I have the module built and running - but that of > course doesn't mean that run-time issues won't occur. > Hi Peter, If you are taking the latest tipc, please patch yours with these two fixes for the socket. [PATCH net v1 1/2] tipc: fix socket flow control errors [PATCH net v1 2/2] tipc: Fix missing connection request handling A word of caution: My users still face stability issues (connection are permanently congested) while running load over several connections (~1000+) and i am yet to find the root cause. /Partha > > > /Peter > > > > *From:*Parthasarathy Bhuvaragan > [mailto:parthasarathy.bhuvara...@ericsson.com] > *Sent:* February-24-17 5:21 AM > *To:* Butler, Peter <pbut...@sonusnet.com> > *Cc:* Jon Maloy <jon.ma...@ericsson.com>; > tipc-discussion@lists.sourceforge.net > *Subject:* Re: TIPC Oops in tipc_sk_recv > > > > Hi Peter, > > > > The backporting strategy varies depending on: > > 1. Supporting upgrades of rpm's. Ex: can you deliver a new tipc rpm > and update it on an existing kernel. > > 2. Delivering / Upgrading the entire kernel. No individual rpm updates > are delivered. > > > > If its option 2, then you may be allowed to update tipc ABI i.e > include the commits which touch include/uapi/linux/tipc*. > > I have to support option 1, so I cannot include any commit which > touches files outside net/tipc/ without manual intervention. > > > > The way I do it is to using git and walk all the commits from a > specific version upto say v4.9 and follow these rules: > > 1. Skip commits which are not tipc specific, i.e its introduced as a > part of core net cleanup. They usually break the ABI. > > 2. If you skip a commit, the subsequent commit needs to be amended to > apply cleanly. > > 3. When cherry-picking commits, use option "-x" to record the upstream > commit id. This way you can do git-blame and find out the history. > > This is a slow process, but you will be sure of the commits you pick > and its history. > > > > If you copy the tipc source from a later kernel to say v4.4.x, then > you loose the history. This will hinder maintainability in the long run. > > > > /Partha > > ---------------------------------------------------------------------- > -- > > *From:*Butler, Peter <pbut...@sonusnet.com > <mailto:pbut...@sonusnet.com>> > *Sent:* Thursday, February 23, 2017 9:29 PM > *To:* Jon Maloy; tipc-discussion@lists.sourceforge.net > <mailto:tipc-discussion@lists.sourceforge.net>; Parthasarathy > Bhuvaragan > *Cc:* Butler, Peter > *Subject:* RE: TIPC Oops in tipc_sk_recv > > > > I have made the following final change: this change works around the > different function signature for udp_tunnel6_xmit_skb() in udp_media.c > (function is defined in net/ipv6/ip6_udp_tunnel.c): > > Change: > err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb, > ndst->dev, &src->ipv6, > &dst->ipv6, 0, ttl, 0, src->port, > dst->port, false); > > To be: > err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb, > ndst->dev, &src->ipv6, > &dst->ipv6, 0, ttl, src->port, > dst->port, false); > > That is, simply remove the '0' parameter (which comes immediately > after the ttl parameter). In 4.9.11 this is a variable called 'label' > and is being passed as '0', while in 4.4.0 it appears to be explicitly > set to 0 directly within the udp_tunnel6_xmit_skb() function anyway. > > With that last change in effect, everything now compiles. (I have not > tested anything, mind you.) > > Note that I did not come across any errors regarding the iov handling in > msg_build() that you mentioned. Were you expecting compilation to fail > there? Or were you expecting it to succeed, but the resulting TIPC > functionality to simply be erroneous at run-time? > > Peter > > > > > > -----Original Message----- > From: Butler, Peter > Sent: February-23-17 2:48 PM > To: Jon Maloy <jon.ma...@ericsson.com > <mailto:jon.ma...@ericsson.com>>; > tipc-discussion@lists.sourceforge.net > <mailto:tipc-discussion@lists.sourceforge.net>; Parthasarathy > Bhuvaragan <parthasarathy.bhuvara...@ericsson.com > <mailto:parthasarathy.bhuvara...@ericsson.com>> > Cc: Butler, Peter <pbut...@sonusnet.com <mailto:pbut...@sonusnet.com>> > Subject: RE: TIPC Oops in tipc_sk_recv > > I have made the following change so as to work around the missing > skwq_has_sleeper() function in our 4.4.0 kernel source stream (as > required for the 4.9.11 TIPC source). This change was based on a > comparison of 4.4.0 and 4.9.11 kernel code (include/net/sock.h and > include/linux/wait.h). > > Change: > if (skwq_has_sleeper(wq)) > > To be: > if (wq && wq_has_sleeper(wq)) > > Let me know if that seems reasonable to you. > > With this change in effect, my compilation now proceeds further (see > below). As always, any insight is much appreciated. > > CHK include/config/kernel.release > CHK include/generated/uapi/linux/version.h > CHK include/generated/utsrelease.h > CHK include/generated/bounds.h > CHK include/generated/timeconst.h > CHK include/generated/asm-offsets.h > CALL scripts/checksyscalls.sh > LD net/tipc/built-in.o > CC [M] net/tipc/addr.o > CC [M] net/tipc/bcast.o > CC [M] net/tipc/bearer.o > CC [M] net/tipc/core.o > CC [M] net/tipc/link.o > CC [M] net/tipc/discover.o > CC [M] net/tipc/msg.o > CC [M] net/tipc/name_distr.o > CC [M] net/tipc/subscr.o > CC [M] net/tipc/monitor.o > CC [M] net/tipc/name_table.o > CC [M] net/tipc/net.o > CC [M] net/tipc/netlink.o > CC [M] net/tipc/netlink_compat.o > CC [M] net/tipc/node.o > CC [M] net/tipc/socket.o > CC [M] net/tipc/eth_media.o > CC [M] net/tipc/server.o > CC [M] net/tipc/udp_media.o > net/tipc/udp_media.c: In function 'tipc_udp_xmit': > net/tipc/udp_media.c:199:9: error: too many arguments to function > 'udp_tunnel6_xmit_skb' > include/net/udp_tunnel.h:87:5: note: declared here > make[1]: *** [net/tipc/udp_media.o] Error 1 > make: *** [net/tipc/] Error 2 > > -----Original Message----- > From: Butler, Peter > Sent: February-23-17 2:14 PM > To: Jon Maloy <jon.ma...@ericsson.com > <mailto:jon.ma...@ericsson.com>>; > tipc-discussion@lists.sourceforge.net > <mailto:tipc-discussion@lists.sourceforge.net>; Parthasarathy > Bhuvaragan <parthasarathy.bhuvara...@ericsson.com > <mailto:parthasarathy.bhuvara...@ericsson.com>> > Cc: Butler, Peter <pbut...@sonusnet.com <mailto:pbut...@sonusnet.com>> > Subject: RE: TIPC Oops in tipc_sk_recv > > I have changed TIPC_DEF_MON_THRESHOLD (in core.h) from 32 to 100 as > suggested. > > I still (of course) had to comment all functionality within > __tipc_nl_add_monitor_peer() so as to get around the undefined > nla_put_u64_64bit() function call. As such, > __tipc_nl_add_monitor_peer() is now reduced to nothing more than a > "return 0" statement. > > Note that I did not bother to similarly comment out other > netlink-monitoring-related functions in monitor.c, since I assume that > monitoring is now explicitly disabled (as per your suggestion to > change > TIPC_DEF_MON_THRESHOLD) - correct? > > As such my compilation now makes it this far (see below). I will look > at this error but as always am open to (more enlightened) insight. > > CHK include/config/kernel.release > CHK include/generated/uapi/linux/version.h > CHK include/generated/utsrelease.h > CHK include/generated/bounds.h > CHK include/generated/timeconst.h > CHK include/generated/asm-offsets.h > CALL scripts/checksyscalls.sh > LD net/tipc/built-in.o > CC [M] net/tipc/addr.o > CC [M] net/tipc/bcast.o > CC [M] net/tipc/bearer.o > CC [M] net/tipc/core.o > CC [M] net/tipc/link.o > CC [M] net/tipc/discover.o > CC [M] net/tipc/msg.o > CC [M] net/tipc/name_distr.o > CC [M] net/tipc/subscr.o > CC [M] net/tipc/monitor.o > CC [M] net/tipc/name_table.o > CC [M] net/tipc/net.o > CC [M] net/tipc/netlink.o > CC [M] net/tipc/netlink_compat.o > CC [M] net/tipc/node.o > CC [M] net/tipc/socket.o > net/tipc/socket.c: In function 'tipc_write_space': > net/tipc/socket.c:1492:2: error: implicit declaration of function > 'skwq_has_sleeper' [-Werror=implicit-function-declaration] > cc1: some warnings being treated as errors > make[1]: *** [net/tipc/socket.o] Error 1 > make: *** [net/tipc/] Error 2 > > -----Original Message----- > From: Butler, Peter > Sent: February-23-17 1:45 PM > To: Jon Maloy <jon.ma...@ericsson.com > <mailto:jon.ma...@ericsson.com>>; > tipc-discussion@lists.sourceforge.net > <mailto:tipc-discussion@lists.sourceforge.net>; Parthasarathy > Bhuvaragan <parthasarathy.bhuvara...@ericsson.com > <mailto:parthasarathy.bhuvara...@ericsson.com>> > Cc: Butler, Peter <pbut...@sonusnet.com <mailto:pbut...@sonusnet.com>> > Subject: RE: TIPC Oops in tipc_sk_recv > > I definitely don't want to be moving into dangerous waters, so I'll > take your suggestion right now and start over.... > > -----Original Message----- > From: Jon Maloy [mailto:jon.ma...@ericsson.com] > Sent: February-23-17 1:43 PM > To: Butler, Peter <pbut...@sonusnet.com > <mailto:pbut...@sonusnet.com>>; tipc-discussion@lists.sourceforge.net > <mailto:tipc-discussion@lists.sourceforge.net>; Parthasarathy > Bhuvaragan <parthasarathy.bhuvara...@ericsson.com > <mailto:parthasarathy.bhuvara...@ericsson.com>> > Subject: RE: TIPC Oops in tipc_sk_recv > > > >> -----Original Message----- >> From: Butler, Peter [mailto:pbut...@sonusnet.com] >> Sent: Thursday, February 23, 2017 01:23 PM >> To: Jon Maloy <jon.ma...@ericsson.com >> <mailto:jon.ma...@ericsson.com>>; tipc- >> discuss...@lists.sourceforge.net > <mailto:discuss...@lists.sourceforge.net>; Parthasarathy Bhuvaragan >> <parthasarathy.bhuvara...@ericsson.com > <mailto:parthasarathy.bhuvara...@ericsson.com>> >> Cc: Butler, Peter <pbut...@sonusnet.com >> <mailto:pbut...@sonusnet.com>> >> Subject: RE: TIPC Oops in tipc_sk_recv >> >> That might be a possibility - I know the customer is close to 32 >> nodes however, so it might not be. >> >> I'm also looking at porting the required functionality from >> include/net/netlink.h and lib/nlattr.c directly into the TIPC >> monitor.c file (as opposed to changing any code directly in include/net and >> lib/..... > > I think you are moving into dangerous waters here, unless you only > want the code to compile. > A simpler and safer option: change #define TIPC_DEF_MON_THRESHOLD in > core.h from 32 to e.g. 100, and the hierarchical monitoring will be > disabled. This is the way we have been running forever until 4.7, so > this is a safe bet. > > //jon > >> >> >> >> -----Original Message----- >> From: Jon Maloy [mailto:jon.ma...@ericsson.com] >> Sent: February-23-17 1:19 PM >> To: Butler, Peter <pbut...@sonusnet.com >> <mailto:pbut...@sonusnet.com>>; tipc- >> discuss...@lists.sourceforge.net > <mailto:discuss...@lists.sourceforge.net>; Parthasarathy Bhuvaragan >> <parthasarathy.bhuvara...@ericsson.com > <mailto:parthasarathy.bhuvara...@ericsson.com>> >> Subject: RE: TIPC Oops in tipc_sk_recv >> >> >> >> > -----Original Message----- >> > From: Butler, Peter [mailto:pbut...@sonusnet.com] >> > Sent: Thursday, February 23, 2017 01:09 PM >> > To: Jon Maloy <jon.ma...@ericsson.com >> > <mailto:jon.ma...@ericsson.com>>; tipc- >> > discuss...@lists.sourceforge.net > <mailto:discuss...@lists.sourceforge.net>; Parthasarathy Bhuvaragan >> > <parthasarathy.bhuvara...@ericsson.com > <mailto:parthasarathy.bhuvara...@ericsson.com>> >> > Cc: Butler, Peter <pbut...@sonusnet.com >> > <mailto:pbut...@sonusnet.com>> >> > Subject: RE: TIPC Oops in tipc_sk_recv >> > >> > Partha - an update for you >> > >> > I've ported all the TIPC code from 4.9.11 into our 4.4.0 kernel >> > code base. By this I mean I have completely removed all the >> > existing TIPC files in their entirety from: >> > >> > include/uapi/linux/tipc* >> > net/tipc/* >> > >> > in our 4.4.0 kernel source tree, and replaced these with all the >> > files from 4.9.11. >> > >> > As Jon indeed forewarned me, there will be a hurdle or two to >> > integrate this with the 4.4.0 kernel's internal API. As it stands >> > this is where the compilation first fails. I can certainly look >> > into this myself >> but am told you are the expert. >> > (I am far from a kernel expert myself.) >> > >> > LD net/tipc/built-in.o >> > CC [M] net/tipc/addr.o >> > CC [M] net/tipc/bcast.o >> > CC [M] net/tipc/bearer.o >> > CC [M] net/tipc/core.o >> > CC [M] net/tipc/link.o >> > CC [M] net/tipc/discover.o >> > CC [M] net/tipc/msg.o >> > CC [M] net/tipc/name_distr.o >> > CC [M] net/tipc/subscr.o >> > CC [M] net/tipc/monitor.o >> > net/tipc/monitor.c: In function '__tipc_nl_add_monitor_peer': >> >> Unless you are running a cluster > 32 nodes and need the hierarchical >> neighbor monitoring feature, you can just comment out the contents of >> this function and other monitor-related netlink function. >> >> ///jon >> >> > net/tipc/monitor.c:707:3: error: implicit declaration of function >> > 'nla_put_u64_64bit' [-Werror=implicit-function-declaration] >> > cc1: some warnings being treated as errors >> > make[2]: *** [net/tipc/monitor.o] Error 1 >> > make[1]: *** [net/tipc] Error 2 >> > make: *** [net] Error 2 >> > >> > >> > >> > -----Original Message----- >> > From: Butler, Peter >> > Sent: February-23-17 10:56 AM >> > To: Jon Maloy <jon.ma...@ericsson.com >> > <mailto:jon.ma...@ericsson.com>>; tipc- >> > discuss...@lists.sourceforge.net > <mailto:discuss...@lists.sourceforge.net>; Parthasarathy Bhuvaragan >> > <parthasarathy.bhuvara...@ericsson.com > <mailto:parthasarathy.bhuvara...@ericsson.com>> >> > Cc: Butler, Peter <pbut...@sonusnet.com >> > <mailto:pbut...@sonusnet.com>> >> > Subject: RE: TIPC Oops in tipc_sk_recv >> > >> > Hi Partha, >> > >> > I'll give you the short version here to save you the time of >> > reading this entire thread. >> > >> > Basically I need to port the latest and greatest TIPC code (i.e. >> > from the latest longterm kernel release, namely 4.9.11) into a >> > 4.4.0 kernel source base. (I know that sounds ugly but it's for an >> > emergency quick-fix and upgrading the entire kernel is not an >> > option at this >> > time...) >> > >> > Jon has said this is entirely doable but that you are the expert, >> > and that there will be at least one minor hurdle in doing so, >> > namely in iov handling in msg_build(). >> > >> > Thanks, >> > >> > Peter >> > >> > >> > >> > -----Original Message----- >> > From: Jon Maloy [mailto:jon.ma...@ericsson.com] >> > Sent: February-23-17 10:45 AM >> > To: Butler, Peter <pbut...@sonusnet.com >> > <mailto:pbut...@sonusnet.com>>; tipc- >> > discuss...@lists.sourceforge.net > <mailto:discuss...@lists.sourceforge.net>; Parthasarathy Bhuvaragan >> > <parthasarathy.bhuvara...@ericsson.com > <mailto:parthasarathy.bhuvara...@ericsson.com>> >> > Subject: RE: TIPC Oops in tipc_sk_recv >> > >> > >> > >> > > -----Original Message----- >> > > From: Butler, Peter [mailto:pbut...@sonusnet.com] >> > > Sent: Thursday, February 23, 2017 10:25 AM >> > > To: Jon Maloy <jon.ma...@ericsson.com >> > > <mailto:jon.ma...@ericsson.com>>; tipc- >> > > discuss...@lists.sourceforge.net >> > > <mailto:discuss...@lists.sourceforge.net> >> > > Cc: Butler, Peter <pbut...@sonusnet.com >> > > <mailto:pbut...@sonusnet.com>> >> > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > >> > > Hi Jon, >> > > >> > > Thanks for the info. The solution we are considering (to give >> > > the customer an emergency patch) is backport the TIPC code from >> > > kernel >> > > 4.4.50 into our 4.4.0 kernel source tree. From what I can see, I >> > > should be able to do so with little effort. I am assuming (?) >> > > that since 4.4.x is a longterm kernel release that the >> > > 4.4.50 TIPC code is considered stable and devoid of the original >> > > bug associated with this section of code in tipc_sk_rcv() - am I >> > > wrong to assume that? >> > >> > Unfortunately yes. The only safe solution to the deadlock problem >> > is the one you find in later versions. >> > The patch fixing this particular problem hasn't been applied this >> > far back, probably because it didn't apply cleanly. >> > >> > > The section of code in question is entirely different in 4.4.50 >> > > than what we currently have: >> > > >> > > if (likely(tsk)) { >> > > sk = &tsk->sk; >> > > if (likely(spin_trylock_bh(&sk->sk_lock.slock))) { >> > > tipc_sk_enqueue(inputq, sk, dport); >> > > spin_unlock_bh(&sk->sk_lock.slock); >> > > } >> > > sock_put(sk); >> > > continue; >> > > } >> > > >> > > Does this mean that the 4.4.50 version (as shown above) is still >> > > susceptible to the original bug? (Our original O/S maintainer >> > > patched this section because of the original bug that was causing >> > > an oops there - but obviously the patch he implemented was also >> > > buggy, as previously discussed.) >> > > >> > > Ultimately we would rather upgrade our entire kernel (say, to >> > > 4.9.11 >> > > - the latest and greatest longterm release) but I see the TIPC >> > > design has changed significantly and I'm not sure if it would >> > > backport into our 4.4.0 kernel without significant effort; i.e. >> > > perhaps this change in design also depends on other API changes >> > > within other layers of the kernel. If I am wrong in this and you >> > > think that the 4.9.11 TIPC code should be able to be backported >> > > to our 4.4.0 base then I will do so, >> > >> > It is absolutely doable. As a matter of fact, this is what Partha >> > has been doing in one of our own product lines. >> > AFAIK, the only build issue you will encounter is a change to the >> > iov handling in msg_build(), and that is easily fixed by reverting >> > to the old >> method. >> > (Correct me Partha, if I am wrong here). But, with new >> > functionality (e.g., new flow control) there are new issues which >> > still haven't been ironed out completely. I think Partha is the one >> > to give a better update >> here. >> > >> > ///jon >> > >> > > as there are far more fixes in 4.9.11 than in 4.4.50. The reason >> > > we can't upgrade the entire kernel to 4.4.50 or 4.9.11 in the >> > > short term is a bit of a long story (which I will spare you), but >> > > suffice it to say that that is only an option for a long-term fix >> > > for our customers and not for this short term emergency fix which >> > > we need >> released asap. >> > > >> > > All this to say, the goal here is to move to the latest possible >> > > TIPC code which will (relatively) seamlessly integrate with our >> > > 4.4.0 kernel, and also be free of the aforementioned bug. Let me >> > > know what >> > you think. >> > > >> > > Thanks, >> > > >> > > Peter >> > > >> > > >> > > >> > > >> > > >> > > -----Original Message----- >> > > From: Jon Maloy [mailto:jon.ma...@ericsson.com] >> > > Sent: February-23-17 8:22 AM >> > > To: Butler, Peter <pbut...@sonusnet.com >> > > <mailto:pbut...@sonusnet.com>>; tipc- >> > > discuss...@lists.sourceforge.net >> > > <mailto:discuss...@lists.sourceforge.net> >> > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > >> > > >> > > >> > > > -----Original Message----- >> > > > From: Butler, Peter [mailto:pbut...@sonusnet.com] >> > > > Sent: Wednesday, February 22, 2017 04:31 PM >> > > > To: Jon Maloy <jon.ma...@ericsson.com >> > > > <mailto:jon.ma...@ericsson.com>>; tipc- >> > > > discuss...@lists.sourceforge.net >> > > > <mailto:discuss...@lists.sourceforge.net> >> > > > Cc: Butler, Peter <pbut...@sonusnet.com >> > > > <mailto:pbut...@sonusnet.com>> >> > > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > > >> > > > Hi Jon, >> > > > >> > > > I think I found the problem, which ultimately may only exist on >> > > > our end (see below for an explanation, and let me know if you agree). >> > > > >> > > > The fellow that was maintaining our O/S previously (no longer >> > > > with the >> > > > company) had made some patches to the 4.4.0 kernel TIPC code, >> > > > and indeed one of them is in the offending tipc_sk_rcv() function. >> > > > >> > > > Specifically, note this segment of code from our kernel source tree: >> > > > >> > > > /* Send pending response/rejected messages, if >> > > > any */ >> > > > while (!skb_queue_empty(&sk->sk_write_queue)) { >> > > > skb = skb_dequeue(&sk->sk_write_queue); >> > > > dnode = msg_destnode(buf_msg(skb)); >> > > > tipc_node_xmit_skb(net, skb, dnode, >> > > > dport); >> > > > } >> > > >> > > Yes, this is wrong. The socket write queue is only used for >> > > outgoing regular messages (Partha has later changed that), and >> > > should only be emptied by the sending thread. Running this code >> > > in interrupt context will give exactly the symptom you see, >> > > because the writing thread might already have freed or sent the buffer >> > > in question. >> > > > >> > > > Whereas the latest and greatest official longterm 4.9.11 kernel has: >> > > > >> > > > /* Send pending response/rejected messages, if any */ >> > > > while ((skb = __skb_dequeue(&xmitq))) { >> > > > dnode = msg_destnode(buf_msg(skb)); >> > > > tipc_node_xmit_skb(net, skb, dnode, dport); >> > > > } >> > > > >> > > > The code path that triggers the oops (in our source code) is from: >> > > > >> > > > dnode = msg_destnode(buf_msg(skb)); >> > > > >> > > > where msg_destnode() calls msg_word() which calls: >> > > > >> > > > ntohl(m->hdr[pos]); >> > > > >> > > > which is precisely where the oops occurred. >> > > > >> > > > I'm not exactly sure where he got that code change - my guess >> > > > is he posted a question on the tipc-discussion list and got a >> > > > suggestion to try a code snippet, but in the end the actual >> > > > changes (that were officially released at kernel.org) differed, >> > > > as per >> above. >> > > >> > > I rather suspect he might have looked at the more recent code and >> > > tried to do the same, while misunderstanding the role of the >> > > write >> queue. >> > > >> > > > Indeed, on Google I can see some threads discussing a 'deadly >> embrace' >> > > > deadlock (for example >> > > > http://www.spinics.net/lists/netdev/msg382379.html) between >> > > > yourself and him. Another possibility is that the offending >> > > > source code in question was indeed released sometime after >> > > > 4.4.0, but has since modified/fixed, thus explaining the discrepancy. >> > > >> > > The loop was introduced in conjunction with that discussion, but >> > > it should not be done in the way it is done above. Indeed, I >> > > cannot see that this can have solved the "deadly embrace" problem >> > > at all, unless he made other changes and added the >> > > rejected/returned messages to the write queue. That might work >> > > most of the time, but will still sooner or later interfere with a >> > > sending thread. >> > > >> > > There are two ways you can solve this: >> > > 1: Introduce a stack based queue for reject/return messages, as >> > > we do, and pass it along in the calls. >> > > 2: Put send messages on a stack based queue, as Partha has done >> > > in the later versions. This assuming that the rejected messages >> > > are added to the write queue, as I am speculating above. >> > > >> > > BR >> > > ///jon >> > > >> > > > >> > > > If either of possibilities is what actually happened, then this >> > > > may not a bug you need to worry about. Granted, the same >> > > > msg_destnode() call still exists in the current (4.9.11 and >> > > > 4.10) code, but the semantics of the encapsulating while loop >> > > > are different, and maybe as such >> > > that eliminates the issue. >> > > > Thoughts? >> > > > >> > > > Peter >> > > > >> > > > >> > > > >> > > > >> > > > >> > > > -----Original Message----- >> > > > From: Jon Maloy [mailto:jon.ma...@ericsson.com] >> > > > Sent: February-22-17 3:01 PM >> > > > To: Butler, Peter <pbut...@sonusnet.com >> > > > <mailto:pbut...@sonusnet.com>>; tipc- >> > > > discuss...@lists.sourceforge.net >> > > > <mailto:discuss...@lists.sourceforge.net> >> > > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > > >> > > > >> > > > >> > > > > -----Original Message----- >> > > > > From: Butler, Peter [mailto:pbut...@sonusnet.com] >> > > > > Sent: Wednesday, February 22, 2017 02:15 PM >> > > > > To: Jon Maloy <jon.ma...@ericsson.com >> > > > > <mailto:jon.ma...@ericsson.com>>; tipc- >> > > > > discuss...@lists.sourceforge.net >> > > > > <mailto:discuss...@lists.sourceforge.net> >> > > > > Cc: Butler, Peter <pbut...@sonusnet.com >> > > > > <mailto:pbut...@sonusnet.com>> >> > > > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > > > >> > > > > For the " Source file is more recent than executable" >> > > > > message, could this simply be due to the fact that I copied >> > > > > the kernel source to the lab and then ran the gdb commands as >> > > > > shown? As such, the newly copied files would have a newer >> > > > > timestamp than the >> > kernel/tipc.ko files. >> > > > > (The kernel is actual built on a separate compiler than the >> > > > > test lab >> > > > > machine.) >> > > > >> > > > If you are certain that the build was made from the same source >> > > > this is false alarm, caused by the timestamp as you suggest. >> > > > >> > > > ///jon >> > > > >> > > > > >> > > > > Or could I get that message for another reason? >> > > > > >> > > > > >> > > > > >> > > > > -----Original Message----- >> > > > > From: Jon Maloy [mailto:jon.ma...@ericsson.com] >> > > > > Sent: February-22-17 2:11 PM >> > > > > To: Butler, Peter <pbut...@sonusnet.com >> > > > > <mailto:pbut...@sonusnet.com>>; tipc- >> > > > > discuss...@lists.sourceforge.net >> > > > > <mailto:discuss...@lists.sourceforge.net> >> > > > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > > > >> > > > > >> > > > > >> > > > > > -----Original Message----- >> > > > > > From: Butler, Peter [mailto:pbut...@sonusnet.com] >> > > > > > Sent: Wednesday, February 22, 2017 01:04 PM >> > > > > > To: Jon Maloy <jon.ma...@ericsson.com >> > > > > > <mailto:jon.ma...@ericsson.com>>; tipc- >> > > > > > discuss...@lists.sourceforge.net >> > > > > > <mailto:discuss...@lists.sourceforge.net> >> > > > > > Cc: Butler, Peter <pbut...@sonusnet.com >> > > > > > <mailto:pbut...@sonusnet.com>> >> > > > > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > > > > >> > > > > > I took a stab at it this way - not sure if I am doing this >> > > > > > correctly or >> not. >> > > > > > >> > > > > > [root@myVMslot12 ~]# gdb /boot/vmlinuz-4.4.0 /proc/kcore >> > > > > > GNU >> > gdb >> > > > > > (GDB) Fedora (7.3.50.20110722-13.fc16) Copyright (C) 2011 >> > > > > > Free Software Foundation, Inc. >> > > > > > License GPLv3+: GNU GPL version 3 or later >> > > > > > <http://gnu.org/licenses/gpl.html> >> > > > > > This is free software: you are free to change and redistribute it. >> > > > > > There is NO WARRANTY, to the extent permitted by law. Type >> > > > > > "show copying" >> > > > > > and "show warranty" for details. >> > > > > > This GDB was configured as "x86_64-redhat-linux-gnu". >> > > > > > For bug reporting instructions, please see: >> > > > > > <http://www.gnu.org/software/gdb/bugs/>... >> > > > > > BFD: /boot/vmlinuz-4.4.0: Warning: Ignoring section flag >> > > > > > IMAGE_SCN_MEM_NOT_PAGED in section .bss >> > > > > > BFD: /boot/vmlinuz-4.4.0: Warning: Ignoring section flag >> > > > > > IMAGE_SCN_MEM_NOT_PAGED in section .bss Reading symbols >> > from >> > > > > > /boot/vmlinuz-4.4.0...(no debugging symbols found)...done. >> > > > > > >> > > > > > warning: core file may not match specified executable file. >> > > > > > [New process 1] >> > > > > > Core was generated by `BOOT_IMAGE=/vmlinuz-4.4.0 >> > > > > root=UUID=b419f9ff- >> > > > > > 80ce-459e-855c-614d86a48105 ro rd.'. >> > > > > > #0 0x0000000000000000 in ?? () >> > > > > > (gdb) file /lib/modules/4.4.0/kernel/net/tipc/tipc.ko >> > > > > > warning: core file may not match specified executable file. >> > > > > > Reading symbols from >> > > /lib/modules/4.4.0/kernel/net/tipc/tipc.ko...done. >> > > > > > (gdb) list *(tipc_sk_rcv+0x238) >> > > > > > 0x14898 is in tipc_sk_rcv (net/tipc/msg.h:131). >> > > > > > warning: Source file is more recent than executable. >> > > > > >> > > > > Seems like you didn't rebuild after you updated the source file? >> > > > > Try again just to make sure. >> > > > > >> > > > > > 126 return (struct tipc_msg *)skb->data; >> > > > > > 127 } >> > > > > > 128 >> > > > > > 129 static inline u32 msg_word(struct tipc_msg *m, u32 pos) >> > > > > > 130 { >> > > > > > 131 return ntohl(m->hdr[pos]); >> > > > > >> > > > > If this is correct, you are receiving a corrupt buffer where >> > > > > the data pointer is invalid. This is typical if the buffer >> > > > > already has been >> > > released. >> > > > > >> > > > > ///jon >> > > > > >> > > > > > 132 } >> > > > > > 133 >> > > > > > 134 static inline void msg_set_word(struct tipc_msg *m, u32 w, >> u32 >> > > val) >> > > > > > 135 { >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > -----Original Message----- >> > > > > > From: Butler, Peter >> > > > > > Sent: February-22-17 12:45 PM >> > > > > > To: Jon Maloy <jon.ma...@ericsson.com >> > > > > > <mailto:jon.ma...@ericsson.com>>; tipc- >> > > > > > discuss...@lists.sourceforge.net >> > > > > > <mailto:discuss...@lists.sourceforge.net> >> > > > > > Cc: Butler, Peter <pbut...@sonusnet.com >> > > > > > <mailto:pbut...@sonusnet.com>> >> > > > > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > > > > >> > > > > > Hi Jon >> > > > > > >> > > > > > Thanks for the info. >> > > > > > >> > > > > > One thing I should clarify. Although we are running the >> > > > > > 4.4.0 kernel, we had backported a number of post-4.4.0 TIPC >> > > > > > patches into our 4.4.0 kernel. As such, the offset in >> > > > > > question >> > > > > > (tipc_sk_rcv+0x238) will not match that in the vanilla 4.4.0 >> > > > > > source. >> > > > > > >> > > > > > Should I post the entire socket.c file to this list for your >> > > > > > review? >> > > > > > Or is there an easy way for me to do a similar listing >> > > > > > using our actual tipc.ko file here in the lab? >> > > > > > >> > > > > > Peter >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > -----Original Message----- >> > > > > > From: Jon Maloy [mailto:jon.ma...@ericsson.com] >> > > > > > Sent: February-22-17 12:29 PM >> > > > > > To: Butler, Peter <pbut...@sonusnet.com >> > > > > > <mailto:pbut...@sonusnet.com>>; tipc- >> > > > > > discuss...@lists.sourceforge.net >> > > > > > <mailto:discuss...@lists.sourceforge.net> >> > > > > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > > > > >> > > > > > Hi Peter, >> > > > > > Very hard to make any suggestions on how to reproduce this. >> > > > > > What I can see is that it is a STREAM message being sent >> > > > > > from a node local socket, i.e., it doesn't go via any interface. >> > > > > > The crash seems to happen when the receiving socket is >> > > > > > owned by the user, and while we are instead adding the >> > > > > > message to the >> backlog queue: >> > > > > > >> > > > > > Reading symbols from net/tipc/tipc.ko...done. >> > > > > > (gdb) list *(tipc_sk_rcv+0x238) >> > > > > > 0x13d78 is in tipc_sk_rcv (./arch/x86/include/asm/atomic.h:214). >> > > > > > 209 static __always_inline int __atomic_add_unless(atomic_t *v, >> int >> > > a, >> > > > int >> > > > > > u) >> > > > > > 210 { >> > > > > > 211 int c, old; >> > > > > > 212 c = atomic_read(v); >> > > > > > 213 for (;;) { >> > > > > > 214 if (unlikely(c == (u))) >> > > > > > 215 break; >> > > > > > 216 old = atomic_cmpxchg((v), c, c + (a)); >> > > > > > 217 if (likely(old == c)) >> > > > > > 218 break; >> > > > > > >> > > > > > This is about what I can get out of it at the moment. Maybe >> > > > > > you should try a high-load test between two local sockets >> > > > > > (try the benchmark demo from >> > > > > > tipcutils) and see what you can achieve. >> > > > > > >> > > > > > BR >> > > > > > ///jon >> > > > > > >> > > > > > >> > > > > > > -----Original Message----- >> > > > > > > From: Butler, Peter [mailto:pbut...@sonusnet.com] >> > > > > > > Sent: Wednesday, February 22, 2017 10:40 AM >> > > > > > > To: Jon Maloy <jon.ma...@ericsson.com >> > > > > > > <mailto:jon.ma...@ericsson.com>>; tipc- >> > > > > > > discuss...@lists.sourceforge.net >> > > > > > > <mailto:discuss...@lists.sourceforge.net> >> > > > > > > Cc: Butler, Peter <pbut...@sonusnet.com >> > > > > > > <mailto:pbut...@sonusnet.com>> >> > > > > > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > > > > > >> > > > > > > If you have any suggestions as to procedures/tricks you >> > > > > > > think might trigger this bug I can certainly attempt to >> > > > > > > do so in the >> lab. >> > > > > > > Obviously we can't attempt to reproduce it on the >> > > > > > > customer's >> > > > > > > (live) >> > > > > system. >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > -----Original Message----- >> > > > > > > From: Butler, Peter >> > > > > > > Sent: February-21-17 3:39 PM >> > > > > > > To: Jon Maloy <jon.ma...@ericsson.com >> > > > > > > <mailto:jon.ma...@ericsson.com>>; tipc- >> > > > > > > discuss...@lists.sourceforge.net >> > > > > > > <mailto:discuss...@lists.sourceforge.net> >> > > > > > > Cc: Butler, Peter <pbut...@sonusnet.com >> > > > > > > <mailto:pbut...@sonusnet.com>> >> > > > > > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > > > > > >> > > > > > > Unfortunately this occurred on a customer system so it is >> > > > > > > not readily reproducible. We have not seen this occur in our >> > > > > > > lab. >> > > > > > > >> > > > > > > For what it's worth, it occurred while the process was in >> > > > > > > TASK_UNINTERRUPTIBLE. As such, the kernel could not >> > > > > > > actually kill off the associated process despite the >> > > > > > > Oops, and the process remained forever frozen in the 'D' >> > > > > > > state and the card had to be >> > > > rebooted. >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > -----Original Message----- >> > > > > > > From: Jon Maloy [mailto:jon.ma...@ericsson.com] >> > > > > > > Sent: February-21-17 3:36 PM >> > > > > > > To: Butler, Peter <pbut...@sonusnet.com >> > > > > > > <mailto:pbut...@sonusnet.com>>; tipc- >> > > > > > > discuss...@lists.sourceforge.net >> > > > > > > <mailto:discuss...@lists.sourceforge.net> >> > > > > > > Subject: RE: TIPC Oops in tipc_sk_recv >> > > > > > > >> > > > > > > Hi Peter, >> > > > > > > I don't think this is any known bug. Is it repeatable? >> > > > > > > >> > > > > > > ///jon >> > > > > > > >> > > > > > > > -----Original Message----- >> > > > > > > > From: Butler, Peter [mailto:pbut...@sonusnet.com] >> > > > > > > > Sent: Tuesday, February 21, 2017 12:14 PM >> > > > > > > > To: tipc-discussion@lists.sourceforge.net > <mailto:tipc-discussion@lists.sourceforge.net> >> > > > > > > > Cc: Butler, Peter <pbut...@sonusnet.com >> > > > > > > > <mailto:pbut...@sonusnet.com>> >> > > > > > > > Subject: [tipc-discussion] TIPC Oops in tipc_sk_recv >> > > > > > > > >> > > > > > > > This was with kernel 4.4.0, however I don't see any fix >> > > > > > > > specifically related to this in any subsequent 4.4.x kernel... >> > > > > > > > >> > > > > > > > BUG: unable to handle kernel NULL pointer dereference >> > > > > > > > at >> > > > > > > > 00000000000000d8 >> > > > > > > > IP: [<ffffffffa0148868>] tipc_sk_rcv+0x238/0x4d0 [tipc] >> > > > > > > > PGD >> > > > > > > > 34f4c0067 PUD >> > > > > > > > 34ed95067 PMD 0 >> > > > > > > > Oops: 0000 [#1] SMP >> > > > > > > > Modules linked in: nf_log_ipv4 nf_log_common xt_LOG >> > > > > > > > sctp libcrc32c e1000e tipc udp_tunnel ip6_udp_tunnel >> > > > > > > > iTCO_wdt 8021q garp >> > > > > > xt_physdev >> > > > > > > > br_netfilter bridge stp llc nf_conntrack_ipv4 >> > > > > > > > ipmiq_drv(O) >> > > > > > > > nf_defrag_ipv4 >> > > > > > > > sio_mmc(O) ip6t_REJECT nf_reject_ipv6 nf_conntrack_ipv6 >> > > > > > > > nf_defrag_ipv6 xt_state nf_conntrack event_drv(O) >> > > > > > > > ip6table_filter lockd ip6_tables >> > > > > > > > pt_timer_info(O) ddi(O) grace usb_storage ixgbe igb >> > > > > > > > iTCO_vendor_support i2c_algo_bit ptp i2c_i801 pps_core >> > > > > > > > lpc_ich i2c_core intel_ips mfd_core pcspkr ioatdma >> > > > > > > > sunrpc dca tpm_tis mdio tpm >> > > > > > > [last unloaded: iTCO_wdt] >> > > > > > > > CPU: 2 PID: 12144 Comm: dinamo Tainted: G O 4.4.0 >> > > > > > > > #23 >> > > > > > > > Hardware name: PT AMC124/Base Board Product Name, BIOS >> > > > > > > > LGNAJFIP.PTI.0012.P15 01/15/2014 >> > > > > > > > task: ffff880036ad8000 ti: ffff880036900000 task.ti: >> > > > > > > > ffff880036900000 >> > > > > > > > RIP: 0010:[<ffffffffa0148868>] [<ffffffffa0148868>] >> > > > > > > > tipc_sk_rcv+0x238/0x4d0 [tipc] >> > > > > > > > RSP: 0018:ffff880036903bb8 EFLAGS: 00010292 >> > > > > > > > RAX: 0000000000000000 RBX: ffff88034def3970 RCX: >> > > > > > > > 0000000000000001 >> > > > > > > > RDX: 0000000000000101 RSI: 0000000000000292 RDI: >> > > > > > > > ffff88034def3984 >> > > > > > > > RBP: ffff880036903c28 R08: 0000000000000101 R09: >> > > > > > > > 0000000000000004 >> > > > > > > > R10: 0000000000000001 R11: 0000000000000000 R12: >> > > > > > > > ffff880036903d28 >> > > > > > > > R13: 00000000bd1fd8b2 R14: ffff88034def3840 R15: >> > > > > > > > ffff880036903d3c >> > > > > > > > FS: 00007f1e86299740(0000) GS:ffff88035fc40000(0000) >> > > > > > > > knlGS:0000000000000000 >> > > > > > > > CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 >> > > > > > > > CR2: 00000000000000d8 CR3: 0000000036835000 CR4: >> > > > > > > > 00000000000006e0 >> > > > > > > > Stack: >> > > > > > > > 000000000000009b ffff880036903d28 0000000000000018 >> > > > > > > > ffff88034def38c8 >> > > > > > > > ffffffff81ce6240 ffff8802b9bdba00 ffff880036903ca8 >> > > > > > > > ffffffffa013bd7e >> > > > > > > > ffff8802b99d5ee8 ffff880036903c60 0000000000000000 >> > > > > > > > ffff88003693cb00 Call >> > > > > > > > Trace: >> > > > > > > > [<ffffffffa013bd7e>] ? tipc_msg_build+0xde/0x4f0 >> > > > > > > > [tipc] [<ffffffffa014358f>] tipc_node_xmit+0x11f/0x150 >> > > > > > > > [tipc] [<ffffffffa01470ba>] >> > > > > > > > __tipc_send_stream+0x16a/0x300 [tipc] [<ffffffff81625eb5>] ? >> > > > > > > > tcp_sendmsg+0x4d5/0xb00 [<ffffffffa0147292>] >> > > > > > > > tipc_send_stream+0x42/0x70 [tipc] [<ffffffff815bcf77>] >> > > > > > > > sock_sendmsg+0x47/0x50 [<ffffffff815bd03f>] >> > > > > > > > sock_write_iter+0x7f/0xd0 [<ffffffff811d799a>] >> > > > > > > > __vfs_write+0xaa/0xe0 [<ffffffff811d8b16>] >> > > > > > > > vfs_write+0xb6/0x1a0 [<ffffffff811d8e3f>] >> > > > > > > > SyS_write+0x4f/0xb0 [<ffffffff816de6d7>] >> > > > > > > > entry_SYSCALL_64_fastpath+0x12/0x6a >> > > > > > > > Code: 89 de 4c 89 f7 e8 29 d3 ff ff 48 8b 7d a8 e8 60 >> > > > > > > > 59 >> > > > > > > > 59 >> > > > > > > > e1 >> > > > > > > > 49 8d 9e 30 01 00 >> > > > > > > > 00 49 3b 9e 30 01 00 00 74 30 48 89 df e8 b8 b6 47 e1 >> > > > > > > > <48> 8b >> > > > > > > > 90 >> > > > > > > > d8 >> > > > > > > > 00 >> > > > > > > > 00 00 48 8b 7d b0 44 89 e9 48 89 c6 48 89 45 c0 RIP >> > > > > > > > [<ffffffffa0148868>] >> > > > > > > > tipc_sk_rcv+0x238/0x4d0 [tipc] RSP <ffff880036903bb8> >> > > > > > > > CR2: 00000000000000d8 >> > > > > > > > ---[ end trace 1c2d69738941d565 ]--- >> > > > > > > > >> > > > > > > > >> > > > > > > > ------------------------------------------------------- >> > > > > > > > - >> > > > > > > > -- >> > > > > > > > -- >> > > > > > > > -- >> > > > > > > > -- >> > > > > > > > -- >> > > > > > > > -- >> > > > > > > > -- >> > > > > > > > -------- Check out the vibrant tech community on one of >> > > > > > > > the world's most engaging tech sites, SlashDot.org! >> > > > > > > > http://sdm.link/slashdot >> > > > > > > > _______________________________________________ >> > > > > > > > tipc-discussion mailing list >> > > > > > > > tipc-discussion@lists.sourceforge.net > <mailto:tipc-discussion@lists.sourceforge.net> >> > > > > > > > https://lists.sourceforge.net/lists/listinfo/tipc-discu >> > > > > > > > s >> > > > > > > > si >> > > > > > > > on > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ tipc-discussion mailing list tipc-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tipc-discussion