Lines Matching refs:clp

28 static int nfs_get_cb_ident_idr(struct nfs_client *clp, int minorversion)  in nfs_get_cb_ident_idr()  argument
31 struct nfs_net *nn = net_generic(clp->cl_net, nfs_net_id); in nfs_get_cb_ident_idr()
33 if (clp->rpc_ops->version != 4 || minorversion != 0) in nfs_get_cb_ident_idr()
37 ret = idr_alloc(&nn->cb_ident_idr, clp, 1, 0, GFP_NOWAIT); in nfs_get_cb_ident_idr()
39 clp->cl_cb_ident = ret; in nfs_get_cb_ident_idr()
152 nfs4_shutdown_ds_clients(struct nfs_client *clp) in nfs4_shutdown_ds_clients() argument
156 while (!list_empty(&clp->cl_ds_clients)) { in nfs4_shutdown_ds_clients()
157 dss = list_entry(clp->cl_ds_clients.next, in nfs4_shutdown_ds_clients()
166 nfs4_cleanup_callback(struct nfs_client *clp) in nfs4_cleanup_callback() argument
170 while (!list_empty(&clp->pending_cb_stateids)) { in nfs4_cleanup_callback()
171 cp_state = list_entry(clp->pending_cb_stateids.next, in nfs4_cleanup_callback()
178 void nfs41_shutdown_client(struct nfs_client *clp) in nfs41_shutdown_client() argument
180 if (nfs4_has_session(clp)) { in nfs41_shutdown_client()
181 nfs4_cleanup_callback(clp); in nfs41_shutdown_client()
182 nfs4_shutdown_ds_clients(clp); in nfs41_shutdown_client()
183 nfs4_destroy_session(clp->cl_session); in nfs41_shutdown_client()
184 nfs4_destroy_clientid(clp); in nfs41_shutdown_client()
190 void nfs40_shutdown_client(struct nfs_client *clp) in nfs40_shutdown_client() argument
192 if (clp->cl_slot_tbl) { in nfs40_shutdown_client()
193 nfs4_shutdown_slot_table(clp->cl_slot_tbl); in nfs40_shutdown_client()
194 kfree(clp->cl_slot_tbl); in nfs40_shutdown_client()
202 struct nfs_client *clp = nfs_alloc_client(cl_init); in nfs4_alloc_client() local
205 if (IS_ERR(clp)) in nfs4_alloc_client()
206 return clp; in nfs4_alloc_client()
208 err = nfs_get_cb_ident_idr(clp, cl_init->minorversion); in nfs4_alloc_client()
217 spin_lock_init(&clp->cl_lock); in nfs4_alloc_client()
218 INIT_DELAYED_WORK(&clp->cl_renewd, nfs4_renew_state); in nfs4_alloc_client()
219 INIT_LIST_HEAD(&clp->cl_ds_clients); in nfs4_alloc_client()
220 rpc_init_wait_queue(&clp->cl_rpcwaitq, "NFS client"); in nfs4_alloc_client()
221 clp->cl_state = 1 << NFS4CLNT_LEASE_EXPIRED; in nfs4_alloc_client()
222 clp->cl_mvops = nfs_v4_minor_ops[cl_init->minorversion]; in nfs4_alloc_client()
223 clp->cl_mig_gen = 1; in nfs4_alloc_client()
225 init_waitqueue_head(&clp->cl_lock_waitq); in nfs4_alloc_client()
227 INIT_LIST_HEAD(&clp->pending_cb_stateids); in nfs4_alloc_client()
230 __set_bit(NFS_CS_INFINITE_SLOTS, &clp->cl_flags); in nfs4_alloc_client()
231 __set_bit(NFS_CS_DISCRTRY, &clp->cl_flags); in nfs4_alloc_client()
232 __set_bit(NFS_CS_NO_RETRANS_TIMEOUT, &clp->cl_flags); in nfs4_alloc_client()
238 err = nfs_create_rpc_client(clp, cl_init, RPC_AUTH_GSS_KRB5I); in nfs4_alloc_client()
240 err = nfs_create_rpc_client(clp, cl_init, RPC_AUTH_UNIX); in nfs4_alloc_client()
249 err = rpc_localaddr(clp->cl_rpcclient, sap, sizeof(cb_addr)); in nfs4_alloc_client()
257 strscpy(clp->cl_ipaddr, ip_addr, sizeof(clp->cl_ipaddr)); in nfs4_alloc_client()
259 err = nfs_idmap_new(clp); in nfs4_alloc_client()
265 __set_bit(NFS_CS_IDMAP, &clp->cl_res_state); in nfs4_alloc_client()
266 return clp; in nfs4_alloc_client()
269 nfs_free_client(clp); in nfs4_alloc_client()
276 static void nfs4_destroy_callback(struct nfs_client *clp) in nfs4_destroy_callback() argument
278 if (__test_and_clear_bit(NFS_CS_CALLBACK, &clp->cl_res_state)) in nfs4_destroy_callback()
279 nfs_callback_down(clp->cl_mvops->minor_version, clp->cl_net); in nfs4_destroy_callback()
282 static void nfs4_shutdown_client(struct nfs_client *clp) in nfs4_shutdown_client() argument
284 if (__test_and_clear_bit(NFS_CS_RENEWD, &clp->cl_res_state)) in nfs4_shutdown_client()
285 nfs4_kill_renewd(clp); in nfs4_shutdown_client()
286 clp->cl_mvops->shutdown_client(clp); in nfs4_shutdown_client()
287 nfs4_destroy_callback(clp); in nfs4_shutdown_client()
288 if (__test_and_clear_bit(NFS_CS_IDMAP, &clp->cl_res_state)) in nfs4_shutdown_client()
289 nfs_idmap_delete(clp); in nfs4_shutdown_client()
291 rpc_destroy_wait_queue(&clp->cl_rpcwaitq); in nfs4_shutdown_client()
292 kfree(clp->cl_serverowner); in nfs4_shutdown_client()
293 kfree(clp->cl_serverscope); in nfs4_shutdown_client()
294 kfree(clp->cl_implid); in nfs4_shutdown_client()
295 kfree(clp->cl_owner_id); in nfs4_shutdown_client()
298 void nfs4_free_client(struct nfs_client *clp) in nfs4_free_client() argument
300 nfs4_shutdown_client(clp); in nfs4_free_client()
301 nfs_free_client(clp); in nfs4_free_client()
307 static int nfs4_init_callback(struct nfs_client *clp) in nfs4_init_callback() argument
312 xprt = rcu_dereference_raw(clp->cl_rpcclient->cl_xprt); in nfs4_init_callback()
314 if (nfs4_has_session(clp)) { in nfs4_init_callback()
320 error = nfs_callback_up(clp->cl_mvops->minor_version, xprt); in nfs4_init_callback()
326 __set_bit(NFS_CS_CALLBACK, &clp->cl_res_state); in nfs4_init_callback()
337 int nfs40_init_client(struct nfs_client *clp) in nfs40_init_client() argument
354 clp->cl_slot_tbl = tbl; in nfs40_init_client()
366 int nfs41_init_client(struct nfs_client *clp) in nfs41_init_client() argument
375 session = nfs4_alloc_session(clp); in nfs41_init_client()
379 clp->cl_session = session; in nfs41_init_client()
387 nfs_mark_client_ready(clp, NFS_CS_SESSION_INITING); in nfs41_init_client()
396 static int nfs4_init_client_minor_version(struct nfs_client *clp) in nfs4_init_client_minor_version() argument
400 ret = clp->cl_mvops->init_client(clp); in nfs4_init_client_minor_version()
403 return nfs4_init_callback(clp); in nfs4_init_client_minor_version()
406 static void nfs4_add_trunk(struct nfs_client *clp, struct nfs_client *old) in nfs4_add_trunk() argument
418 if (clp->cl_proto != old->cl_proto) in nfs4_add_trunk()
420 clp_salen = rpc_peeraddr(clp->cl_rpcclient, clp_sap, sizeof(clp_addr)); in nfs4_add_trunk()
441 struct nfs_client *nfs4_init_client(struct nfs_client *clp, in nfs4_init_client() argument
447 if (clp->cl_cons_state == NFS_CS_READY) in nfs4_init_client()
449 return clp; in nfs4_init_client()
451 error = nfs4_init_client_minor_version(clp); in nfs4_init_client()
455 error = nfs4_discover_server_trunking(clp, &old); in nfs4_init_client()
459 if (clp != old) { in nfs4_init_client()
460 clp->cl_preserve_clid = true; in nfs4_init_client()
466 nfs_mark_client_ready(clp, -EPERM); in nfs4_init_client()
468 nfs4_add_trunk(clp, old); in nfs4_init_client()
470 clear_bit(NFS_CS_TSM_POSSIBLE, &clp->cl_flags); in nfs4_init_client()
471 nfs_put_client(clp); in nfs4_init_client()
475 nfs_mark_client_ready(clp, error); in nfs4_init_client()
476 nfs_put_client(clp); in nfs4_init_client()
702 int nfs4_detect_session_trunking(struct nfs_client *clp, in nfs4_detect_session_trunking() argument
707 if (clp->cl_clientid != res->clientid) in nfs4_detect_session_trunking()
711 if (!nfs4_check_serverowner_major_id(clp->cl_serverowner, in nfs4_detect_session_trunking()
716 if (clp->cl_serverowner->minor_id != res->server_owner->minor_id) in nfs4_detect_session_trunking()
720 if (!nfs4_check_server_scope(clp->cl_serverscope, res->server_scope)) in nfs4_detect_session_trunking()
724 clp->cl_hostname, in nfs4_detect_session_trunking()
729 pr_info("NFS: %s: Session trunking failed for %s\n", clp->cl_hostname, in nfs4_detect_session_trunking()
809 struct nfs_client *clp; in nfs4_find_client_ident() local
813 clp = idr_find(&nn->cb_ident_idr, cb_ident); in nfs4_find_client_ident()
814 if (clp) in nfs4_find_client_ident()
815 refcount_inc(&clp->cl_count); in nfs4_find_client_ident()
817 return clp; in nfs4_find_client_ident()
823 struct nfs_client *clp, u32 minorversion) in nfs4_cb_match_client() argument
825 struct sockaddr *clap = (struct sockaddr *)&clp->cl_addr; in nfs4_cb_match_client()
828 if (!(clp->cl_cons_state == NFS_CS_READY || in nfs4_cb_match_client()
829 clp->cl_cons_state == NFS_CS_SESSION_INITING)) in nfs4_cb_match_client()
835 if (clp->rpc_ops->version != 4 || in nfs4_cb_match_client()
836 clp->cl_minorversion != minorversion) in nfs4_cb_match_client()
854 struct nfs_client *clp; in nfs4_find_client_sessionid() local
858 list_for_each_entry(clp, &nn->nfs_client_list, cl_share_link) { in nfs4_find_client_sessionid()
859 if (!nfs4_cb_match_client(addr, clp, minorversion)) in nfs4_find_client_sessionid()
862 if (!nfs4_has_session(clp)) in nfs4_find_client_sessionid()
866 if (memcmp(clp->cl_session->sess_id.data, in nfs4_find_client_sessionid()
870 refcount_inc(&clp->cl_count); in nfs4_find_client_sessionid()
872 return clp; in nfs4_find_client_sessionid()
913 struct nfs_client *clp; in nfs4_set_client() local
931 clp = nfs_get_client(&cl_init); in nfs4_set_client()
932 if (IS_ERR(clp)) in nfs4_set_client()
933 return PTR_ERR(clp); in nfs4_set_client()
935 if (server->nfs_client == clp) { in nfs4_set_client()
936 nfs_put_client(clp); in nfs4_set_client()
947 set_bit(NFS_CS_CHECK_LEASE_TIME, &clp->cl_res_state); in nfs4_set_client()
949 server->nfs_client = clp; in nfs4_set_client()
1309 struct nfs_client *clp = server->nfs_client; in nfs4_update_server() local
1312 .ident = clp->cl_proto, in nfs4_update_server()
1337 clp->cl_proto, clnt->cl_timeout, in nfs4_update_server()
1338 clp->cl_minorversion, in nfs4_update_server()
1339 clp->cl_nconnect, clp->cl_max_connect, net); in nfs4_update_server()
1345 nfs_put_client(clp); in nfs4_update_server()