From: J.Bruce Fields This patch on its own causes no change in behavior, since nfsd_cross_mnt() only returns -EAGAIN; but in the future I'd like it to also be able to return -ETIMEDOUT, so we may as well handle any possible error here. Signed-off-by: J. Bruce Fields Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- fs/nfsd/nfs4xdr.c | 14 +++++--------- 1 files changed, 5 insertions(+), 9 deletions(-) diff -puN fs/nfsd/nfs4xdr.c~knfsd-nfsd4-handling-more-nfsd_cross_mnt-errors-in-nfsd4-readdir fs/nfsd/nfs4xdr.c --- a/fs/nfsd/nfs4xdr.c~knfsd-nfsd4-handling-more-nfsd_cross_mnt-errors-in-nfsd4-readdir +++ a/fs/nfsd/nfs4xdr.c @@ -1845,15 +1845,11 @@ nfsd4_encode_dirent_fattr(struct nfsd4_r exp_get(exp); if (d_mountpoint(dentry)) { - if (nfsd_cross_mnt(cd->rd_rqstp, &dentry, &exp)) { - /* - * -EAGAIN is the only error returned from - * nfsd_cross_mnt() and it indicates that an - * up-call has been initiated to fill in the export - * options on exp. When the answer comes back, - * this call will be retried. - */ - nfserr = nfserr_dropit; + int err; + + err = nfsd_cross_mnt(cd->rd_rqstp, &dentry, &exp); + if (err) { + nfserr = nfserrno(err); goto out_put; } _