On 11/09/15(Fri) 18:56, Mark Patruck wrote: > On Fri, Sep 11, 2015 at 06:27:36PM +0200, Martin Pieuchot wrote: > > On 11/09/15(Fri) 18:07, Mark Patruck wrote: > > > dmesg below is currently running, but it also didn't work with a 2 week > > > old snapshot from the local mirror. (system was freshly installed) > > > > > > Note: the machine hasn't been used over the last two months, so i've > > > double checked battery, memory, psu. > > > > > > OpenBSD 5.8-current (GENERIC.MP) #0: Mon Sep 7 15:54:34 CEST 2015 > > > bu...@aquila.paccotec.de:/usr/src/sys/arch/amd64/compile/GENERIC.MP > > > > Since you build your kernel yourself, I can't tell when you did your > > checkout and I'll bet you hit the window when rtisvalid(9) was in. > > > > Could you try a -current checkout with this diff an tell me if you can > > reproduce the problem? > > Thanks Martin. I'll report back asap.
Tree is moving fast, here's an updated diff. > > Could you also tell me what are your nfs mounts? > > $ cat /etc/exports > /share/d0 -alldirs -mapall=umedia:media -ro mso > /share/d1 -alldirs -mapall=umedia:media -ro mso > > $ mount | grep NFS > /dev/sd1a on /share/d0 type ffs (NFS exported, local, nodev, noexec, > nosuid, softdep) > /dev/sd2a on /share/d1 type ffs (NFS exported, local, nodev, noexec, > nosuid, softdep) > Interesting, the previous report I had with similar symptoms was about a machine using nested NFS mounts from two different servers. Please let me know what happen with the diff below, thanks! Index: netinet/ip_output.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_output.c,v retrieving revision 1.293 diff -u -p -r1.293 ip_output.c --- netinet/ip_output.c 11 Sep 2015 19:17:47 -0000 1.293 +++ netinet/ip_output.c 12 Sep 2015 07:57:24 -0000 @@ -170,9 +170,9 @@ reroute: * If there is a cached route, check that it is to the same * destination and is still up. If not, free it and try again. */ - if (ro->ro_rt && ((ro->ro_rt->rt_flags & RTF_UP) == 0 || + if (!rtisvalid(ro->ro_rt) || dst->sin_addr.s_addr != ip->ip_dst.s_addr || - ro->ro_tableid != m->m_pkthdr.ph_rtableid)) { + ro->ro_tableid != m->m_pkthdr.ph_rtableid) { rtfree(ro->ro_rt); ro->ro_rt = NULL; } @@ -194,7 +194,9 @@ reroute: ro->ro_rt = rtalloc_mpath(&ro->ro_dst, &ip->ip_src.s_addr, ro->ro_tableid); - if (ro->ro_rt == NULL) { + if (!rtisvalid(ro->ro_rt)) { + rtfree(ro->ro_rt); + ro->ro_rt = NULL; ipstat.ips_noroute++; error = EHOSTUNREACH; goto bad; Index: netinet6/in6_src.c =================================================================== RCS file: /cvs/src/sys/netinet6/in6_src.c,v retrieving revision 1.61 diff -u -p -r1.61 in6_src.c --- netinet6/in6_src.c 11 Sep 2015 20:16:03 -0000 1.61 +++ netinet6/in6_src.c 12 Sep 2015 08:00:29 -0000 @@ -251,13 +251,12 @@ in6_selectsrc(struct in6_addr **in6src, * our src addr is taken from the i/f, else punt. */ if (ro) { - if (ro->ro_rt && ((ro->ro_rt->rt_flags & RTF_UP) == 0 || - !IN6_ARE_ADDR_EQUAL(&ro->ro_dst.sin6_addr, dst))) { + if (!rtisvalid(ro->ro_rt) || + !IN6_ARE_ADDR_EQUAL(&ro->ro_dst.sin6_addr, dst)) { rtfree(ro->ro_rt); ro->ro_rt = NULL; } - if (ro->ro_rt == (struct rtentry *)0 || - ro->ro_rt->rt_ifp == (struct ifnet *)0) { + if (ro->ro_rt == NULL) { struct sockaddr_in6 *sa6; /* No route yet, so try to acquire one */ @@ -367,10 +366,9 @@ in6_selectroute(struct sockaddr_in6 *dst * cached destination, in case of sharing the cache with IPv4. */ if (ro) { - if (ro->ro_rt && - (!(ro->ro_rt->rt_flags & RTF_UP) || + if (!rtisvalid(ro->ro_rt) || sin6tosa(&ro->ro_dst)->sa_family != AF_INET6 || - !IN6_ARE_ADDR_EQUAL(&ro->ro_dst.sin6_addr, dst))) { + !IN6_ARE_ADDR_EQUAL(&ro->ro_dst.sin6_addr, dst)) { rtfree(ro->ro_rt); ro->ro_rt = NULL; }