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);
166 static void nfsd4_dec_courtesy_client_count(struct nfsd_net *nn, in nfsd4_dec_courtesy_client_count() argument
170 atomic_add_unless(&nn->nfsd_courtesy_clients, -1, 0); in nfsd4_dec_courtesy_client_count()
175 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in get_client_locked() local
177 lockdep_assert_held(&nn->client_lock); in get_client_locked()
182 nfsd4_dec_courtesy_client_count(nn, clp); in get_client_locked()
191 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in renew_client_locked() local
202 list_move_tail(&clp->cl_lru, &nn->client_lru); in renew_client_locked()
204 nfsd4_dec_courtesy_client_count(nn, clp); in renew_client_locked()
210 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in put_client_renew_locked() local
212 lockdep_assert_held(&nn->client_lock); in put_client_renew_locked()
224 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in put_client_renew() local
226 if (!atomic_dec_and_lock(&clp->cl_rpc_users, &nn->client_lock)) in put_client_renew()
232 spin_unlock(&nn->client_lock); in put_client_renew()
251 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in nfsd4_put_session_locked() local
253 lockdep_assert_held(&nn->client_lock); in nfsd4_put_session_locked()
263 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in nfsd4_put_session() local
265 spin_lock(&nn->client_lock); in nfsd4_put_session()
267 spin_unlock(&nn->client_lock); in nfsd4_put_session()
272 struct nfsd_net *nn) in find_blocked_lock() argument
276 spin_lock(&nn->blocked_locks_lock); in find_blocked_lock()
286 spin_unlock(&nn->blocked_locks_lock); in find_blocked_lock()
294 struct nfsd_net *nn) in find_or_allocate_block() argument
298 nbl = find_blocked_lock(lo, fh, nn); in find_or_allocate_block()
336 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in remove_blocked_locks() local
341 spin_lock(&nn->blocked_locks_lock); in remove_blocked_locks()
350 spin_unlock(&nn->blocked_locks_lock); in remove_blocked_locks()
753 struct nfsd_net *nn; in nfs4_resolve_deny_conflicts_locked() local
775 nn = net_generic(clp->net, nfsd_net_id); in nfs4_resolve_deny_conflicts_locked()
776 mod_delayed_work(laundry_wq, &nn->laundromat_work, 0); in nfs4_resolve_deny_conflicts_locked()
983 static int nfs4_init_cp_state(struct nfsd_net *nn, copy_stateid_t *stid, in nfs4_init_cp_state() argument
988 stid->cs_stid.si_opaque.so_clid.cl_boot = (u32)nn->boot_time; in nfs4_init_cp_state()
989 stid->cs_stid.si_opaque.so_clid.cl_id = nn->s2s_cp_cl_id; in nfs4_init_cp_state()
992 spin_lock(&nn->s2s_cp_lock); in nfs4_init_cp_state()
993 new_id = idr_alloc_cyclic(&nn->s2s_cp_stateids, stid, 0, 0, GFP_NOWAIT); in nfs4_init_cp_state()
996 spin_unlock(&nn->s2s_cp_lock); in nfs4_init_cp_state()
1004 int nfs4_init_copy_state(struct nfsd_net *nn, struct nfsd4_copy *copy) in nfs4_init_copy_state() argument
1006 return nfs4_init_cp_state(nn, &copy->cp_stateid, NFS4_COPY_STID); in nfs4_init_copy_state()
1009 struct nfs4_cpntf_state *nfs4_alloc_init_cpntf_state(struct nfsd_net *nn, in nfs4_alloc_init_cpntf_state() argument
1019 if (!nfs4_init_cp_state(nn, &cps->cp_stateid, NFS4_COPYNOTIFY_STID)) in nfs4_alloc_init_cpntf_state()
1021 spin_lock(&nn->s2s_cp_lock); in nfs4_alloc_init_cpntf_state()
1023 spin_unlock(&nn->s2s_cp_lock); in nfs4_alloc_init_cpntf_state()
1032 struct nfsd_net *nn; in nfs4_free_copy_state() local
1036 nn = net_generic(copy->cp_clp->net, nfsd_net_id); in nfs4_free_copy_state()
1037 spin_lock(&nn->s2s_cp_lock); in nfs4_free_copy_state()
1038 idr_remove(&nn->s2s_cp_stateids, in nfs4_free_copy_state()
1040 spin_unlock(&nn->s2s_cp_lock); in nfs4_free_copy_state()
1046 struct nfsd_net *nn; in nfs4_free_cpntf_statelist() local
1048 nn = net_generic(net, nfsd_net_id); in nfs4_free_cpntf_statelist()
1049 spin_lock(&nn->s2s_cp_lock); in nfs4_free_cpntf_statelist()
1053 _free_cpntf_state_locked(nn, cps); in nfs4_free_cpntf_statelist()
1055 spin_unlock(&nn->s2s_cp_lock); in nfs4_free_cpntf_statelist()
1639 struct nfsd_net *nn = net_generic(oo->oo_owner.so_client->net, in release_last_closed_stateid() local
1643 spin_lock(&nn->client_lock); in release_last_closed_stateid()
1649 spin_unlock(&nn->client_lock); in release_last_closed_stateid()
1778 static u32 nfsd4_get_drc_mem(struct nfsd4_channel_attrs *ca, struct nfsd_net *nn) in nfsd4_get_drc_mem() argument
1805 scale_factor = max_t(unsigned int, 8, nn->nfsd_serv->sv_nrthreads); in nfsd4_get_drc_mem()
1973 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in init_session() local
1986 list_add(&new->se_hash, &nn->sessionid_hashtbl[idx]); in init_session()
2011 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in __find_in_sessionid_hashtbl() local
2013 lockdep_assert_held(&nn->client_lock); in __find_in_sessionid_hashtbl()
2018 list_for_each_entry(elem, &nn->sessionid_hashtbl[idx], se_hash) { in __find_in_sessionid_hashtbl()
2052 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_session() local
2054 lockdep_assert_held(&nn->client_lock); in unhash_session()
2064 STALE_CLIENTID(clientid_t *clid, struct nfsd_net *nn) in STALE_CLIENTID() argument
2071 if (clid->cl_boot == (u32)nn->boot_time) in STALE_CLIENTID()
2083 struct nfsd_net *nn) in alloc_client() argument
2088 if (atomic_read(&nn->nfs4_client_count) >= nn->nfs4_max_clients) { in alloc_client()
2089 mod_delayed_work(laundry_wq, &nn->laundromat_work, 0); in alloc_client()
2110 atomic_inc(&nn->nfs4_client_count); in alloc_client()
2176 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_client_locked() local
2179 lockdep_assert_held(&nn->client_lock); in unhash_client_locked()
2187 rb_erase(&clp->cl_namenode, &nn->conf_name_tree); in unhash_client_locked()
2189 rb_erase(&clp->cl_namenode, &nn->unconf_name_tree); in unhash_client_locked()
2201 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_client() local
2203 spin_lock(&nn->client_lock); in unhash_client()
2205 spin_unlock(&nn->client_lock); in unhash_client()
2219 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in __destroy_client() local
2263 atomic_add_unless(&nn->nfs4_client_count, -1, 0); in __destroy_client()
2264 nfsd4_dec_courtesy_client_count(nn, clp); in __destroy_client()
2278 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in inc_reclaim_complete() local
2280 if (!nn->track_reclaim_completes) in inc_reclaim_complete()
2282 if (!nfsd4_find_reclaim_client(clp->cl_name, nn)) in inc_reclaim_complete()
2284 if (atomic_inc_return(&nn->nr_reclaim_complete) == in inc_reclaim_complete()
2285 nn->reclaim_str_hashtbl_size) { in inc_reclaim_complete()
2288 nfsd4_end_grace(nn); in inc_reclaim_complete()
2429 static void gen_confirm(struct nfs4_client *clp, struct nfsd_net *nn) in gen_confirm() argument
2438 verf[1] = (__force __be32)nn->clverifier_counter++; in gen_confirm()
2442 static void gen_clid(struct nfs4_client *clp, struct nfsd_net *nn) in gen_clid() argument
2444 clp->cl_clientid.cl_boot = (u32)nn->boot_time; in gen_clid()
2445 clp->cl_clientid.cl_id = nn->clientid_counter++; in gen_clid()
2446 gen_confirm(clp, nn); in gen_clid()
2818 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in force_expire_client() local
2823 spin_lock(&nn->client_lock); in force_expire_client()
2825 spin_unlock(&nn->client_lock); in force_expire_client()
2828 spin_lock(&nn->client_lock); in force_expire_client()
2832 spin_unlock(&nn->client_lock); in force_expire_client()
2906 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in create_client() local
2909 clp = alloc_client(name, nn); in create_client()
2918 gen_clid(clp, nn); in create_client()
2928 nn, &clp->cl_nfsdfs, in create_client()
2929 clp->cl_clientid.cl_id - nn->clientid_base, in create_client()
2991 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in add_to_unconfirmed() local
2993 lockdep_assert_held(&nn->client_lock); in add_to_unconfirmed()
2996 add_clp_to_name_tree(clp, &nn->unconf_name_tree); in add_to_unconfirmed()
2998 list_add(&clp->cl_idhash, &nn->unconf_id_hashtbl[idhashval]); in add_to_unconfirmed()
3006 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in move_to_confirmed() local
3008 lockdep_assert_held(&nn->client_lock); in move_to_confirmed()
3010 list_move(&clp->cl_idhash, &nn->conf_id_hashtbl[idhashval]); in move_to_confirmed()
3011 rb_erase(&clp->cl_namenode, &nn->unconf_name_tree); in move_to_confirmed()
3012 add_clp_to_name_tree(clp, &nn->conf_name_tree); in move_to_confirmed()
3036 find_confirmed_client(clientid_t *clid, bool sessions, struct nfsd_net *nn) in find_confirmed_client() argument
3038 struct list_head *tbl = nn->conf_id_hashtbl; in find_confirmed_client()
3040 lockdep_assert_held(&nn->client_lock); in find_confirmed_client()
3045 find_unconfirmed_client(clientid_t *clid, bool sessions, struct nfsd_net *nn) in find_unconfirmed_client() argument
3047 struct list_head *tbl = nn->unconf_id_hashtbl; in find_unconfirmed_client()
3049 lockdep_assert_held(&nn->client_lock); in find_unconfirmed_client()
3059 find_confirmed_client_by_name(struct xdr_netobj *name, struct nfsd_net *nn) in find_confirmed_client_by_name() argument
3061 lockdep_assert_held(&nn->client_lock); in find_confirmed_client_by_name()
3062 return find_clp_in_name_tree(name, &nn->conf_name_tree); in find_confirmed_client_by_name()
3066 find_unconfirmed_client_by_name(struct xdr_netobj *name, struct nfsd_net *nn) in find_unconfirmed_client_by_name() argument
3068 lockdep_assert_held(&nn->client_lock); in find_unconfirmed_client_by_name()
3069 return find_clp_in_name_tree(name, &nn->unconf_name_tree); in find_unconfirmed_client_by_name()
3279 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_exchange_id() local
3342 spin_lock(&nn->client_lock); in nfsd4_exchange_id()
3343 conf = find_confirmed_client_by_name(&exid->clname, nn); in nfsd4_exchange_id()
3394 unconf = find_unconfirmed_client_by_name(&exid->clname, nn); in nfsd4_exchange_id()
3426 spin_unlock(&nn->client_lock); in nfsd4_exchange_id()
3496 static __be32 check_forechannel_attrs(struct nfsd4_channel_attrs *ca, struct nfsd_net *nn) in check_forechannel_attrs() argument
3498 u32 maxrpc = nn->nfsd_serv->sv_max_mesg; in check_forechannel_attrs()
3521 ca->maxreqs = nfsd4_get_drc_mem(ca, nn); in check_forechannel_attrs()
3587 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_create_session() local
3594 status = check_forechannel_attrs(&cr_ses->fore_channel, nn); in nfsd4_create_session()
3608 spin_lock(&nn->client_lock); in nfsd4_create_session()
3609 unconf = find_unconfirmed_client(&cr_ses->clientid, true, nn); in nfsd4_create_session()
3610 conf = find_confirmed_client(&cr_ses->clientid, true, nn); in nfsd4_create_session()
3641 old = find_confirmed_client_by_name(&unconf->cl_name, nn); in nfsd4_create_session()
3672 spin_unlock(&nn->client_lock); in nfsd4_create_session()
3682 spin_unlock(&nn->client_lock); in nfsd4_create_session()
3713 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_backchannel_ctl() local
3719 spin_lock(&nn->client_lock); in nfsd4_backchannel_ctl()
3722 spin_unlock(&nn->client_lock); in nfsd4_backchannel_ctl()
3779 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_bind_conn_to_session() local
3783 spin_lock(&nn->client_lock); in nfsd4_bind_conn_to_session()
3785 spin_unlock(&nn->client_lock); in nfsd4_bind_conn_to_session()
3833 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_destroy_session() local
3842 spin_lock(&nn->client_lock); in nfsd4_destroy_session()
3853 spin_unlock(&nn->client_lock); in nfsd4_destroy_session()
3857 spin_lock(&nn->client_lock); in nfsd4_destroy_session()
3862 spin_unlock(&nn->client_lock); in nfsd4_destroy_session()
3956 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_sequence() local
3969 spin_lock(&nn->client_lock); in nfsd4_sequence()
4059 spin_unlock(&nn->client_lock); in nfsd4_sequence()
4091 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_destroy_clientid() local
4093 spin_lock(&nn->client_lock); in nfsd4_destroy_clientid()
4094 unconf = find_unconfirmed_client(&dc->clientid, true, nn); in nfsd4_destroy_clientid()
4095 conf = find_confirmed_client(&dc->clientid, true, nn); in nfsd4_destroy_clientid()
4121 spin_unlock(&nn->client_lock); in nfsd4_destroy_clientid()
4178 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_setclientid() local
4183 spin_lock(&nn->client_lock); in nfsd4_setclientid()
4184 conf = find_confirmed_client_by_name(&clname, nn); in nfsd4_setclientid()
4194 unconf = find_unconfirmed_client_by_name(&clname, nn); in nfsd4_setclientid()
4200 gen_confirm(new, nn); in nfsd4_setclientid()
4215 spin_unlock(&nn->client_lock); in nfsd4_setclientid()
4237 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_setclientid_confirm() local
4239 if (STALE_CLIENTID(clid, nn)) in nfsd4_setclientid_confirm()
4242 spin_lock(&nn->client_lock); in nfsd4_setclientid_confirm()
4243 conf = find_confirmed_client(clid, false, nn); in nfsd4_setclientid_confirm()
4244 unconf = find_unconfirmed_client(clid, false, nn); in nfsd4_setclientid_confirm()
4274 old = find_confirmed_client_by_name(&unconf->cl_name, nn); in nfsd4_setclientid_confirm()
4294 spin_unlock(&nn->client_lock); in nfsd4_setclientid_confirm()
4298 spin_lock(&nn->client_lock); in nfsd4_setclientid_confirm()
4301 spin_unlock(&nn->client_lock); in nfsd4_setclientid_confirm()
4400 struct nfsd_net *nn = container_of(shrink, in nfsd4_state_shrinker_count() local
4403 count = atomic_read(&nn->nfsd_courtesy_clients); in nfsd4_state_shrinker_count()
4407 queue_work(laundry_wq, &nn->nfsd_shrinker_work); in nfsd4_state_shrinker_count()
4418 nfsd4_init_leases_net(struct nfsd_net *nn) in nfsd4_init_leases_net() argument
4423 nn->nfsd4_lease = 90; /* default lease time */ in nfsd4_init_leases_net()
4424 nn->nfsd4_grace = 90; in nfsd4_init_leases_net()
4425 nn->somebody_reclaimed = false; in nfsd4_init_leases_net()
4426 nn->track_reclaim_completes = false; in nfsd4_init_leases_net()
4427 nn->clverifier_counter = get_random_u32(); in nfsd4_init_leases_net()
4428 nn->clientid_base = get_random_u32(); in nfsd4_init_leases_net()
4429 nn->clientid_counter = nn->clientid_base + 1; in nfsd4_init_leases_net()
4430 nn->s2s_cp_cl_id = nn->clientid_counter++; in nfsd4_init_leases_net()
4432 atomic_set(&nn->nfs4_client_count, 0); in nfsd4_init_leases_net()
4436 nn->nfs4_max_clients = max_t(int, max_clients, NFS4_CLIENTS_PER_GB); in nfsd4_init_leases_net()
4438 atomic_set(&nn->nfsd_courtesy_clients, 0); in nfsd4_init_leases_net()
4677 struct nfsd_net *nn = net_generic(s->st_stid.sc_client->net, in move_to_close_lru() local
4699 spin_lock(&nn->client_lock); in move_to_close_lru()
4702 list_move_tail(&oo->oo_close_lru, &nn->close_lru); in move_to_close_lru()
4704 spin_unlock(&nn->client_lock); in move_to_close_lru()
4840 struct nfsd_net *nn = net_generic(dp->dl_stid.sc_client->net, in nfsd4_cb_recall_prepare() local
4855 list_add_tail(&dp->dl_recall_lru, &nn->del_recall_lru); in nfsd4_cb_recall_prepare()
4926 struct nfsd_net *nn; in nfsd_break_deleg_cb() local
4933 nn = net_generic(clp->net, nfsd_net_id); in nfsd_break_deleg_cb()
4934 mod_delayed_work(laundry_wq, &nn->laundromat_work, 0); in nfsd_break_deleg_cb()
5006 struct nfsd_net *nn) in lookup_clientid() argument
5010 spin_lock(&nn->client_lock); in lookup_clientid()
5011 found = find_confirmed_client(clid, sessions, nn); in lookup_clientid()
5014 spin_unlock(&nn->client_lock); in lookup_clientid()
5020 struct nfsd_net *nn) in set_client() argument
5027 if (STALE_CLIENTID(clid, nn)) in set_client()
5033 cstate->clp = lookup_clientid(clid, false, nn); in set_client()
5041 struct nfsd4_open *open, struct nfsd_net *nn) in nfsd4_process_open1() argument
5057 status = set_client(clientid, cstate, nn); in nfsd4_process_open1()
5855 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_renew() local
5858 status = set_client(clid, cstate, nn); in nfsd4_renew()
5869 nfsd4_end_grace(struct nfsd_net *nn) in nfsd4_end_grace() argument
5872 if (nn->grace_ended) in nfsd4_end_grace()
5875 trace_nfsd_grace_complete(nn); in nfsd4_end_grace()
5876 nn->grace_ended = true; in nfsd4_end_grace()
5883 nfsd4_record_grace_done(nn); in nfsd4_end_grace()
5893 locks_end_grace(&nn->nfsd4_manager); in nfsd4_end_grace()
5905 static bool clients_still_reclaiming(struct nfsd_net *nn) in clients_still_reclaiming() argument
5907 time64_t double_grace_period_end = nn->boot_time + in clients_still_reclaiming()
5908 2 * nn->nfsd4_lease; in clients_still_reclaiming()
5910 if (nn->track_reclaim_completes && in clients_still_reclaiming()
5911 atomic_read(&nn->nr_reclaim_complete) == in clients_still_reclaiming()
5912 nn->reclaim_str_hashtbl_size) in clients_still_reclaiming()
5914 if (!nn->somebody_reclaimed) in clients_still_reclaiming()
5916 nn->somebody_reclaimed = false; in clients_still_reclaiming()
5943 void nfsd4_ssc_init_umount_work(struct nfsd_net *nn) in nfsd4_ssc_init_umount_work() argument
5945 spin_lock_init(&nn->nfsd_ssc_lock); in nfsd4_ssc_init_umount_work()
5946 INIT_LIST_HEAD(&nn->nfsd_ssc_mount_list); in nfsd4_ssc_init_umount_work()
5947 init_waitqueue_head(&nn->nfsd_ssc_waitq); in nfsd4_ssc_init_umount_work()
5955 static void nfsd4_ssc_shutdown_umount(struct nfsd_net *nn) in nfsd4_ssc_shutdown_umount() argument
5960 spin_lock(&nn->nfsd_ssc_lock); in nfsd4_ssc_shutdown_umount()
5961 list_for_each_entry_safe(ni, tmp, &nn->nfsd_ssc_mount_list, nsui_list) { in nfsd4_ssc_shutdown_umount()
5963 spin_unlock(&nn->nfsd_ssc_lock); in nfsd4_ssc_shutdown_umount()
5966 spin_lock(&nn->nfsd_ssc_lock); in nfsd4_ssc_shutdown_umount()
5968 spin_unlock(&nn->nfsd_ssc_lock); in nfsd4_ssc_shutdown_umount()
5971 static void nfsd4_ssc_expire_umount(struct nfsd_net *nn) in nfsd4_ssc_expire_umount() argument
5977 spin_lock(&nn->nfsd_ssc_lock); in nfsd4_ssc_expire_umount()
5978 list_for_each_entry_safe(ni, tmp, &nn->nfsd_ssc_mount_list, nsui_list) { in nfsd4_ssc_expire_umount()
5985 spin_unlock(&nn->nfsd_ssc_lock); in nfsd4_ssc_expire_umount()
5987 spin_lock(&nn->nfsd_ssc_lock); in nfsd4_ssc_expire_umount()
6000 wake_up_all(&nn->nfsd_ssc_waitq); in nfsd4_ssc_expire_umount()
6001 spin_unlock(&nn->nfsd_ssc_lock); in nfsd4_ssc_expire_umount()
6051 nfs4_get_client_reaplist(struct nfsd_net *nn, struct list_head *reaplist, in nfs4_get_client_reaplist() argument
6058 maxreap = (atomic_read(&nn->nfs4_client_count) >= nn->nfs4_max_clients) ? in nfs4_get_client_reaplist()
6061 spin_lock(&nn->client_lock); in nfs4_get_client_reaplist()
6062 list_for_each_safe(pos, next, &nn->client_lru) { in nfs4_get_client_reaplist()
6070 atomic_inc(&nn->nfsd_courtesy_clients); in nfs4_get_client_reaplist()
6084 spin_unlock(&nn->client_lock); in nfs4_get_client_reaplist()
6088 nfs4_get_courtesy_client_reaplist(struct nfsd_net *nn, in nfs4_get_courtesy_client_reaplist() argument
6098 spin_lock(&nn->client_lock); in nfs4_get_courtesy_client_reaplist()
6099 list_for_each_safe(pos, next, &nn->client_lru) { in nfs4_get_courtesy_client_reaplist()
6110 spin_unlock(&nn->client_lock); in nfs4_get_courtesy_client_reaplist()
6128 nfs4_laundromat(struct nfsd_net *nn) in nfs4_laundromat() argument
6136 .cutoff = ktime_get_boottime_seconds() - nn->nfsd4_lease, in nfs4_laundromat()
6137 .new_timeo = nn->nfsd4_lease in nfs4_laundromat()
6143 if (clients_still_reclaiming(nn)) { in nfs4_laundromat()
6147 nfsd4_end_grace(nn); in nfs4_laundromat()
6149 spin_lock(&nn->s2s_cp_lock); in nfs4_laundromat()
6150 idr_for_each_entry(&nn->s2s_cp_stateids, cps_t, i) { in nfs4_laundromat()
6154 _free_cpntf_state_locked(nn, cps); in nfs4_laundromat()
6156 spin_unlock(&nn->s2s_cp_lock); in nfs4_laundromat()
6157 nfs4_get_client_reaplist(nn, &reaplist, &lt); in nfs4_laundromat()
6161 list_for_each_safe(pos, next, &nn->del_recall_lru) { in nfs4_laundromat()
6176 spin_lock(&nn->client_lock); in nfs4_laundromat()
6177 while (!list_empty(&nn->close_lru)) { in nfs4_laundromat()
6178 oo = list_first_entry(&nn->close_lru, struct nfs4_openowner, in nfs4_laundromat()
6185 spin_unlock(&nn->client_lock); in nfs4_laundromat()
6187 spin_lock(&nn->client_lock); in nfs4_laundromat()
6189 spin_unlock(&nn->client_lock); in nfs4_laundromat()
6203 spin_lock(&nn->blocked_locks_lock); in nfs4_laundromat()
6204 while (!list_empty(&nn->blocked_locks_lru)) { in nfs4_laundromat()
6205 nbl = list_first_entry(&nn->blocked_locks_lru, in nfs4_laundromat()
6212 spin_unlock(&nn->blocked_locks_lock); in nfs4_laundromat()
6222 nfsd4_ssc_expire_umount(nn); in nfs4_laundromat()
6235 struct nfsd_net *nn = container_of(dwork, struct nfsd_net, in laundromat_main() local
6238 t = nfs4_laundromat(nn); in laundromat_main()
6239 queue_delayed_work(laundry_wq, &nn->laundromat_work, t*HZ); in laundromat_main()
6243 courtesy_client_reaper(struct nfsd_net *nn) in courtesy_client_reaper() argument
6247 nfs4_get_courtesy_client_reaplist(nn, &reaplist); in courtesy_client_reaper()
6252 deleg_reaper(struct nfsd_net *nn) in deleg_reaper() argument
6259 spin_lock(&nn->client_lock); in deleg_reaper()
6260 list_for_each_safe(pos, next, &nn->client_lru) { in deleg_reaper()
6277 spin_unlock(&nn->client_lock); in deleg_reaper()
6293 struct nfsd_net *nn = container_of(work, struct nfsd_net, in nfsd4_state_shrinker_worker() local
6296 courtesy_client_reaper(nn); in nfsd4_state_shrinker_worker()
6297 deleg_reaper(nn); in nfsd4_state_shrinker_worker()
6430 struct nfs4_stid **s, struct nfsd_net *nn) in nfsd4_lookup_stateid() argument
6448 status = set_client(&stateid->si_opaque.so_clid, cstate, nn); in nfsd4_lookup_stateid()
6531 _free_cpntf_state_locked(struct nfsd_net *nn, struct nfs4_cpntf_state *cps) in _free_cpntf_state_locked() argument
6537 idr_remove(&nn->s2s_cp_stateids, in _free_cpntf_state_locked()
6546 __be32 manage_cpntf_state(struct nfsd_net *nn, stateid_t *st, in manage_cpntf_state() argument
6553 if (st->si_opaque.so_clid.cl_id != nn->s2s_cp_cl_id) in manage_cpntf_state()
6555 spin_lock(&nn->s2s_cp_lock); in manage_cpntf_state()
6556 cps_t = idr_find(&nn->s2s_cp_stateids, st->si_opaque.so_id); in manage_cpntf_state()
6567 _free_cpntf_state_locked(nn, state); in manage_cpntf_state()
6570 spin_unlock(&nn->s2s_cp_lock); in manage_cpntf_state()
6578 static __be32 find_cpntf_state(struct nfsd_net *nn, stateid_t *st, in find_cpntf_state() argument
6585 status = manage_cpntf_state(nn, st, NULL, &cps); in find_cpntf_state()
6592 found = lookup_clientid(&cps->cp_p_clid, true, nn); in find_cpntf_state()
6605 nfs4_put_cpntf_state(nn, cps); in find_cpntf_state()
6609 void nfs4_put_cpntf_state(struct nfsd_net *nn, struct nfs4_cpntf_state *cps) in nfs4_put_cpntf_state() argument
6611 spin_lock(&nn->s2s_cp_lock); in nfs4_put_cpntf_state()
6612 _free_cpntf_state_locked(nn, cps); in nfs4_put_cpntf_state()
6613 spin_unlock(&nn->s2s_cp_lock); in nfs4_put_cpntf_state()
6637 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfs4_preprocess_stateid_op() local
6655 &s, nn); in nfs4_preprocess_stateid_op()
6657 status = find_cpntf_state(nn, stateid, &s); in nfs4_preprocess_stateid_op()
6834 struct nfsd_net *nn) in nfs4_preprocess_seqid_op() argument
6843 status = nfsd4_lookup_stateid(cstate, stateid, typemask, &s, nn); in nfs4_preprocess_seqid_op()
6858 stateid_t *stateid, struct nfs4_ol_stateid **stpp, struct nfsd_net *nn) in nfs4_preprocess_confirmed_seqid_op() argument
6865 NFS4_OPEN_STID, &stp, nn); in nfs4_preprocess_confirmed_seqid_op()
6886 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_open_confirm() local
6897 NFS4_OPEN_STID, &stp, nn); in nfsd4_open_confirm()
6952 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_open_downgrade() local
6963 &od->od_stateid, &stp, nn); in nfsd4_open_downgrade()
7025 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_close() local
7033 &stp, nn); in nfsd4_close()
7075 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_delegreturn() local
7080 status = nfsd4_lookup_stateid(cstate, stateid, NFS4_DELEG_STID, &s, nn); in nfsd4_delegreturn()
7149 struct nfsd_net *nn; in nfsd4_lm_lock_expirable() local
7152 nn = net_generic(clp->net, nfsd_net_id); in nfsd4_lm_lock_expirable()
7153 mod_delayed_work(laundry_wq, &nn->laundromat_work, 0); in nfsd4_lm_lock_expirable()
7171 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_lm_notify() local
7177 spin_lock(&nn->blocked_locks_lock); in nfsd4_lm_notify()
7183 spin_unlock(&nn->blocked_locks_lock); in nfsd4_lm_notify()
7493 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfsd4_lock() local
7519 &open_stp, nn); in nfsd4_lock()
7534 NFS4_LOCK_STID, &lock_stp, nn); in nfsd4_lock()
7601 nbl = find_or_allocate_block(lock_sop, &fp->fi_fhandle, nn); in nfsd4_lock()
7628 spin_lock(&nn->blocked_locks_lock); in nfsd4_lock()
7630 list_add_tail(&nbl->nbl_lru, &nn->blocked_locks_lru); in nfsd4_lock()
7632 spin_unlock(&nn->blocked_locks_lock); in nfsd4_lock()
7641 nn->somebody_reclaimed = true; in nfsd4_lock()
7664 spin_lock(&nn->blocked_locks_lock); in nfsd4_lock()
7672 spin_unlock(&nn->blocked_locks_lock); in nfsd4_lock()
7743 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_lockt() local
7752 status = set_client(&lockt->lt_clientid, cstate, nn); in nfsd4_lockt()
7819 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_locku() local
7830 &stp, nn); in nfsd4_locku()
7940 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd4_release_lockowner() local
7951 status = set_client(clid, cstate, nn); in nfsd4_release_lockowner()
7993 nfs4_has_reclaimed_state(struct xdr_netobj name, struct nfsd_net *nn) in nfs4_has_reclaimed_state() argument
7997 crp = nfsd4_find_reclaim_client(name, nn); in nfs4_has_reclaimed_state()
8009 struct nfsd_net *nn) in nfs4_client_to_reclaim() argument
8018 list_add(&crp->cr_strhash, &nn->reclaim_str_hashtbl[strhashval]); in nfs4_client_to_reclaim()
8024 nn->reclaim_str_hashtbl_size++; in nfs4_client_to_reclaim()
8030 nfs4_remove_reclaim_record(struct nfs4_client_reclaim *crp, struct nfsd_net *nn) in nfs4_remove_reclaim_record() argument
8036 nn->reclaim_str_hashtbl_size--; in nfs4_remove_reclaim_record()
8040 nfs4_release_reclaim(struct nfsd_net *nn) in nfs4_release_reclaim() argument
8046 while (!list_empty(&nn->reclaim_str_hashtbl[i])) { in nfs4_release_reclaim()
8047 crp = list_entry(nn->reclaim_str_hashtbl[i].next, in nfs4_release_reclaim()
8049 nfs4_remove_reclaim_record(crp, nn); in nfs4_release_reclaim()
8052 WARN_ON_ONCE(nn->reclaim_str_hashtbl_size); in nfs4_release_reclaim()
8058 nfsd4_find_reclaim_client(struct xdr_netobj name, struct nfsd_net *nn) in nfsd4_find_reclaim_client() argument
8064 list_for_each_entry(crp, &nn->reclaim_str_hashtbl[strhashval], cr_strhash) { in nfsd4_find_reclaim_client()
8107 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfs4_state_create_net() local
8110 nn->conf_id_hashtbl = kmalloc_array(CLIENT_HASH_SIZE, in nfs4_state_create_net()
8113 if (!nn->conf_id_hashtbl) in nfs4_state_create_net()
8115 nn->unconf_id_hashtbl = kmalloc_array(CLIENT_HASH_SIZE, in nfs4_state_create_net()
8118 if (!nn->unconf_id_hashtbl) in nfs4_state_create_net()
8120 nn->sessionid_hashtbl = kmalloc_array(SESSION_HASH_SIZE, in nfs4_state_create_net()
8123 if (!nn->sessionid_hashtbl) in nfs4_state_create_net()
8127 INIT_LIST_HEAD(&nn->conf_id_hashtbl[i]); in nfs4_state_create_net()
8128 INIT_LIST_HEAD(&nn->unconf_id_hashtbl[i]); in nfs4_state_create_net()
8131 INIT_LIST_HEAD(&nn->sessionid_hashtbl[i]); in nfs4_state_create_net()
8132 nn->conf_name_tree = RB_ROOT; in nfs4_state_create_net()
8133 nn->unconf_name_tree = RB_ROOT; in nfs4_state_create_net()
8134 nn->boot_time = ktime_get_real_seconds(); in nfs4_state_create_net()
8135 nn->grace_ended = false; in nfs4_state_create_net()
8136 nn->nfsd4_manager.block_opens = true; in nfs4_state_create_net()
8137 INIT_LIST_HEAD(&nn->nfsd4_manager.list); in nfs4_state_create_net()
8138 INIT_LIST_HEAD(&nn->client_lru); in nfs4_state_create_net()
8139 INIT_LIST_HEAD(&nn->close_lru); in nfs4_state_create_net()
8140 INIT_LIST_HEAD(&nn->del_recall_lru); in nfs4_state_create_net()
8141 spin_lock_init(&nn->client_lock); in nfs4_state_create_net()
8142 spin_lock_init(&nn->s2s_cp_lock); in nfs4_state_create_net()
8143 idr_init(&nn->s2s_cp_stateids); in nfs4_state_create_net()
8145 spin_lock_init(&nn->blocked_locks_lock); in nfs4_state_create_net()
8146 INIT_LIST_HEAD(&nn->blocked_locks_lru); in nfs4_state_create_net()
8148 INIT_DELAYED_WORK(&nn->laundromat_work, laundromat_main); in nfs4_state_create_net()
8149 INIT_WORK(&nn->nfsd_shrinker_work, nfsd4_state_shrinker_worker); in nfs4_state_create_net()
8152 nn->nfsd_client_shrinker.scan_objects = nfsd4_state_shrinker_scan; in nfs4_state_create_net()
8153 nn->nfsd_client_shrinker.count_objects = nfsd4_state_shrinker_count; in nfs4_state_create_net()
8154 nn->nfsd_client_shrinker.seeks = DEFAULT_SEEKS; in nfs4_state_create_net()
8156 if (register_shrinker(&nn->nfsd_client_shrinker, "nfsd-client")) in nfs4_state_create_net()
8162 kfree(nn->sessionid_hashtbl); in nfs4_state_create_net()
8164 kfree(nn->unconf_id_hashtbl); in nfs4_state_create_net()
8166 kfree(nn->conf_id_hashtbl); in nfs4_state_create_net()
8176 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfs4_state_destroy_net() local
8179 while (!list_empty(&nn->conf_id_hashtbl[i])) { in nfs4_state_destroy_net()
8180 clp = list_entry(nn->conf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); in nfs4_state_destroy_net()
8185 WARN_ON(!list_empty(&nn->blocked_locks_lru)); in nfs4_state_destroy_net()
8188 while (!list_empty(&nn->unconf_id_hashtbl[i])) { in nfs4_state_destroy_net()
8189 clp = list_entry(nn->unconf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); in nfs4_state_destroy_net()
8194 kfree(nn->sessionid_hashtbl); in nfs4_state_destroy_net()
8195 kfree(nn->unconf_id_hashtbl); in nfs4_state_destroy_net()
8196 kfree(nn->conf_id_hashtbl); in nfs4_state_destroy_net()
8203 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfs4_state_start_net() local
8209 locks_start_grace(net, &nn->nfsd4_manager); in nfs4_state_start_net()
8211 if (nn->track_reclaim_completes && nn->reclaim_str_hashtbl_size == 0) in nfs4_state_start_net()
8214 nn->nfsd4_grace, net->ns.inum); in nfs4_state_start_net()
8215 trace_nfsd_grace_start(nn); in nfs4_state_start_net()
8216 queue_delayed_work(laundry_wq, &nn->laundromat_work, nn->nfsd4_grace * HZ); in nfs4_state_start_net()
8222 queue_delayed_work(laundry_wq, &nn->laundromat_work, nn->nfsd4_lease * HZ); in nfs4_state_start_net()
8223 nfsd4_end_grace(nn); in nfs4_state_start_net()
8253 struct nfsd_net *nn = net_generic(net, nfsd_net_id); in nfs4_state_shutdown_net() local
8255 unregister_shrinker(&nn->nfsd_client_shrinker); in nfs4_state_shutdown_net()
8256 cancel_work(&nn->nfsd_shrinker_work); in nfs4_state_shutdown_net()
8257 cancel_delayed_work_sync(&nn->laundromat_work); in nfs4_state_shutdown_net()
8258 locks_end_grace(&nn->nfsd4_manager); in nfs4_state_shutdown_net()
8262 list_for_each_safe(pos, next, &nn->del_recall_lru) { in nfs4_state_shutdown_net()
8277 nfsd4_ssc_shutdown_umount(nn); in nfs4_state_shutdown_net()