Lines Matching refs:clp
92 static int nfs4_setup_state_renewal(struct nfs_client *clp) in nfs4_setup_state_renewal() argument
97 if (!test_bit(NFS_CS_CHECK_LEASE_TIME, &clp->cl_res_state)) { in nfs4_setup_state_renewal()
98 nfs4_schedule_state_renewal(clp); in nfs4_setup_state_renewal()
102 status = nfs4_proc_get_lease_time(clp, &fsinfo); in nfs4_setup_state_renewal()
104 nfs4_set_lease_period(clp, fsinfo.lease_time * HZ); in nfs4_setup_state_renewal()
105 nfs4_schedule_state_renewal(clp); in nfs4_setup_state_renewal()
111 int nfs4_init_clientid(struct nfs_client *clp, const struct cred *cred) in nfs4_init_clientid() argument
114 .clientid = clp->cl_clientid, in nfs4_init_clientid()
115 .confirm = clp->cl_confirm, in nfs4_init_clientid()
119 struct nfs_net *nn = net_generic(clp->cl_net, nfs_net_id); in nfs4_init_clientid()
121 if (test_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state)) in nfs4_init_clientid()
124 if (clp->cl_addr.ss_family == AF_INET6) in nfs4_init_clientid()
127 status = nfs4_proc_setclientid(clp, NFS4_CALLBACK, port, cred, &clid); in nfs4_init_clientid()
130 clp->cl_clientid = clid.clientid; in nfs4_init_clientid()
131 clp->cl_confirm = clid.confirm; in nfs4_init_clientid()
132 set_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_init_clientid()
134 status = nfs4_proc_setclientid_confirm(clp, &clid, cred); in nfs4_init_clientid()
137 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_init_clientid()
138 nfs4_setup_state_renewal(clp); in nfs4_init_clientid()
156 int nfs40_discover_server_trunking(struct nfs_client *clp, in nfs40_discover_server_trunking() argument
161 .clientid = clp->cl_clientid, in nfs40_discover_server_trunking()
162 .confirm = clp->cl_confirm, in nfs40_discover_server_trunking()
164 struct nfs_net *nn = net_generic(clp->cl_net, nfs_net_id); in nfs40_discover_server_trunking()
169 if (clp->cl_addr.ss_family == AF_INET6) in nfs40_discover_server_trunking()
172 status = nfs4_proc_setclientid(clp, NFS4_CALLBACK, port, cred, &clid); in nfs40_discover_server_trunking()
175 clp->cl_clientid = clid.clientid; in nfs40_discover_server_trunking()
176 clp->cl_confirm = clid.confirm; in nfs40_discover_server_trunking()
178 status = nfs40_walk_client_list(clp, result, cred); in nfs40_discover_server_trunking()
185 if (clp->cl_state) in nfs40_discover_server_trunking()
186 nfs4_schedule_state_manager(clp); in nfs40_discover_server_trunking()
192 const struct cred *nfs4_get_machine_cred(struct nfs_client *clp) in nfs4_get_machine_cred() argument
197 static void nfs4_root_machine_cred(struct nfs_client *clp) in nfs4_root_machine_cred() argument
201 clp->cl_principal = NULL; in nfs4_root_machine_cred()
202 clp->cl_rpcclient->cl_principal = NULL; in nfs4_root_machine_cred()
231 const struct cred *nfs4_get_renew_cred(struct nfs_client *clp) in nfs4_get_renew_cred() argument
237 cred = nfs4_get_machine_cred(clp); in nfs4_get_renew_cred()
241 spin_lock(&clp->cl_lock); in nfs4_get_renew_cred()
243 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_get_renew_cred()
249 spin_unlock(&clp->cl_lock); in nfs4_get_renew_cred()
264 static void nfs4_end_drain_session(struct nfs_client *clp) in nfs4_end_drain_session() argument
266 struct nfs4_session *ses = clp->cl_session; in nfs4_end_drain_session()
268 if (clp->cl_slot_tbl) { in nfs4_end_drain_session()
269 nfs4_end_drain_slot_table(clp->cl_slot_tbl); in nfs4_end_drain_session()
292 static int nfs4_begin_drain_session(struct nfs_client *clp) in nfs4_begin_drain_session() argument
294 struct nfs4_session *ses = clp->cl_session; in nfs4_begin_drain_session()
297 if (clp->cl_slot_tbl) in nfs4_begin_drain_session()
298 return nfs4_drain_slot_tbl(clp->cl_slot_tbl); in nfs4_begin_drain_session()
310 static void nfs41_finish_session_reset(struct nfs_client *clp) in nfs41_finish_session_reset() argument
312 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs41_finish_session_reset()
313 clear_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs41_finish_session_reset()
315 clear_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs41_finish_session_reset()
316 nfs4_setup_state_renewal(clp); in nfs41_finish_session_reset()
319 int nfs41_init_clientid(struct nfs_client *clp, const struct cred *cred) in nfs41_init_clientid() argument
323 if (test_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state)) in nfs41_init_clientid()
325 status = nfs4_proc_exchange_id(clp, cred); in nfs41_init_clientid()
328 set_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs41_init_clientid()
330 status = nfs4_proc_create_session(clp, cred); in nfs41_init_clientid()
333 nfs41_finish_session_reset(clp); in nfs41_init_clientid()
334 nfs_mark_client_ready(clp, NFS_CS_READY); in nfs41_init_clientid()
352 int nfs41_discover_server_trunking(struct nfs_client *clp, in nfs41_discover_server_trunking() argument
358 status = nfs4_proc_exchange_id(clp, cred); in nfs41_discover_server_trunking()
362 status = nfs41_walk_client_list(clp, result, cred); in nfs41_discover_server_trunking()
365 if (clp != *result) in nfs41_discover_server_trunking()
373 if (clp->cl_exchange_flags & EXCHGID4_FLAG_CONFIRMED_R) { in nfs41_discover_server_trunking()
374 if (!test_bit(NFS_CS_TSM_POSSIBLE, &clp->cl_flags)) in nfs41_discover_server_trunking()
375 set_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state); in nfs41_discover_server_trunking()
377 set_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs41_discover_server_trunking()
379 nfs4_schedule_state_manager(clp); in nfs41_discover_server_trunking()
380 status = nfs_wait_client_init_complete(clp); in nfs41_discover_server_trunking()
382 nfs_put_client(clp); in nfs41_discover_server_trunking()
394 const struct cred *nfs4_get_clid_cred(struct nfs_client *clp) in nfs4_get_clid_cred() argument
398 cred = nfs4_get_machine_cred(clp); in nfs4_get_clid_cred()
543 struct nfs_client *clp = server->nfs_client; in nfs4_gc_state_owners() local
548 spin_lock(&clp->cl_lock); in nfs4_gc_state_owners()
550 time_min = (long)time_max - (long)clp->cl_lease_time; in nfs4_gc_state_owners()
558 spin_unlock(&clp->cl_lock); in nfs4_gc_state_owners()
578 struct nfs_client *clp = server->nfs_client; in nfs4_get_state_owner() local
581 spin_lock(&clp->cl_lock); in nfs4_get_state_owner()
583 spin_unlock(&clp->cl_lock); in nfs4_get_state_owner()
589 spin_lock(&clp->cl_lock); in nfs4_get_state_owner()
591 spin_unlock(&clp->cl_lock); in nfs4_get_state_owner()
614 struct nfs_client *clp = server->nfs_client; in nfs4_put_state_owner() local
616 if (!atomic_dec_and_lock(&sp->so_count, &clp->cl_lock)) in nfs4_put_state_owner()
621 spin_unlock(&clp->cl_lock); in nfs4_put_state_owner()
637 struct nfs_client *clp = server->nfs_client; in nfs4_purge_state_owners() local
640 spin_lock(&clp->cl_lock); in nfs4_purge_state_owners()
645 spin_unlock(&clp->cl_lock); in nfs4_purge_state_owners()
949 struct nfs_client *clp = server->nfs_client; in nfs4_put_lock_state() local
951 clp->cl_mvops->free_lock_state(server, lsp); in nfs4_put_lock_state()
1195 static void nfs4_clear_state_manager_bit(struct nfs_client *clp) in nfs4_clear_state_manager_bit() argument
1198 clear_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state); in nfs4_clear_state_manager_bit()
1200 wake_up_bit(&clp->cl_state, NFS4CLNT_MANAGER_RUNNING); in nfs4_clear_state_manager_bit()
1201 rpc_wake_up(&clp->cl_rpcwaitq); in nfs4_clear_state_manager_bit()
1207 void nfs4_schedule_state_manager(struct nfs_client *clp) in nfs4_schedule_state_manager() argument
1212 set_bit(NFS4CLNT_RUN_MANAGER, &clp->cl_state); in nfs4_schedule_state_manager()
1213 if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0) in nfs4_schedule_state_manager()
1216 refcount_inc(&clp->cl_count); in nfs4_schedule_state_manager()
1223 rpc_peeraddr2str(clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_schedule_state_manager()
1225 task = kthread_run(nfs4_run_state_manager, clp, "%s", buf); in nfs4_schedule_state_manager()
1229 nfs4_clear_state_manager_bit(clp); in nfs4_schedule_state_manager()
1230 nfs_put_client(clp); in nfs4_schedule_state_manager()
1238 void nfs4_schedule_lease_recovery(struct nfs_client *clp) in nfs4_schedule_lease_recovery() argument
1240 if (!clp) in nfs4_schedule_lease_recovery()
1242 if (!test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) in nfs4_schedule_lease_recovery()
1243 set_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs4_schedule_lease_recovery()
1245 clp->cl_hostname); in nfs4_schedule_lease_recovery()
1246 nfs4_schedule_state_manager(clp); in nfs4_schedule_lease_recovery()
1260 struct nfs_client *clp = server->nfs_client; in nfs4_schedule_migration_recovery() local
1264 clp->cl_hostname); in nfs4_schedule_migration_recovery()
1275 clp->cl_hostname); in nfs4_schedule_migration_recovery()
1279 set_bit(NFS4CLNT_MOVED, &clp->cl_state); in nfs4_schedule_migration_recovery()
1281 nfs4_schedule_state_manager(clp); in nfs4_schedule_migration_recovery()
1292 void nfs4_schedule_lease_moved_recovery(struct nfs_client *clp) in nfs4_schedule_lease_moved_recovery() argument
1295 __func__, clp->cl_clientid, clp->cl_hostname); in nfs4_schedule_lease_moved_recovery()
1297 set_bit(NFS4CLNT_LEASE_MOVED, &clp->cl_state); in nfs4_schedule_lease_moved_recovery()
1298 nfs4_schedule_state_manager(clp); in nfs4_schedule_lease_moved_recovery()
1302 int nfs4_wait_clnt_recover(struct nfs_client *clp) in nfs4_wait_clnt_recover() argument
1308 refcount_inc(&clp->cl_count); in nfs4_wait_clnt_recover()
1309 res = wait_on_bit_action(&clp->cl_state, NFS4CLNT_MANAGER_RUNNING, in nfs4_wait_clnt_recover()
1313 if (clp->cl_cons_state < 0) in nfs4_wait_clnt_recover()
1314 res = clp->cl_cons_state; in nfs4_wait_clnt_recover()
1316 nfs_put_client(clp); in nfs4_wait_clnt_recover()
1320 int nfs4_client_recover_expired_lease(struct nfs_client *clp) in nfs4_client_recover_expired_lease() argument
1326 ret = nfs4_wait_clnt_recover(clp); in nfs4_client_recover_expired_lease()
1329 if (!test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) && in nfs4_client_recover_expired_lease()
1330 !test_bit(NFS4CLNT_CHECK_LEASE,&clp->cl_state)) in nfs4_client_recover_expired_lease()
1332 nfs4_schedule_state_manager(clp); in nfs4_client_recover_expired_lease()
1346 static void nfs40_handle_cb_pathdown(struct nfs_client *clp) in nfs40_handle_cb_pathdown() argument
1348 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs40_handle_cb_pathdown()
1349 nfs_expire_all_delegations(clp); in nfs40_handle_cb_pathdown()
1351 clp->cl_hostname); in nfs40_handle_cb_pathdown()
1354 void nfs4_schedule_path_down_recovery(struct nfs_client *clp) in nfs4_schedule_path_down_recovery() argument
1356 nfs40_handle_cb_pathdown(clp); in nfs4_schedule_path_down_recovery()
1357 nfs4_schedule_state_manager(clp); in nfs4_schedule_path_down_recovery()
1360 static int nfs4_state_mark_reclaim_reboot(struct nfs_client *clp, struct nfs4_state *state) in nfs4_state_mark_reclaim_reboot() argument
1372 set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); in nfs4_state_mark_reclaim_reboot()
1376 int nfs4_state_mark_reclaim_nograce(struct nfs_client *clp, struct nfs4_state *state) in nfs4_state_mark_reclaim_nograce() argument
1383 set_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state); in nfs4_state_mark_reclaim_nograce()
1389 struct nfs_client *clp = server->nfs_client; in nfs4_schedule_stateid_recovery() local
1391 if (!nfs4_state_mark_reclaim_nograce(clp, state)) in nfs4_schedule_stateid_recovery()
1396 clp->cl_hostname); in nfs4_schedule_stateid_recovery()
1397 nfs4_schedule_state_manager(clp); in nfs4_schedule_stateid_recovery()
1434 struct nfs_client *clp = NFS_SERVER(inode)->nfs_client; in nfs_inode_find_state_and_recover() local
1446 nfs4_state_mark_reclaim_nograce(clp, state)) { in nfs_inode_find_state_and_recover()
1452 nfs4_state_mark_reclaim_nograce(clp, state)) { in nfs_inode_find_state_and_recover()
1457 nfs4_state_mark_reclaim_nograce(clp, state)) in nfs_inode_find_state_and_recover()
1464 nfs4_schedule_state_manager(clp); in nfs_inode_find_state_and_recover()
1744 int (*mark_reclaim)(struct nfs_client *clp, struct nfs4_state *state)) in nfs4_reset_seqids() argument
1746 struct nfs_client *clp = server->nfs_client; in nfs4_reset_seqids() local
1751 spin_lock(&clp->cl_lock); in nfs4_reset_seqids()
1759 if (mark_reclaim(clp, state)) in nfs4_reset_seqids()
1764 spin_unlock(&clp->cl_lock); in nfs4_reset_seqids()
1767 static void nfs4_state_mark_reclaim_helper(struct nfs_client *clp, in nfs4_state_mark_reclaim_helper() argument
1768 int (*mark_reclaim)(struct nfs_client *clp, struct nfs4_state *state)) in nfs4_state_mark_reclaim_helper() argument
1773 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) in nfs4_state_mark_reclaim_helper()
1778 static void nfs4_state_start_reclaim_reboot(struct nfs_client *clp) in nfs4_state_start_reclaim_reboot() argument
1780 set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); in nfs4_state_start_reclaim_reboot()
1782 nfs_delegation_mark_reclaim(clp); in nfs4_state_start_reclaim_reboot()
1783 nfs4_state_mark_reclaim_helper(clp, nfs4_state_mark_reclaim_reboot); in nfs4_state_start_reclaim_reboot()
1786 static int nfs4_reclaim_complete(struct nfs_client *clp, in nfs4_reclaim_complete() argument
1792 return ops->reclaim_complete(clp, cred); in nfs4_reclaim_complete()
1798 struct nfs_client *clp = server->nfs_client; in nfs4_clear_reclaim_server() local
1803 spin_lock(&clp->cl_lock); in nfs4_clear_reclaim_server()
1813 nfs4_state_mark_reclaim_nograce(clp, state); in nfs4_clear_reclaim_server()
1817 spin_unlock(&clp->cl_lock); in nfs4_clear_reclaim_server()
1820 static int nfs4_state_clear_reclaim_reboot(struct nfs_client *clp) in nfs4_state_clear_reclaim_reboot() argument
1824 if (!test_and_clear_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state)) in nfs4_state_clear_reclaim_reboot()
1828 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) in nfs4_state_clear_reclaim_reboot()
1832 nfs_delegation_reap_unclaimed(clp); in nfs4_state_clear_reclaim_reboot()
1836 static void nfs4_state_end_reclaim_reboot(struct nfs_client *clp) in nfs4_state_end_reclaim_reboot() argument
1842 if (!nfs4_state_clear_reclaim_reboot(clp)) in nfs4_state_end_reclaim_reboot()
1844 ops = clp->cl_mvops->reboot_recovery_ops; in nfs4_state_end_reclaim_reboot()
1845 cred = nfs4_get_clid_cred(clp); in nfs4_state_end_reclaim_reboot()
1846 err = nfs4_reclaim_complete(clp, ops, cred); in nfs4_state_end_reclaim_reboot()
1849 set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); in nfs4_state_end_reclaim_reboot()
1852 static void nfs4_state_start_reclaim_nograce(struct nfs_client *clp) in nfs4_state_start_reclaim_nograce() argument
1854 nfs_mark_test_expired_all_delegations(clp); in nfs4_state_start_reclaim_nograce()
1855 nfs4_state_mark_reclaim_helper(clp, nfs4_state_mark_reclaim_nograce); in nfs4_state_start_reclaim_nograce()
1858 static int nfs4_recovery_handle_error(struct nfs_client *clp, int error) in nfs4_recovery_handle_error() argument
1864 nfs40_handle_cb_pathdown(clp); in nfs4_recovery_handle_error()
1867 nfs4_state_end_reclaim_reboot(clp); in nfs4_recovery_handle_error()
1870 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_recovery_handle_error()
1871 nfs4_state_start_reclaim_reboot(clp); in nfs4_recovery_handle_error()
1874 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_recovery_handle_error()
1875 nfs4_state_start_reclaim_nograce(clp); in nfs4_recovery_handle_error()
1883 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs4_recovery_handle_error()
1887 set_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_recovery_handle_error()
1891 __func__, error, clp->cl_hostname); in nfs4_recovery_handle_error()
1895 clp->cl_hostname); in nfs4_recovery_handle_error()
1899 static int nfs4_do_reclaim(struct nfs_client *clp, const struct nfs4_state_recovery_ops *ops) in nfs4_do_reclaim() argument
1909 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_do_reclaim()
1911 spin_lock(&clp->cl_lock); in nfs4_do_reclaim()
1922 spin_unlock(&clp->cl_lock); in nfs4_do_reclaim()
1929 status = nfs4_recovery_handle_error(clp, status); in nfs4_do_reclaim()
1936 spin_unlock(&clp->cl_lock); in nfs4_do_reclaim()
1943 static int nfs4_check_lease(struct nfs_client *clp) in nfs4_check_lease() argument
1947 clp->cl_mvops->state_renewal_ops; in nfs4_check_lease()
1951 if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) in nfs4_check_lease()
1953 cred = ops->get_state_renewal_cred(clp); in nfs4_check_lease()
1955 cred = nfs4_get_clid_cred(clp); in nfs4_check_lease()
1960 status = ops->renew_lease(clp, cred); in nfs4_check_lease()
1963 set_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs4_check_lease()
1967 return nfs4_recovery_handle_error(clp, status); in nfs4_check_lease()
1973 static int nfs4_handle_reclaim_lease_error(struct nfs_client *clp, int status) in nfs4_handle_reclaim_lease_error() argument
1977 if (test_and_set_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state)) in nfs4_handle_reclaim_lease_error()
1981 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
1984 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
1985 nfs4_state_start_reclaim_reboot(clp); in nfs4_handle_reclaim_lease_error()
1989 clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
1990 nfs_mark_client_ready(clp, -EPERM); in nfs4_handle_reclaim_lease_error()
1991 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
2000 if (clp->cl_cons_state == NFS_CS_SESSION_INITING) in nfs4_handle_reclaim_lease_error()
2001 nfs_mark_client_ready(clp, -EPROTONOSUPPORT); in nfs4_handle_reclaim_lease_error()
2003 __func__, -EPROTONOSUPPORT, clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
2009 status, clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
2012 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
2014 clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
2018 static int nfs4_establish_lease(struct nfs_client *clp) in nfs4_establish_lease() argument
2022 clp->cl_mvops->reboot_recovery_ops; in nfs4_establish_lease()
2025 status = nfs4_begin_drain_session(clp); in nfs4_establish_lease()
2028 cred = nfs4_get_clid_cred(clp); in nfs4_establish_lease()
2031 status = ops->establish_clid(clp, cred); in nfs4_establish_lease()
2035 pnfs_destroy_all_layouts(clp); in nfs4_establish_lease()
2043 static int nfs4_reclaim_lease(struct nfs_client *clp) in nfs4_reclaim_lease() argument
2047 status = nfs4_establish_lease(clp); in nfs4_reclaim_lease()
2049 return nfs4_handle_reclaim_lease_error(clp, status); in nfs4_reclaim_lease()
2050 if (test_and_clear_bit(NFS4CLNT_SERVER_SCOPE_MISMATCH, &clp->cl_state)) in nfs4_reclaim_lease()
2051 nfs4_state_start_reclaim_nograce(clp); in nfs4_reclaim_lease()
2052 if (!test_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state)) in nfs4_reclaim_lease()
2053 set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); in nfs4_reclaim_lease()
2054 clear_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs4_reclaim_lease()
2055 clear_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_reclaim_lease()
2059 static int nfs4_purge_lease(struct nfs_client *clp) in nfs4_purge_lease() argument
2063 status = nfs4_establish_lease(clp); in nfs4_purge_lease()
2065 return nfs4_handle_reclaim_lease_error(clp, status); in nfs4_purge_lease()
2066 clear_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state); in nfs4_purge_lease()
2067 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_purge_lease()
2068 nfs4_state_start_reclaim_nograce(clp); in nfs4_purge_lease()
2081 struct nfs_client *clp = server->nfs_client; in nfs4_try_migration() local
2090 clp->cl_hostname); in nfs4_try_migration()
2118 status = nfs4_begin_drain_session(clp); in nfs4_try_migration()
2140 clp->cl_hostname); in nfs4_try_migration()
2149 static int nfs4_handle_migration(struct nfs_client *clp) in nfs4_handle_migration() argument
2152 clp->cl_mvops->state_renewal_ops; in nfs4_handle_migration()
2157 clp->cl_hostname); in nfs4_handle_migration()
2159 cred = ops->get_state_renewal_cred(clp); in nfs4_handle_migration()
2163 clp->cl_mig_gen++; in nfs4_handle_migration()
2166 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_handle_migration()
2169 if (server->mig_gen == clp->cl_mig_gen) in nfs4_handle_migration()
2171 server->mig_gen = clp->cl_mig_gen; in nfs4_handle_migration()
2195 static int nfs4_handle_lease_moved(struct nfs_client *clp) in nfs4_handle_lease_moved() argument
2198 clp->cl_mvops->state_renewal_ops; in nfs4_handle_lease_moved()
2203 clp->cl_hostname); in nfs4_handle_lease_moved()
2205 cred = ops->get_state_renewal_cred(clp); in nfs4_handle_lease_moved()
2209 clp->cl_mig_gen++; in nfs4_handle_lease_moved()
2212 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_handle_lease_moved()
2216 if (server->mig_gen == clp->cl_mig_gen) in nfs4_handle_lease_moved()
2218 server->mig_gen = clp->cl_mig_gen; in nfs4_handle_lease_moved()
2250 int nfs4_discover_server_trunking(struct nfs_client *clp, in nfs4_discover_server_trunking() argument
2254 clp->cl_mvops->reboot_recovery_ops; in nfs4_discover_server_trunking()
2259 dprintk("NFS: %s: testing '%s'\n", __func__, clp->cl_hostname); in nfs4_discover_server_trunking()
2261 clnt = clp->cl_rpcclient; in nfs4_discover_server_trunking()
2267 cred = nfs4_get_clid_cred(clp); in nfs4_discover_server_trunking()
2271 status = ops->detect_trunking(clp, result, cred); in nfs4_discover_server_trunking()
2292 nfs4_root_machine_cred(clp); in nfs4_discover_server_trunking()
2314 clnt = xchg(&clp->cl_rpcclient, clnt); in nfs4_discover_server_trunking()
2316 clnt = clp->cl_rpcclient; in nfs4_discover_server_trunking()
2343 struct nfs_client *clp = session->clp; in nfs4_schedule_session_recovery() local
2347 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs4_schedule_session_recovery()
2350 set_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_schedule_session_recovery()
2352 nfs4_schedule_state_manager(clp); in nfs4_schedule_session_recovery()
2356 void nfs41_notify_server(struct nfs_client *clp) in nfs41_notify_server() argument
2359 set_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs41_notify_server()
2360 nfs4_schedule_state_manager(clp); in nfs41_notify_server()
2363 static void nfs4_reset_all_state(struct nfs_client *clp) in nfs4_reset_all_state() argument
2365 if (test_and_set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) == 0) { in nfs4_reset_all_state()
2366 set_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state); in nfs4_reset_all_state()
2367 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_reset_all_state()
2368 nfs4_state_start_reclaim_nograce(clp); in nfs4_reset_all_state()
2370 __func__, clp->cl_hostname); in nfs4_reset_all_state()
2371 nfs4_schedule_state_manager(clp); in nfs4_reset_all_state()
2375 static void nfs41_handle_server_reboot(struct nfs_client *clp) in nfs41_handle_server_reboot() argument
2377 if (test_and_set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) == 0) { in nfs41_handle_server_reboot()
2378 nfs4_state_start_reclaim_reboot(clp); in nfs41_handle_server_reboot()
2380 clp->cl_hostname); in nfs41_handle_server_reboot()
2381 nfs4_schedule_state_manager(clp); in nfs41_handle_server_reboot()
2385 static void nfs41_handle_all_state_revoked(struct nfs_client *clp) in nfs41_handle_all_state_revoked() argument
2387 nfs4_reset_all_state(clp); in nfs41_handle_all_state_revoked()
2388 dprintk("%s: state revoked on server %s\n", __func__, clp->cl_hostname); in nfs41_handle_all_state_revoked()
2391 static void nfs41_handle_some_state_revoked(struct nfs_client *clp) in nfs41_handle_some_state_revoked() argument
2393 nfs4_state_start_reclaim_nograce(clp); in nfs41_handle_some_state_revoked()
2394 nfs4_schedule_state_manager(clp); in nfs41_handle_some_state_revoked()
2396 dprintk("%s: state revoked on server %s\n", __func__, clp->cl_hostname); in nfs41_handle_some_state_revoked()
2399 static void nfs41_handle_recallable_state_revoked(struct nfs_client *clp) in nfs41_handle_recallable_state_revoked() argument
2402 pnfs_destroy_all_layouts(clp); in nfs41_handle_recallable_state_revoked()
2403 nfs_test_expired_all_delegations(clp); in nfs41_handle_recallable_state_revoked()
2405 clp->cl_hostname); in nfs41_handle_recallable_state_revoked()
2408 static void nfs41_handle_backchannel_fault(struct nfs_client *clp) in nfs41_handle_backchannel_fault() argument
2410 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs41_handle_backchannel_fault()
2411 nfs4_schedule_state_manager(clp); in nfs41_handle_backchannel_fault()
2414 clp->cl_hostname); in nfs41_handle_backchannel_fault()
2417 static void nfs41_handle_cb_path_down(struct nfs_client *clp) in nfs41_handle_cb_path_down() argument
2420 &clp->cl_state) == 0) in nfs41_handle_cb_path_down()
2421 nfs4_schedule_state_manager(clp); in nfs41_handle_cb_path_down()
2424 void nfs41_handle_sequence_flag_errors(struct nfs_client *clp, u32 flags, in nfs41_handle_sequence_flag_errors() argument
2431 __func__, clp->cl_hostname, clp->cl_clientid, flags); in nfs41_handle_sequence_flag_errors()
2442 nfs41_handle_server_reboot(clp); in nfs41_handle_sequence_flag_errors()
2444 nfs41_handle_all_state_revoked(clp); in nfs41_handle_sequence_flag_errors()
2447 nfs41_handle_some_state_revoked(clp); in nfs41_handle_sequence_flag_errors()
2449 nfs4_schedule_lease_moved_recovery(clp); in nfs41_handle_sequence_flag_errors()
2451 nfs41_handle_recallable_state_revoked(clp); in nfs41_handle_sequence_flag_errors()
2454 nfs41_handle_backchannel_fault(clp); in nfs41_handle_sequence_flag_errors()
2457 nfs41_handle_cb_path_down(clp); in nfs41_handle_sequence_flag_errors()
2460 static int nfs4_reset_session(struct nfs_client *clp) in nfs4_reset_session() argument
2465 if (!nfs4_has_session(clp)) in nfs4_reset_session()
2467 status = nfs4_begin_drain_session(clp); in nfs4_reset_session()
2470 cred = nfs4_get_clid_cred(clp); in nfs4_reset_session()
2471 status = nfs4_proc_destroy_session(clp->cl_session, cred); in nfs4_reset_session()
2479 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs4_reset_session()
2484 status = nfs4_recovery_handle_error(clp, status); in nfs4_reset_session()
2488 memset(clp->cl_session->sess_id.data, 0, NFS4_MAX_SESSIONID_LEN); in nfs4_reset_session()
2489 status = nfs4_proc_create_session(clp, cred); in nfs4_reset_session()
2492 __func__, status, clp->cl_hostname); in nfs4_reset_session()
2493 status = nfs4_handle_reclaim_lease_error(clp, status); in nfs4_reset_session()
2496 nfs41_finish_session_reset(clp); in nfs4_reset_session()
2498 __func__, clp->cl_hostname); in nfs4_reset_session()
2504 static int nfs4_bind_conn_to_session(struct nfs_client *clp) in nfs4_bind_conn_to_session() argument
2509 if (!nfs4_has_session(clp)) in nfs4_bind_conn_to_session()
2511 ret = nfs4_begin_drain_session(clp); in nfs4_bind_conn_to_session()
2514 cred = nfs4_get_clid_cred(clp); in nfs4_bind_conn_to_session()
2515 ret = nfs4_proc_bind_conn_to_session(clp, cred); in nfs4_bind_conn_to_session()
2517 clear_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_bind_conn_to_session()
2521 __func__, clp->cl_hostname); in nfs4_bind_conn_to_session()
2525 set_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_bind_conn_to_session()
2528 return nfs4_recovery_handle_error(clp, ret); in nfs4_bind_conn_to_session()
2533 static void nfs4_layoutreturn_any_run(struct nfs_client *clp) in nfs4_layoutreturn_any_run() argument
2537 if (test_and_clear_bit(NFS4CLNT_RECALL_ANY_LAYOUT_READ, &clp->cl_state)) in nfs4_layoutreturn_any_run()
2539 if (test_and_clear_bit(NFS4CLNT_RECALL_ANY_LAYOUT_RW, &clp->cl_state)) in nfs4_layoutreturn_any_run()
2543 pnfs_layout_return_unused_byclid(clp, iomode); in nfs4_layoutreturn_any_run()
2544 set_bit(NFS4CLNT_RUN_MANAGER, &clp->cl_state); in nfs4_layoutreturn_any_run()
2548 static int nfs4_reset_session(struct nfs_client *clp) { return 0; } in nfs4_reset_session() argument
2550 static int nfs4_bind_conn_to_session(struct nfs_client *clp) in nfs4_bind_conn_to_session() argument
2555 static void nfs4_layoutreturn_any_run(struct nfs_client *clp) in nfs4_layoutreturn_any_run() argument
2560 static void nfs4_state_manager(struct nfs_client *clp) in nfs4_state_manager() argument
2575 trace_nfs4_state_mgr(clp); in nfs4_state_manager()
2576 clear_bit(NFS4CLNT_RUN_MANAGER, &clp->cl_state); in nfs4_state_manager()
2577 if (test_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state)) { in nfs4_state_manager()
2579 status = nfs4_purge_lease(clp); in nfs4_state_manager()
2585 if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) { in nfs4_state_manager()
2588 status = nfs4_reclaim_lease(clp); in nfs4_state_manager()
2595 if (test_and_clear_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state)) { in nfs4_state_manager()
2597 status = nfs4_reset_session(clp); in nfs4_state_manager()
2598 if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) in nfs4_state_manager()
2606 &clp->cl_state)) { in nfs4_state_manager()
2608 status = nfs4_bind_conn_to_session(clp); in nfs4_state_manager()
2614 if (test_and_clear_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state)) { in nfs4_state_manager()
2616 status = nfs4_check_lease(clp); in nfs4_state_manager()
2622 if (test_and_clear_bit(NFS4CLNT_MOVED, &clp->cl_state)) { in nfs4_state_manager()
2624 status = nfs4_handle_migration(clp); in nfs4_state_manager()
2629 if (test_and_clear_bit(NFS4CLNT_LEASE_MOVED, &clp->cl_state)) { in nfs4_state_manager()
2631 status = nfs4_handle_lease_moved(clp); in nfs4_state_manager()
2637 if (test_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state)) { in nfs4_state_manager()
2639 status = nfs4_do_reclaim(clp, in nfs4_state_manager()
2640 clp->cl_mvops->reboot_recovery_ops); in nfs4_state_manager()
2645 nfs4_state_end_reclaim_reboot(clp); in nfs4_state_manager()
2650 if (test_and_clear_bit(NFS4CLNT_DELEGATION_EXPIRED, &clp->cl_state)) { in nfs4_state_manager()
2652 nfs_reap_expired_delegations(clp); in nfs4_state_manager()
2657 if (test_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state)) { in nfs4_state_manager()
2659 status = nfs4_do_reclaim(clp, in nfs4_state_manager()
2660 clp->cl_mvops->nograce_recovery_ops); in nfs4_state_manager()
2665 clear_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state); in nfs4_state_manager()
2669 nfs4_end_drain_session(clp); in nfs4_state_manager()
2670 nfs4_clear_state_manager_bit(clp); in nfs4_state_manager()
2672 if (!test_and_set_bit(NFS4CLNT_RECALL_RUNNING, &clp->cl_state)) { in nfs4_state_manager()
2673 if (test_and_clear_bit(NFS4CLNT_DELEGRETURN, &clp->cl_state)) { in nfs4_state_manager()
2674 nfs_client_return_marked_delegations(clp); in nfs4_state_manager()
2675 set_bit(NFS4CLNT_RUN_MANAGER, &clp->cl_state); in nfs4_state_manager()
2677 nfs4_layoutreturn_any_run(clp); in nfs4_state_manager()
2678 clear_bit(NFS4CLNT_RECALL_RUNNING, &clp->cl_state); in nfs4_state_manager()
2682 if (!test_bit(NFS4CLNT_RUN_MANAGER, &clp->cl_state)) in nfs4_state_manager()
2684 if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0) in nfs4_state_manager()
2687 } while (refcount_read(&clp->cl_count) > 1 && !signalled()); in nfs4_state_manager()
2693 trace_nfs4_state_mgr_failed(clp, section, status); in nfs4_state_manager()
2696 clp->cl_hostname, -status); in nfs4_state_manager()
2700 nfs4_end_drain_session(clp); in nfs4_state_manager()
2701 nfs4_clear_state_manager_bit(clp); in nfs4_state_manager()
2706 struct nfs_client *clp = ptr; in nfs4_run_state_manager() local
2709 nfs4_state_manager(clp); in nfs4_run_state_manager()
2710 nfs_put_client(clp); in nfs4_run_state_manager()