• Chuck Lever's avatar
    NFS: NFSROOT should default to "proto=udp" · 53d47375
    Chuck Lever authored
    There have been a number of recent reports that NFSROOT is no longer
    working with default mount options, but fails only with certain NICs.
    
    Brian Downing <bdowning@lavos.net> bisected to commit 56463e50 "NFS:
    Use super.c for NFSROOT mount option parsing".  Among other things,
    this commit changes the default mount options for NFSROOT to use TCP
    instead of UDP as the underlying transport.
    
    TCP seems less able to deal with NICs that are slow to initialize.
    The system logs that have accompanied reports of problems all show
    that NFSROOT attempts to establish a TCP connection before the NIC is
    fully initialized, and thus the TCP connection attempt fails.
    
    When a TCP connection attempt fails during a mount operation, the
    NFS stack needs to fail the operation.  Usually user space knows how
    and when to retry it.  The network layer does not report a distinct
    error code for this particular failure mode.  Thus, there isn't a
    clean way for the RPC client to see that it needs to retry in this
    case, but not in others.
    
    Because NFSROOT is used in some environments where it is not possible
    to update the kernel command line to specify "udp", the proper thing
    to do is change NFSROOT to use UDP by default, as it did before commit
    56463e50.
    
    To make it easier to see how to change default mount options for
    NFSROOT and to distinguish default settings from mandatory settings,
    I've adjusted a couple of areas to document the specifics.
    
    root_nfs_cat() is also modified to deal with commas properly when
    concatenating strings containing mount option lists.  This keeps
    root_nfs_cat() call sites simpler, now that we may be concatenating
    multiple mount option strings.
    Tested-by: default avatarBrian Downing <bdowning@lavos.net>
    Tested-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Cc: <stable@kernel.org> # 2.6.37
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    53d47375
nfsroot.c 9.45 KB