Date: Tue, 15 Sep 2009 15:02:03 +0000 (UTC) From: "Bjoern A. Zeeb" <bz@FreeBSD.org> To: Qing Li <qingli@FreeBSD.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r197210 - in head/sys: netinet nfsclient Message-ID: <20090915150034.U68375@maildrop.int.zabbadoz.net> In-Reply-To: <200909150101.n8F113sU071311@svn.freebsd.org> References: <200909150101.n8F113sU071311@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 15 Sep 2009, Qing Li wrote: > Author: qingli > Date: Tue Sep 15 01:01:03 2009 > New Revision: 197210 > URL: http://svn.freebsd.org/changeset/base/197210 > > Log: > The bootp code installs an interface address and the nfs client > module tries to install the same address again. This extra code > is removed, which was discovered by the removal of a call to > in_ifscrub() in r196714. This call to in_ifscrub is put back here > because the SIOCAIFADDR command can be used to change the prefix > length of an existing alias. > > Reviewed by: kmacy This broke NFS Root for me in the netperf clsuter setup. The NFS Root mount hang for ages (I reset the box after 1 hour). Backing out r197212 and this and it boots just fine again. > Modified: > head/sys/netinet/in.c > head/sys/nfsclient/nfs_vfsops.c > > Modified: head/sys/netinet/in.c > ============================================================================== > --- head/sys/netinet/in.c Tue Sep 15 00:26:23 2009 (r197209) > +++ head/sys/netinet/in.c Tue Sep 15 01:01:03 2009 (r197210) > @@ -536,6 +536,16 @@ in_control(struct socket *so, u_long cmd > hostIsNew = 0; > } > if (ifra->ifra_mask.sin_len) { > + /* > + * QL: XXX > + * Need to scrub the prefix here in case > + * the issued command is SIOCAIFADDR with > + * the same address, but with a different > + * prefix length. And if the prefix length > + * is the same as before, then the call is > + * un-necessarily executed here. > + */ > + in_ifscrub(ifp, ia); > ia->ia_sockmask = ifra->ifra_mask; > ia->ia_sockmask.sin_family = AF_INET; > ia->ia_subnetmask = > @@ -544,6 +554,7 @@ in_control(struct socket *so, u_long cmd > } > if ((ifp->if_flags & IFF_POINTOPOINT) && > (ifra->ifra_dstaddr.sin_family == AF_INET)) { > + in_ifscrub(ifp, ia); > ia->ia_dstaddr = ifra->ifra_dstaddr; > maskIsNew = 1; /* We lie; but the effect's the same */ > } > > Modified: head/sys/nfsclient/nfs_vfsops.c > ============================================================================== > --- head/sys/nfsclient/nfs_vfsops.c Tue Sep 15 00:26:23 2009 (r197209) > +++ head/sys/nfsclient/nfs_vfsops.c Tue Sep 15 01:01:03 2009 (r197210) > @@ -463,9 +463,13 @@ nfs_mountroot(struct mount *mp) > break; > } > #endif > + > +#if 0 /* QL: XXX */ > error = ifioctl(so, SIOCAIFADDR, (caddr_t)&nd->myif, td); > if (error) > panic("nfs_mountroot: SIOCAIFADDR: %d", error); > +#endif > + > if ((cp = getenv("boot.netif.mtu")) != NULL) { > ir.ifr_mtu = strtol(cp, NULL, 10); > bcopy(nd->myif.ifra_name, ir.ifr_name, IFNAMSIZ); > -- Bjoern A. Zeeb What was I talking about and who are you again?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090915150034.U68375>