Lines Matching full:server
222 static void pnfs_init_server(struct nfs_server *server) in pnfs_init_server() argument
224 rpc_init_wait_queue(&server->roc_rpcwaitq, "pNFS ROC"); in pnfs_init_server()
236 static void pnfs_init_server(struct nfs_server *server) in pnfs_init_server() argument
456 * Mark a server as ready or failed
572 static void nfs_destroy_server(struct nfs_server *server) in nfs_destroy_server() argument
574 if (server->nlm_host) in nfs_destroy_server()
575 nlmclnt_done(server->nlm_host); in nfs_destroy_server()
581 static int nfs_start_lockd(struct nfs_server *server) in nfs_start_lockd() argument
584 struct nfs_client *clp = server->nfs_client; in nfs_start_lockd()
590 .noresvport = server->flags & NFS_MOUNT_NORESVPORT ? in nfs_start_lockd()
594 .cred = server->cred, in nfs_start_lockd()
599 if ((server->flags & NFS_MOUNT_LOCAL_FLOCK) && in nfs_start_lockd()
600 (server->flags & NFS_MOUNT_LOCAL_FCNTL)) in nfs_start_lockd()
617 server->nlm_host = host; in nfs_start_lockd()
618 server->destroy = nfs_destroy_server; in nfs_start_lockd()
619 nfs_sysfs_link_rpc_client(server, nlmclnt_rpc_clnt(host), NULL); in nfs_start_lockd()
626 int nfs_init_server_rpcclient(struct nfs_server *server, in nfs_init_server_rpcclient() argument
630 struct nfs_client *clp = server->nfs_client; in nfs_init_server_rpcclient()
632 server->client = rpc_clone_client_set_auth(clp->cl_rpcclient, in nfs_init_server_rpcclient()
634 if (IS_ERR(server->client)) { in nfs_init_server_rpcclient()
636 return PTR_ERR(server->client); in nfs_init_server_rpcclient()
639 memcpy(&server->client->cl_timeout_default, in nfs_init_server_rpcclient()
641 sizeof(server->client->cl_timeout_default)); in nfs_init_server_rpcclient()
642 server->client->cl_timeout = &server->client->cl_timeout_default; in nfs_init_server_rpcclient()
643 server->client->cl_softrtry = 0; in nfs_init_server_rpcclient()
644 if (server->flags & NFS_MOUNT_SOFTERR) in nfs_init_server_rpcclient()
645 server->client->cl_softerr = 1; in nfs_init_server_rpcclient()
646 if (server->flags & NFS_MOUNT_SOFT) in nfs_init_server_rpcclient()
647 server->client->cl_softrtry = 1; in nfs_init_server_rpcclient()
649 nfs_sysfs_link_rpc_client(server, server->client, NULL); in nfs_init_server_rpcclient()
685 static void nfs4_server_set_init_caps(struct nfs_server *server) in nfs4_server_set_init_caps() argument
689 server->caps = server->nfs_client->cl_mvops->init_caps; in nfs4_server_set_init_caps()
690 if (server->flags & NFS_MOUNT_NORDIRPLUS) in nfs4_server_set_init_caps()
691 server->caps &= ~NFS_CAP_READDIRPLUS; in nfs4_server_set_init_caps()
692 if (server->nfs_client->cl_proto == XPRT_TRANSPORT_RDMA) in nfs4_server_set_init_caps()
693 server->caps &= ~NFS_CAP_READ_PLUS; in nfs4_server_set_init_caps()
700 server->client->cl_auth->au_flavor == RPC_AUTH_UNIX) in nfs4_server_set_init_caps()
701 server->caps |= NFS_CAP_UIDGID_NOMAP; in nfs4_server_set_init_caps()
705 void nfs_server_set_init_caps(struct nfs_server *server) in nfs_server_set_init_caps() argument
707 switch (server->nfs_client->rpc_ops->version) { in nfs_server_set_init_caps()
709 server->caps = NFS_CAP_HARDLINKS | NFS_CAP_SYMLINKS; in nfs_server_set_init_caps()
712 server->caps = NFS_CAP_HARDLINKS | NFS_CAP_SYMLINKS; in nfs_server_set_init_caps()
713 if (!(server->flags & NFS_MOUNT_NORDIRPLUS)) in nfs_server_set_init_caps()
714 server->caps |= NFS_CAP_READDIRPLUS; in nfs_server_set_init_caps()
717 nfs4_server_set_init_caps(server); in nfs_server_set_init_caps()
726 static int nfs_init_server(struct nfs_server *server, in nfs_init_server() argument
739 .cred = server->cred, in nfs_init_server()
760 server->nfs_client = clp; in nfs_init_server()
761 nfs_sysfs_add_server(server); in nfs_init_server()
762 nfs_sysfs_link_rpc_client(server, clp->cl_rpcclient, "_state"); in nfs_init_server()
765 server->flags = ctx->flags; in nfs_init_server()
766 server->options = ctx->options; in nfs_init_server()
770 server->fattr_valid = NFS_ATTR_FATTR_V2; in nfs_init_server()
773 server->fattr_valid = NFS_ATTR_FATTR_V3; in nfs_init_server()
776 server->fattr_valid = NFS_ATTR_FATTR_V4; in nfs_init_server()
780 server->rsize = nfs_io_size(ctx->rsize, clp->cl_proto); in nfs_init_server()
782 server->wsize = nfs_io_size(ctx->wsize, clp->cl_proto); in nfs_init_server()
784 server->acregmin = ctx->acregmin * HZ; in nfs_init_server()
785 server->acregmax = ctx->acregmax * HZ; in nfs_init_server()
786 server->acdirmin = ctx->acdirmin * HZ; in nfs_init_server()
787 server->acdirmax = ctx->acdirmax * HZ; in nfs_init_server()
790 error = nfs_start_lockd(server); in nfs_init_server()
794 server->port = ctx->nfs_server.port; in nfs_init_server()
795 server->auth_info = ctx->auth_info; in nfs_init_server()
797 error = nfs_init_server_rpcclient(server, &timeparms, in nfs_init_server()
802 nfs_server_set_init_caps(server); in nfs_init_server()
806 memcpy(&server->mountd_address, &ctx->mount_server.address, in nfs_init_server()
808 server->mountd_addrlen = ctx->mount_server.addrlen; in nfs_init_server()
810 server->mountd_version = ctx->mount_server.version; in nfs_init_server()
811 server->mountd_port = ctx->mount_server.port; in nfs_init_server()
812 server->mountd_protocol = ctx->mount_server.protocol; in nfs_init_server()
814 server->namelen = ctx->namlen; in nfs_init_server()
818 server->nfs_client = NULL; in nfs_init_server()
824 * Load up the server record from information gained in an fsinfo record
826 static void nfs_server_set_fsinfo(struct nfs_server *server, in nfs_server_set_fsinfo() argument
829 struct nfs_client *clp = server->nfs_client; in nfs_server_set_fsinfo()
833 if (server->rsize == 0) in nfs_server_set_fsinfo()
834 server->rsize = nfs_io_size(fsinfo->rtpref, clp->cl_proto); in nfs_server_set_fsinfo()
835 if (server->wsize == 0) in nfs_server_set_fsinfo()
836 server->wsize = nfs_io_size(fsinfo->wtpref, clp->cl_proto); in nfs_server_set_fsinfo()
838 if (fsinfo->rtmax >= 512 && server->rsize > fsinfo->rtmax) in nfs_server_set_fsinfo()
839 server->rsize = nfs_io_size(fsinfo->rtmax, clp->cl_proto); in nfs_server_set_fsinfo()
840 if (fsinfo->wtmax >= 512 && server->wsize > fsinfo->wtmax) in nfs_server_set_fsinfo()
841 server->wsize = nfs_io_size(fsinfo->wtmax, clp->cl_proto); in nfs_server_set_fsinfo()
843 raw_max_rpc_payload = rpc_max_payload(server->client); in nfs_server_set_fsinfo()
846 if (server->rsize > max_rpc_payload) in nfs_server_set_fsinfo()
847 server->rsize = max_rpc_payload; in nfs_server_set_fsinfo()
848 if (server->rsize > NFS_MAX_FILE_IO_SIZE) in nfs_server_set_fsinfo()
849 server->rsize = NFS_MAX_FILE_IO_SIZE; in nfs_server_set_fsinfo()
850 server->rpages = (server->rsize + PAGE_SIZE - 1) >> PAGE_SHIFT; in nfs_server_set_fsinfo()
852 if (server->wsize > max_rpc_payload) in nfs_server_set_fsinfo()
853 server->wsize = max_rpc_payload; in nfs_server_set_fsinfo()
854 if (server->wsize > NFS_MAX_FILE_IO_SIZE) in nfs_server_set_fsinfo()
855 server->wsize = NFS_MAX_FILE_IO_SIZE; in nfs_server_set_fsinfo()
857 server->wtmult = nfs_block_bits(fsinfo->wtmult, NULL); in nfs_server_set_fsinfo()
859 server->dtsize = nfs_block_size(fsinfo->dtpref, NULL); in nfs_server_set_fsinfo()
860 if (server->dtsize > NFS_MAX_FILE_IO_SIZE) in nfs_server_set_fsinfo()
861 server->dtsize = NFS_MAX_FILE_IO_SIZE; in nfs_server_set_fsinfo()
862 if (server->dtsize > server->rsize) in nfs_server_set_fsinfo()
863 server->dtsize = server->rsize; in nfs_server_set_fsinfo()
865 if (server->flags & NFS_MOUNT_NOAC) { in nfs_server_set_fsinfo()
866 server->acregmin = server->acregmax = 0; in nfs_server_set_fsinfo()
867 server->acdirmin = server->acdirmax = 0; in nfs_server_set_fsinfo()
870 server->maxfilesize = fsinfo->maxfilesize; in nfs_server_set_fsinfo()
872 server->change_attr_type = fsinfo->change_attr_type; in nfs_server_set_fsinfo()
874 server->clone_blksize = fsinfo->clone_blksize; in nfs_server_set_fsinfo()
876 rpc_setbufsize(server->client, server->wsize + 100, server->rsize + 100); in nfs_server_set_fsinfo()
882 server->gxasize = min_t(unsigned int, raw_max_rpc_payload, in nfs_server_set_fsinfo()
884 server->sxasize = min_t(unsigned int, raw_max_rpc_payload, in nfs_server_set_fsinfo()
886 server->lxasize = min_t(unsigned int, raw_max_rpc_payload, in nfs_server_set_fsinfo()
890 server->caps |= NFS_CAP_XATTR; in nfs_server_set_fsinfo()
892 server->caps &= ~NFS_CAP_XATTR; in nfs_server_set_fsinfo()
899 static int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, struct nfs_fattr *fatt… in nfs_probe_fsinfo() argument
902 struct nfs_client *clp = server->nfs_client; in nfs_probe_fsinfo()
906 error = clp->rpc_ops->set_capabilities(server, mntfh); in nfs_probe_fsinfo()
914 error = clp->rpc_ops->fsinfo(server, mntfh, &fsinfo); in nfs_probe_fsinfo()
918 nfs_server_set_fsinfo(server, &fsinfo); in nfs_probe_fsinfo()
921 if (server->namelen == 0) { in nfs_probe_fsinfo()
927 if (clp->rpc_ops->pathconf(server, mntfh, &pathinfo) >= 0) in nfs_probe_fsinfo()
928 server->namelen = pathinfo.max_namelen; in nfs_probe_fsinfo()
932 (server->caps & NFS_CAP_FS_LOCATIONS && in nfs_probe_fsinfo()
933 (server->flags & NFS_MOUNT_TRUNK_DISCOVERY))) { in nfs_probe_fsinfo()
934 error = clp->rpc_ops->discover_trunking(server, mntfh); in nfs_probe_fsinfo()
948 int nfs_probe_server(struct nfs_server *server, struct nfs_fh *mntfh) in nfs_probe_server() argument
957 /* Sanity: the probe won't work if the destination server in nfs_probe_server()
959 error = nfs_probe_fsinfo(server, mntfh, fattr); in nfs_probe_server()
967 * Copy useful information when duplicating a server record
984 void nfs_server_insert_lists(struct nfs_server *server) in nfs_server_insert_lists() argument
986 struct nfs_client *clp = server->nfs_client; in nfs_server_insert_lists()
990 list_add_tail_rcu(&server->client_link, &clp->cl_superblocks); in nfs_server_insert_lists()
991 list_add_tail(&server->master_link, &nn->nfs_volume_list); in nfs_server_insert_lists()
998 void nfs_server_remove_lists(struct nfs_server *server) in nfs_server_remove_lists() argument
1000 struct nfs_client *clp = server->nfs_client; in nfs_server_remove_lists()
1007 list_del_rcu(&server->client_link); in nfs_server_remove_lists()
1010 list_del(&server->master_link); in nfs_server_remove_lists()
1020 * Allocate and initialise a server record
1024 struct nfs_server *server; in nfs_alloc_server() local
1026 server = kzalloc(sizeof(struct nfs_server), GFP_KERNEL); in nfs_alloc_server()
1027 if (!server) in nfs_alloc_server()
1030 server->s_sysfs_id = ida_alloc(&s_sysfs_ids, GFP_KERNEL); in nfs_alloc_server()
1031 if (server->s_sysfs_id < 0) { in nfs_alloc_server()
1032 kfree(server); in nfs_alloc_server()
1036 server->client = server->client_acl = ERR_PTR(-EINVAL); in nfs_alloc_server()
1039 INIT_LIST_HEAD(&server->client_link); in nfs_alloc_server()
1040 INIT_LIST_HEAD(&server->master_link); in nfs_alloc_server()
1041 INIT_LIST_HEAD(&server->delegations); in nfs_alloc_server()
1042 INIT_LIST_HEAD(&server->layouts); in nfs_alloc_server()
1043 INIT_LIST_HEAD(&server->state_owners_lru); in nfs_alloc_server()
1044 INIT_LIST_HEAD(&server->ss_copies); in nfs_alloc_server()
1045 INIT_LIST_HEAD(&server->ss_src_copies); in nfs_alloc_server()
1047 atomic_set(&server->active, 0); in nfs_alloc_server()
1048 atomic_long_set(&server->nr_active_delegations, 0); in nfs_alloc_server()
1050 server->io_stats = nfs_alloc_iostats(); in nfs_alloc_server()
1051 if (!server->io_stats) { in nfs_alloc_server()
1052 kfree(server); in nfs_alloc_server()
1056 server->change_attr_type = NFS4_CHANGE_TYPE_IS_UNDEFINED; in nfs_alloc_server()
1058 init_waitqueue_head(&server->write_congestion_wait); in nfs_alloc_server()
1059 atomic_long_set(&server->writeback, 0); in nfs_alloc_server()
1061 atomic64_set(&server->owner_ctr, 0); in nfs_alloc_server()
1063 pnfs_init_server(server); in nfs_alloc_server()
1064 rpc_init_wait_queue(&server->uoc_rpcwaitq, "NFS UOC"); in nfs_alloc_server()
1066 return server; in nfs_alloc_server()
1072 struct nfs_server *server = container_of(p, struct nfs_server, rcu); in delayed_free() local
1074 nfs_free_iostats(server->io_stats); in delayed_free()
1075 kfree(server); in delayed_free()
1079 * Free up a server record
1081 void nfs_free_server(struct nfs_server *server) in nfs_free_server() argument
1083 nfs_server_remove_lists(server); in nfs_free_server()
1085 if (server->destroy != NULL) in nfs_free_server()
1086 server->destroy(server); in nfs_free_server()
1088 if (!IS_ERR(server->client_acl)) in nfs_free_server()
1089 rpc_shutdown_client(server->client_acl); in nfs_free_server()
1090 if (!IS_ERR(server->client)) in nfs_free_server()
1091 rpc_shutdown_client(server->client); in nfs_free_server()
1093 nfs_put_client(server->nfs_client); in nfs_free_server()
1095 if (server->kobj.state_initialized) { in nfs_free_server()
1096 nfs_sysfs_remove_server(server); in nfs_free_server()
1097 kobject_put(&server->kobj); in nfs_free_server()
1099 ida_free(&s_sysfs_ids, server->s_sysfs_id); in nfs_free_server()
1101 put_cred(server->cred); in nfs_free_server()
1103 call_rcu(&server->rcu, delayed_free); in nfs_free_server()
1109 * - keyed on server and FSID
1114 struct nfs_server *server; in nfs_create_server() local
1118 server = nfs_alloc_server(); in nfs_create_server()
1119 if (!server) in nfs_create_server()
1122 server->cred = get_cred(fc->cred); in nfs_create_server()
1130 error = nfs_init_server(server, fc); in nfs_create_server()
1135 error = nfs_probe_fsinfo(server, ctx->mntfh, fattr); in nfs_create_server()
1138 if (server->nfs_client->rpc_ops->version == 3) { in nfs_create_server()
1139 if (server->namelen == 0 || server->namelen > NFS3_MAXNAMLEN) in nfs_create_server()
1140 server->namelen = NFS3_MAXNAMLEN; in nfs_create_server()
1142 server->caps |= NFS_CAP_READDIRPLUS; in nfs_create_server()
1144 if (server->namelen == 0 || server->namelen > NFS2_MAXNAMLEN) in nfs_create_server()
1145 server->namelen = NFS2_MAXNAMLEN; in nfs_create_server()
1148 server->fh_expire_type = NFS_FH_VOL_RENAME; in nfs_create_server()
1151 error = ctx->nfs_mod->rpc_ops->getattr(server, ctx->mntfh, in nfs_create_server()
1158 memcpy(&server->fsid, &fattr->fsid, sizeof(server->fsid)); in nfs_create_server()
1160 dprintk("Server FSID: %llx:%llx\n", in nfs_create_server()
1161 (unsigned long long) server->fsid.major, in nfs_create_server()
1162 (unsigned long long) server->fsid.minor); in nfs_create_server()
1164 nfs_server_insert_lists(server); in nfs_create_server()
1165 server->mount_time = jiffies; in nfs_create_server()
1167 return server; in nfs_create_server()
1171 nfs_free_server(server); in nfs_create_server()
1177 * Clone an NFS2, NFS3 or NFS4 server record
1184 struct nfs_server *server; in nfs_clone_server() local
1187 server = nfs_alloc_server(); in nfs_clone_server()
1188 if (!server) in nfs_clone_server()
1191 server->cred = get_cred(source->cred); in nfs_clone_server()
1194 server->nfs_client = source->nfs_client; in nfs_clone_server()
1195 server->destroy = source->destroy; in nfs_clone_server()
1196 refcount_inc(&server->nfs_client->cl_count); in nfs_clone_server()
1197 nfs_server_copy_userdata(server, source); in nfs_clone_server()
1199 server->fsid = fattr->fsid; in nfs_clone_server()
1201 nfs_sysfs_add_server(server); in nfs_clone_server()
1203 nfs_sysfs_link_rpc_client(server, in nfs_clone_server()
1204 server->nfs_client->cl_rpcclient, "_state"); in nfs_clone_server()
1206 error = nfs_init_server_rpcclient(server, in nfs_clone_server()
1212 nfs_server_set_init_caps(server); in nfs_clone_server()
1214 /* probe the filesystem info for this server filesystem */ in nfs_clone_server()
1215 error = nfs_probe_server(server, fh); in nfs_clone_server()
1219 if (server->namelen == 0 || server->namelen > NFS4_MAXNAMLEN) in nfs_clone_server()
1220 server->namelen = NFS4_MAXNAMLEN; in nfs_clone_server()
1222 error = nfs_start_lockd(server); in nfs_clone_server()
1226 nfs_server_insert_lists(server); in nfs_clone_server()
1227 server->mount_time = jiffies; in nfs_clone_server()
1229 return server; in nfs_clone_server()
1232 nfs_free_server(server); in nfs_clone_server()
1297 * set up the iterator to start reading from the server list and return the first item
1310 * move to next server
1340 seq_puts(m, "NV SERVER PORT USE HOSTNAME\n"); in nfs_server_list_show()
1402 struct nfs_server *server; in nfs_volume_list_show() local
1410 seq_puts(m, "NV SERVER PORT DEV FSID" in nfs_volume_list_show()
1415 server = list_entry(v, struct nfs_server, master_link); in nfs_volume_list_show()
1416 clp = server->nfs_client; in nfs_volume_list_show()
1419 MAJOR(server->s_dev), MINOR(server->s_dev)); in nfs_volume_list_show()
1422 (unsigned long long) server->fsid.major, in nfs_volume_list_show()
1423 (unsigned long long) server->fsid.minor); in nfs_volume_list_show()
1432 nfs_server_fscache_state(server)); in nfs_volume_list_show()