Lines Matching refs:server
216 static void pnfs_init_server(struct nfs_server *server)
218 rpc_init_wait_queue(&server->roc_rpcwaitq, "pNFS ROC");
230 static void pnfs_init_server(struct nfs_server *server)
445 * Mark a server as ready or failed
557 static void nfs_destroy_server(struct nfs_server *server)
559 if (server->nlm_host)
560 nlmclnt_done(server->nlm_host);
566 static int nfs_start_lockd(struct nfs_server *server)
569 struct nfs_client *clp = server->nfs_client;
575 .noresvport = server->flags & NFS_MOUNT_NORESVPORT ?
579 .cred = server->cred,
584 if ((server->flags & NFS_MOUNT_LOCAL_FLOCK) &&
585 (server->flags & NFS_MOUNT_LOCAL_FCNTL))
602 server->nlm_host = host;
603 server->destroy = nfs_destroy_server;
604 nfs_sysfs_link_rpc_client(server, nlmclnt_rpc_clnt(host), NULL);
611 int nfs_init_server_rpcclient(struct nfs_server *server,
615 struct nfs_client *clp = server->nfs_client;
617 server->client = rpc_clone_client_set_auth(clp->cl_rpcclient,
619 if (IS_ERR(server->client)) {
621 return PTR_ERR(server->client);
624 memcpy(&server->client->cl_timeout_default,
626 sizeof(server->client->cl_timeout_default));
627 server->client->cl_timeout = &server->client->cl_timeout_default;
628 server->client->cl_softrtry = 0;
629 if (server->flags & NFS_MOUNT_SOFTERR)
630 server->client->cl_softerr = 1;
631 if (server->flags & NFS_MOUNT_SOFT)
632 server->client->cl_softrtry = 1;
634 nfs_sysfs_link_rpc_client(server, server->client, NULL);
673 static int nfs_init_server(struct nfs_server *server,
686 .cred = server->cred,
704 server->nfs_client = clp;
705 nfs_sysfs_add_server(server);
706 nfs_sysfs_link_rpc_client(server, clp->cl_rpcclient, "_state");
709 server->flags = ctx->flags;
710 server->options = ctx->options;
711 server->caps |= NFS_CAP_HARDLINKS | NFS_CAP_SYMLINKS;
715 server->fattr_valid = NFS_ATTR_FATTR_V2;
718 server->fattr_valid = NFS_ATTR_FATTR_V3;
721 server->fattr_valid = NFS_ATTR_FATTR_V4;
725 server->rsize = nfs_io_size(ctx->rsize, clp->cl_proto);
727 server->wsize = nfs_io_size(ctx->wsize, clp->cl_proto);
729 server->acregmin = ctx->acregmin * HZ;
730 server->acregmax = ctx->acregmax * HZ;
731 server->acdirmin = ctx->acdirmin * HZ;
732 server->acdirmax = ctx->acdirmax * HZ;
735 error = nfs_start_lockd(server);
739 server->port = ctx->nfs_server.port;
740 server->auth_info = ctx->auth_info;
742 error = nfs_init_server_rpcclient(server, &timeparms,
749 memcpy(&server->mountd_address, &ctx->mount_server.address,
751 server->mountd_addrlen = ctx->mount_server.addrlen;
753 server->mountd_version = ctx->mount_server.version;
754 server->mountd_port = ctx->mount_server.port;
755 server->mountd_protocol = ctx->mount_server.protocol;
757 server->namelen = ctx->namlen;
761 server->nfs_client = NULL;
767 * Load up the server record from information gained in an fsinfo record
769 static void nfs_server_set_fsinfo(struct nfs_server *server,
772 struct nfs_client *clp = server->nfs_client;
776 if (server->rsize == 0)
777 server->rsize = nfs_io_size(fsinfo->rtpref, clp->cl_proto);
778 if (server->wsize == 0)
779 server->wsize = nfs_io_size(fsinfo->wtpref, clp->cl_proto);
781 if (fsinfo->rtmax >= 512 && server->rsize > fsinfo->rtmax)
782 server->rsize = nfs_io_size(fsinfo->rtmax, clp->cl_proto);
783 if (fsinfo->wtmax >= 512 && server->wsize > fsinfo->wtmax)
784 server->wsize = nfs_io_size(fsinfo->wtmax, clp->cl_proto);
786 raw_max_rpc_payload = rpc_max_payload(server->client);
789 if (server->rsize > max_rpc_payload)
790 server->rsize = max_rpc_payload;
791 if (server->rsize > NFS_MAX_FILE_IO_SIZE)
792 server->rsize = NFS_MAX_FILE_IO_SIZE;
793 server->rpages = (server->rsize + PAGE_SIZE - 1) >> PAGE_SHIFT;
795 if (server->wsize > max_rpc_payload)
796 server->wsize = max_rpc_payload;
797 if (server->wsize > NFS_MAX_FILE_IO_SIZE)
798 server->wsize = NFS_MAX_FILE_IO_SIZE;
799 server->wpages = (server->wsize + PAGE_SIZE - 1) >> PAGE_SHIFT;
801 server->wtmult = nfs_block_bits(fsinfo->wtmult, NULL);
803 server->dtsize = nfs_block_size(fsinfo->dtpref, NULL);
804 if (server->dtsize > NFS_MAX_FILE_IO_SIZE)
805 server->dtsize = NFS_MAX_FILE_IO_SIZE;
806 if (server->dtsize > server->rsize)
807 server->dtsize = server->rsize;
809 if (server->flags & NFS_MOUNT_NOAC) {
810 server->acregmin = server->acregmax = 0;
811 server->acdirmin = server->acdirmax = 0;
814 server->maxfilesize = fsinfo->maxfilesize;
816 server->time_delta = fsinfo->time_delta;
817 server->change_attr_type = fsinfo->change_attr_type;
819 server->clone_blksize = fsinfo->clone_blksize;
821 rpc_setbufsize(server->client, server->wsize + 100, server->rsize + 100);
827 server->gxasize = min_t(unsigned int, raw_max_rpc_payload,
829 server->sxasize = min_t(unsigned int, raw_max_rpc_payload,
831 server->lxasize = min_t(unsigned int, raw_max_rpc_payload,
835 server->caps |= NFS_CAP_XATTR;
842 static int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, struct nfs_fattr *fattr)
845 struct nfs_client *clp = server->nfs_client;
849 error = clp->rpc_ops->set_capabilities(server, mntfh);
857 error = clp->rpc_ops->fsinfo(server, mntfh, &fsinfo);
861 nfs_server_set_fsinfo(server, &fsinfo);
864 if (server->namelen == 0) {
870 if (clp->rpc_ops->pathconf(server, mntfh, &pathinfo) >= 0)
871 server->namelen = pathinfo.max_namelen;
875 (server->caps & NFS_CAP_FS_LOCATIONS &&
876 (server->flags & NFS_MOUNT_TRUNK_DISCOVERY))) {
877 error = clp->rpc_ops->discover_trunking(server, mntfh);
891 int nfs_probe_server(struct nfs_server *server, struct nfs_fh *mntfh)
900 /* Sanity: the probe won't work if the destination server
902 error = nfs_probe_fsinfo(server, mntfh, fattr);
910 * Copy useful information when duplicating a server record
928 void nfs_server_insert_lists(struct nfs_server *server)
930 struct nfs_client *clp = server->nfs_client;
934 list_add_tail_rcu(&server->client_link, &clp->cl_superblocks);
935 list_add_tail(&server->master_link, &nn->nfs_volume_list);
942 void nfs_server_remove_lists(struct nfs_server *server)
944 struct nfs_client *clp = server->nfs_client;
951 list_del_rcu(&server->client_link);
954 list_del(&server->master_link);
964 * Allocate and initialise a server record
968 struct nfs_server *server;
970 server = kzalloc(sizeof(struct nfs_server), GFP_KERNEL);
971 if (!server)
974 server->s_sysfs_id = ida_alloc(&s_sysfs_ids, GFP_KERNEL);
975 if (server->s_sysfs_id < 0) {
976 kfree(server);
980 server->client = server->client_acl = ERR_PTR(-EINVAL);
983 INIT_LIST_HEAD(&server->client_link);
984 INIT_LIST_HEAD(&server->master_link);
985 INIT_LIST_HEAD(&server->delegations);
986 INIT_LIST_HEAD(&server->layouts);
987 INIT_LIST_HEAD(&server->state_owners_lru);
988 INIT_LIST_HEAD(&server->ss_copies);
990 atomic_set(&server->active, 0);
992 server->io_stats = nfs_alloc_iostats();
993 if (!server->io_stats) {
994 kfree(server);
998 server->change_attr_type = NFS4_CHANGE_TYPE_IS_UNDEFINED;
1000 ida_init(&server->openowner_id);
1001 ida_init(&server->lockowner_id);
1002 pnfs_init_server(server);
1003 rpc_init_wait_queue(&server->uoc_rpcwaitq, "NFS UOC");
1005 return server;
1010 * Free up a server record
1012 void nfs_free_server(struct nfs_server *server)
1014 nfs_server_remove_lists(server);
1016 if (server->destroy != NULL)
1017 server->destroy(server);
1019 if (!IS_ERR(server->client_acl))
1020 rpc_shutdown_client(server->client_acl);
1021 if (!IS_ERR(server->client))
1022 rpc_shutdown_client(server->client);
1024 nfs_put_client(server->nfs_client);
1026 if (server->kobj.state_initialized) {
1027 nfs_sysfs_remove_server(server);
1028 kobject_put(&server->kobj);
1030 ida_free(&s_sysfs_ids, server->s_sysfs_id);
1032 ida_destroy(&server->lockowner_id);
1033 ida_destroy(&server->openowner_id);
1034 nfs_free_iostats(server->io_stats);
1035 put_cred(server->cred);
1036 kfree(server);
1043 * - keyed on server and FSID
1048 struct nfs_server *server;
1052 server = nfs_alloc_server();
1053 if (!server)
1056 server->cred = get_cred(fc->cred);
1064 error = nfs_init_server(server, fc);
1069 error = nfs_probe_fsinfo(server, ctx->mntfh, fattr);
1072 if (server->nfs_client->rpc_ops->version == 3) {
1073 if (server->namelen == 0 || server->namelen > NFS3_MAXNAMLEN)
1074 server->namelen = NFS3_MAXNAMLEN;
1076 server->caps |= NFS_CAP_READDIRPLUS;
1078 if (server->namelen == 0 || server->namelen > NFS2_MAXNAMLEN)
1079 server->namelen = NFS2_MAXNAMLEN;
1083 error = ctx->nfs_mod->rpc_ops->getattr(server, ctx->mntfh,
1090 memcpy(&server->fsid, &fattr->fsid, sizeof(server->fsid));
1093 (unsigned long long) server->fsid.major,
1094 (unsigned long long) server->fsid.minor);
1096 nfs_server_insert_lists(server);
1097 server->mount_time = jiffies;
1099 return server;
1103 nfs_free_server(server);
1109 * Clone an NFS2, NFS3 or NFS4 server record
1116 struct nfs_server *server;
1119 server = nfs_alloc_server();
1120 if (!server)
1123 server->cred = get_cred(source->cred);
1126 server->nfs_client = source->nfs_client;
1127 server->destroy = source->destroy;
1128 refcount_inc(&server->nfs_client->cl_count);
1129 nfs_server_copy_userdata(server, source);
1131 server->fsid = fattr->fsid;
1133 nfs_sysfs_add_server(server);
1135 nfs_sysfs_link_rpc_client(server,
1136 server->nfs_client->cl_rpcclient, "_state");
1138 error = nfs_init_server_rpcclient(server,
1144 /* probe the filesystem info for this server filesystem */
1145 error = nfs_probe_server(server, fh);
1149 if (server->namelen == 0 || server->namelen > NFS4_MAXNAMLEN)
1150 server->namelen = NFS4_MAXNAMLEN;
1152 error = nfs_start_lockd(server);
1156 nfs_server_insert_lists(server);
1157 server->mount_time = jiffies;
1159 return server;
1162 nfs_free_server(server);
1218 * set up the iterator to start reading from the server list and return the first item
1231 * move to next server
1323 struct nfs_server *server;
1336 server = list_entry(v, struct nfs_server, master_link);
1337 clp = server->nfs_client;
1340 MAJOR(server->s_dev), MINOR(server->s_dev));
1343 (unsigned long long) server->fsid.major,
1344 (unsigned long long) server->fsid.minor);
1353 nfs_server_fscache_state(server));