Lines Matching full:server
216 static void pnfs_init_server(struct nfs_server *server) in pnfs_init_server() argument
218 rpc_init_wait_queue(&server->roc_rpcwaitq, "pNFS ROC"); in pnfs_init_server()
230 static void pnfs_init_server(struct nfs_server *server) in pnfs_init_server() argument
444 * Mark a server as ready or failed
552 static void nfs_destroy_server(struct nfs_server *server) in nfs_destroy_server() argument
554 if (server->nlm_host) in nfs_destroy_server()
555 nlmclnt_done(server->nlm_host); in nfs_destroy_server()
561 static int nfs_start_lockd(struct nfs_server *server) in nfs_start_lockd() argument
564 struct nfs_client *clp = server->nfs_client; in nfs_start_lockd()
570 .noresvport = server->flags & NFS_MOUNT_NORESVPORT ? in nfs_start_lockd()
574 .cred = server->cred, in nfs_start_lockd()
579 if ((server->flags & NFS_MOUNT_LOCAL_FLOCK) && in nfs_start_lockd()
580 (server->flags & NFS_MOUNT_LOCAL_FCNTL)) in nfs_start_lockd()
597 server->nlm_host = host; in nfs_start_lockd()
598 server->destroy = nfs_destroy_server; in nfs_start_lockd()
605 int nfs_init_server_rpcclient(struct nfs_server *server, in nfs_init_server_rpcclient() argument
609 struct nfs_client *clp = server->nfs_client; in nfs_init_server_rpcclient()
611 server->client = rpc_clone_client_set_auth(clp->cl_rpcclient, in nfs_init_server_rpcclient()
613 if (IS_ERR(server->client)) { in nfs_init_server_rpcclient()
615 return PTR_ERR(server->client); in nfs_init_server_rpcclient()
618 memcpy(&server->client->cl_timeout_default, in nfs_init_server_rpcclient()
620 sizeof(server->client->cl_timeout_default)); in nfs_init_server_rpcclient()
621 server->client->cl_timeout = &server->client->cl_timeout_default; in nfs_init_server_rpcclient()
622 server->client->cl_softrtry = 0; in nfs_init_server_rpcclient()
623 if (server->flags & NFS_MOUNT_SOFTERR) in nfs_init_server_rpcclient()
624 server->client->cl_softerr = 1; in nfs_init_server_rpcclient()
625 if (server->flags & NFS_MOUNT_SOFT) in nfs_init_server_rpcclient()
626 server->client->cl_softrtry = 1; in nfs_init_server_rpcclient()
666 static int nfs_init_server(struct nfs_server *server, in nfs_init_server() argument
679 .cred = server->cred, in nfs_init_server()
696 server->nfs_client = clp; in nfs_init_server()
699 server->flags = ctx->flags; in nfs_init_server()
700 server->options = ctx->options; in nfs_init_server()
701 server->caps |= NFS_CAP_HARDLINKS | NFS_CAP_SYMLINKS; in nfs_init_server()
705 server->fattr_valid = NFS_ATTR_FATTR_V2; in nfs_init_server()
708 server->fattr_valid = NFS_ATTR_FATTR_V3; in nfs_init_server()
711 server->fattr_valid = NFS_ATTR_FATTR_V4; in nfs_init_server()
715 server->rsize = nfs_block_size(ctx->rsize, NULL); in nfs_init_server()
717 server->wsize = nfs_block_size(ctx->wsize, NULL); in nfs_init_server()
719 server->acregmin = ctx->acregmin * HZ; in nfs_init_server()
720 server->acregmax = ctx->acregmax * HZ; in nfs_init_server()
721 server->acdirmin = ctx->acdirmin * HZ; in nfs_init_server()
722 server->acdirmax = ctx->acdirmax * HZ; in nfs_init_server()
725 error = nfs_start_lockd(server); in nfs_init_server()
729 server->port = ctx->nfs_server.port; in nfs_init_server()
730 server->auth_info = ctx->auth_info; in nfs_init_server()
732 error = nfs_init_server_rpcclient(server, &timeparms, in nfs_init_server()
739 memcpy(&server->mountd_address, &ctx->mount_server.address, in nfs_init_server()
741 server->mountd_addrlen = ctx->mount_server.addrlen; in nfs_init_server()
743 server->mountd_version = ctx->mount_server.version; in nfs_init_server()
744 server->mountd_port = ctx->mount_server.port; in nfs_init_server()
745 server->mountd_protocol = ctx->mount_server.protocol; in nfs_init_server()
747 server->namelen = ctx->namlen; in nfs_init_server()
751 server->nfs_client = NULL; in nfs_init_server()
757 * Load up the server record from information gained in an fsinfo record
759 static void nfs_server_set_fsinfo(struct nfs_server *server, in nfs_server_set_fsinfo() argument
765 if (server->rsize == 0) in nfs_server_set_fsinfo()
766 server->rsize = nfs_block_size(fsinfo->rtpref, NULL); in nfs_server_set_fsinfo()
767 if (server->wsize == 0) in nfs_server_set_fsinfo()
768 server->wsize = nfs_block_size(fsinfo->wtpref, NULL); in nfs_server_set_fsinfo()
770 if (fsinfo->rtmax >= 512 && server->rsize > fsinfo->rtmax) in nfs_server_set_fsinfo()
771 server->rsize = nfs_block_size(fsinfo->rtmax, NULL); in nfs_server_set_fsinfo()
772 if (fsinfo->wtmax >= 512 && server->wsize > fsinfo->wtmax) in nfs_server_set_fsinfo()
773 server->wsize = nfs_block_size(fsinfo->wtmax, NULL); in nfs_server_set_fsinfo()
775 raw_max_rpc_payload = rpc_max_payload(server->client); in nfs_server_set_fsinfo()
778 if (server->rsize > max_rpc_payload) in nfs_server_set_fsinfo()
779 server->rsize = max_rpc_payload; in nfs_server_set_fsinfo()
780 if (server->rsize > NFS_MAX_FILE_IO_SIZE) in nfs_server_set_fsinfo()
781 server->rsize = NFS_MAX_FILE_IO_SIZE; in nfs_server_set_fsinfo()
782 server->rpages = (server->rsize + PAGE_SIZE - 1) >> PAGE_SHIFT; in nfs_server_set_fsinfo()
784 if (server->wsize > max_rpc_payload) in nfs_server_set_fsinfo()
785 server->wsize = max_rpc_payload; in nfs_server_set_fsinfo()
786 if (server->wsize > NFS_MAX_FILE_IO_SIZE) in nfs_server_set_fsinfo()
787 server->wsize = NFS_MAX_FILE_IO_SIZE; in nfs_server_set_fsinfo()
788 server->wpages = (server->wsize + PAGE_SIZE - 1) >> PAGE_SHIFT; in nfs_server_set_fsinfo()
790 server->wtmult = nfs_block_bits(fsinfo->wtmult, NULL); in nfs_server_set_fsinfo()
792 server->dtsize = nfs_block_size(fsinfo->dtpref, NULL); in nfs_server_set_fsinfo()
793 if (server->dtsize > NFS_MAX_FILE_IO_SIZE) in nfs_server_set_fsinfo()
794 server->dtsize = NFS_MAX_FILE_IO_SIZE; in nfs_server_set_fsinfo()
795 if (server->dtsize > server->rsize) in nfs_server_set_fsinfo()
796 server->dtsize = server->rsize; in nfs_server_set_fsinfo()
798 if (server->flags & NFS_MOUNT_NOAC) { in nfs_server_set_fsinfo()
799 server->acregmin = server->acregmax = 0; in nfs_server_set_fsinfo()
800 server->acdirmin = server->acdirmax = 0; in nfs_server_set_fsinfo()
803 server->maxfilesize = fsinfo->maxfilesize; in nfs_server_set_fsinfo()
805 server->time_delta = fsinfo->time_delta; in nfs_server_set_fsinfo()
806 server->change_attr_type = fsinfo->change_attr_type; in nfs_server_set_fsinfo()
808 server->clone_blksize = fsinfo->clone_blksize; in nfs_server_set_fsinfo()
810 rpc_setbufsize(server->client, server->wsize + 100, server->rsize + 100); in nfs_server_set_fsinfo()
816 server->gxasize = min_t(unsigned int, raw_max_rpc_payload, in nfs_server_set_fsinfo()
818 server->sxasize = min_t(unsigned int, raw_max_rpc_payload, in nfs_server_set_fsinfo()
820 server->lxasize = min_t(unsigned int, raw_max_rpc_payload, in nfs_server_set_fsinfo()
824 server->caps |= NFS_CAP_XATTR; in nfs_server_set_fsinfo()
831 int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, struct nfs_fattr *fattr) in nfs_probe_fsinfo() argument
834 struct nfs_client *clp = server->nfs_client; in nfs_probe_fsinfo()
838 error = clp->rpc_ops->set_capabilities(server, mntfh); in nfs_probe_fsinfo()
846 error = clp->rpc_ops->fsinfo(server, mntfh, &fsinfo); in nfs_probe_fsinfo()
850 nfs_server_set_fsinfo(server, &fsinfo); in nfs_probe_fsinfo()
853 if (server->namelen == 0) { in nfs_probe_fsinfo()
859 if (clp->rpc_ops->pathconf(server, mntfh, &pathinfo) >= 0) in nfs_probe_fsinfo()
860 server->namelen = pathinfo.max_namelen; in nfs_probe_fsinfo()
868 * Copy useful information when duplicating a server record
886 void nfs_server_insert_lists(struct nfs_server *server) in nfs_server_insert_lists() argument
888 struct nfs_client *clp = server->nfs_client; in nfs_server_insert_lists()
892 list_add_tail_rcu(&server->client_link, &clp->cl_superblocks); in nfs_server_insert_lists()
893 list_add_tail(&server->master_link, &nn->nfs_volume_list); in nfs_server_insert_lists()
900 void nfs_server_remove_lists(struct nfs_server *server) in nfs_server_remove_lists() argument
902 struct nfs_client *clp = server->nfs_client; in nfs_server_remove_lists()
909 list_del_rcu(&server->client_link); in nfs_server_remove_lists()
912 list_del(&server->master_link); in nfs_server_remove_lists()
920 * Allocate and initialise a server record
924 struct nfs_server *server; in nfs_alloc_server() local
926 server = kzalloc(sizeof(struct nfs_server), GFP_KERNEL); in nfs_alloc_server()
927 if (!server) in nfs_alloc_server()
930 server->client = server->client_acl = ERR_PTR(-EINVAL); in nfs_alloc_server()
933 INIT_LIST_HEAD(&server->client_link); in nfs_alloc_server()
934 INIT_LIST_HEAD(&server->master_link); in nfs_alloc_server()
935 INIT_LIST_HEAD(&server->delegations); in nfs_alloc_server()
936 INIT_LIST_HEAD(&server->layouts); in nfs_alloc_server()
937 INIT_LIST_HEAD(&server->state_owners_lru); in nfs_alloc_server()
938 INIT_LIST_HEAD(&server->ss_copies); in nfs_alloc_server()
940 atomic_set(&server->active, 0); in nfs_alloc_server()
942 server->io_stats = nfs_alloc_iostats(); in nfs_alloc_server()
943 if (!server->io_stats) { in nfs_alloc_server()
944 kfree(server); in nfs_alloc_server()
948 server->change_attr_type = NFS4_CHANGE_TYPE_IS_UNDEFINED; in nfs_alloc_server()
950 ida_init(&server->openowner_id); in nfs_alloc_server()
951 ida_init(&server->lockowner_id); in nfs_alloc_server()
952 pnfs_init_server(server); in nfs_alloc_server()
953 rpc_init_wait_queue(&server->uoc_rpcwaitq, "NFS UOC"); in nfs_alloc_server()
955 return server; in nfs_alloc_server()
960 * Free up a server record
962 void nfs_free_server(struct nfs_server *server) in nfs_free_server() argument
964 nfs_server_remove_lists(server); in nfs_free_server()
966 if (server->destroy != NULL) in nfs_free_server()
967 server->destroy(server); in nfs_free_server()
969 if (!IS_ERR(server->client_acl)) in nfs_free_server()
970 rpc_shutdown_client(server->client_acl); in nfs_free_server()
971 if (!IS_ERR(server->client)) in nfs_free_server()
972 rpc_shutdown_client(server->client); in nfs_free_server()
974 nfs_put_client(server->nfs_client); in nfs_free_server()
976 ida_destroy(&server->lockowner_id); in nfs_free_server()
977 ida_destroy(&server->openowner_id); in nfs_free_server()
978 nfs_free_iostats(server->io_stats); in nfs_free_server()
979 put_cred(server->cred); in nfs_free_server()
980 kfree(server); in nfs_free_server()
987 * - keyed on server and FSID
992 struct nfs_server *server; in nfs_create_server() local
996 server = nfs_alloc_server(); in nfs_create_server()
997 if (!server) in nfs_create_server()
1000 server->cred = get_cred(fc->cred); in nfs_create_server()
1008 error = nfs_init_server(server, fc); in nfs_create_server()
1013 error = nfs_probe_fsinfo(server, ctx->mntfh, fattr); in nfs_create_server()
1016 if (server->nfs_client->rpc_ops->version == 3) { in nfs_create_server()
1017 if (server->namelen == 0 || server->namelen > NFS3_MAXNAMLEN) in nfs_create_server()
1018 server->namelen = NFS3_MAXNAMLEN; in nfs_create_server()
1020 server->caps |= NFS_CAP_READDIRPLUS; in nfs_create_server()
1022 if (server->namelen == 0 || server->namelen > NFS2_MAXNAMLEN) in nfs_create_server()
1023 server->namelen = NFS2_MAXNAMLEN; in nfs_create_server()
1027 error = ctx->nfs_mod->rpc_ops->getattr(server, ctx->mntfh, in nfs_create_server()
1034 memcpy(&server->fsid, &fattr->fsid, sizeof(server->fsid)); in nfs_create_server()
1036 dprintk("Server FSID: %llx:%llx\n", in nfs_create_server()
1037 (unsigned long long) server->fsid.major, in nfs_create_server()
1038 (unsigned long long) server->fsid.minor); in nfs_create_server()
1040 nfs_server_insert_lists(server); in nfs_create_server()
1041 server->mount_time = jiffies; in nfs_create_server()
1043 return server; in nfs_create_server()
1047 nfs_free_server(server); in nfs_create_server()
1053 * Clone an NFS2, NFS3 or NFS4 server record
1060 struct nfs_server *server; in nfs_clone_server() local
1064 server = nfs_alloc_server(); in nfs_clone_server()
1065 if (!server) in nfs_clone_server()
1068 server->cred = get_cred(source->cred); in nfs_clone_server()
1076 server->nfs_client = source->nfs_client; in nfs_clone_server()
1077 server->destroy = source->destroy; in nfs_clone_server()
1078 refcount_inc(&server->nfs_client->cl_count); in nfs_clone_server()
1079 nfs_server_copy_userdata(server, source); in nfs_clone_server()
1081 server->fsid = fattr->fsid; in nfs_clone_server()
1083 error = nfs_init_server_rpcclient(server, in nfs_clone_server()
1089 /* probe the filesystem info for this server filesystem */ in nfs_clone_server()
1090 error = nfs_probe_fsinfo(server, fh, fattr_fsinfo); in nfs_clone_server()
1094 if (server->namelen == 0 || server->namelen > NFS4_MAXNAMLEN) in nfs_clone_server()
1095 server->namelen = NFS4_MAXNAMLEN; in nfs_clone_server()
1097 error = nfs_start_lockd(server); in nfs_clone_server()
1101 nfs_server_insert_lists(server); in nfs_clone_server()
1102 server->mount_time = jiffies; in nfs_clone_server()
1105 return server; in nfs_clone_server()
1109 nfs_free_server(server); in nfs_clone_server()
1165 * set up the iterator to start reading from the server list and return the first item
1178 * move to next server
1208 seq_puts(m, "NV SERVER PORT USE HOSTNAME\n"); in nfs_server_list_show()
1270 struct nfs_server *server; in nfs_volume_list_show() local
1278 seq_puts(m, "NV SERVER PORT DEV FSID" in nfs_volume_list_show()
1283 server = list_entry(v, struct nfs_server, master_link); in nfs_volume_list_show()
1284 clp = server->nfs_client; in nfs_volume_list_show()
1287 MAJOR(server->s_dev), MINOR(server->s_dev)); in nfs_volume_list_show()
1290 (unsigned long long) server->fsid.major, in nfs_volume_list_show()
1291 (unsigned long long) server->fsid.minor); in nfs_volume_list_show()
1300 nfs_server_fscache_state(server)); in nfs_volume_list_show()