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

Qing Li qingli at freebsd.org
Tue Sep 15 23:27:16 UTC 2009


The users who were reporting the NFS mount problems confirm the patch fixes
their issues. At the moment I don't know why the patch would break NFS ROOT.
I just backed out the change so RC1 can be made but I will continue the
investigation.

--Qing

On Tue, Sep 15, 2009 at 3:55 PM, Rick Macklem <rmacklem at uoguelph.ca> wrote:
>
>
> On Tue, 15 Sep 2009, Bjoern A. Zeeb wrote:
>
>> 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.
>>
> I don't know diddly about diskless booting and have no setup to test,
> but if I understood the problem, might something like the following
> work?
>
> rick
> --- nfsclient/nfs_vfsops.c.sav  2009-09-15 18:39:32.000000000 -0400
> +++ nfsclient/nfs_vfsops.c      2009-09-15 18:41:52.000000000 -0400
> @@ -416,13 +416,14 @@
>        struct socket *so;
>        struct vnode *vp;
>        struct ifreq ir;
> -       int error;
> +       int error, doioctl = 1;
>        u_long l;
>        char buf[128];
>        char *cp;
>
>  #if defined(BOOTP_NFSROOT) && defined(BOOTP)
>        bootpc_init();          /* use bootp to get nfs_diskless filled in */
> +       doioctl = 0;
>  #elif defined(NFS_ROOT)
>        nfs_setup_diskless();
>  #endif
> @@ -463,9 +464,11 @@
>                        break;
>        }
>  #endif
> -       error = ifioctl(so, SIOCAIFADDR, (caddr_t)&nd->myif, td);
> -       if (error)
> -               panic("nfs_mountroot: SIOCAIFADDR: %d", error);
> +       if (doioctl) {
> +               error = ifioctl(so, SIOCAIFADDR, (caddr_t)&nd->myif, td);
> +               if (error)
> +                       panic("nfs_mountroot: SIOCAIFADDR: %d", error);
> +       }
>        if ((cp = getenv("boot.netif.mtu")) != NULL) {
>                ir.ifr_mtu = strtol(cp, NULL, 10);
>                bcopy(nd->myif.ifra_name, ir.ifr_name, IFNAMSIZ);
>


More information about the svn-src-all mailing list