Lines Matching refs:clnt

78 static int	rpc_ping(struct rpc_clnt *clnt);
79 static int rpc_ping_noreply(struct rpc_clnt *clnt);
82 static void rpc_register_client(struct rpc_clnt *clnt) in rpc_register_client() argument
84 struct net *net = rpc_net_ns(clnt); in rpc_register_client()
88 list_add(&clnt->cl_clients, &sn->all_clients); in rpc_register_client()
92 static void rpc_unregister_client(struct rpc_clnt *clnt) in rpc_unregister_client() argument
94 struct net *net = rpc_net_ns(clnt); in rpc_unregister_client()
98 list_del(&clnt->cl_clients); in rpc_unregister_client()
102 static void __rpc_clnt_remove_pipedir(struct rpc_clnt *clnt) in __rpc_clnt_remove_pipedir() argument
104 rpc_remove_client_dir(clnt); in __rpc_clnt_remove_pipedir()
107 static void rpc_clnt_remove_pipedir(struct rpc_clnt *clnt) in rpc_clnt_remove_pipedir() argument
109 struct net *net = rpc_net_ns(clnt); in rpc_clnt_remove_pipedir()
114 __rpc_clnt_remove_pipedir(clnt); in rpc_clnt_remove_pipedir()
120 struct rpc_clnt *clnt) in rpc_setup_pipedir_sb() argument
123 const char *dir_name = clnt->cl_program->pipe_dir_name; in rpc_setup_pipedir_sb()
135 dentry = rpc_create_client_dir(dir, name, clnt); in rpc_setup_pipedir_sb()
150 rpc_setup_pipedir(struct super_block *pipefs_sb, struct rpc_clnt *clnt) in rpc_setup_pipedir() argument
154 if (clnt->cl_program->pipe_dir_name != NULL) { in rpc_setup_pipedir()
155 dentry = rpc_setup_pipedir_sb(pipefs_sb, clnt); in rpc_setup_pipedir()
162 static int rpc_clnt_skip_event(struct rpc_clnt *clnt, unsigned long event) in rpc_clnt_skip_event() argument
164 if (clnt->cl_program->pipe_dir_name == NULL) in rpc_clnt_skip_event()
169 if (clnt->cl_pipedir_objects.pdh_dentry != NULL) in rpc_clnt_skip_event()
171 if (refcount_read(&clnt->cl_count) == 0) in rpc_clnt_skip_event()
175 if (clnt->cl_pipedir_objects.pdh_dentry == NULL) in rpc_clnt_skip_event()
182 static int __rpc_clnt_handle_event(struct rpc_clnt *clnt, unsigned long event, in __rpc_clnt_handle_event() argument
189 dentry = rpc_setup_pipedir_sb(sb, clnt); in __rpc_clnt_handle_event()
196 __rpc_clnt_remove_pipedir(clnt); in __rpc_clnt_handle_event()
205 static int __rpc_pipefs_event(struct rpc_clnt *clnt, unsigned long event, in __rpc_pipefs_event() argument
210 for (;; clnt = clnt->cl_parent) { in __rpc_pipefs_event()
211 if (!rpc_clnt_skip_event(clnt, event)) in __rpc_pipefs_event()
212 error = __rpc_clnt_handle_event(clnt, event, sb); in __rpc_pipefs_event()
213 if (error || clnt == clnt->cl_parent) in __rpc_pipefs_event()
222 struct rpc_clnt *clnt; in rpc_get_client_for_event() local
225 list_for_each_entry(clnt, &sn->all_clients, cl_clients) { in rpc_get_client_for_event()
226 if (rpc_clnt_skip_event(clnt, event)) in rpc_get_client_for_event()
229 return clnt; in rpc_get_client_for_event()
239 struct rpc_clnt *clnt; in rpc_pipefs_event() local
242 while ((clnt = rpc_get_client_for_event(sb->s_fs_info, event))) { in rpc_pipefs_event()
243 error = __rpc_pipefs_event(clnt, event, sb); in rpc_pipefs_event()
265 static struct rpc_xprt *rpc_clnt_set_transport(struct rpc_clnt *clnt, in rpc_clnt_set_transport() argument
271 spin_lock(&clnt->cl_lock); in rpc_clnt_set_transport()
272 old = rcu_dereference_protected(clnt->cl_xprt, in rpc_clnt_set_transport()
273 lockdep_is_held(&clnt->cl_lock)); in rpc_clnt_set_transport()
276 clnt->cl_autobind = 1; in rpc_clnt_set_transport()
278 clnt->cl_timeout = timeout; in rpc_clnt_set_transport()
279 rcu_assign_pointer(clnt->cl_xprt, xprt); in rpc_clnt_set_transport()
280 spin_unlock(&clnt->cl_lock); in rpc_clnt_set_transport()
285 static void rpc_clnt_set_nodename(struct rpc_clnt *clnt, const char *nodename) in rpc_clnt_set_nodename() argument
287 clnt->cl_nodelen = strlcpy(clnt->cl_nodename, in rpc_clnt_set_nodename()
288 nodename, sizeof(clnt->cl_nodename)); in rpc_clnt_set_nodename()
291 static int rpc_client_register(struct rpc_clnt *clnt, in rpc_client_register() argument
300 struct net *net = rpc_net_ns(clnt); in rpc_client_register()
304 rpc_clnt_debugfs_register(clnt); in rpc_client_register()
308 err = rpc_setup_pipedir(pipefs_sb, clnt); in rpc_client_register()
313 rpc_register_client(clnt); in rpc_client_register()
317 auth = rpcauth_create(&auth_args, clnt); in rpc_client_register()
327 rpc_unregister_client(clnt); in rpc_client_register()
328 __rpc_clnt_remove_pipedir(clnt); in rpc_client_register()
332 rpc_sysfs_client_destroy(clnt); in rpc_client_register()
333 rpc_clnt_debugfs_unregister(clnt); in rpc_client_register()
344 static int rpc_alloc_clid(struct rpc_clnt *clnt) in rpc_alloc_clid() argument
351 clnt->cl_clid = clid; in rpc_alloc_clid()
355 static void rpc_free_clid(struct rpc_clnt *clnt) in rpc_free_clid() argument
357 ida_free(&rpc_clids, clnt->cl_clid); in rpc_free_clid()
367 struct rpc_clnt *clnt = NULL; in rpc_new_client() local
384 clnt = kzalloc(sizeof(*clnt), GFP_KERNEL); in rpc_new_client()
385 if (!clnt) in rpc_new_client()
387 clnt->cl_parent = parent ? : clnt; in rpc_new_client()
388 clnt->cl_xprtsec = args->xprtsec; in rpc_new_client()
390 err = rpc_alloc_clid(clnt); in rpc_new_client()
394 clnt->cl_cred = get_cred(args->cred); in rpc_new_client()
395 clnt->cl_procinfo = version->procs; in rpc_new_client()
396 clnt->cl_maxproc = version->nrprocs; in rpc_new_client()
397 clnt->cl_prog = args->prognumber ? : program->number; in rpc_new_client()
398 clnt->cl_vers = version->number; in rpc_new_client()
399 clnt->cl_stats = program->stats; in rpc_new_client()
400 clnt->cl_metrics = rpc_alloc_iostats(clnt); in rpc_new_client()
401 rpc_init_pipe_dir_head(&clnt->cl_pipedir_objects); in rpc_new_client()
403 if (clnt->cl_metrics == NULL) in rpc_new_client()
405 clnt->cl_program = program; in rpc_new_client()
406 INIT_LIST_HEAD(&clnt->cl_tasks); in rpc_new_client()
407 spin_lock_init(&clnt->cl_lock); in rpc_new_client()
411 memcpy(&clnt->cl_timeout_default, args->timeout, in rpc_new_client()
412 sizeof(clnt->cl_timeout_default)); in rpc_new_client()
413 timeout = &clnt->cl_timeout_default; in rpc_new_client()
416 rpc_clnt_set_transport(clnt, xprt, timeout); in rpc_new_client()
418 xprt_iter_init(&clnt->cl_xpi, xps); in rpc_new_client()
421 clnt->cl_rtt = &clnt->cl_rtt_default; in rpc_new_client()
422 rpc_init_rtt(&clnt->cl_rtt_default, clnt->cl_timeout->to_initval); in rpc_new_client()
424 refcount_set(&clnt->cl_count, 1); in rpc_new_client()
429 rpc_clnt_set_nodename(clnt, nodename); in rpc_new_client()
431 rpc_sysfs_client_setup(clnt, xps, rpc_net_ns(clnt)); in rpc_new_client()
432 err = rpc_client_register(clnt, args->authflavor, args->client_name); in rpc_new_client()
438 trace_rpc_clnt_new(clnt, xprt, args); in rpc_new_client()
439 return clnt; in rpc_new_client()
442 rpc_free_iostats(clnt->cl_metrics); in rpc_new_client()
444 put_cred(clnt->cl_cred); in rpc_new_client()
445 rpc_free_clid(clnt); in rpc_new_client()
447 kfree(clnt); in rpc_new_client()
460 struct rpc_clnt *clnt = NULL; in rpc_create_xprt() local
478 clnt = rpc_new_client(args, xps, xprt, NULL); in rpc_create_xprt()
479 if (IS_ERR(clnt)) in rpc_create_xprt()
480 return clnt; in rpc_create_xprt()
483 int err = rpc_ping(clnt); in rpc_create_xprt()
485 rpc_shutdown_client(clnt); in rpc_create_xprt()
489 int err = rpc_ping_noreply(clnt); in rpc_create_xprt()
491 rpc_shutdown_client(clnt); in rpc_create_xprt()
496 clnt->cl_softrtry = 1; in rpc_create_xprt()
498 clnt->cl_softrtry = 0; in rpc_create_xprt()
500 clnt->cl_softerr = 1; in rpc_create_xprt()
504 clnt->cl_autobind = 1; in rpc_create_xprt()
506 clnt->cl_noretranstimeo = 1; in rpc_create_xprt()
508 clnt->cl_discrtry = 1; in rpc_create_xprt()
510 clnt->cl_chatty = 1; in rpc_create_xprt()
512 return clnt; in rpc_create_xprt()
541 struct rpc_clnt *clnt; in rpc_create() local
612 clnt = rpc_create_xprt(args, xprt); in rpc_create()
613 if (IS_ERR(clnt) || args->nconnect <= 1) in rpc_create()
614 return clnt; in rpc_create()
617 if (rpc_clnt_add_xprt(clnt, &xprtargs, NULL, NULL) < 0) in rpc_create()
620 return clnt; in rpc_create()
630 struct rpc_clnt *clnt) in __rpc_clone_client() argument
639 xprt = xprt_get(rcu_dereference(clnt->cl_xprt)); in __rpc_clone_client()
640 xps = xprt_switch_get(rcu_dereference(clnt->cl_xpi.xpi_xpswitch)); in __rpc_clone_client()
648 args->nodename = clnt->cl_nodename; in __rpc_clone_client()
650 new = rpc_new_client(args, xps, xprt, clnt); in __rpc_clone_client()
656 new->cl_softrtry = clnt->cl_softrtry; in __rpc_clone_client()
657 new->cl_softerr = clnt->cl_softerr; in __rpc_clone_client()
658 new->cl_noretranstimeo = clnt->cl_noretranstimeo; in __rpc_clone_client()
659 new->cl_discrtry = clnt->cl_discrtry; in __rpc_clone_client()
660 new->cl_chatty = clnt->cl_chatty; in __rpc_clone_client()
661 new->cl_principal = clnt->cl_principal; in __rpc_clone_client()
662 new->cl_max_connect = clnt->cl_max_connect; in __rpc_clone_client()
666 trace_rpc_clnt_clone_err(clnt, err); in __rpc_clone_client()
677 struct rpc_clnt *rpc_clone_client(struct rpc_clnt *clnt) in rpc_clone_client() argument
680 .program = clnt->cl_program, in rpc_clone_client()
681 .prognumber = clnt->cl_prog, in rpc_clone_client()
682 .version = clnt->cl_vers, in rpc_clone_client()
683 .authflavor = clnt->cl_auth->au_flavor, in rpc_clone_client()
684 .cred = clnt->cl_cred, in rpc_clone_client()
686 return __rpc_clone_client(&args, clnt); in rpc_clone_client()
699 rpc_clone_client_set_auth(struct rpc_clnt *clnt, rpc_authflavor_t flavor) in rpc_clone_client_set_auth() argument
702 .program = clnt->cl_program, in rpc_clone_client_set_auth()
703 .prognumber = clnt->cl_prog, in rpc_clone_client_set_auth()
704 .version = clnt->cl_vers, in rpc_clone_client_set_auth()
706 .cred = clnt->cl_cred, in rpc_clone_client_set_auth()
708 return __rpc_clone_client(&args, clnt); in rpc_clone_client_set_auth()
727 int rpc_switch_client_transport(struct rpc_clnt *clnt, in rpc_switch_client_transport() argument
738 args->xprtsec = clnt->cl_xprtsec; in rpc_switch_client_transport()
749 pseudoflavor = clnt->cl_auth->au_flavor; in rpc_switch_client_transport()
751 old_timeo = clnt->cl_timeout; in rpc_switch_client_transport()
752 old = rpc_clnt_set_transport(clnt, xprt, timeout); in rpc_switch_client_transport()
753 oldxps = xprt_iter_xchg_switch(&clnt->cl_xpi, xps); in rpc_switch_client_transport()
755 rpc_unregister_client(clnt); in rpc_switch_client_transport()
756 __rpc_clnt_remove_pipedir(clnt); in rpc_switch_client_transport()
757 rpc_sysfs_client_destroy(clnt); in rpc_switch_client_transport()
758 rpc_clnt_debugfs_unregister(clnt); in rpc_switch_client_transport()
765 parent = clnt->cl_parent; in rpc_switch_client_transport()
766 clnt->cl_parent = clnt; in rpc_switch_client_transport()
773 err = rpc_client_register(clnt, pseudoflavor, NULL); in rpc_switch_client_transport()
778 if (parent != clnt) in rpc_switch_client_transport()
782 trace_rpc_clnt_replace_xprt(clnt); in rpc_switch_client_transport()
786 xps = xprt_iter_xchg_switch(&clnt->cl_xpi, oldxps); in rpc_switch_client_transport()
787 rpc_clnt_set_transport(clnt, old, old_timeo); in rpc_switch_client_transport()
788 clnt->cl_parent = parent; in rpc_switch_client_transport()
789 rpc_client_register(clnt, pseudoflavor, NULL); in rpc_switch_client_transport()
792 trace_rpc_clnt_replace_xprt_err(clnt); in rpc_switch_client_transport()
798 int _rpc_clnt_xprt_iter_init(struct rpc_clnt *clnt, struct rpc_xprt_iter *xpi, in _rpc_clnt_xprt_iter_init() argument
804 xps = xprt_switch_get(rcu_dereference(clnt->cl_xpi.xpi_xpswitch)); in _rpc_clnt_xprt_iter_init()
814 int rpc_clnt_xprt_iter_init(struct rpc_clnt *clnt, struct rpc_xprt_iter *xpi) in rpc_clnt_xprt_iter_init() argument
816 return _rpc_clnt_xprt_iter_init(clnt, xpi, xprt_iter_init_listall); in rpc_clnt_xprt_iter_init()
820 int rpc_clnt_xprt_iter_offline_init(struct rpc_clnt *clnt, in rpc_clnt_xprt_iter_offline_init() argument
823 return _rpc_clnt_xprt_iter_init(clnt, xpi, xprt_iter_init_listoffline); in rpc_clnt_xprt_iter_offline_init()
837 int rpc_clnt_iterate_for_each_xprt(struct rpc_clnt *clnt, in rpc_clnt_iterate_for_each_xprt() argument
844 ret = rpc_clnt_xprt_iter_init(clnt, &xpi); in rpc_clnt_iterate_for_each_xprt()
852 ret = fn(clnt, xprt, data); in rpc_clnt_iterate_for_each_xprt()
866 void rpc_killall_tasks(struct rpc_clnt *clnt) in rpc_killall_tasks() argument
871 if (list_empty(&clnt->cl_tasks)) in rpc_killall_tasks()
877 trace_rpc_clnt_killall(clnt); in rpc_killall_tasks()
878 spin_lock(&clnt->cl_lock); in rpc_killall_tasks()
879 list_for_each_entry(rovr, &clnt->cl_tasks, tk_task) in rpc_killall_tasks()
881 spin_unlock(&clnt->cl_lock); in rpc_killall_tasks()
895 unsigned long rpc_cancel_tasks(struct rpc_clnt *clnt, int error, in rpc_cancel_tasks() argument
903 if (list_empty(&clnt->cl_tasks)) in rpc_cancel_tasks()
908 spin_lock(&clnt->cl_lock); in rpc_cancel_tasks()
909 list_for_each_entry(task, &clnt->cl_tasks, tk_task) { in rpc_cancel_tasks()
917 spin_unlock(&clnt->cl_lock); in rpc_cancel_tasks()
922 static int rpc_clnt_disconnect_xprt(struct rpc_clnt *clnt, in rpc_clnt_disconnect_xprt() argument
930 void rpc_clnt_disconnect(struct rpc_clnt *clnt) in rpc_clnt_disconnect() argument
932 rpc_clnt_iterate_for_each_xprt(clnt, rpc_clnt_disconnect_xprt, NULL); in rpc_clnt_disconnect()
940 void rpc_shutdown_client(struct rpc_clnt *clnt) in rpc_shutdown_client() argument
944 trace_rpc_clnt_shutdown(clnt); in rpc_shutdown_client()
946 while (!list_empty(&clnt->cl_tasks)) { in rpc_shutdown_client()
947 rpc_killall_tasks(clnt); in rpc_shutdown_client()
949 list_empty(&clnt->cl_tasks), 1*HZ); in rpc_shutdown_client()
952 rpc_release_client(clnt); in rpc_shutdown_client()
961 struct rpc_clnt *clnt = container_of(work, struct rpc_clnt, cl_work); in rpc_free_client_work() local
963 trace_rpc_clnt_free(clnt); in rpc_free_client_work()
969 rpc_sysfs_client_destroy(clnt); in rpc_free_client_work()
970 rpc_clnt_debugfs_unregister(clnt); in rpc_free_client_work()
971 rpc_free_clid(clnt); in rpc_free_client_work()
972 rpc_clnt_remove_pipedir(clnt); in rpc_free_client_work()
973 xprt_put(rcu_dereference_raw(clnt->cl_xprt)); in rpc_free_client_work()
975 kfree(clnt); in rpc_free_client_work()
979 rpc_free_client(struct rpc_clnt *clnt) in rpc_free_client() argument
983 trace_rpc_clnt_release(clnt); in rpc_free_client()
984 if (clnt->cl_parent != clnt) in rpc_free_client()
985 parent = clnt->cl_parent; in rpc_free_client()
986 rpc_unregister_client(clnt); in rpc_free_client()
987 rpc_free_iostats(clnt->cl_metrics); in rpc_free_client()
988 clnt->cl_metrics = NULL; in rpc_free_client()
989 xprt_iter_destroy(&clnt->cl_xpi); in rpc_free_client()
990 put_cred(clnt->cl_cred); in rpc_free_client()
992 INIT_WORK(&clnt->cl_work, rpc_free_client_work); in rpc_free_client()
993 schedule_work(&clnt->cl_work); in rpc_free_client()
1001 rpc_free_auth(struct rpc_clnt *clnt) in rpc_free_auth() argument
1008 if (clnt->cl_auth != NULL) { in rpc_free_auth()
1009 rpcauth_release(clnt->cl_auth); in rpc_free_auth()
1010 clnt->cl_auth = NULL; in rpc_free_auth()
1012 if (refcount_dec_and_test(&clnt->cl_count)) in rpc_free_auth()
1013 return rpc_free_client(clnt); in rpc_free_auth()
1021 rpc_release_client(struct rpc_clnt *clnt) in rpc_release_client() argument
1024 if (list_empty(&clnt->cl_tasks)) in rpc_release_client()
1026 if (refcount_dec_not_one(&clnt->cl_count)) in rpc_release_client()
1028 clnt = rpc_free_auth(clnt); in rpc_release_client()
1029 } while (clnt != NULL); in rpc_release_client()
1054 struct rpc_clnt *clnt; in rpc_bind_new_program() local
1057 clnt = __rpc_clone_client(&args, old); in rpc_bind_new_program()
1058 if (IS_ERR(clnt)) in rpc_bind_new_program()
1060 err = rpc_ping(clnt); in rpc_bind_new_program()
1062 rpc_shutdown_client(clnt); in rpc_bind_new_program()
1063 clnt = ERR_PTR(err); in rpc_bind_new_program()
1066 return clnt; in rpc_bind_new_program()
1071 rpc_task_get_xprt(struct rpc_clnt *clnt, struct rpc_xprt *xprt) in rpc_task_get_xprt() argument
1078 xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch); in rpc_task_get_xprt()
1087 rpc_task_release_xprt(struct rpc_clnt *clnt, struct rpc_xprt *xprt) in rpc_task_release_xprt() argument
1093 xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch); in rpc_task_release_xprt()
1116 struct rpc_clnt *clnt = task->tk_client; in rpc_task_release_client() local
1119 if (clnt != NULL) { in rpc_task_release_client()
1121 spin_lock(&clnt->cl_lock); in rpc_task_release_client()
1123 spin_unlock(&clnt->cl_lock); in rpc_task_release_client()
1126 rpc_release_client(clnt); in rpc_task_release_client()
1131 rpc_task_get_first_xprt(struct rpc_clnt *clnt) in rpc_task_get_first_xprt() argument
1136 xprt = xprt_get(rcu_dereference(clnt->cl_xprt)); in rpc_task_get_first_xprt()
1138 return rpc_task_get_xprt(clnt, xprt); in rpc_task_get_first_xprt()
1142 rpc_task_get_next_xprt(struct rpc_clnt *clnt) in rpc_task_get_next_xprt() argument
1144 return rpc_task_get_xprt(clnt, xprt_iter_get_next(&clnt->cl_xpi)); in rpc_task_get_next_xprt()
1148 void rpc_task_set_transport(struct rpc_task *task, struct rpc_clnt *clnt) in rpc_task_set_transport() argument
1158 task->tk_xprt = rpc_task_get_first_xprt(clnt); in rpc_task_set_transport()
1160 task->tk_xprt = rpc_task_get_next_xprt(clnt); in rpc_task_set_transport()
1164 void rpc_task_set_client(struct rpc_task *task, struct rpc_clnt *clnt) in rpc_task_set_client() argument
1166 rpc_task_set_transport(task, clnt); in rpc_task_set_client()
1167 task->tk_client = clnt; in rpc_task_set_client()
1168 refcount_inc(&clnt->cl_count); in rpc_task_set_client()
1169 if (clnt->cl_softrtry) in rpc_task_set_client()
1171 if (clnt->cl_softerr) in rpc_task_set_client()
1173 if (clnt->cl_noretranstimeo) in rpc_task_set_client()
1176 spin_lock(&clnt->cl_lock); in rpc_task_set_client()
1177 list_add_tail(&task->tk_task, &clnt->cl_tasks); in rpc_task_set_client()
1178 spin_unlock(&clnt->cl_lock); in rpc_task_set_client()
1239 int rpc_call_sync(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags) in rpc_call_sync() argument
1243 .rpc_client = clnt, in rpc_call_sync()
1275 rpc_call_async(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags, in rpc_call_async() argument
1280 .rpc_client = clnt, in rpc_call_async()
1369 size_t rpc_peeraddr(struct rpc_clnt *clnt, struct sockaddr *buf, size_t bufsize) in rpc_peeraddr() argument
1375 xprt = rcu_dereference(clnt->cl_xprt); in rpc_peeraddr()
1396 const char *rpc_peeraddr2str(struct rpc_clnt *clnt, in rpc_peeraddr2str() argument
1401 xprt = rcu_dereference(clnt->cl_xprt); in rpc_peeraddr2str()
1534 int rpc_localaddr(struct rpc_clnt *clnt, struct sockaddr *buf, size_t buflen) in rpc_localaddr() argument
1544 xprt = rcu_dereference(clnt->cl_xprt); in rpc_localaddr()
1561 rpc_setbufsize(struct rpc_clnt *clnt, unsigned int sndsize, unsigned int rcvsize) in rpc_setbufsize() argument
1566 xprt = rcu_dereference(clnt->cl_xprt); in rpc_setbufsize()
1578 struct net *rpc_net_ns(struct rpc_clnt *clnt) in rpc_net_ns() argument
1583 ret = rcu_dereference(clnt->cl_xprt)->xprt_net; in rpc_net_ns()
1598 size_t rpc_max_payload(struct rpc_clnt *clnt) in rpc_max_payload() argument
1603 ret = rcu_dereference(clnt->cl_xprt)->max_payload; in rpc_max_payload()
1613 size_t rpc_max_bc_payload(struct rpc_clnt *clnt) in rpc_max_bc_payload() argument
1619 xprt = rcu_dereference(clnt->cl_xprt); in rpc_max_bc_payload()
1626 unsigned int rpc_num_bc_slots(struct rpc_clnt *clnt) in rpc_num_bc_slots() argument
1632 xprt = rcu_dereference(clnt->cl_xprt); in rpc_num_bc_slots()
1644 void rpc_force_rebind(struct rpc_clnt *clnt) in rpc_force_rebind() argument
1646 if (clnt->cl_autobind) { in rpc_force_rebind()
1648 xprt_clear_bound(rcu_dereference(clnt->cl_xprt)); in rpc_force_rebind()
1724 struct rpc_clnt *clnt = task->tk_client; in call_start() local
1735 if (clnt->cl_program->version[clnt->cl_vers]) in call_start()
1736 clnt->cl_program->version[clnt->cl_vers]->counts[idx]++; in call_start()
1737 clnt->cl_stats->rpccnt++; in call_start()
1739 rpc_task_set_transport(task, clnt); in call_start()
2152 struct rpc_clnt *clnt = task->tk_client; in call_connect_status() local
2163 clnt->cl_stats->netreconn++; in call_connect_status()
2177 if (clnt->cl_autobind) { in call_connect_status()
2178 rpc_force_rebind(clnt); in call_connect_status()
2207 xps = xprt_switch_get(rcu_dereference(clnt->cl_xpi.xpi_xpswitch)); in call_connect_status()
2422 struct rpc_clnt *clnt = task->tk_client; in call_status() local
2456 rpc_force_rebind(clnt); in call_status()
2473 if (clnt->cl_chatty) in call_status()
2475 clnt->cl_program->name, -status); in call_status()
2497 struct rpc_clnt *clnt = task->tk_client; in rpc_check_timeout() local
2523 if (clnt->cl_chatty) { in rpc_check_timeout()
2526 clnt->cl_program->name, in rpc_check_timeout()
2538 if (clnt->cl_chatty) { in rpc_check_timeout()
2541 clnt->cl_program->name, in rpc_check_timeout()
2545 rpc_force_rebind(clnt); in rpc_check_timeout()
2559 struct rpc_clnt *clnt = task->tk_client; in call_decode() local
2570 if (clnt->cl_chatty) { in call_decode()
2572 clnt->cl_program->name, in call_decode()
2628 struct rpc_clnt *clnt = task->tk_client; in rpc_encode_header() local
2640 *p++ = cpu_to_be32(clnt->cl_prog); in rpc_encode_header()
2641 *p++ = cpu_to_be32(clnt->cl_vers); in rpc_encode_header()
2657 struct rpc_clnt *clnt = task->tk_client; in rpc_decode_header() local
2710 clnt->cl_stats->rpcgarbage++; in rpc_decode_header()
2820 struct rpc_task *rpc_call_null_helper(struct rpc_clnt *clnt, in rpc_call_null_helper() argument
2828 .rpc_client = clnt, in rpc_call_null_helper()
2841 struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred, int flags) in rpc_call_null() argument
2843 return rpc_call_null_helper(clnt, NULL, cred, flags, NULL, NULL); in rpc_call_null()
2847 static int rpc_ping(struct rpc_clnt *clnt) in rpc_ping() argument
2852 if (clnt->cl_auth->au_ops->ping) in rpc_ping()
2853 return clnt->cl_auth->au_ops->ping(clnt); in rpc_ping()
2855 task = rpc_call_null_helper(clnt, NULL, NULL, 0, NULL, NULL); in rpc_ping()
2863 static int rpc_ping_noreply(struct rpc_clnt *clnt) in rpc_ping_noreply() argument
2869 .rpc_client = clnt, in rpc_ping_noreply()
2920 int rpc_clnt_test_and_add_xprt(struct rpc_clnt *clnt, in rpc_clnt_test_and_add_xprt() argument
2926 int max_connect = clnt->cl_max_connect; in rpc_clnt_test_and_add_xprt()
2934 rpc_peeraddr2str(clnt, RPC_DISPLAY_ADDR)); in rpc_clnt_test_and_add_xprt()
2949 task = rpc_call_null_helper(clnt, xprt, NULL, RPC_TASK_ASYNC, in rpc_clnt_test_and_add_xprt()
2961 static int rpc_clnt_add_xprt_helper(struct rpc_clnt *clnt, in rpc_clnt_add_xprt_helper() argument
2969 task = rpc_call_null_helper(clnt, xprt, NULL, 0, NULL, NULL); in rpc_clnt_add_xprt_helper()
2980 data->add_xprt_test(clnt, xprt, data->data); in rpc_clnt_add_xprt_helper()
3003 int rpc_clnt_setup_test_and_add_xprt(struct rpc_clnt *clnt, in rpc_clnt_setup_test_and_add_xprt() argument
3016 status = rpc_clnt_add_xprt_helper(clnt, xprt, data); in rpc_clnt_setup_test_and_add_xprt()
3046 int rpc_clnt_add_xprt(struct rpc_clnt *clnt, in rpc_clnt_add_xprt() argument
3062 xps = xprt_switch_get(rcu_dereference(clnt->cl_xpi.xpi_xpswitch)); in rpc_clnt_add_xprt()
3063 xprt = xprt_iter_xprt(&clnt->cl_xpi); in rpc_clnt_add_xprt()
3078 xprtargs->xprtsec = clnt->cl_xprtsec; in rpc_clnt_add_xprt()
3098 ret = setup(clnt, xps, xprt, data); in rpc_clnt_add_xprt()
3111 static int rpc_xprt_probe_trunked(struct rpc_clnt *clnt, in rpc_xprt_probe_trunked() argument
3122 main_xprt = xprt_get(rcu_dereference(clnt->cl_xprt)); in rpc_xprt_probe_trunked()
3123 xps = xprt_switch_get(rcu_dereference(clnt->cl_xpi.xpi_xpswitch)); in rpc_xprt_probe_trunked()
3131 status = rpc_clnt_add_xprt_helper(clnt, xprt, data); in rpc_xprt_probe_trunked()
3145 void rpc_clnt_probe_trunked_xprts(struct rpc_clnt *clnt, in rpc_clnt_probe_trunked_xprts() argument
3151 ret = rpc_clnt_xprt_iter_offline_init(clnt, &xpi); in rpc_clnt_probe_trunked_xprts()
3159 ret = rpc_xprt_probe_trunked(clnt, xprt, data); in rpc_clnt_probe_trunked_xprts()
3169 static int rpc_xprt_offline(struct rpc_clnt *clnt, in rpc_xprt_offline() argument
3180 main_xprt = xprt_get(rcu_dereference(clnt->cl_xprt)); in rpc_xprt_offline()
3181 xps = xprt_switch_get(rcu_dereference(clnt->cl_xpi.xpi_xpswitch)); in rpc_xprt_offline()
3209 void rpc_clnt_manage_trunked_xprts(struct rpc_clnt *clnt) in rpc_clnt_manage_trunked_xprts() argument
3211 rpc_clnt_iterate_for_each_xprt(clnt, rpc_xprt_offline, NULL); in rpc_clnt_manage_trunked_xprts()
3221 rpc_xprt_set_connect_timeout(struct rpc_clnt *clnt, in rpc_xprt_set_connect_timeout() argument
3235 rpc_set_connect_timeout(struct rpc_clnt *clnt, in rpc_set_connect_timeout() argument
3243 rpc_clnt_iterate_for_each_xprt(clnt, in rpc_set_connect_timeout()
3249 void rpc_clnt_xprt_switch_put(struct rpc_clnt *clnt) in rpc_clnt_xprt_switch_put() argument
3252 xprt_switch_put(rcu_dereference(clnt->cl_xpi.xpi_xpswitch)); in rpc_clnt_xprt_switch_put()
3257 void rpc_clnt_xprt_set_online(struct rpc_clnt *clnt, struct rpc_xprt *xprt) in rpc_clnt_xprt_set_online() argument
3262 xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch); in rpc_clnt_xprt_set_online()
3267 void rpc_clnt_xprt_switch_add_xprt(struct rpc_clnt *clnt, struct rpc_xprt *xprt) in rpc_clnt_xprt_switch_add_xprt() argument
3269 if (rpc_clnt_xprt_switch_has_addr(clnt, in rpc_clnt_xprt_switch_add_xprt()
3271 return rpc_clnt_xprt_set_online(clnt, xprt); in rpc_clnt_xprt_switch_add_xprt()
3274 rpc_xprt_switch_add_xprt(rcu_dereference(clnt->cl_xpi.xpi_xpswitch), in rpc_clnt_xprt_switch_add_xprt()
3280 void rpc_clnt_xprt_switch_remove_xprt(struct rpc_clnt *clnt, struct rpc_xprt *xprt) in rpc_clnt_xprt_switch_remove_xprt() argument
3285 xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch); in rpc_clnt_xprt_switch_remove_xprt()
3286 rpc_xprt_switch_remove_xprt(rcu_dereference(clnt->cl_xpi.xpi_xpswitch), in rpc_clnt_xprt_switch_remove_xprt()
3293 bool rpc_clnt_xprt_switch_has_addr(struct rpc_clnt *clnt, in rpc_clnt_xprt_switch_has_addr() argument
3300 xps = rcu_dereference(clnt->cl_xpi.xpi_xpswitch); in rpc_clnt_xprt_switch_has_addr()
3314 static void rpc_show_task(const struct rpc_clnt *clnt, in rpc_show_task() argument
3324 clnt, task->tk_rqstp, rpc_task_timeout(task), task->tk_ops, in rpc_show_task()
3325 clnt->cl_program->name, clnt->cl_vers, rpc_proc_name(task), in rpc_show_task()
3331 struct rpc_clnt *clnt; in rpc_show_tasks() local
3337 list_for_each_entry(clnt, &sn->all_clients, cl_clients) { in rpc_show_tasks()
3338 spin_lock(&clnt->cl_lock); in rpc_show_tasks()
3339 list_for_each_entry(task, &clnt->cl_tasks, tk_task) { in rpc_show_tasks()
3344 rpc_show_task(clnt, task); in rpc_show_tasks()
3346 spin_unlock(&clnt->cl_lock); in rpc_show_tasks()
3354 rpc_clnt_swap_activate_callback(struct rpc_clnt *clnt, in rpc_clnt_swap_activate_callback() argument
3362 rpc_clnt_swap_activate(struct rpc_clnt *clnt) in rpc_clnt_swap_activate() argument
3364 while (clnt != clnt->cl_parent) in rpc_clnt_swap_activate()
3365 clnt = clnt->cl_parent; in rpc_clnt_swap_activate()
3366 if (atomic_inc_return(&clnt->cl_swapper) == 1) in rpc_clnt_swap_activate()
3367 return rpc_clnt_iterate_for_each_xprt(clnt, in rpc_clnt_swap_activate()
3374 rpc_clnt_swap_deactivate_callback(struct rpc_clnt *clnt, in rpc_clnt_swap_deactivate_callback() argument
3383 rpc_clnt_swap_deactivate(struct rpc_clnt *clnt) in rpc_clnt_swap_deactivate() argument
3385 while (clnt != clnt->cl_parent) in rpc_clnt_swap_deactivate()
3386 clnt = clnt->cl_parent; in rpc_clnt_swap_deactivate()
3387 if (atomic_dec_if_positive(&clnt->cl_swapper) == 0) in rpc_clnt_swap_deactivate()
3388 rpc_clnt_iterate_for_each_xprt(clnt, in rpc_clnt_swap_deactivate()