Lines Matching refs:server
215 static void pnfs_init_server(struct nfs_server *server)
217 rpc_init_wait_queue(&server->roc_rpcwaitq, "pNFS ROC");
229 static void pnfs_init_server(struct nfs_server *server)
442 * Mark a server as ready or failed
553 static void nfs_destroy_server(struct nfs_server *server)
555 if (server->nlm_host)
556 nlmclnt_done(server->nlm_host);
562 static int nfs_start_lockd(struct nfs_server *server)
565 struct nfs_client *clp = server->nfs_client;
571 .noresvport = server->flags & NFS_MOUNT_NORESVPORT ?
575 .cred = server->cred,
580 if ((server->flags & NFS_MOUNT_LOCAL_FLOCK) &&
581 (server->flags & NFS_MOUNT_LOCAL_FCNTL))
598 server->nlm_host = host;
599 server->destroy = nfs_destroy_server;
606 int nfs_init_server_rpcclient(struct nfs_server *server,
610 struct nfs_client *clp = server->nfs_client;
612 server->client = rpc_clone_client_set_auth(clp->cl_rpcclient,
614 if (IS_ERR(server->client)) {
616 return PTR_ERR(server->client);
619 memcpy(&server->client->cl_timeout_default,
621 sizeof(server->client->cl_timeout_default));
622 server->client->cl_timeout = &server->client->cl_timeout_default;
623 server->client->cl_softrtry = 0;
624 if (server->flags & NFS_MOUNT_SOFTERR)
625 server->client->cl_softerr = 1;
626 if (server->flags & NFS_MOUNT_SOFT)
627 server->client->cl_softrtry = 1;
667 static int nfs_init_server(struct nfs_server *server,
680 .cred = server->cred,
697 server->nfs_client = clp;
700 server->flags = ctx->flags;
701 server->options = ctx->options;
702 server->caps |= NFS_CAP_HARDLINKS|NFS_CAP_SYMLINKS|NFS_CAP_FILEID|
707 server->rsize = nfs_block_size(ctx->rsize, NULL);
709 server->wsize = nfs_block_size(ctx->wsize, NULL);
711 server->acregmin = ctx->acregmin * HZ;
712 server->acregmax = ctx->acregmax * HZ;
713 server->acdirmin = ctx->acdirmin * HZ;
714 server->acdirmax = ctx->acdirmax * HZ;
717 error = nfs_start_lockd(server);
721 server->port = ctx->nfs_server.port;
722 server->auth_info = ctx->auth_info;
724 error = nfs_init_server_rpcclient(server, &timeparms,
731 memcpy(&server->mountd_address, &ctx->mount_server.address,
733 server->mountd_addrlen = ctx->mount_server.addrlen;
735 server->mountd_version = ctx->mount_server.version;
736 server->mountd_port = ctx->mount_server.port;
737 server->mountd_protocol = ctx->mount_server.protocol;
739 server->namelen = ctx->namlen;
743 server->nfs_client = NULL;
749 * Load up the server record from information gained in an fsinfo record
751 static void nfs_server_set_fsinfo(struct nfs_server *server,
757 if (server->rsize == 0)
758 server->rsize = nfs_block_size(fsinfo->rtpref, NULL);
759 if (server->wsize == 0)
760 server->wsize = nfs_block_size(fsinfo->wtpref, NULL);
762 if (fsinfo->rtmax >= 512 && server->rsize > fsinfo->rtmax)
763 server->rsize = nfs_block_size(fsinfo->rtmax, NULL);
764 if (fsinfo->wtmax >= 512 && server->wsize > fsinfo->wtmax)
765 server->wsize = nfs_block_size(fsinfo->wtmax, NULL);
767 raw_max_rpc_payload = rpc_max_payload(server->client);
770 if (server->rsize > max_rpc_payload)
771 server->rsize = max_rpc_payload;
772 if (server->rsize > NFS_MAX_FILE_IO_SIZE)
773 server->rsize = NFS_MAX_FILE_IO_SIZE;
774 server->rpages = (server->rsize + PAGE_SIZE - 1) >> PAGE_SHIFT;
776 if (server->wsize > max_rpc_payload)
777 server->wsize = max_rpc_payload;
778 if (server->wsize > NFS_MAX_FILE_IO_SIZE)
779 server->wsize = NFS_MAX_FILE_IO_SIZE;
780 server->wpages = (server->wsize + PAGE_SIZE - 1) >> PAGE_SHIFT;
782 server->wtmult = nfs_block_bits(fsinfo->wtmult, NULL);
784 server->dtsize = nfs_block_size(fsinfo->dtpref, NULL);
785 if (server->dtsize > PAGE_SIZE * NFS_MAX_READDIR_PAGES)
786 server->dtsize = PAGE_SIZE * NFS_MAX_READDIR_PAGES;
787 if (server->dtsize > server->rsize)
788 server->dtsize = server->rsize;
790 if (server->flags & NFS_MOUNT_NOAC) {
791 server->acregmin = server->acregmax = 0;
792 server->acdirmin = server->acdirmax = 0;
795 server->maxfilesize = fsinfo->maxfilesize;
797 server->time_delta = fsinfo->time_delta;
799 server->clone_blksize = fsinfo->clone_blksize;
801 rpc_setbufsize(server->client, server->wsize + 100, server->rsize + 100);
807 server->gxasize = min_t(unsigned int, raw_max_rpc_payload,
809 server->sxasize = min_t(unsigned int, raw_max_rpc_payload,
811 server->lxasize = min_t(unsigned int, raw_max_rpc_payload,
815 server->caps |= NFS_CAP_XATTR;
822 int nfs_probe_fsinfo(struct nfs_server *server, struct nfs_fh *mntfh, struct nfs_fattr *fattr)
825 struct nfs_client *clp = server->nfs_client;
829 error = clp->rpc_ops->set_capabilities(server, mntfh);
837 error = clp->rpc_ops->fsinfo(server, mntfh, &fsinfo);
841 nfs_server_set_fsinfo(server, &fsinfo);
844 if (server->namelen == 0) {
850 if (clp->rpc_ops->pathconf(server, mntfh, &pathinfo) >= 0)
851 server->namelen = pathinfo.max_namelen;
859 * Copy useful information when duplicating a server record
877 void nfs_server_insert_lists(struct nfs_server *server)
879 struct nfs_client *clp = server->nfs_client;
883 list_add_tail_rcu(&server->client_link, &clp->cl_superblocks);
884 list_add_tail(&server->master_link, &nn->nfs_volume_list);
891 void nfs_server_remove_lists(struct nfs_server *server)
893 struct nfs_client *clp = server->nfs_client;
900 list_del_rcu(&server->client_link);
903 list_del(&server->master_link);
911 * Allocate and initialise a server record
915 struct nfs_server *server;
917 server = kzalloc(sizeof(struct nfs_server), GFP_KERNEL);
918 if (!server)
921 server->client = server->client_acl = ERR_PTR(-EINVAL);
924 INIT_LIST_HEAD(&server->client_link);
925 INIT_LIST_HEAD(&server->master_link);
926 INIT_LIST_HEAD(&server->delegations);
927 INIT_LIST_HEAD(&server->layouts);
928 INIT_LIST_HEAD(&server->state_owners_lru);
929 INIT_LIST_HEAD(&server->ss_copies);
931 atomic_set(&server->active, 0);
933 server->io_stats = nfs_alloc_iostats();
934 if (!server->io_stats) {
935 kfree(server);
939 ida_init(&server->openowner_id);
940 ida_init(&server->lockowner_id);
941 pnfs_init_server(server);
942 rpc_init_wait_queue(&server->uoc_rpcwaitq, "NFS UOC");
944 return server;
949 * Free up a server record
951 void nfs_free_server(struct nfs_server *server)
953 nfs_server_remove_lists(server);
955 if (server->destroy != NULL)
956 server->destroy(server);
958 if (!IS_ERR(server->client_acl))
959 rpc_shutdown_client(server->client_acl);
960 if (!IS_ERR(server->client))
961 rpc_shutdown_client(server->client);
963 nfs_put_client(server->nfs_client);
965 ida_destroy(&server->lockowner_id);
966 ida_destroy(&server->openowner_id);
967 nfs_free_iostats(server->io_stats);
968 put_cred(server->cred);
969 kfree(server);
976 * - keyed on server and FSID
981 struct nfs_server *server;
985 server = nfs_alloc_server();
986 if (!server)
989 server->cred = get_cred(fc->cred);
997 error = nfs_init_server(server, fc);
1002 error = nfs_probe_fsinfo(server, ctx->mntfh, fattr);
1005 if (server->nfs_client->rpc_ops->version == 3) {
1006 if (server->namelen == 0 || server->namelen > NFS3_MAXNAMLEN)
1007 server->namelen = NFS3_MAXNAMLEN;
1009 server->caps |= NFS_CAP_READDIRPLUS;
1011 if (server->namelen == 0 || server->namelen > NFS2_MAXNAMLEN)
1012 server->namelen = NFS2_MAXNAMLEN;
1016 error = ctx->nfs_mod->rpc_ops->getattr(server, ctx->mntfh,
1023 memcpy(&server->fsid, &fattr->fsid, sizeof(server->fsid));
1026 (unsigned long long) server->fsid.major,
1027 (unsigned long long) server->fsid.minor);
1029 nfs_server_insert_lists(server);
1030 server->mount_time = jiffies;
1032 return server;
1036 nfs_free_server(server);
1042 * Clone an NFS2, NFS3 or NFS4 server record
1049 struct nfs_server *server;
1053 server = nfs_alloc_server();
1054 if (!server)
1057 server->cred = get_cred(source->cred);
1065 server->nfs_client = source->nfs_client;
1066 server->destroy = source->destroy;
1067 refcount_inc(&server->nfs_client->cl_count);
1068 nfs_server_copy_userdata(server, source);
1070 server->fsid = fattr->fsid;
1072 error = nfs_init_server_rpcclient(server,
1078 /* probe the filesystem info for this server filesystem */
1079 error = nfs_probe_fsinfo(server, fh, fattr_fsinfo);
1083 if (server->namelen == 0 || server->namelen > NFS4_MAXNAMLEN)
1084 server->namelen = NFS4_MAXNAMLEN;
1086 error = nfs_start_lockd(server);
1090 nfs_server_insert_lists(server);
1091 server->mount_time = jiffies;
1094 return server;
1098 nfs_free_server(server);
1156 * set up the iterator to start reading from the server list and return the first item
1169 * move to next server
1261 struct nfs_server *server;
1274 server = list_entry(v, struct nfs_server, master_link);
1275 clp = server->nfs_client;
1278 MAJOR(server->s_dev), MINOR(server->s_dev));
1281 (unsigned long long) server->fsid.major,
1282 (unsigned long long) server->fsid.minor);
1291 nfs_server_fscache_state(server));