diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 28b66bb0dd33..73b95318ba48 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -937,23 +937,25 @@ static int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, str pathinfo.fattr = fattr; nfs_fattr_init(fattr); - if (clp->rpc_ops->pathconf(server, mntfh, &pathinfo) >= 0) { - if (server->namelen == 0) - server->namelen = pathinfo.max_namelen; - if (clp->rpc_ops->version < 4) { - unsigned int caps = server->caps; + if (clp->rpc_ops->version < 4 || server->namelen == 0) { + if (clp->rpc_ops->pathconf(server, mntfh, &pathinfo) >= 0) { + if (server->namelen == 0) + server->namelen = pathinfo.max_namelen; + if (clp->rpc_ops->version < 4) { + unsigned int caps = server->caps; - caps &= ~(NFS_CAP_CASE_INSENSITIVE | - NFS_CAP_CASE_NONPRESERVING); - if (pathinfo.case_insensitive) - caps |= NFS_CAP_CASE_INSENSITIVE; - if (!pathinfo.case_preserving) - caps |= NFS_CAP_CASE_NONPRESERVING; - server->caps = caps; + caps &= ~(NFS_CAP_CASE_INSENSITIVE | + NFS_CAP_CASE_NONPRESERVING); + if (pathinfo.case_insensitive) + caps |= NFS_CAP_CASE_INSENSITIVE; + if (!pathinfo.case_preserving) + caps |= NFS_CAP_CASE_NONPRESERVING; + server->caps = caps; + } + } else if (clp->rpc_ops->version < 4) { + server->caps &= ~(NFS_CAP_CASE_INSENSITIVE | + NFS_CAP_CASE_NONPRESERVING); } - } else if (clp->rpc_ops->version < 4) { - server->caps &= ~(NFS_CAP_CASE_INSENSITIVE | - NFS_CAP_CASE_NONPRESERVING); } if (clp->rpc_ops->discover_trunking != NULL &&