Lines Matching refs:clp

71 int nfs4_init_clientid(struct nfs_client *clp, struct rpc_cred *cred)  in nfs4_init_clientid()  argument
74 .clientid = clp->cl_clientid, in nfs4_init_clientid()
75 .confirm = clp->cl_confirm, in nfs4_init_clientid()
79 struct nfs_net *nn = net_generic(clp->cl_net, nfs_net_id); in nfs4_init_clientid()
81 if (test_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state)) in nfs4_init_clientid()
84 if (clp->cl_addr.ss_family == AF_INET6) in nfs4_init_clientid()
87 status = nfs4_proc_setclientid(clp, NFS4_CALLBACK, port, cred, &clid); in nfs4_init_clientid()
90 clp->cl_clientid = clid.clientid; in nfs4_init_clientid()
91 clp->cl_confirm = clid.confirm; in nfs4_init_clientid()
92 set_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_init_clientid()
94 status = nfs4_proc_setclientid_confirm(clp, &clid, cred); in nfs4_init_clientid()
97 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_init_clientid()
98 nfs4_schedule_state_renewal(clp); in nfs4_init_clientid()
116 int nfs40_discover_server_trunking(struct nfs_client *clp, in nfs40_discover_server_trunking() argument
121 .clientid = clp->cl_clientid, in nfs40_discover_server_trunking()
122 .confirm = clp->cl_confirm, in nfs40_discover_server_trunking()
124 struct nfs_net *nn = net_generic(clp->cl_net, nfs_net_id); in nfs40_discover_server_trunking()
129 if (clp->cl_addr.ss_family == AF_INET6) in nfs40_discover_server_trunking()
132 status = nfs4_proc_setclientid(clp, NFS4_CALLBACK, port, cred, &clid); in nfs40_discover_server_trunking()
135 clp->cl_clientid = clid.clientid; in nfs40_discover_server_trunking()
136 clp->cl_confirm = clid.confirm; in nfs40_discover_server_trunking()
138 status = nfs40_walk_client_list(clp, result, cred); in nfs40_discover_server_trunking()
148 struct rpc_cred *nfs4_get_machine_cred_locked(struct nfs_client *clp) in nfs4_get_machine_cred_locked() argument
152 if (clp->cl_machine_cred != NULL) in nfs4_get_machine_cred_locked()
153 cred = get_rpccred(clp->cl_machine_cred); in nfs4_get_machine_cred_locked()
157 static void nfs4_root_machine_cred(struct nfs_client *clp) in nfs4_root_machine_cred() argument
162 spin_lock(&clp->cl_lock); in nfs4_root_machine_cred()
163 cred = clp->cl_machine_cred; in nfs4_root_machine_cred()
164 clp->cl_machine_cred = new; in nfs4_root_machine_cred()
165 spin_unlock(&clp->cl_lock); in nfs4_root_machine_cred()
196 struct rpc_cred *nfs4_get_renew_cred_locked(struct nfs_client *clp) in nfs4_get_renew_cred_locked() argument
202 cred = nfs4_get_machine_cred_locked(clp); in nfs4_get_renew_cred_locked()
207 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_get_renew_cred_locked()
227 static void nfs4_end_drain_session(struct nfs_client *clp) in nfs4_end_drain_session() argument
229 struct nfs4_session *ses = clp->cl_session; in nfs4_end_drain_session()
231 if (clp->cl_slot_tbl) { in nfs4_end_drain_session()
232 nfs4_end_drain_slot_table(clp->cl_slot_tbl); in nfs4_end_drain_session()
255 static int nfs4_begin_drain_session(struct nfs_client *clp) in nfs4_begin_drain_session() argument
257 struct nfs4_session *ses = clp->cl_session; in nfs4_begin_drain_session()
260 if (clp->cl_slot_tbl) in nfs4_begin_drain_session()
261 return nfs4_drain_slot_tbl(clp->cl_slot_tbl); in nfs4_begin_drain_session()
273 static int nfs41_setup_state_renewal(struct nfs_client *clp) in nfs41_setup_state_renewal() argument
278 if (!test_bit(NFS_CS_CHECK_LEASE_TIME, &clp->cl_res_state)) { in nfs41_setup_state_renewal()
279 nfs4_schedule_state_renewal(clp); in nfs41_setup_state_renewal()
283 status = nfs4_proc_get_lease_time(clp, &fsinfo); in nfs41_setup_state_renewal()
286 spin_lock(&clp->cl_lock); in nfs41_setup_state_renewal()
287 clp->cl_lease_time = fsinfo.lease_time * HZ; in nfs41_setup_state_renewal()
288 clp->cl_last_renewal = jiffies; in nfs41_setup_state_renewal()
289 spin_unlock(&clp->cl_lock); in nfs41_setup_state_renewal()
291 nfs4_schedule_state_renewal(clp); in nfs41_setup_state_renewal()
297 static void nfs41_finish_session_reset(struct nfs_client *clp) in nfs41_finish_session_reset() argument
299 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs41_finish_session_reset()
300 clear_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs41_finish_session_reset()
302 clear_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs41_finish_session_reset()
303 nfs41_setup_state_renewal(clp); in nfs41_finish_session_reset()
306 int nfs41_init_clientid(struct nfs_client *clp, struct rpc_cred *cred) in nfs41_init_clientid() argument
310 if (test_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state)) in nfs41_init_clientid()
312 status = nfs4_proc_exchange_id(clp, cred); in nfs41_init_clientid()
315 set_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs41_init_clientid()
317 status = nfs4_proc_create_session(clp, cred); in nfs41_init_clientid()
320 nfs41_finish_session_reset(clp); in nfs41_init_clientid()
321 nfs_mark_client_ready(clp, NFS_CS_READY); in nfs41_init_clientid()
339 int nfs41_discover_server_trunking(struct nfs_client *clp, in nfs41_discover_server_trunking() argument
345 status = nfs4_proc_exchange_id(clp, cred); in nfs41_discover_server_trunking()
349 status = nfs41_walk_client_list(clp, result, cred); in nfs41_discover_server_trunking()
352 if (clp != *result) in nfs41_discover_server_trunking()
356 if (clp->cl_exchange_flags & EXCHGID4_FLAG_CONFIRMED_R) in nfs41_discover_server_trunking()
357 set_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state); in nfs41_discover_server_trunking()
359 set_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs41_discover_server_trunking()
360 nfs4_schedule_state_manager(clp); in nfs41_discover_server_trunking()
361 status = nfs_wait_client_init_complete(clp); in nfs41_discover_server_trunking()
363 nfs_put_client(clp); in nfs41_discover_server_trunking()
375 struct rpc_cred *nfs4_get_clid_cred(struct nfs_client *clp) in nfs4_get_clid_cred() argument
379 spin_lock(&clp->cl_lock); in nfs4_get_clid_cred()
380 cred = nfs4_get_machine_cred_locked(clp); in nfs4_get_clid_cred()
381 spin_unlock(&clp->cl_lock); in nfs4_get_clid_cred()
503 struct nfs_client *clp = server->nfs_client; in nfs4_drop_state_owner() local
505 spin_lock(&clp->cl_lock); in nfs4_drop_state_owner()
510 spin_unlock(&clp->cl_lock); in nfs4_drop_state_owner()
523 struct nfs_client *clp = server->nfs_client; in nfs4_gc_state_owners() local
528 spin_lock(&clp->cl_lock); in nfs4_gc_state_owners()
530 time_min = (long)time_max - (long)clp->cl_lease_time; in nfs4_gc_state_owners()
538 spin_unlock(&clp->cl_lock); in nfs4_gc_state_owners()
557 struct nfs_client *clp = server->nfs_client; in nfs4_get_state_owner() local
560 spin_lock(&clp->cl_lock); in nfs4_get_state_owner()
562 spin_unlock(&clp->cl_lock); in nfs4_get_state_owner()
571 spin_lock(&clp->cl_lock); in nfs4_get_state_owner()
573 spin_unlock(&clp->cl_lock); in nfs4_get_state_owner()
597 struct nfs_client *clp = server->nfs_client; in nfs4_put_state_owner() local
599 if (!atomic_dec_and_lock(&sp->so_count, &clp->cl_lock)) in nfs4_put_state_owner()
604 spin_unlock(&clp->cl_lock); in nfs4_put_state_owner()
616 struct nfs_client *clp = server->nfs_client; in nfs4_purge_state_owners() local
620 spin_lock(&clp->cl_lock); in nfs4_purge_state_owners()
625 spin_unlock(&clp->cl_lock); in nfs4_purge_state_owners()
901 struct nfs_client *clp = server->nfs_client; in nfs4_put_lock_state() local
903 clp->cl_mvops->free_lock_state(server, lsp); in nfs4_put_lock_state()
1134 static void nfs4_clear_state_manager_bit(struct nfs_client *clp) in nfs4_clear_state_manager_bit() argument
1137 clear_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state); in nfs4_clear_state_manager_bit()
1139 wake_up_bit(&clp->cl_state, NFS4CLNT_MANAGER_RUNNING); in nfs4_clear_state_manager_bit()
1140 rpc_wake_up(&clp->cl_rpcwaitq); in nfs4_clear_state_manager_bit()
1146 void nfs4_schedule_state_manager(struct nfs_client *clp) in nfs4_schedule_state_manager() argument
1151 if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0) in nfs4_schedule_state_manager()
1154 atomic_inc(&clp->cl_count); in nfs4_schedule_state_manager()
1161 rpc_peeraddr2str(clp->cl_rpcclient, RPC_DISPLAY_ADDR)); in nfs4_schedule_state_manager()
1163 task = kthread_run(nfs4_run_state_manager, clp, "%s", buf); in nfs4_schedule_state_manager()
1167 nfs4_clear_state_manager_bit(clp); in nfs4_schedule_state_manager()
1168 nfs_put_client(clp); in nfs4_schedule_state_manager()
1176 void nfs4_schedule_lease_recovery(struct nfs_client *clp) in nfs4_schedule_lease_recovery() argument
1178 if (!clp) in nfs4_schedule_lease_recovery()
1180 if (!test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) in nfs4_schedule_lease_recovery()
1181 set_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs4_schedule_lease_recovery()
1183 clp->cl_hostname); in nfs4_schedule_lease_recovery()
1184 nfs4_schedule_state_manager(clp); in nfs4_schedule_lease_recovery()
1198 struct nfs_client *clp = server->nfs_client; in nfs4_schedule_migration_recovery() local
1202 clp->cl_hostname); in nfs4_schedule_migration_recovery()
1213 clp->cl_hostname); in nfs4_schedule_migration_recovery()
1217 set_bit(NFS4CLNT_MOVED, &clp->cl_state); in nfs4_schedule_migration_recovery()
1219 nfs4_schedule_state_manager(clp); in nfs4_schedule_migration_recovery()
1230 void nfs4_schedule_lease_moved_recovery(struct nfs_client *clp) in nfs4_schedule_lease_moved_recovery() argument
1233 __func__, clp->cl_clientid, clp->cl_hostname); in nfs4_schedule_lease_moved_recovery()
1235 set_bit(NFS4CLNT_LEASE_MOVED, &clp->cl_state); in nfs4_schedule_lease_moved_recovery()
1236 nfs4_schedule_state_manager(clp); in nfs4_schedule_lease_moved_recovery()
1240 int nfs4_wait_clnt_recover(struct nfs_client *clp) in nfs4_wait_clnt_recover() argument
1246 atomic_inc(&clp->cl_count); in nfs4_wait_clnt_recover()
1247 res = wait_on_bit_action(&clp->cl_state, NFS4CLNT_MANAGER_RUNNING, in nfs4_wait_clnt_recover()
1251 if (clp->cl_cons_state < 0) in nfs4_wait_clnt_recover()
1252 res = clp->cl_cons_state; in nfs4_wait_clnt_recover()
1254 nfs_put_client(clp); in nfs4_wait_clnt_recover()
1258 int nfs4_client_recover_expired_lease(struct nfs_client *clp) in nfs4_client_recover_expired_lease() argument
1264 ret = nfs4_wait_clnt_recover(clp); in nfs4_client_recover_expired_lease()
1267 if (!test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) && in nfs4_client_recover_expired_lease()
1268 !test_bit(NFS4CLNT_CHECK_LEASE,&clp->cl_state)) in nfs4_client_recover_expired_lease()
1270 nfs4_schedule_state_manager(clp); in nfs4_client_recover_expired_lease()
1284 static void nfs40_handle_cb_pathdown(struct nfs_client *clp) in nfs40_handle_cb_pathdown() argument
1286 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs40_handle_cb_pathdown()
1287 nfs_expire_all_delegations(clp); in nfs40_handle_cb_pathdown()
1289 clp->cl_hostname); in nfs40_handle_cb_pathdown()
1292 void nfs4_schedule_path_down_recovery(struct nfs_client *clp) in nfs4_schedule_path_down_recovery() argument
1294 nfs40_handle_cb_pathdown(clp); in nfs4_schedule_path_down_recovery()
1295 nfs4_schedule_state_manager(clp); in nfs4_schedule_path_down_recovery()
1298 static int nfs4_state_mark_reclaim_reboot(struct nfs_client *clp, struct nfs4_state *state) in nfs4_state_mark_reclaim_reboot() argument
1308 set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); in nfs4_state_mark_reclaim_reboot()
1312 int nfs4_state_mark_reclaim_nograce(struct nfs_client *clp, struct nfs4_state *state) in nfs4_state_mark_reclaim_nograce() argument
1317 set_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state); in nfs4_state_mark_reclaim_nograce()
1323 struct nfs_client *clp = server->nfs_client; in nfs4_schedule_stateid_recovery() local
1327 nfs4_state_mark_reclaim_nograce(clp, state); in nfs4_schedule_stateid_recovery()
1329 clp->cl_hostname); in nfs4_schedule_stateid_recovery()
1330 nfs4_schedule_state_manager(clp); in nfs4_schedule_stateid_recovery()
1338 struct nfs_client *clp = NFS_SERVER(inode)->nfs_client; in nfs_inode_find_state_and_recover() local
1353 nfs4_state_mark_reclaim_nograce(clp, state); in nfs_inode_find_state_and_recover()
1358 nfs4_schedule_state_manager(clp); in nfs_inode_find_state_and_recover()
1551 int (*mark_reclaim)(struct nfs_client *clp, struct nfs4_state *state)) in nfs4_reset_seqids() argument
1553 struct nfs_client *clp = server->nfs_client; in nfs4_reset_seqids() local
1558 spin_lock(&clp->cl_lock); in nfs4_reset_seqids()
1566 if (mark_reclaim(clp, state)) in nfs4_reset_seqids()
1571 spin_unlock(&clp->cl_lock); in nfs4_reset_seqids()
1574 static void nfs4_state_mark_reclaim_helper(struct nfs_client *clp, in nfs4_state_mark_reclaim_helper() argument
1575 int (*mark_reclaim)(struct nfs_client *clp, struct nfs4_state *state)) in nfs4_state_mark_reclaim_helper() argument
1580 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) in nfs4_state_mark_reclaim_helper()
1585 static void nfs4_state_start_reclaim_reboot(struct nfs_client *clp) in nfs4_state_start_reclaim_reboot() argument
1588 nfs_delegation_mark_reclaim(clp); in nfs4_state_start_reclaim_reboot()
1589 nfs4_state_mark_reclaim_helper(clp, nfs4_state_mark_reclaim_reboot); in nfs4_state_start_reclaim_reboot()
1592 static void nfs4_reclaim_complete(struct nfs_client *clp, in nfs4_reclaim_complete() argument
1598 (void)ops->reclaim_complete(clp, cred); in nfs4_reclaim_complete()
1603 struct nfs_client *clp = server->nfs_client; in nfs4_clear_reclaim_server() local
1608 spin_lock(&clp->cl_lock); in nfs4_clear_reclaim_server()
1618 nfs4_state_mark_reclaim_nograce(clp, state); in nfs4_clear_reclaim_server()
1622 spin_unlock(&clp->cl_lock); in nfs4_clear_reclaim_server()
1625 static int nfs4_state_clear_reclaim_reboot(struct nfs_client *clp) in nfs4_state_clear_reclaim_reboot() argument
1629 if (!test_and_clear_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state)) in nfs4_state_clear_reclaim_reboot()
1633 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) in nfs4_state_clear_reclaim_reboot()
1637 nfs_delegation_reap_unclaimed(clp); in nfs4_state_clear_reclaim_reboot()
1641 static void nfs4_state_end_reclaim_reboot(struct nfs_client *clp) in nfs4_state_end_reclaim_reboot() argument
1646 if (!nfs4_state_clear_reclaim_reboot(clp)) in nfs4_state_end_reclaim_reboot()
1648 ops = clp->cl_mvops->reboot_recovery_ops; in nfs4_state_end_reclaim_reboot()
1649 cred = nfs4_get_clid_cred(clp); in nfs4_state_end_reclaim_reboot()
1650 nfs4_reclaim_complete(clp, ops, cred); in nfs4_state_end_reclaim_reboot()
1654 static void nfs_delegation_clear_all(struct nfs_client *clp) in nfs_delegation_clear_all() argument
1656 nfs_delegation_mark_reclaim(clp); in nfs_delegation_clear_all()
1657 nfs_delegation_reap_unclaimed(clp); in nfs_delegation_clear_all()
1660 static void nfs4_state_start_reclaim_nograce(struct nfs_client *clp) in nfs4_state_start_reclaim_nograce() argument
1662 nfs_delegation_clear_all(clp); in nfs4_state_start_reclaim_nograce()
1663 nfs4_state_mark_reclaim_helper(clp, nfs4_state_mark_reclaim_nograce); in nfs4_state_start_reclaim_nograce()
1666 static int nfs4_recovery_handle_error(struct nfs_client *clp, int error) in nfs4_recovery_handle_error() argument
1672 nfs40_handle_cb_pathdown(clp); in nfs4_recovery_handle_error()
1675 nfs4_state_end_reclaim_reboot(clp); in nfs4_recovery_handle_error()
1678 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_recovery_handle_error()
1679 nfs4_state_clear_reclaim_reboot(clp); in nfs4_recovery_handle_error()
1680 nfs4_state_start_reclaim_reboot(clp); in nfs4_recovery_handle_error()
1683 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_recovery_handle_error()
1684 nfs4_state_start_reclaim_nograce(clp); in nfs4_recovery_handle_error()
1692 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs4_recovery_handle_error()
1696 set_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_recovery_handle_error()
1700 __func__, error, clp->cl_hostname); in nfs4_recovery_handle_error()
1704 clp->cl_hostname); in nfs4_recovery_handle_error()
1708 static int nfs4_do_reclaim(struct nfs_client *clp, const struct nfs4_state_recovery_ops *ops) in nfs4_do_reclaim() argument
1717 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_do_reclaim()
1719 spin_lock(&clp->cl_lock); in nfs4_do_reclaim()
1730 spin_unlock(&clp->cl_lock); in nfs4_do_reclaim()
1737 status = nfs4_recovery_handle_error(clp, status); in nfs4_do_reclaim()
1744 spin_unlock(&clp->cl_lock); in nfs4_do_reclaim()
1750 static int nfs4_check_lease(struct nfs_client *clp) in nfs4_check_lease() argument
1754 clp->cl_mvops->state_renewal_ops; in nfs4_check_lease()
1758 if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) in nfs4_check_lease()
1760 spin_lock(&clp->cl_lock); in nfs4_check_lease()
1761 cred = ops->get_state_renewal_cred_locked(clp); in nfs4_check_lease()
1762 spin_unlock(&clp->cl_lock); in nfs4_check_lease()
1764 cred = nfs4_get_clid_cred(clp); in nfs4_check_lease()
1769 status = ops->renew_lease(clp, cred); in nfs4_check_lease()
1772 set_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs4_check_lease()
1776 return nfs4_recovery_handle_error(clp, status); in nfs4_check_lease()
1782 static int nfs4_handle_reclaim_lease_error(struct nfs_client *clp, int status) in nfs4_handle_reclaim_lease_error() argument
1786 if (test_and_set_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state)) in nfs4_handle_reclaim_lease_error()
1790 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
1793 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
1794 nfs4_state_start_reclaim_reboot(clp); in nfs4_handle_reclaim_lease_error()
1798 clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
1799 nfs_mark_client_ready(clp, -EPERM); in nfs4_handle_reclaim_lease_error()
1800 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
1810 if (clp->cl_cons_state == NFS_CS_SESSION_INITING) in nfs4_handle_reclaim_lease_error()
1811 nfs_mark_client_ready(clp, -EPROTONOSUPPORT); in nfs4_handle_reclaim_lease_error()
1813 __func__, -EPROTONOSUPPORT, clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
1819 status, clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
1822 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_handle_reclaim_lease_error()
1824 clp->cl_hostname); in nfs4_handle_reclaim_lease_error()
1828 static int nfs4_establish_lease(struct nfs_client *clp) in nfs4_establish_lease() argument
1832 clp->cl_mvops->reboot_recovery_ops; in nfs4_establish_lease()
1835 nfs4_begin_drain_session(clp); in nfs4_establish_lease()
1836 cred = nfs4_get_clid_cred(clp); in nfs4_establish_lease()
1839 status = ops->establish_clid(clp, cred); in nfs4_establish_lease()
1843 pnfs_destroy_all_layouts(clp); in nfs4_establish_lease()
1851 static int nfs4_reclaim_lease(struct nfs_client *clp) in nfs4_reclaim_lease() argument
1855 status = nfs4_establish_lease(clp); in nfs4_reclaim_lease()
1857 return nfs4_handle_reclaim_lease_error(clp, status); in nfs4_reclaim_lease()
1858 if (test_and_clear_bit(NFS4CLNT_SERVER_SCOPE_MISMATCH, &clp->cl_state)) in nfs4_reclaim_lease()
1859 nfs4_state_start_reclaim_nograce(clp); in nfs4_reclaim_lease()
1860 if (!test_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state)) in nfs4_reclaim_lease()
1861 set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); in nfs4_reclaim_lease()
1862 clear_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs4_reclaim_lease()
1863 clear_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_reclaim_lease()
1867 static int nfs4_purge_lease(struct nfs_client *clp) in nfs4_purge_lease() argument
1871 status = nfs4_establish_lease(clp); in nfs4_purge_lease()
1873 return nfs4_handle_reclaim_lease_error(clp, status); in nfs4_purge_lease()
1874 clear_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state); in nfs4_purge_lease()
1875 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); in nfs4_purge_lease()
1876 nfs4_state_start_reclaim_nograce(clp); in nfs4_purge_lease()
1889 struct nfs_client *clp = server->nfs_client; in nfs4_try_migration() local
1898 clp->cl_hostname); in nfs4_try_migration()
1923 nfs4_begin_drain_session(clp); in nfs4_try_migration()
1941 clp->cl_hostname); in nfs4_try_migration()
1950 static int nfs4_handle_migration(struct nfs_client *clp) in nfs4_handle_migration() argument
1953 clp->cl_mvops->state_renewal_ops; in nfs4_handle_migration()
1958 clp->cl_hostname); in nfs4_handle_migration()
1960 spin_lock(&clp->cl_lock); in nfs4_handle_migration()
1961 cred = ops->get_state_renewal_cred_locked(clp); in nfs4_handle_migration()
1962 spin_unlock(&clp->cl_lock); in nfs4_handle_migration()
1966 clp->cl_mig_gen++; in nfs4_handle_migration()
1969 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_handle_migration()
1972 if (server->mig_gen == clp->cl_mig_gen) in nfs4_handle_migration()
1974 server->mig_gen = clp->cl_mig_gen; in nfs4_handle_migration()
1998 static int nfs4_handle_lease_moved(struct nfs_client *clp) in nfs4_handle_lease_moved() argument
2001 clp->cl_mvops->state_renewal_ops; in nfs4_handle_lease_moved()
2006 clp->cl_hostname); in nfs4_handle_lease_moved()
2008 spin_lock(&clp->cl_lock); in nfs4_handle_lease_moved()
2009 cred = ops->get_state_renewal_cred_locked(clp); in nfs4_handle_lease_moved()
2010 spin_unlock(&clp->cl_lock); in nfs4_handle_lease_moved()
2014 clp->cl_mig_gen++; in nfs4_handle_lease_moved()
2017 list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { in nfs4_handle_lease_moved()
2021 if (server->mig_gen == clp->cl_mig_gen) in nfs4_handle_lease_moved()
2023 server->mig_gen = clp->cl_mig_gen; in nfs4_handle_lease_moved()
2055 int nfs4_discover_server_trunking(struct nfs_client *clp, in nfs4_discover_server_trunking() argument
2059 clp->cl_mvops->reboot_recovery_ops; in nfs4_discover_server_trunking()
2064 dprintk("NFS: %s: testing '%s'\n", __func__, clp->cl_hostname); in nfs4_discover_server_trunking()
2066 clnt = clp->cl_rpcclient; in nfs4_discover_server_trunking()
2072 cred = nfs4_get_clid_cred(clp); in nfs4_discover_server_trunking()
2076 status = ops->detect_trunking(clp, result, cred); in nfs4_discover_server_trunking()
2093 nfs4_root_machine_cred(clp); in nfs4_discover_server_trunking()
2114 clnt = xchg(&clp->cl_rpcclient, clnt); in nfs4_discover_server_trunking()
2116 clnt = clp->cl_rpcclient; in nfs4_discover_server_trunking()
2143 struct nfs_client *clp = session->clp; in nfs4_schedule_session_recovery() local
2147 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs4_schedule_session_recovery()
2150 set_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_schedule_session_recovery()
2152 nfs4_schedule_lease_recovery(clp); in nfs4_schedule_session_recovery()
2156 void nfs41_notify_server(struct nfs_client *clp) in nfs41_notify_server() argument
2159 set_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state); in nfs41_notify_server()
2160 nfs4_schedule_state_manager(clp); in nfs41_notify_server()
2163 static void nfs4_reset_all_state(struct nfs_client *clp) in nfs4_reset_all_state() argument
2165 if (test_and_set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) == 0) { in nfs4_reset_all_state()
2166 set_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state); in nfs4_reset_all_state()
2167 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); in nfs4_reset_all_state()
2168 nfs4_state_start_reclaim_nograce(clp); in nfs4_reset_all_state()
2170 __func__, clp->cl_hostname); in nfs4_reset_all_state()
2171 nfs4_schedule_state_manager(clp); in nfs4_reset_all_state()
2175 static void nfs41_handle_server_reboot(struct nfs_client *clp) in nfs41_handle_server_reboot() argument
2177 if (test_and_set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) == 0) { in nfs41_handle_server_reboot()
2178 nfs4_state_start_reclaim_reboot(clp); in nfs41_handle_server_reboot()
2180 clp->cl_hostname); in nfs41_handle_server_reboot()
2181 nfs4_schedule_state_manager(clp); in nfs41_handle_server_reboot()
2185 static void nfs41_handle_all_state_revoked(struct nfs_client *clp) in nfs41_handle_all_state_revoked() argument
2187 nfs4_reset_all_state(clp); in nfs41_handle_all_state_revoked()
2188 dprintk("%s: state revoked on server %s\n", __func__, clp->cl_hostname); in nfs41_handle_all_state_revoked()
2191 static void nfs41_handle_some_state_revoked(struct nfs_client *clp) in nfs41_handle_some_state_revoked() argument
2193 nfs4_state_mark_reclaim_helper(clp, nfs4_state_mark_reclaim_nograce); in nfs41_handle_some_state_revoked()
2194 nfs4_schedule_state_manager(clp); in nfs41_handle_some_state_revoked()
2196 dprintk("%s: state revoked on server %s\n", __func__, clp->cl_hostname); in nfs41_handle_some_state_revoked()
2199 static void nfs41_handle_recallable_state_revoked(struct nfs_client *clp) in nfs41_handle_recallable_state_revoked() argument
2202 pnfs_destroy_all_layouts(clp); in nfs41_handle_recallable_state_revoked()
2204 nfs41_handle_some_state_revoked(clp); in nfs41_handle_recallable_state_revoked()
2206 clp->cl_hostname); in nfs41_handle_recallable_state_revoked()
2209 static void nfs41_handle_backchannel_fault(struct nfs_client *clp) in nfs41_handle_backchannel_fault() argument
2211 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs41_handle_backchannel_fault()
2212 nfs4_schedule_state_manager(clp); in nfs41_handle_backchannel_fault()
2215 clp->cl_hostname); in nfs41_handle_backchannel_fault()
2218 static void nfs41_handle_cb_path_down(struct nfs_client *clp) in nfs41_handle_cb_path_down() argument
2221 &clp->cl_state) == 0) in nfs41_handle_cb_path_down()
2222 nfs4_schedule_state_manager(clp); in nfs41_handle_cb_path_down()
2225 void nfs41_handle_sequence_flag_errors(struct nfs_client *clp, u32 flags) in nfs41_handle_sequence_flag_errors() argument
2231 __func__, clp->cl_hostname, clp->cl_clientid, flags); in nfs41_handle_sequence_flag_errors()
2234 nfs41_handle_server_reboot(clp); in nfs41_handle_sequence_flag_errors()
2236 nfs41_handle_all_state_revoked(clp); in nfs41_handle_sequence_flag_errors()
2239 nfs41_handle_some_state_revoked(clp); in nfs41_handle_sequence_flag_errors()
2241 nfs4_schedule_lease_moved_recovery(clp); in nfs41_handle_sequence_flag_errors()
2243 nfs41_handle_recallable_state_revoked(clp); in nfs41_handle_sequence_flag_errors()
2245 nfs41_handle_backchannel_fault(clp); in nfs41_handle_sequence_flag_errors()
2248 nfs41_handle_cb_path_down(clp); in nfs41_handle_sequence_flag_errors()
2251 static int nfs4_reset_session(struct nfs_client *clp) in nfs4_reset_session() argument
2256 if (!nfs4_has_session(clp)) in nfs4_reset_session()
2258 nfs4_begin_drain_session(clp); in nfs4_reset_session()
2259 cred = nfs4_get_clid_cred(clp); in nfs4_reset_session()
2260 status = nfs4_proc_destroy_session(clp->cl_session, cred); in nfs4_reset_session()
2268 set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); in nfs4_reset_session()
2273 status = nfs4_recovery_handle_error(clp, status); in nfs4_reset_session()
2277 memset(clp->cl_session->sess_id.data, 0, NFS4_MAX_SESSIONID_LEN); in nfs4_reset_session()
2278 status = nfs4_proc_create_session(clp, cred); in nfs4_reset_session()
2281 __func__, status, clp->cl_hostname); in nfs4_reset_session()
2282 status = nfs4_handle_reclaim_lease_error(clp, status); in nfs4_reset_session()
2285 nfs41_finish_session_reset(clp); in nfs4_reset_session()
2287 __func__, clp->cl_hostname); in nfs4_reset_session()
2294 static int nfs4_bind_conn_to_session(struct nfs_client *clp) in nfs4_bind_conn_to_session() argument
2299 if (!nfs4_has_session(clp)) in nfs4_bind_conn_to_session()
2301 nfs4_begin_drain_session(clp); in nfs4_bind_conn_to_session()
2302 cred = nfs4_get_clid_cred(clp); in nfs4_bind_conn_to_session()
2303 ret = nfs4_proc_bind_conn_to_session(clp, cred); in nfs4_bind_conn_to_session()
2306 clear_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_bind_conn_to_session()
2310 __func__, clp->cl_hostname); in nfs4_bind_conn_to_session()
2314 set_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); in nfs4_bind_conn_to_session()
2317 return nfs4_recovery_handle_error(clp, ret); in nfs4_bind_conn_to_session()
2322 static int nfs4_reset_session(struct nfs_client *clp) { return 0; } in nfs4_reset_session() argument
2324 static int nfs4_bind_conn_to_session(struct nfs_client *clp) in nfs4_bind_conn_to_session() argument
2330 static void nfs4_state_manager(struct nfs_client *clp) in nfs4_state_manager() argument
2337 if (test_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state)) { in nfs4_state_manager()
2339 status = nfs4_purge_lease(clp); in nfs4_state_manager()
2345 if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) { in nfs4_state_manager()
2348 status = nfs4_reclaim_lease(clp); in nfs4_state_manager()
2355 if (test_and_clear_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state)) { in nfs4_state_manager()
2357 status = nfs4_reset_session(clp); in nfs4_state_manager()
2358 if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) in nfs4_state_manager()
2366 &clp->cl_state)) { in nfs4_state_manager()
2368 status = nfs4_bind_conn_to_session(clp); in nfs4_state_manager()
2374 if (test_and_clear_bit(NFS4CLNT_CHECK_LEASE, &clp->cl_state)) { in nfs4_state_manager()
2376 status = nfs4_check_lease(clp); in nfs4_state_manager()
2382 if (test_and_clear_bit(NFS4CLNT_MOVED, &clp->cl_state)) { in nfs4_state_manager()
2384 status = nfs4_handle_migration(clp); in nfs4_state_manager()
2389 if (test_and_clear_bit(NFS4CLNT_LEASE_MOVED, &clp->cl_state)) { in nfs4_state_manager()
2391 status = nfs4_handle_lease_moved(clp); in nfs4_state_manager()
2397 if (test_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state)) { in nfs4_state_manager()
2399 status = nfs4_do_reclaim(clp, in nfs4_state_manager()
2400 clp->cl_mvops->reboot_recovery_ops); in nfs4_state_manager()
2405 nfs4_state_end_reclaim_reboot(clp); in nfs4_state_manager()
2409 if (test_and_clear_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state)) { in nfs4_state_manager()
2411 status = nfs4_do_reclaim(clp, in nfs4_state_manager()
2412 clp->cl_mvops->nograce_recovery_ops); in nfs4_state_manager()
2419 nfs4_end_drain_session(clp); in nfs4_state_manager()
2420 if (test_and_clear_bit(NFS4CLNT_DELEGRETURN, &clp->cl_state)) { in nfs4_state_manager()
2421 nfs_client_return_marked_delegations(clp); in nfs4_state_manager()
2425 nfs4_clear_state_manager_bit(clp); in nfs4_state_manager()
2427 if (clp->cl_state == 0) in nfs4_state_manager()
2429 if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0) in nfs4_state_manager()
2431 } while (atomic_read(&clp->cl_count) > 1); in nfs4_state_manager()
2438 clp->cl_hostname, -status); in nfs4_state_manager()
2440 nfs4_end_drain_session(clp); in nfs4_state_manager()
2441 nfs4_clear_state_manager_bit(clp); in nfs4_state_manager()
2446 struct nfs_client *clp = ptr; in nfs4_run_state_manager() local
2449 nfs4_state_manager(clp); in nfs4_run_state_manager()
2450 nfs_put_client(clp); in nfs4_run_state_manager()