From: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> If the mount point check in nfsd_export fails due to a transient error, then ignore it to avoid spurious NFSERR_STALE errors being returned by knfsd. Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> --- utils/mountd/cache.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 6cba2883026f..93e868341d15 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -1411,7 +1411,10 @@ static void nfsd_export(int f) if (mp && !*mp) mp = found->m_export.e_path; - if (mp && !is_mountpoint(mp)) + errno = 0; + if (mp && !is_mountpoint(mp)) { + if (errno != 0 && !path_lookup_error(errno)) + goto out; /* Exportpoint is not mounted, so tell kernel it is * not available. * This will cause it not to appear in the V4 Pseudo-root @@ -1420,9 +1423,12 @@ static void nfsd_export(int f) * And filehandle for this mountpoint from an earlier * mount will block in nfsd.fh lookup. */ + xlog(L_WARNING, + "Cannot export path '%s': not a mountpoint", + path); dump_to_cache(f, buf, sizeof(buf), dom, path, NULL, 60); - else if (dump_to_cache(f, buf, sizeof(buf), dom, path, + } else if (dump_to_cache(f, buf, sizeof(buf), dom, path, &found->m_export, 0) < 0) { xlog(L_WARNING, "Cannot export %s, possibly unsupported filesystem" -- 2.26.2