svn commit: r197210 - in head/sys: netinet nfsclient

Bjoern A. Zeeb bz at FreeBSD.org
Tue Sep 15 15:05:08 UTC 2009


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?


More information about the svn-src-head mailing list