Lines Matching refs:nn

87 void nfsd4_end_grace(struct nfsd_net *nn);
88 static void _free_cpntf_state_locked(struct nfsd_net *nn, struct nfs4_cpntf_state *cps);
90 static void deleg_reaper(struct nfsd_net *nn);
168 static void nfsd4_dec_courtesy_client_count(struct nfsd_net *nn, in nfsd4_dec_courtesy_client_count() argument
172 atomic_add_unless(&nn->nfsd_courtesy_clients, -1, 0); in nfsd4_dec_courtesy_client_count()
177 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in get_client_locked() local
179 lockdep_assert_held(&nn->client_lock); in get_client_locked()
184 nfsd4_dec_courtesy_client_count(nn, clp); in get_client_locked()
193 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in renew_client_locked() local
204 list_move_tail(&clp->cl_lru, &nn->client_lru); in renew_client_locked()
206 nfsd4_dec_courtesy_client_count(nn, clp); in renew_client_locked()
212 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in put_client_renew_locked() local
214 lockdep_assert_held(&nn->client_lock); in put_client_renew_locked()
226 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in put_client_renew() local
228 if (!atomic_dec_and_lock(&clp->cl_rpc_users, &nn->client_lock)) in put_client_renew()
234 spin_unlock(&nn->client_lock); in put_client_renew()
253 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in nfsd4_put_session_locked() local
255 lockdep_assert_held(&nn->client_lock); in nfsd4_put_session_locked()
265 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in nfsd4_put_session() local
267 spin_lock(&nn->client_lock); in nfsd4_put_session()
269 spin_unlock(&nn->client_lock); in nfsd4_put_session()
274 struct nfsd_net *nn) in find_blocked_lock() argument
278 spin_lock(&nn->blocked_locks_lock); in find_blocked_lock()
288 spin_unlock(&nn->blocked_locks_lock); in find_blocked_lock()
296 struct nfsd_net *nn) in find_or_allocate_block() argument
300 nbl = find_blocked_lock(lo, fh, nn); in find_or_allocate_block()
338 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in remove_blocked_locks() local
343 spin_lock(&nn->blocked_locks_lock); in remove_blocked_locks()
352 spin_unlock(&nn->blocked_locks_lock); in remove_blocked_locks()
744 struct nfsd_net *nn; in nfs4_resolve_deny_conflicts_locked() local
766 nn = net_generic(clp->net, nfsd_net_id); in nfs4_resolve_deny_conflicts_locked()
767 mod_delayed_work(laundry_wq, &nn->laundromat_work, 0); in nfs4_resolve_deny_conflicts_locked()
974 static int nfs4_init_cp_state(struct nfsd_net *nn, copy_stateid_t *stid, in nfs4_init_cp_state() argument
979 stid->cs_stid.si_opaque.so_clid.cl_boot = (u32)nn->boot_time; in nfs4_init_cp_state()
980 stid->cs_stid.si_opaque.so_clid.cl_id = nn->s2s_cp_cl_id; in nfs4_init_cp_state()
983 spin_lock(&nn->s2s_cp_lock); in nfs4_init_cp_state()
984 new_id = idr_alloc_cyclic(&nn->s2s_cp_stateids, stid, 0, 0, GFP_NOWAIT); in nfs4_init_cp_state()
987 spin_unlock(&nn->s2s_cp_lock); in nfs4_init_cp_state()
995 int nfs4_init_copy_state(struct nfsd_net *nn, struct nfsd4_copy *copy) in nfs4_init_copy_state() argument
997 return nfs4_init_cp_state(nn, &copy->cp_stateid, NFS4_COPY_STID); in nfs4_init_copy_state()
1000 struct nfs4_cpntf_state *nfs4_alloc_init_cpntf_state(struct nfsd_net *nn, in nfs4_alloc_init_cpntf_state() argument
1010 if (!nfs4_init_cp_state(nn, &cps->cp_stateid, NFS4_COPYNOTIFY_STID)) in nfs4_alloc_init_cpntf_state()
1012 spin_lock(&nn->s2s_cp_lock); in nfs4_alloc_init_cpntf_state()
1014 spin_unlock(&nn->s2s_cp_lock); in nfs4_alloc_init_cpntf_state()
1023 struct nfsd_net *nn; in nfs4_free_copy_state() local
1027 nn = net_generic(copy->cp_clp->net, nfsd_net_id); in nfs4_free_copy_state()
1028 spin_lock(&nn->s2s_cp_lock); in nfs4_free_copy_state()
1029 idr_remove(&nn->s2s_cp_stateids, in nfs4_free_copy_state()
1031 spin_unlock(&nn->s2s_cp_lock); in nfs4_free_copy_state()
1037 struct nfsd_net *nn; in nfs4_free_cpntf_statelist() local
1039 nn = net_generic(net, nfsd_net_id); in nfs4_free_cpntf_statelist()
1040 spin_lock(&nn->s2s_cp_lock); in nfs4_free_cpntf_statelist()
1044 _free_cpntf_state_locked(nn, cps); in nfs4_free_cpntf_statelist()
1046 spin_unlock(&nn->s2s_cp_lock); in nfs4_free_cpntf_statelist()
1675 struct nfsd_net *nn = net_generic(oo->oo_owner.so_client->net, in release_last_closed_stateid() local
1679 spin_lock(&nn->client_lock); in release_last_closed_stateid()
1685 spin_unlock(&nn->client_lock); in release_last_closed_stateid()
1745 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_revoke_states() local
1751 spin_lock(&nn->client_lock); in nfsd4_revoke_states()
1753 struct list_head *head = &nn->conf_id_hashtbl[idhashval]; in nfsd4_revoke_states()
1764 spin_unlock(&nn->client_lock); in nfsd4_revoke_states()
1825 spin_lock(&nn->client_lock); in nfsd4_revoke_states()
1832 nn->nfs40_last_revoke = in nfsd4_revoke_states()
1838 spin_unlock(&nn->client_lock); in nfsd4_revoke_states()
1943 static u32 nfsd4_get_drc_mem(struct nfsd4_channel_attrs *ca, struct nfsd_net *nn) in nfsd4_get_drc_mem() argument
1970 scale_factor = max_t(unsigned int, 8, nn->nfsd_serv->sv_nrthreads); in nfsd4_get_drc_mem()
2138 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in init_session() local
2151 list_add(&new->se_hash, &nn->sessionid_hashtbl[idx]); in init_session()
2176 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in __find_in_sessionid_hashtbl() local
2178 lockdep_assert_held(&nn->client_lock); in __find_in_sessionid_hashtbl()
2183 list_for_each_entry(elem, &nn->sessionid_hashtbl[idx], se_hash) { in __find_in_sessionid_hashtbl()
2217 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_session() local
2219 lockdep_assert_held(&nn->client_lock); in unhash_session()
2229 STALE_CLIENTID(clientid_t *clid, struct nfsd_net *nn) in STALE_CLIENTID() argument
2236 if (clid->cl_boot == (u32)nn->boot_time) in STALE_CLIENTID()
2248 struct nfsd_net *nn) in alloc_client() argument
2253 if (atomic_read(&nn->nfs4_client_count) >= nn->nfs4_max_clients) { in alloc_client()
2254 mod_delayed_work(laundry_wq, &nn->laundromat_work, 0); in alloc_client()
2279 atomic_inc(&nn->nfs4_client_count); in alloc_client()
2348 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_client_locked() local
2351 lockdep_assert_held(&nn->client_lock); in unhash_client_locked()
2359 rb_erase(&clp->cl_namenode, &nn->conf_name_tree); in unhash_client_locked()
2361 rb_erase(&clp->cl_namenode, &nn->unconf_name_tree); in unhash_client_locked()
2373 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_client() local
2375 spin_lock(&nn->client_lock); in unhash_client()
2377 spin_unlock(&nn->client_lock); in unhash_client()
2395 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in __destroy_client() local
2438 atomic_add_unless(&nn->nfs4_client_count, -1, 0); in __destroy_client()
2439 nfsd4_dec_courtesy_client_count(nn, clp); in __destroy_client()
2453 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in inc_reclaim_complete() local
2455 if (!nn->track_reclaim_completes) in inc_reclaim_complete()
2457 if (!nfsd4_find_reclaim_client(clp->cl_name, nn)) in inc_reclaim_complete()
2459 if (atomic_inc_return(&nn->nr_reclaim_complete) == in inc_reclaim_complete()
2460 nn->reclaim_str_hashtbl_size) { in inc_reclaim_complete()
2463 nfsd4_end_grace(nn); in inc_reclaim_complete()
2604 static void gen_confirm(struct nfs4_client *clp, struct nfsd_net *nn) in gen_confirm() argument
2613 verf[1] = (__force __be32)nn->clverifier_counter++; in gen_confirm()
2617 static void gen_clid(struct nfs4_client *clp, struct nfsd_net *nn) in gen_clid() argument
2619 clp->cl_clientid.cl_boot = (u32)nn->boot_time; in gen_clid()
2620 clp->cl_clientid.cl_id = nn->clientid_counter++; in gen_clid()
2621 gen_confirm(clp, nn); in gen_clid()
3007 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in force_expire_client() local
3012 spin_lock(&nn->client_lock); in force_expire_client()
3014 spin_unlock(&nn->client_lock); in force_expire_client()
3017 spin_lock(&nn->client_lock); in force_expire_client()
3021 spin_unlock(&nn->client_lock); in force_expire_client()
3147 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in create_client() local
3150 clp = alloc_client(name, nn); in create_client()
3159 gen_clid(clp, nn); in create_client()
3169 nn, &clp->cl_nfsdfs, in create_client()
3170 clp->cl_clientid.cl_id - nn->clientid_base, in create_client()
3232 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in add_to_unconfirmed() local
3234 lockdep_assert_held(&nn->client_lock); in add_to_unconfirmed()
3237 add_clp_to_name_tree(clp, &nn->unconf_name_tree); in add_to_unconfirmed()
3239 list_add(&clp->cl_idhash, &nn->unconf_id_hashtbl[idhashval]); in add_to_unconfirmed()
3247 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in move_to_confirmed() local
3249 lockdep_assert_held(&nn->client_lock); in move_to_confirmed()
3251 list_move(&clp->cl_idhash, &nn->conf_id_hashtbl[idhashval]); in move_to_confirmed()
3252 rb_erase(&clp->cl_namenode, &nn->unconf_name_tree); in move_to_confirmed()
3253 add_clp_to_name_tree(clp, &nn->conf_name_tree); in move_to_confirmed()
3277 find_confirmed_client(clientid_t *clid, bool sessions, struct nfsd_net *nn) in find_confirmed_client() argument
3279 struct list_head *tbl = nn->conf_id_hashtbl; in find_confirmed_client()
3281 lockdep_assert_held(&nn->client_lock); in find_confirmed_client()
3286 find_unconfirmed_client(clientid_t *clid, bool sessions, struct nfsd_net *nn) in find_unconfirmed_client() argument
3288 struct list_head *tbl = nn->unconf_id_hashtbl; in find_unconfirmed_client()
3290 lockdep_assert_held(&nn->client_lock); in find_unconfirmed_client()
3300 find_confirmed_client_by_name(struct xdr_netobj *name, struct nfsd_net *nn) in find_confirmed_client_by_name() argument
3302 lockdep_assert_held(&nn->client_lock); in find_confirmed_client_by_name()
3303 return find_clp_in_name_tree(name, &nn->conf_name_tree); in find_confirmed_client_by_name()
3307 find_unconfirmed_client_by_name(struct xdr_netobj *name, struct nfsd_net *nn) in find_unconfirmed_client_by_name() argument
3309 lockdep_assert_held(&nn->client_lock); in find_unconfirmed_client_by_name()
3310 return find_clp_in_name_tree(name, &nn->unconf_name_tree); in find_unconfirmed_client_by_name()
3520 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_exchange_id() local
3583 spin_lock(&nn->client_lock); in nfsd4_exchange_id()
3584 conf = find_confirmed_client_by_name(&exid->clname, nn); in nfsd4_exchange_id()
3635 unconf = find_unconfirmed_client_by_name(&exid->clname, nn); in nfsd4_exchange_id()
3670 spin_unlock(&nn->client_lock); in nfsd4_exchange_id()
3736 static __be32 check_forechannel_attrs(struct nfsd4_channel_attrs *ca, struct nfsd_net *nn) in check_forechannel_attrs() argument
3738 u32 maxrpc = nn->nfsd_serv->sv_max_mesg; in check_forechannel_attrs()
3761 ca->maxreqs = nfsd4_get_drc_mem(ca, nn); in check_forechannel_attrs()
3827 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_create_session() local
3834 status = check_forechannel_attrs(&cr_ses->fore_channel, nn); in nfsd4_create_session()
3848 spin_lock(&nn->client_lock); in nfsd4_create_session()
3851 unconf = find_unconfirmed_client(&cr_ses->clientid, true, nn); in nfsd4_create_session()
3852 conf = find_confirmed_client(&cr_ses->clientid, true, nn); in nfsd4_create_session()
3897 old = find_confirmed_client_by_name(&unconf->cl_name, nn); in nfsd4_create_session()
3923 spin_unlock(&nn->client_lock); in nfsd4_create_session()
3947 spin_unlock(&nn->client_lock); in nfsd4_create_session()
3978 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_backchannel_ctl() local
3984 spin_lock(&nn->client_lock); in nfsd4_backchannel_ctl()
3987 spin_unlock(&nn->client_lock); in nfsd4_backchannel_ctl()
4044 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_bind_conn_to_session() local
4048 spin_lock(&nn->client_lock); in nfsd4_bind_conn_to_session()
4050 spin_unlock(&nn->client_lock); in nfsd4_bind_conn_to_session()
4098 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_destroy_session() local
4107 spin_lock(&nn->client_lock); in nfsd4_destroy_session()
4118 spin_unlock(&nn->client_lock); in nfsd4_destroy_session()
4122 spin_lock(&nn->client_lock); in nfsd4_destroy_session()
4127 spin_unlock(&nn->client_lock); in nfsd4_destroy_session()
4221 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_sequence() local
4234 spin_lock(&nn->client_lock); in nfsd4_sequence()
4328 spin_unlock(&nn->client_lock); in nfsd4_sequence()
4360 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_destroy_clientid() local
4362 spin_lock(&nn->client_lock); in nfsd4_destroy_clientid()
4363 unconf = find_unconfirmed_client(&dc->clientid, true, nn); in nfsd4_destroy_clientid()
4364 conf = find_confirmed_client(&dc->clientid, true, nn); in nfsd4_destroy_clientid()
4390 spin_unlock(&nn->client_lock); in nfsd4_destroy_clientid()
4447 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_setclientid() local
4452 spin_lock(&nn->client_lock); in nfsd4_setclientid()
4453 conf = find_confirmed_client_by_name(&clname, nn); in nfsd4_setclientid()
4463 unconf = find_unconfirmed_client_by_name(&clname, nn); in nfsd4_setclientid()
4469 gen_confirm(new, nn); in nfsd4_setclientid()
4484 spin_unlock(&nn->client_lock); in nfsd4_setclientid()
4506 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_setclientid_confirm() local
4508 if (STALE_CLIENTID(clid, nn)) in nfsd4_setclientid_confirm()
4511 spin_lock(&nn->client_lock); in nfsd4_setclientid_confirm()
4512 conf = find_confirmed_client(clid, false, nn); in nfsd4_setclientid_confirm()
4513 unconf = find_unconfirmed_client(clid, false, nn); in nfsd4_setclientid_confirm()
4543 old = find_confirmed_client_by_name(&unconf->cl_name, nn); in nfsd4_setclientid_confirm()
4563 spin_unlock(&nn->client_lock); in nfsd4_setclientid_confirm()
4567 spin_lock(&nn->client_lock); in nfsd4_setclientid_confirm()
4570 spin_unlock(&nn->client_lock); in nfsd4_setclientid_confirm()
4662 struct nfsd_net *nn = shrink->private_data; in nfsd4_state_shrinker_count() local
4664 count = atomic_read(&nn->nfsd_courtesy_clients); in nfsd4_state_shrinker_count()
4668 queue_work(laundry_wq, &nn->nfsd_shrinker_work); in nfsd4_state_shrinker_count()
4679 nfsd4_init_leases_net(struct nfsd_net *nn) in nfsd4_init_leases_net() argument
4684 nn->nfsd4_lease = 90; /* default lease time */ in nfsd4_init_leases_net()
4685 nn->nfsd4_grace = 90; in nfsd4_init_leases_net()
4686 nn->somebody_reclaimed = false; in nfsd4_init_leases_net()
4687 nn->track_reclaim_completes = false; in nfsd4_init_leases_net()
4688 nn->clverifier_counter = get_random_u32(); in nfsd4_init_leases_net()
4689 nn->clientid_base = get_random_u32(); in nfsd4_init_leases_net()
4690 nn->clientid_counter = nn->clientid_base + 1; in nfsd4_init_leases_net()
4691 nn->s2s_cp_cl_id = nn->clientid_counter++; in nfsd4_init_leases_net()
4693 atomic_set(&nn->nfs4_client_count, 0); in nfsd4_init_leases_net()
4697 nn->nfs4_max_clients = max_t(int, max_clients, NFS4_CLIENTS_PER_GB); in nfsd4_init_leases_net()
4699 atomic_set(&nn->nfsd_courtesy_clients, 0); in nfsd4_init_leases_net()
5021 struct nfsd_net *nn = net_generic(s->st_stid.sc_client->net, in move_to_close_lru() local
5048 spin_lock(&nn->client_lock); in move_to_close_lru()
5051 list_move_tail(&oo->oo_close_lru, &nn->close_lru); in move_to_close_lru()
5053 spin_unlock(&nn->client_lock); in move_to_close_lru()
5189 struct nfsd_net *nn = net_generic(dp->dl_stid.sc_client->net, in nfsd4_cb_recall_prepare() local
5204 list_add_tail(&dp->dl_recall_lru, &nn->del_recall_lru); in nfsd4_cb_recall_prepare()
5276 struct nfsd_net *nn; in nfsd_break_deleg_cb() local
5283 nn = net_generic(clp->net, nfsd_net_id); in nfsd_break_deleg_cb()
5284 mod_delayed_work(laundry_wq, &nn->laundromat_work, 0); in nfsd_break_deleg_cb()
5353 struct nfsd_net *nn) in lookup_clientid() argument
5357 spin_lock(&nn->client_lock); in lookup_clientid()
5358 found = find_confirmed_client(clid, sessions, nn); in lookup_clientid()
5361 spin_unlock(&nn->client_lock); in lookup_clientid()
5367 struct nfsd_net *nn) in set_client() argument
5374 if (STALE_CLIENTID(clid, nn)) in set_client()
5380 cstate->clp = lookup_clientid(clid, false, nn); in set_client()
5388 struct nfsd4_open *open, struct nfsd_net *nn) in nfsd4_process_open1() argument
5404 status = set_client(clientid, cstate, nn); in nfsd4_process_open1()
6227 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_renew() local
6230 status = set_client(clid, cstate, nn); in nfsd4_renew()
6241 nfsd4_end_grace(struct nfsd_net *nn) in nfsd4_end_grace() argument
6244 if (nn->grace_ended) in nfsd4_end_grace()
6247 trace_nfsd_grace_complete(nn); in nfsd4_end_grace()
6248 nn->grace_ended = true; in nfsd4_end_grace()
6255 nfsd4_record_grace_done(nn); in nfsd4_end_grace()
6265 locks_end_grace(&nn->nfsd4_manager); in nfsd4_end_grace()
6277 static bool clients_still_reclaiming(struct nfsd_net *nn) in clients_still_reclaiming() argument
6279 time64_t double_grace_period_end = nn->boot_time + in clients_still_reclaiming()
6280 2 * nn->nfsd4_lease; in clients_still_reclaiming()
6282 if (nn->track_reclaim_completes && in clients_still_reclaiming()
6283 atomic_read(&nn->nr_reclaim_complete) == in clients_still_reclaiming()
6284 nn->reclaim_str_hashtbl_size) in clients_still_reclaiming()
6286 if (!nn->somebody_reclaimed) in clients_still_reclaiming()
6288 nn->somebody_reclaimed = false; in clients_still_reclaiming()
6315 void nfsd4_ssc_init_umount_work(struct nfsd_net *nn) in nfsd4_ssc_init_umount_work() argument
6317 spin_lock_init(&nn->nfsd_ssc_lock); in nfsd4_ssc_init_umount_work()
6318 INIT_LIST_HEAD(&nn->nfsd_ssc_mount_list); in nfsd4_ssc_init_umount_work()
6319 init_waitqueue_head(&nn->nfsd_ssc_waitq); in nfsd4_ssc_init_umount_work()
6326 static void nfsd4_ssc_shutdown_umount(struct nfsd_net *nn) in nfsd4_ssc_shutdown_umount() argument
6331 spin_lock(&nn->nfsd_ssc_lock); in nfsd4_ssc_shutdown_umount()
6332 list_for_each_entry_safe(ni, tmp, &nn->nfsd_ssc_mount_list, nsui_list) { in nfsd4_ssc_shutdown_umount()
6334 spin_unlock(&nn->nfsd_ssc_lock); in nfsd4_ssc_shutdown_umount()
6337 spin_lock(&nn->nfsd_ssc_lock); in nfsd4_ssc_shutdown_umount()
6339 spin_unlock(&nn->nfsd_ssc_lock); in nfsd4_ssc_shutdown_umount()
6342 static void nfsd4_ssc_expire_umount(struct nfsd_net *nn) in nfsd4_ssc_expire_umount() argument
6348 spin_lock(&nn->nfsd_ssc_lock); in nfsd4_ssc_expire_umount()
6349 list_for_each_entry_safe(ni, tmp, &nn->nfsd_ssc_mount_list, nsui_list) { in nfsd4_ssc_expire_umount()
6356 spin_unlock(&nn->nfsd_ssc_lock); in nfsd4_ssc_expire_umount()
6358 spin_lock(&nn->nfsd_ssc_lock); in nfsd4_ssc_expire_umount()
6371 wake_up_all(&nn->nfsd_ssc_waitq); in nfsd4_ssc_expire_umount()
6372 spin_unlock(&nn->nfsd_ssc_lock); in nfsd4_ssc_expire_umount()
6422 nfs4_get_client_reaplist(struct nfsd_net *nn, struct list_head *reaplist, in nfs4_get_client_reaplist() argument
6429 maxreap = (atomic_read(&nn->nfs4_client_count) >= nn->nfs4_max_clients) ? in nfs4_get_client_reaplist()
6432 spin_lock(&nn->client_lock); in nfs4_get_client_reaplist()
6433 list_for_each_safe(pos, next, &nn->client_lru) { in nfs4_get_client_reaplist()
6441 atomic_inc(&nn->nfsd_courtesy_clients); in nfs4_get_client_reaplist()
6455 spin_unlock(&nn->client_lock); in nfs4_get_client_reaplist()
6459 nfs4_get_courtesy_client_reaplist(struct nfsd_net *nn, in nfs4_get_courtesy_client_reaplist() argument
6469 spin_lock(&nn->client_lock); in nfs4_get_courtesy_client_reaplist()
6470 list_for_each_safe(pos, next, &nn->client_lru) { in nfs4_get_courtesy_client_reaplist()
6481 spin_unlock(&nn->client_lock); in nfs4_get_courtesy_client_reaplist()
6498 static void nfs40_clean_admin_revoked(struct nfsd_net *nn, in nfs40_clean_admin_revoked() argument
6503 spin_lock(&nn->client_lock); in nfs40_clean_admin_revoked()
6504 if (nn->nfs40_last_revoke == 0 || in nfs40_clean_admin_revoked()
6505 nn->nfs40_last_revoke > lt->cutoff) { in nfs40_clean_admin_revoked()
6506 spin_unlock(&nn->client_lock); in nfs40_clean_admin_revoked()
6509 nn->nfs40_last_revoke = 0; in nfs40_clean_admin_revoked()
6512 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfs40_clean_admin_revoked()
6523 spin_unlock(&nn->client_lock); in nfs40_clean_admin_revoked()
6527 spin_lock(&nn->client_lock); in nfs40_clean_admin_revoked()
6532 spin_unlock(&nn->client_lock); in nfs40_clean_admin_revoked()
6536 nfs4_laundromat(struct nfsd_net *nn) in nfs4_laundromat() argument
6544 .cutoff = ktime_get_boottime_seconds() - nn->nfsd4_lease, in nfs4_laundromat()
6545 .new_timeo = nn->nfsd4_lease in nfs4_laundromat()
6551 if (clients_still_reclaiming(nn)) { in nfs4_laundromat()
6555 nfsd4_end_grace(nn); in nfs4_laundromat()
6557 spin_lock(&nn->s2s_cp_lock); in nfs4_laundromat()
6558 idr_for_each_entry(&nn->s2s_cp_stateids, cps_t, i) { in nfs4_laundromat()
6562 _free_cpntf_state_locked(nn, cps); in nfs4_laundromat()
6564 spin_unlock(&nn->s2s_cp_lock); in nfs4_laundromat()
6565 nfs4_get_client_reaplist(nn, &reaplist, &lt); in nfs4_laundromat()
6568 nfs40_clean_admin_revoked(nn, &lt); in nfs4_laundromat()
6571 list_for_each_safe(pos, next, &nn->del_recall_lru) { in nfs4_laundromat()
6587 spin_lock(&nn->client_lock); in nfs4_laundromat()
6588 while (!list_empty(&nn->close_lru)) { in nfs4_laundromat()
6589 oo = list_first_entry(&nn->close_lru, struct nfs4_openowner, in nfs4_laundromat()
6596 spin_unlock(&nn->client_lock); in nfs4_laundromat()
6598 spin_lock(&nn->client_lock); in nfs4_laundromat()
6600 spin_unlock(&nn->client_lock); in nfs4_laundromat()
6614 spin_lock(&nn->blocked_locks_lock); in nfs4_laundromat()
6615 while (!list_empty(&nn->blocked_locks_lru)) { in nfs4_laundromat()
6616 nbl = list_first_entry(&nn->blocked_locks_lru, in nfs4_laundromat()
6623 spin_unlock(&nn->blocked_locks_lock); in nfs4_laundromat()
6633 nfsd4_ssc_expire_umount(nn); in nfs4_laundromat()
6636 deleg_reaper(nn); in nfs4_laundromat()
6648 struct nfsd_net *nn = container_of(dwork, struct nfsd_net, in laundromat_main() local
6651 t = nfs4_laundromat(nn); in laundromat_main()
6652 queue_delayed_work(laundry_wq, &nn->laundromat_work, t*HZ); in laundromat_main()
6656 courtesy_client_reaper(struct nfsd_net *nn) in courtesy_client_reaper() argument
6660 nfs4_get_courtesy_client_reaplist(nn, &reaplist); in courtesy_client_reaper()
6665 deleg_reaper(struct nfsd_net *nn) in deleg_reaper() argument
6671 spin_lock(&nn->client_lock); in deleg_reaper()
6672 list_for_each_safe(pos, next, &nn->client_lru) { in deleg_reaper()
6689 spin_unlock(&nn->client_lock); in deleg_reaper()
6706 struct nfsd_net *nn = container_of(work, struct nfsd_net, in nfsd4_state_shrinker_worker() local
6709 courtesy_client_reaper(nn); in nfsd4_state_shrinker_worker()
6710 deleg_reaper(nn); in nfsd4_state_shrinker_worker()
6847 struct nfs4_stid **s, struct nfsd_net *nn) in nfsd4_lookup_stateid() argument
6870 status = set_client(&stateid->si_opaque.so_clid, cstate, nn); in nfsd4_lookup_stateid()
6957 _free_cpntf_state_locked(struct nfsd_net *nn, struct nfs4_cpntf_state *cps) in _free_cpntf_state_locked() argument
6963 idr_remove(&nn->s2s_cp_stateids, in _free_cpntf_state_locked()
6972 __be32 manage_cpntf_state(struct nfsd_net *nn, stateid_t *st, in manage_cpntf_state() argument
6979 if (st->si_opaque.so_clid.cl_id != nn->s2s_cp_cl_id) in manage_cpntf_state()
6981 spin_lock(&nn->s2s_cp_lock); in manage_cpntf_state()
6982 cps_t = idr_find(&nn->s2s_cp_stateids, st->si_opaque.so_id); in manage_cpntf_state()
6993 _free_cpntf_state_locked(nn, state); in manage_cpntf_state()
6996 spin_unlock(&nn->s2s_cp_lock); in manage_cpntf_state()
7004 static __be32 find_cpntf_state(struct nfsd_net *nn, stateid_t *st, in find_cpntf_state() argument
7011 status = manage_cpntf_state(nn, st, NULL, &cps); in find_cpntf_state()
7018 found = lookup_clientid(&cps->cp_p_clid, true, nn); in find_cpntf_state()
7032 nfs4_put_cpntf_state(nn, cps); in find_cpntf_state()
7036 void nfs4_put_cpntf_state(struct nfsd_net *nn, struct nfs4_cpntf_state *cps) in nfs4_put_cpntf_state() argument
7038 spin_lock(&nn->s2s_cp_lock); in nfs4_put_cpntf_state()
7039 _free_cpntf_state_locked(nn, cps); in nfs4_put_cpntf_state()
7040 spin_unlock(&nn->s2s_cp_lock); in nfs4_put_cpntf_state()
7064 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfs4_preprocess_stateid_op() local
7078 0, &s, nn); in nfs4_preprocess_stateid_op()
7080 status = find_cpntf_state(nn, stateid, &s); in nfs4_preprocess_stateid_op()
7264 struct nfsd_net *nn) in nfs4_preprocess_seqid_op() argument
7275 typemask, statusmask, &s, nn); in nfs4_preprocess_seqid_op()
7293 stateid_t *stateid, struct nfs4_ol_stateid **stpp, struct nfsd_net *nn) in nfs4_preprocess_confirmed_seqid_op() argument
7300 SC_TYPE_OPEN, 0, &stp, nn); in nfs4_preprocess_confirmed_seqid_op()
7321 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_open_confirm() local
7332 SC_TYPE_OPEN, 0, &stp, nn); in nfsd4_open_confirm()
7387 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_open_downgrade() local
7398 &od->od_stateid, &stp, nn); in nfsd4_open_downgrade()
7460 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_close() local
7469 &stp, nn); in nfsd4_close()
7515 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_delegreturn() local
7522 &s, nn); in nfsd4_delegreturn()
7592 struct nfsd_net *nn; in nfsd4_lm_lock_expirable() local
7595 nn = net_generic(clp->net, nfsd_net_id); in nfsd4_lm_lock_expirable()
7596 mod_delayed_work(laundry_wq, &nn->laundromat_work, 0); in nfsd4_lm_lock_expirable()
7614 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_lm_notify() local
7620 spin_lock(&nn->blocked_locks_lock); in nfsd4_lm_notify()
7626 spin_unlock(&nn->blocked_locks_lock); in nfsd4_lm_notify()
7937 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_lock() local
7964 &open_stp, nn); in nfsd4_lock()
7980 nn); in nfsd4_lock()
8049 nbl = find_or_allocate_block(lock_sop, &fp->fi_fhandle, nn); in nfsd4_lock()
8076 spin_lock(&nn->blocked_locks_lock); in nfsd4_lock()
8078 list_add_tail(&nbl->nbl_lru, &nn->blocked_locks_lru); in nfsd4_lock()
8080 spin_unlock(&nn->blocked_locks_lock); in nfsd4_lock()
8089 nn->somebody_reclaimed = true; in nfsd4_lock()
8112 spin_lock(&nn->blocked_locks_lock); in nfsd4_lock()
8120 spin_unlock(&nn->blocked_locks_lock); in nfsd4_lock()
8199 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_lockt() local
8208 status = set_client(&lockt->lt_clientid, cstate, nn); in nfsd4_lockt()
8283 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_locku() local
8294 &stp, nn); in nfsd4_locku()
8404 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_release_lockowner() local
8415 status = set_client(clid, cstate, nn); in nfsd4_release_lockowner()
8457 nfs4_has_reclaimed_state(struct xdr_netobj name, struct nfsd_net *nn) in nfs4_has_reclaimed_state() argument
8461 crp = nfsd4_find_reclaim_client(name, nn); in nfs4_has_reclaimed_state()
8473 struct nfsd_net *nn) in nfs4_client_to_reclaim() argument
8482 list_add(&crp->cr_strhash, &nn->reclaim_str_hashtbl[strhashval]); in nfs4_client_to_reclaim()
8488 nn->reclaim_str_hashtbl_size++; in nfs4_client_to_reclaim()
8494 nfs4_remove_reclaim_record(struct nfs4_client_reclaim *crp, struct nfsd_net *nn) in nfs4_remove_reclaim_record() argument
8500 nn->reclaim_str_hashtbl_size--; in nfs4_remove_reclaim_record()
8504 nfs4_release_reclaim(struct nfsd_net *nn) in nfs4_release_reclaim() argument
8510 while (!list_empty(&nn->reclaim_str_hashtbl[i])) { in nfs4_release_reclaim()
8511 crp = list_entry(nn->reclaim_str_hashtbl[i].next, in nfs4_release_reclaim()
8513 nfs4_remove_reclaim_record(crp, nn); in nfs4_release_reclaim()
8516 WARN_ON_ONCE(nn->reclaim_str_hashtbl_size); in nfs4_release_reclaim()
8522 nfsd4_find_reclaim_client(struct xdr_netobj name, struct nfsd_net *nn) in nfsd4_find_reclaim_client() argument
8528 list_for_each_entry(crp, &nn->reclaim_str_hashtbl[strhashval], cr_strhash) { in nfsd4_find_reclaim_client()
8571 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfs4_state_create_net() local
8574 nn->conf_id_hashtbl = kmalloc_array(CLIENT_HASH_SIZE, in nfs4_state_create_net()
8577 if (!nn->conf_id_hashtbl) in nfs4_state_create_net()
8579 nn->unconf_id_hashtbl = kmalloc_array(CLIENT_HASH_SIZE, in nfs4_state_create_net()
8582 if (!nn->unconf_id_hashtbl) in nfs4_state_create_net()
8584 nn->sessionid_hashtbl = kmalloc_array(SESSION_HASH_SIZE, in nfs4_state_create_net()
8587 if (!nn->sessionid_hashtbl) in nfs4_state_create_net()
8591 INIT_LIST_HEAD(&nn->conf_id_hashtbl[i]); in nfs4_state_create_net()
8592 INIT_LIST_HEAD(&nn->unconf_id_hashtbl[i]); in nfs4_state_create_net()
8595 INIT_LIST_HEAD(&nn->sessionid_hashtbl[i]); in nfs4_state_create_net()
8596 nn->conf_name_tree = RB_ROOT; in nfs4_state_create_net()
8597 nn->unconf_name_tree = RB_ROOT; in nfs4_state_create_net()
8598 nn->boot_time = ktime_get_real_seconds(); in nfs4_state_create_net()
8599 nn->grace_ended = false; in nfs4_state_create_net()
8600 nn->nfsd4_manager.block_opens = true; in nfs4_state_create_net()
8601 INIT_LIST_HEAD(&nn->nfsd4_manager.list); in nfs4_state_create_net()
8602 INIT_LIST_HEAD(&nn->client_lru); in nfs4_state_create_net()
8603 INIT_LIST_HEAD(&nn->close_lru); in nfs4_state_create_net()
8604 INIT_LIST_HEAD(&nn->del_recall_lru); in nfs4_state_create_net()
8605 spin_lock_init(&nn->client_lock); in nfs4_state_create_net()
8606 spin_lock_init(&nn->s2s_cp_lock); in nfs4_state_create_net()
8607 idr_init(&nn->s2s_cp_stateids); in nfs4_state_create_net()
8608 atomic_set(&nn->pending_async_copies, 0); in nfs4_state_create_net()
8610 spin_lock_init(&nn->blocked_locks_lock); in nfs4_state_create_net()
8611 INIT_LIST_HEAD(&nn->blocked_locks_lru); in nfs4_state_create_net()
8613 INIT_DELAYED_WORK(&nn->laundromat_work, laundromat_main); in nfs4_state_create_net()
8614 INIT_WORK(&nn->nfsd_shrinker_work, nfsd4_state_shrinker_worker); in nfs4_state_create_net()
8617 nn->nfsd_client_shrinker = shrinker_alloc(0, "nfsd-client"); in nfs4_state_create_net()
8618 if (!nn->nfsd_client_shrinker) in nfs4_state_create_net()
8621 nn->nfsd_client_shrinker->scan_objects = nfsd4_state_shrinker_scan; in nfs4_state_create_net()
8622 nn->nfsd_client_shrinker->count_objects = nfsd4_state_shrinker_count; in nfs4_state_create_net()
8623 nn->nfsd_client_shrinker->private_data = nn; in nfs4_state_create_net()
8625 shrinker_register(nn->nfsd_client_shrinker); in nfs4_state_create_net()
8631 kfree(nn->sessionid_hashtbl); in nfs4_state_create_net()
8633 kfree(nn->unconf_id_hashtbl); in nfs4_state_create_net()
8635 kfree(nn->conf_id_hashtbl); in nfs4_state_create_net()
8645 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfs4_state_destroy_net() local
8648 while (!list_empty(&nn->conf_id_hashtbl[i])) { in nfs4_state_destroy_net()
8649 clp = list_entry(nn->conf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); in nfs4_state_destroy_net()
8654 WARN_ON(!list_empty(&nn->blocked_locks_lru)); in nfs4_state_destroy_net()
8657 while (!list_empty(&nn->unconf_id_hashtbl[i])) { in nfs4_state_destroy_net()
8658 clp = list_entry(nn->unconf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); in nfs4_state_destroy_net()
8663 kfree(nn->sessionid_hashtbl); in nfs4_state_destroy_net()
8664 kfree(nn->unconf_id_hashtbl); in nfs4_state_destroy_net()
8665 kfree(nn->conf_id_hashtbl); in nfs4_state_destroy_net()
8672 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfs4_state_start_net() local
8678 locks_start_grace(net, &nn->nfsd4_manager); in nfs4_state_start_net()
8680 if (nn->track_reclaim_completes && nn->reclaim_str_hashtbl_size == 0) in nfs4_state_start_net()
8683 nn->nfsd4_grace, net->ns.inum); in nfs4_state_start_net()
8684 trace_nfsd_grace_start(nn); in nfs4_state_start_net()
8685 queue_delayed_work(laundry_wq, &nn->laundromat_work, nn->nfsd4_grace * HZ); in nfs4_state_start_net()
8691 queue_delayed_work(laundry_wq, &nn->laundromat_work, nn->nfsd4_lease * HZ); in nfs4_state_start_net()
8692 nfsd4_end_grace(nn); in nfs4_state_start_net()
8716 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfs4_state_shutdown_net() local
8718 shrinker_free(nn->nfsd_client_shrinker); in nfs4_state_shutdown_net()
8719 cancel_work_sync(&nn->nfsd_shrinker_work); in nfs4_state_shutdown_net()
8720 cancel_delayed_work_sync(&nn->laundromat_work); in nfs4_state_shutdown_net()
8721 locks_end_grace(&nn->nfsd4_manager); in nfs4_state_shutdown_net()
8725 list_for_each_safe(pos, next, &nn->del_recall_lru) { in nfs4_state_shutdown_net()
8740 nfsd4_ssc_shutdown_umount(nn); in nfs4_state_shutdown_net()
8886 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_deleg_getattr_conflict() local
8926 nfsd_stats_wdeleg_getattr_inc(nn); in nfsd4_deleg_getattr_conflict()