On 08/18/2016 09:45 PM, NeilBrown wrote: > Commit: bf66c9facb8e ("mounts.nfs: v2 and v3 background mounts should retry when server is down.") > > changed the behaviour of "bg" mounts so that RPC_PROGNOTREGISTERED, > which maps to EOPNOTSUPP, is not a permanent error. > This useful because when an NFS server starts up there is a small window between > the moment that rpcbind (or portmap) starts responding to lookup requests, > and the moment when nfsd registers with rpcbind. During that window > rpcbind will reply with RPC_PROGNOTREGISTERED, but mount should not give up. > > This same reasoning applies to foreground mounts. They don't wait for > as long, but could still hit the window and fail prematurely. > > So revert the above patch and instead add EOPNOTSUPP to the list of > temporary errors known to nfs_is_permanent_error. > > Signed-off-by: NeilBrown <neilb@xxxxxxxx> > --- > utils/mount/stropts.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c > index 9de6794c6177..d5dfb5e4a669 100644 > --- a/utils/mount/stropts.c > +++ b/utils/mount/stropts.c > @@ -948,6 +948,7 @@ static int nfs_is_permanent_error(int error) > case ETIMEDOUT: > case ECONNREFUSED: > case EHOSTUNREACH: > + case EOPNOTSUPP: /* aka RPC_PROGNOTREGISTERED */ Neil, I think this introduced a regression... When the server does not support a protocol, say UDP, this patch cause the mount to hang forever, which I don't think we want. steved. > case EAGAIN: > return 0; /* temporary */ > default: > @@ -1019,8 +1020,7 @@ static int nfsmount_parent(struct nfsmount_info *mi) > if (nfs_try_mount(mi)) > return EX_SUCCESS; > > - /* retry background mounts when the server is not up */ > - if (nfs_is_permanent_error(errno) && errno != EOPNOTSUPP) { > + if (nfs_is_permanent_error(errno)) { > mount_error(mi->spec, mi->node, errno); > return EX_FAIL; > } > @@ -1055,8 +1055,7 @@ static int nfsmount_child(struct nfsmount_info *mi) > if (nfs_try_mount(mi)) > return EX_SUCCESS; > > - /* retry background mounts when the server is not up */ > - if (nfs_is_permanent_error(errno) && errno != EOPNOTSUPP) > + if (nfs_is_permanent_error(errno)) > break; > > if (time(NULL) > timeout) > > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html