• Home
  • Raw
  • Download

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 if (!nfs_client_init_is_complete(clp)) in nfs4_schedule_state_manager()
1230 nfs_mark_client_ready(clp, PTR_ERR(task)); in nfs4_schedule_state_manager()
1231 nfs4_clear_state_manager_bit(clp); in nfs4_schedule_state_manager()
1232 nfs_put_client(clp); in nfs4_schedule_state_manager()
1240 void nfs4_schedule_lease_recovery(struct nfs_client *clp) in nfs4_schedule_lease_recovery() argument
1242 if (!clp) in nfs4_schedule_lease_recovery()
1244 if (!test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) in nfs4_schedule_lease_recovery()
1245 set_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs4_schedule_lease_recovery()
1247 clp->cl_hostname); in nfs4_schedule_lease_recovery()
1248 nfs4_schedule_state_manager(clp); in nfs4_schedule_lease_recovery()
1262 struct nfs_client *clp = server->nfs_client; in nfs4_schedule_migration_recovery() local
1266 clp->cl_hostname); in nfs4_schedule_migration_recovery()
1277 clp->cl_hostname); in nfs4_schedule_migration_recovery()
1281 set_bit(NFS4CLNT_MOVED, &clp->cl_state); in nfs4_schedule_migration_recovery()
1283 nfs4_schedule_state_manager(clp); in nfs4_schedule_migration_recovery()
1294 void nfs4_schedule_lease_moved_recovery(struct nfs_client *clp) in nfs4_schedule_lease_moved_recovery() argument
1297 __func__, clp->cl_clientid, clp->cl_hostname); in nfs4_schedule_lease_moved_recovery()
1299 set_bit(NFS4CLNT_LEASE_MOVED, &clp->cl_state); in nfs4_schedule_lease_moved_recovery()
1300 nfs4_schedule_state_manager(clp); in nfs4_schedule_lease_moved_recovery()
1304 int nfs4_wait_clnt_recover(struct nfs_client *clp) in nfs4_wait_clnt_recover() argument
1310 refcount_inc(&clp->cl_count); in nfs4_wait_clnt_recover()
1311 res = wait_on_bit_action(&clp->cl_state, NFS4CLNT_MANAGER_RUNNING, in nfs4_wait_clnt_recover()
1315 if (clp->cl_cons_state < 0) in nfs4_wait_clnt_recover()
1316 res = clp->cl_cons_state; in nfs4_wait_clnt_recover()
1318 nfs_put_client(clp); in nfs4_wait_clnt_recover()
1322 int nfs4_client_recover_expired_lease(struct nfs_client *clp) in nfs4_client_recover_expired_lease() argument
1328 ret = nfs4_wait_clnt_recover(clp); in nfs4_client_recover_expired_lease()
1331 if (!test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) && in nfs4_client_recover_expired_lease()
1332 !test_bit(NFS4CLNT_CHECK_LEASE,&clp->cl_state)) in nfs4_client_recover_expired_lease()
1334 nfs4_schedule_state_manager(clp); in nfs4_client_recover_expired_lease()
1348 static void nfs40_handle_cb_pathdown(struct nfs_client *clp) in nfs40_handle_cb_pathdown() argument
1350 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs40_handle_cb_pathdown()
1351 nfs_expire_all_delegations(clp); in nfs40_handle_cb_pathdown()
1353 clp->cl_hostname); in nfs40_handle_cb_pathdown()
1356 void nfs4_schedule_path_down_recovery(struct nfs_client *clp) in nfs4_schedule_path_down_recovery() argument
1358 nfs40_handle_cb_pathdown(clp); in nfs4_schedule_path_down_recovery()
1359 nfs4_schedule_state_manager(clp); in nfs4_schedule_path_down_recovery()
1362 static int nfs4_state_mark_reclaim_reboot(struct nfs_client *clp, struct nfs4_state *state) in nfs4_state_mark_reclaim_reboot() argument
1374 set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); in nfs4_state_mark_reclaim_reboot()
1378 int nfs4_state_mark_reclaim_nograce(struct nfs_client *clp, struct nfs4_state *state) in nfs4_state_mark_reclaim_nograce() argument
1385 set_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state); in nfs4_state_mark_reclaim_nograce()
1391 struct nfs_client *clp = server->nfs_client; in nfs4_schedule_stateid_recovery() local
1393 if (!nfs4_state_mark_reclaim_nograce(clp, state)) in nfs4_schedule_stateid_recovery()
1398 clp->cl_hostname); in nfs4_schedule_stateid_recovery()
1399 nfs4_schedule_state_manager(clp); in nfs4_schedule_stateid_recovery()
1436 struct nfs_client *clp = NFS_SERVER(inode)->nfs_client; in nfs_inode_find_state_and_recover() local
1448 nfs4_state_mark_reclaim_nograce(clp, state)) { in nfs_inode_find_state_and_recover()
1454 nfs4_state_mark_reclaim_nograce(clp, state)) { in nfs_inode_find_state_and_recover()
1459 nfs4_state_mark_reclaim_nograce(clp, state)) in nfs_inode_find_state_and_recover()
1466 nfs4_schedule_state_manager(clp); in nfs_inode_find_state_and_recover()
1746 int (*mark_reclaim)(struct nfs_client *clp, struct nfs4_state *state)) in nfs4_reset_seqids() argument
1748 struct nfs_client *clp = server->nfs_client; in nfs4_reset_seqids() local
1753 spin_lock(&clp->cl_lock); in nfs4_reset_seqids()
1761 if (mark_reclaim(clp, state)) in nfs4_reset_seqids()
1766 spin_unlock(&clp->cl_lock); in nfs4_reset_seqids()
1769 static void nfs4_state_mark_reclaim_helper(struct nfs_client *clp, in nfs4_state_mark_reclaim_helper() argument
1770 int (*mark_reclaim)(struct nfs_client *clp, struct nfs4_state *state)) in nfs4_state_mark_reclaim_helper() argument
1775 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) in nfs4_state_mark_reclaim_helper()
1780 static void nfs4_state_start_reclaim_reboot(struct nfs_client *clp) in nfs4_state_start_reclaim_reboot() argument
1782 set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); in nfs4_state_start_reclaim_reboot()
1784 nfs_delegation_mark_reclaim(clp); in nfs4_state_start_reclaim_reboot()
1785 nfs4_state_mark_reclaim_helper(clp, nfs4_state_mark_reclaim_reboot); in nfs4_state_start_reclaim_reboot()
1788 static int nfs4_reclaim_complete(struct nfs_client *clp, in nfs4_reclaim_complete() argument
1794 return ops->reclaim_complete(clp, cred); in nfs4_reclaim_complete()
1800 struct nfs_client *clp = server->nfs_client; in nfs4_clear_reclaim_server() local
1805 spin_lock(&clp->cl_lock); in nfs4_clear_reclaim_server()
1815 nfs4_state_mark_reclaim_nograce(clp, state); in nfs4_clear_reclaim_server()
1819 spin_unlock(&clp->cl_lock); in nfs4_clear_reclaim_server()
1822 static int nfs4_state_clear_reclaim_reboot(struct nfs_client *clp) in nfs4_state_clear_reclaim_reboot() argument
1826 if (!test_and_clear_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state)) in nfs4_state_clear_reclaim_reboot()
1830 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) in nfs4_state_clear_reclaim_reboot()
1834 nfs_delegation_reap_unclaimed(clp); in nfs4_state_clear_reclaim_reboot()
1838 static void nfs4_state_end_reclaim_reboot(struct nfs_client *clp) in nfs4_state_end_reclaim_reboot() argument
1844 if (!nfs4_state_clear_reclaim_reboot(clp)) in nfs4_state_end_reclaim_reboot()
1846 ops = clp->cl_mvops->reboot_recovery_ops; in nfs4_state_end_reclaim_reboot()
1847 cred = nfs4_get_clid_cred(clp); in nfs4_state_end_reclaim_reboot()
1848 err = nfs4_reclaim_complete(clp, ops, cred); in nfs4_state_end_reclaim_reboot()
1851 set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); in nfs4_state_end_reclaim_reboot()
1854 static void nfs4_state_start_reclaim_nograce(struct nfs_client *clp) in nfs4_state_start_reclaim_nograce() argument
1856 nfs_mark_test_expired_all_delegations(clp); in nfs4_state_start_reclaim_nograce()
1857 nfs4_state_mark_reclaim_helper(clp, nfs4_state_mark_reclaim_nograce); in nfs4_state_start_reclaim_nograce()
1860 static int nfs4_recovery_handle_error(struct nfs_client *clp, int error) in nfs4_recovery_handle_error() argument
1866 nfs40_handle_cb_pathdown(clp); in nfs4_recovery_handle_error()
1869 nfs4_state_end_reclaim_reboot(clp); in nfs4_recovery_handle_error()
1872 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_recovery_handle_error()
1873 nfs4_state_start_reclaim_reboot(clp); in nfs4_recovery_handle_error()
1876 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_recovery_handle_error()
1877 nfs4_state_start_reclaim_nograce(clp); in nfs4_recovery_handle_error()
1885 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs4_recovery_handle_error()
1889 set_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_recovery_handle_error()
1893 __func__, error, clp->cl_hostname); in nfs4_recovery_handle_error()
1897 clp->cl_hostname); in nfs4_recovery_handle_error()
1901 static int nfs4_do_reclaim(struct nfs_client *clp, const struct nfs4_state_recovery_ops *ops) in nfs4_do_reclaim() argument
1911 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_do_reclaim()
1913 spin_lock(&clp->cl_lock); in nfs4_do_reclaim()
1924 spin_unlock(&clp->cl_lock); in nfs4_do_reclaim()
1931 status = nfs4_recovery_handle_error(clp, status); in nfs4_do_reclaim()
1938 spin_unlock(&clp->cl_lock); in nfs4_do_reclaim()
1945 static int nfs4_check_lease(struct nfs_client *clp) in nfs4_check_lease() argument
1949 clp->cl_mvops->state_renewal_ops; in nfs4_check_lease()
1953 if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) in nfs4_check_lease()
1955 cred = ops->get_state_renewal_cred(clp); in nfs4_check_lease()
1957 cred = nfs4_get_clid_cred(clp); in nfs4_check_lease()
1962 status = ops->renew_lease(clp, cred); in nfs4_check_lease()
1965 set_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs4_check_lease()
1969 return nfs4_recovery_handle_error(clp, status); in nfs4_check_lease()
1975 static int nfs4_handle_reclaim_lease_error(struct nfs_client *clp, int status) in nfs4_handle_reclaim_lease_error() argument
1979 if (test_and_set_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state)) in nfs4_handle_reclaim_lease_error()
1983 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
1986 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
1987 nfs4_state_start_reclaim_reboot(clp); in nfs4_handle_reclaim_lease_error()
1991 clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
1992 nfs_mark_client_ready(clp, -EPERM); in nfs4_handle_reclaim_lease_error()
1993 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
2002 if (clp->cl_cons_state == NFS_CS_SESSION_INITING) in nfs4_handle_reclaim_lease_error()
2003 nfs_mark_client_ready(clp, -EPROTONOSUPPORT); in nfs4_handle_reclaim_lease_error()
2005 __func__, -EPROTONOSUPPORT, clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
2011 status, clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
2014 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
2016 clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
2020 static int nfs4_establish_lease(struct nfs_client *clp) in nfs4_establish_lease() argument
2024 clp->cl_mvops->reboot_recovery_ops; in nfs4_establish_lease()
2027 status = nfs4_begin_drain_session(clp); in nfs4_establish_lease()
2030 cred = nfs4_get_clid_cred(clp); in nfs4_establish_lease()
2033 status = ops->establish_clid(clp, cred); in nfs4_establish_lease()
2037 pnfs_destroy_all_layouts(clp); in nfs4_establish_lease()
2045 static int nfs4_reclaim_lease(struct nfs_client *clp) in nfs4_reclaim_lease() argument
2049 status = nfs4_establish_lease(clp); in nfs4_reclaim_lease()
2051 return nfs4_handle_reclaim_lease_error(clp, status); in nfs4_reclaim_lease()
2052 if (test_and_clear_bit(NFS4CLNT_SERVER_SCOPE_MISMATCH, &clp->cl_state)) in nfs4_reclaim_lease()
2053 nfs4_state_start_reclaim_nograce(clp); in nfs4_reclaim_lease()
2054 if (!test_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state)) in nfs4_reclaim_lease()
2055 set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); in nfs4_reclaim_lease()
2056 clear_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs4_reclaim_lease()
2057 clear_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_reclaim_lease()
2061 static int nfs4_purge_lease(struct nfs_client *clp) in nfs4_purge_lease() argument
2065 status = nfs4_establish_lease(clp); in nfs4_purge_lease()
2067 return nfs4_handle_reclaim_lease_error(clp, status); in nfs4_purge_lease()
2068 clear_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state); in nfs4_purge_lease()
2069 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_purge_lease()
2070 nfs4_state_start_reclaim_nograce(clp); in nfs4_purge_lease()
2083 struct nfs_client *clp = server->nfs_client; in nfs4_try_migration() local
2092 clp->cl_hostname); in nfs4_try_migration()
2120 status = nfs4_begin_drain_session(clp); in nfs4_try_migration()
2142 clp->cl_hostname); in nfs4_try_migration()
2151 static int nfs4_handle_migration(struct nfs_client *clp) in nfs4_handle_migration() argument
2154 clp->cl_mvops->state_renewal_ops; in nfs4_handle_migration()
2159 clp->cl_hostname); in nfs4_handle_migration()
2161 cred = ops->get_state_renewal_cred(clp); in nfs4_handle_migration()
2165 clp->cl_mig_gen++; in nfs4_handle_migration()
2168 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_handle_migration()
2171 if (server->mig_gen == clp->cl_mig_gen) in nfs4_handle_migration()
2173 server->mig_gen = clp->cl_mig_gen; in nfs4_handle_migration()
2197 static int nfs4_handle_lease_moved(struct nfs_client *clp) in nfs4_handle_lease_moved() argument
2200 clp->cl_mvops->state_renewal_ops; in nfs4_handle_lease_moved()
2205 clp->cl_hostname); in nfs4_handle_lease_moved()
2207 cred = ops->get_state_renewal_cred(clp); in nfs4_handle_lease_moved()
2211 clp->cl_mig_gen++; in nfs4_handle_lease_moved()
2214 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_handle_lease_moved()
2218 if (server->mig_gen == clp->cl_mig_gen) in nfs4_handle_lease_moved()
2220 server->mig_gen = clp->cl_mig_gen; in nfs4_handle_lease_moved()
2252 int nfs4_discover_server_trunking(struct nfs_client *clp, in nfs4_discover_server_trunking() argument
2256 clp->cl_mvops->reboot_recovery_ops; in nfs4_discover_server_trunking()
2261 dprintk("NFS: %s: testing '%s'\n", __func__, clp->cl_hostname); in nfs4_discover_server_trunking()
2263 clnt = clp->cl_rpcclient; in nfs4_discover_server_trunking()
2269 cred = nfs4_get_clid_cred(clp); in nfs4_discover_server_trunking()
2273 status = ops->detect_trunking(clp, result, cred); in nfs4_discover_server_trunking()
2294 nfs4_root_machine_cred(clp); in nfs4_discover_server_trunking()
2316 clnt = xchg(&clp->cl_rpcclient, clnt); in nfs4_discover_server_trunking()
2318 clnt = clp->cl_rpcclient; in nfs4_discover_server_trunking()
2345 struct nfs_client *clp = session->clp; in nfs4_schedule_session_recovery() local
2349 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs4_schedule_session_recovery()
2352 set_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_schedule_session_recovery()
2354 nfs4_schedule_state_manager(clp); in nfs4_schedule_session_recovery()
2358 void nfs41_notify_server(struct nfs_client *clp) in nfs41_notify_server() argument
2361 set_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs41_notify_server()
2362 nfs4_schedule_state_manager(clp); in nfs41_notify_server()
2365 static void nfs4_reset_all_state(struct nfs_client *clp) in nfs4_reset_all_state() argument
2367 if (test_and_set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) == 0) { in nfs4_reset_all_state()
2368 set_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state); in nfs4_reset_all_state()
2369 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_reset_all_state()
2370 nfs4_state_start_reclaim_nograce(clp); in nfs4_reset_all_state()
2372 __func__, clp->cl_hostname); in nfs4_reset_all_state()
2373 nfs4_schedule_state_manager(clp); in nfs4_reset_all_state()
2377 static void nfs41_handle_server_reboot(struct nfs_client *clp) in nfs41_handle_server_reboot() argument
2379 if (test_and_set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) == 0) { in nfs41_handle_server_reboot()
2380 nfs4_state_start_reclaim_reboot(clp); in nfs41_handle_server_reboot()
2382 clp->cl_hostname); in nfs41_handle_server_reboot()
2383 nfs4_schedule_state_manager(clp); in nfs41_handle_server_reboot()
2387 static void nfs41_handle_all_state_revoked(struct nfs_client *clp) in nfs41_handle_all_state_revoked() argument
2389 nfs4_reset_all_state(clp); in nfs41_handle_all_state_revoked()
2390 dprintk("%s: state revoked on server %s\n", __func__, clp->cl_hostname); in nfs41_handle_all_state_revoked()
2393 static void nfs41_handle_some_state_revoked(struct nfs_client *clp) in nfs41_handle_some_state_revoked() argument
2395 nfs4_state_start_reclaim_nograce(clp); in nfs41_handle_some_state_revoked()
2396 nfs4_schedule_state_manager(clp); in nfs41_handle_some_state_revoked()
2398 dprintk("%s: state revoked on server %s\n", __func__, clp->cl_hostname); in nfs41_handle_some_state_revoked()
2401 static void nfs41_handle_recallable_state_revoked(struct nfs_client *clp) in nfs41_handle_recallable_state_revoked() argument
2404 pnfs_destroy_all_layouts(clp); in nfs41_handle_recallable_state_revoked()
2405 nfs_test_expired_all_delegations(clp); in nfs41_handle_recallable_state_revoked()
2407 clp->cl_hostname); in nfs41_handle_recallable_state_revoked()
2410 static void nfs41_handle_backchannel_fault(struct nfs_client *clp) in nfs41_handle_backchannel_fault() argument
2412 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs41_handle_backchannel_fault()
2413 nfs4_schedule_state_manager(clp); in nfs41_handle_backchannel_fault()
2416 clp->cl_hostname); in nfs41_handle_backchannel_fault()
2419 static void nfs41_handle_cb_path_down(struct nfs_client *clp) in nfs41_handle_cb_path_down() argument
2422 &clp->cl_state) == 0) in nfs41_handle_cb_path_down()
2423 nfs4_schedule_state_manager(clp); in nfs41_handle_cb_path_down()
2426 void nfs41_handle_sequence_flag_errors(struct nfs_client *clp, u32 flags, in nfs41_handle_sequence_flag_errors() argument
2433 __func__, clp->cl_hostname, clp->cl_clientid, flags); in nfs41_handle_sequence_flag_errors()
2444 nfs41_handle_server_reboot(clp); in nfs41_handle_sequence_flag_errors()
2446 nfs41_handle_all_state_revoked(clp); in nfs41_handle_sequence_flag_errors()
2449 nfs41_handle_some_state_revoked(clp); in nfs41_handle_sequence_flag_errors()
2451 nfs4_schedule_lease_moved_recovery(clp); in nfs41_handle_sequence_flag_errors()
2453 nfs41_handle_recallable_state_revoked(clp); in nfs41_handle_sequence_flag_errors()
2456 nfs41_handle_backchannel_fault(clp); in nfs41_handle_sequence_flag_errors()
2459 nfs41_handle_cb_path_down(clp); in nfs41_handle_sequence_flag_errors()
2462 static int nfs4_reset_session(struct nfs_client *clp) in nfs4_reset_session() argument
2467 if (!nfs4_has_session(clp)) in nfs4_reset_session()
2469 status = nfs4_begin_drain_session(clp); in nfs4_reset_session()
2472 cred = nfs4_get_clid_cred(clp); in nfs4_reset_session()
2473 status = nfs4_proc_destroy_session(clp->cl_session, cred); in nfs4_reset_session()
2481 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs4_reset_session()
2486 status = nfs4_recovery_handle_error(clp, status); in nfs4_reset_session()
2490 memset(clp->cl_session->sess_id.data, 0, NFS4_MAX_SESSIONID_LEN); in nfs4_reset_session()
2491 status = nfs4_proc_create_session(clp, cred); in nfs4_reset_session()
2494 __func__, status, clp->cl_hostname); in nfs4_reset_session()
2495 status = nfs4_handle_reclaim_lease_error(clp, status); in nfs4_reset_session()
2498 nfs41_finish_session_reset(clp); in nfs4_reset_session()
2500 __func__, clp->cl_hostname); in nfs4_reset_session()
2506 static int nfs4_bind_conn_to_session(struct nfs_client *clp) in nfs4_bind_conn_to_session() argument
2511 if (!nfs4_has_session(clp)) in nfs4_bind_conn_to_session()
2513 ret = nfs4_begin_drain_session(clp); in nfs4_bind_conn_to_session()
2516 cred = nfs4_get_clid_cred(clp); in nfs4_bind_conn_to_session()
2517 ret = nfs4_proc_bind_conn_to_session(clp, cred); in nfs4_bind_conn_to_session()
2519 clear_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_bind_conn_to_session()
2523 __func__, clp->cl_hostname); in nfs4_bind_conn_to_session()
2527 set_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_bind_conn_to_session()
2530 return nfs4_recovery_handle_error(clp, ret); in nfs4_bind_conn_to_session()
2535 static void nfs4_layoutreturn_any_run(struct nfs_client *clp) in nfs4_layoutreturn_any_run() argument
2539 if (test_and_clear_bit(NFS4CLNT_RECALL_ANY_LAYOUT_READ, &clp->cl_state)) in nfs4_layoutreturn_any_run()
2541 if (test_and_clear_bit(NFS4CLNT_RECALL_ANY_LAYOUT_RW, &clp->cl_state)) in nfs4_layoutreturn_any_run()
2545 pnfs_layout_return_unused_byclid(clp, iomode); in nfs4_layoutreturn_any_run()
2546 set_bit(NFS4CLNT_RUN_MANAGER, &clp->cl_state); in nfs4_layoutreturn_any_run()
2550 static int nfs4_reset_session(struct nfs_client *clp) { return 0; } in nfs4_reset_session() argument
2552 static int nfs4_bind_conn_to_session(struct nfs_client *clp) in nfs4_bind_conn_to_session() argument
2557 static void nfs4_layoutreturn_any_run(struct nfs_client *clp) in nfs4_layoutreturn_any_run() argument
2562 static void nfs4_state_manager(struct nfs_client *clp) in nfs4_state_manager() argument
2577 trace_nfs4_state_mgr(clp); in nfs4_state_manager()
2578 clear_bit(NFS4CLNT_RUN_MANAGER, &clp->cl_state); in nfs4_state_manager()
2579 if (test_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state)) { in nfs4_state_manager()
2581 status = nfs4_purge_lease(clp); in nfs4_state_manager()
2587 if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) { in nfs4_state_manager()
2590 status = nfs4_reclaim_lease(clp); in nfs4_state_manager()
2597 if (test_and_clear_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state)) { in nfs4_state_manager()
2599 status = nfs4_reset_session(clp); in nfs4_state_manager()
2600 if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) in nfs4_state_manager()
2608 &clp->cl_state)) { in nfs4_state_manager()
2610 status = nfs4_bind_conn_to_session(clp); in nfs4_state_manager()
2616 if (test_and_clear_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state)) { in nfs4_state_manager()
2618 status = nfs4_check_lease(clp); in nfs4_state_manager()
2624 if (test_and_clear_bit(NFS4CLNT_MOVED, &clp->cl_state)) { in nfs4_state_manager()
2626 status = nfs4_handle_migration(clp); in nfs4_state_manager()
2631 if (test_and_clear_bit(NFS4CLNT_LEASE_MOVED, &clp->cl_state)) { in nfs4_state_manager()
2633 status = nfs4_handle_lease_moved(clp); in nfs4_state_manager()
2639 if (test_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state)) { in nfs4_state_manager()
2641 status = nfs4_do_reclaim(clp, in nfs4_state_manager()
2642 clp->cl_mvops->reboot_recovery_ops); in nfs4_state_manager()
2647 nfs4_state_end_reclaim_reboot(clp); in nfs4_state_manager()
2652 if (test_and_clear_bit(NFS4CLNT_DELEGATION_EXPIRED, &clp->cl_state)) { in nfs4_state_manager()
2654 nfs_reap_expired_delegations(clp); in nfs4_state_manager()
2659 if (test_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state)) { in nfs4_state_manager()
2661 status = nfs4_do_reclaim(clp, in nfs4_state_manager()
2662 clp->cl_mvops->nograce_recovery_ops); in nfs4_state_manager()
2667 clear_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state); in nfs4_state_manager()
2671 nfs4_end_drain_session(clp); in nfs4_state_manager()
2672 nfs4_clear_state_manager_bit(clp); in nfs4_state_manager()
2674 if (!test_and_set_bit(NFS4CLNT_RECALL_RUNNING, &clp->cl_state)) { in nfs4_state_manager()
2675 if (test_and_clear_bit(NFS4CLNT_DELEGRETURN, &clp->cl_state)) { in nfs4_state_manager()
2676 nfs_client_return_marked_delegations(clp); in nfs4_state_manager()
2677 set_bit(NFS4CLNT_RUN_MANAGER, &clp->cl_state); in nfs4_state_manager()
2679 nfs4_layoutreturn_any_run(clp); in nfs4_state_manager()
2680 clear_bit(NFS4CLNT_RECALL_RUNNING, &clp->cl_state); in nfs4_state_manager()
2684 if (!test_bit(NFS4CLNT_RUN_MANAGER, &clp->cl_state)) in nfs4_state_manager()
2686 if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0) in nfs4_state_manager()
2689 } while (refcount_read(&clp->cl_count) > 1 && !signalled()); in nfs4_state_manager()
2695 trace_nfs4_state_mgr_failed(clp, section, status); in nfs4_state_manager()
2698 clp->cl_hostname, -status); in nfs4_state_manager()
2702 nfs4_end_drain_session(clp); in nfs4_state_manager()
2703 nfs4_clear_state_manager_bit(clp); in nfs4_state_manager()
2708 struct nfs_client *clp = ptr; in nfs4_run_state_manager() local
2711 nfs4_state_manager(clp); in nfs4_run_state_manager()
2712 nfs_put_client(clp); in nfs4_run_state_manager()