diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 3db2f18315b8..28b66bb0dd33 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -937,20 +937,23 @@ static int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, str pathinfo.fattr = fattr; nfs_fattr_init(fattr); - /* Clear before probing so a failed RPC does not retain stale bits. */ - if (clp->rpc_ops->version < 4) - server->caps &= ~(NFS_CAP_CASE_INSENSITIVE | - NFS_CAP_CASE_NONPRESERVING); - 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) - server->caps |= NFS_CAP_CASE_INSENSITIVE; + caps |= NFS_CAP_CASE_INSENSITIVE; if (!pathinfo.case_preserving) - server->caps |= NFS_CAP_CASE_NONPRESERVING; + 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); } if (clp->rpc_ops->discover_trunking != NULL &&