Lines Matching refs:clp

116 static bool is_client_expired(struct nfs4_client *clp)  in is_client_expired()  argument
118 return clp->cl_time == 0; in is_client_expired()
121 static __be32 get_client_locked(struct nfs4_client *clp) in get_client_locked() argument
123 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in get_client_locked()
127 if (is_client_expired(clp)) in get_client_locked()
129 atomic_inc(&clp->cl_refcount); in get_client_locked()
135 renew_client_locked(struct nfs4_client *clp) in renew_client_locked() argument
137 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in renew_client_locked()
139 if (is_client_expired(clp)) { in renew_client_locked()
143 clp->cl_clientid.cl_boot, in renew_client_locked()
144 clp->cl_clientid.cl_id); in renew_client_locked()
149 clp->cl_clientid.cl_boot, in renew_client_locked()
150 clp->cl_clientid.cl_id); in renew_client_locked()
151 list_move_tail(&clp->cl_lru, &nn->client_lru); in renew_client_locked()
152 clp->cl_time = get_seconds(); in renew_client_locked()
155 static void put_client_renew_locked(struct nfs4_client *clp) in put_client_renew_locked() argument
157 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in put_client_renew_locked()
161 if (!atomic_dec_and_test(&clp->cl_refcount)) in put_client_renew_locked()
163 if (!is_client_expired(clp)) in put_client_renew_locked()
164 renew_client_locked(clp); in put_client_renew_locked()
167 static void put_client_renew(struct nfs4_client *clp) in put_client_renew() argument
169 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in put_client_renew()
171 if (!atomic_dec_and_lock(&clp->cl_refcount, &nn->client_lock)) in put_client_renew()
173 if (!is_client_expired(clp)) in put_client_renew()
174 renew_client_locked(clp); in put_client_renew()
193 struct nfs4_client *clp = ses->se_client; in nfsd4_put_session_locked() local
194 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in nfsd4_put_session_locked()
200 put_client_renew_locked(clp); in nfsd4_put_session_locked()
205 struct nfs4_client *clp = ses->se_client; in nfsd4_put_session() local
206 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in nfsd4_put_session()
229 struct nfs4_client *clp) in find_openstateowner_str_locked() argument
233 lockdep_assert_held(&clp->cl_lock); in find_openstateowner_str_locked()
235 list_for_each_entry(so, &clp->cl_ownerstr_hashtbl[hashval], in find_openstateowner_str_locked()
247 struct nfs4_client *clp) in find_openstateowner_str() argument
251 spin_lock(&clp->cl_lock); in find_openstateowner_str()
252 oo = find_openstateowner_str_locked(hashval, open, clp); in find_openstateowner_str()
253 spin_unlock(&clp->cl_lock); in find_openstateowner_str()
484 alloc_clnt_odstate(struct nfs4_client *clp) in alloc_clnt_odstate() argument
490 co->co_client = clp; in alloc_clnt_odstate()
594 static struct nfs4_ol_stateid * nfs4_alloc_open_stateid(struct nfs4_client *clp) in nfs4_alloc_open_stateid() argument
599 stid = nfs4_alloc_stid(clp, stateid_slab); in nfs4_alloc_open_stateid()
691 alloc_init_deleg(struct nfs4_client *clp, struct svc_fh *current_fh, in alloc_init_deleg() argument
703 dp = delegstateid(nfs4_alloc_stid(clp, deleg_slab)); in alloc_init_deleg()
733 struct nfs4_client *clp = s->sc_client; in nfs4_put_stid() local
735 might_lock(&clp->cl_lock); in nfs4_put_stid()
737 if (!atomic_dec_and_lock(&s->sc_count, &clp->cl_lock)) { in nfs4_put_stid()
741 idr_remove(&clp->cl_stateids, s->sc_stateid.si_opaque.so_id); in nfs4_put_stid()
742 spin_unlock(&clp->cl_lock); in nfs4_put_stid()
782 nfs4_get_existing_delegation(struct nfs4_client *clp, struct nfs4_file *fp) in nfs4_get_existing_delegation() argument
792 if (clp == searchclp) { in nfs4_get_existing_delegation()
816 struct nfs4_client *clp = dp->dl_stid.sc_client; in hash_delegation_locked() local
821 status = nfs4_get_existing_delegation(clp, fp); in hash_delegation_locked()
828 list_add(&dp->dl_perclnt, &clp->cl_delegations); in hash_delegation_locked()
869 struct nfs4_client *clp = dp->dl_stid.sc_client; in revoke_delegation() local
876 if (clp->cl_minorversion == 0) in revoke_delegation()
880 spin_lock(&clp->cl_lock); in revoke_delegation()
881 list_add(&dp->dl_recall_lru, &clp->cl_revoked); in revoke_delegation()
882 spin_unlock(&clp->cl_lock); in revoke_delegation()
1055 struct nfs4_client *clp = sop->so_client; in nfs4_put_stateowner() local
1057 might_lock(&clp->cl_lock); in nfs4_put_stateowner()
1059 if (!atomic_dec_and_lock(&sop->so_count, &clp->cl_lock)) in nfs4_put_stateowner()
1062 spin_unlock(&clp->cl_lock); in nfs4_put_stateowner()
1115 struct nfs4_client *clp = s->sc_client; in put_ol_stateid_locked() local
1117 lockdep_assert_held(&clp->cl_lock); in put_ol_stateid_locked()
1126 idr_remove(&clp->cl_stateids, s->sc_stateid.si_opaque.so_id); in put_ol_stateid_locked()
1155 struct nfs4_client *clp = lo->lo_owner.so_client; in unhash_lockowner_locked() local
1157 lockdep_assert_held(&clp->cl_lock); in unhash_lockowner_locked()
1187 struct nfs4_client *clp = lo->lo_owner.so_client; in release_lockowner() local
1193 spin_lock(&clp->cl_lock); in release_lockowner()
1201 spin_unlock(&clp->cl_lock); in release_lockowner()
1246 struct nfs4_client *clp = oo->oo_owner.so_client; in unhash_openowner_locked() local
1248 lockdep_assert_held(&clp->cl_lock); in unhash_openowner_locked()
1274 struct nfs4_client *clp = oo->oo_owner.so_client; in release_openowner() local
1279 spin_lock(&clp->cl_lock); in release_openowner()
1287 spin_unlock(&clp->cl_lock); in release_openowner()
1341 struct nfs4_client *clp = ses->se_client; in gen_sessionid() local
1345 sid->clientid = clp->cl_clientid; in gen_sessionid()
1460 struct nfs4_client *clp = c->cn_session->se_client; in nfsd4_conn_lost() local
1462 spin_lock(&clp->cl_lock); in nfsd4_conn_lost()
1467 nfsd4_probe_callback(clp); in nfsd4_conn_lost()
1468 spin_unlock(&clp->cl_lock); in nfsd4_conn_lost()
1493 struct nfs4_client *clp = ses->se_client; in nfsd4_hash_conn() local
1495 spin_lock(&clp->cl_lock); in nfsd4_hash_conn()
1497 spin_unlock(&clp->cl_lock); in nfsd4_hash_conn()
1531 struct nfs4_client *clp = s->se_client; in nfsd4_del_conns() local
1534 spin_lock(&clp->cl_lock); in nfsd4_del_conns()
1538 spin_unlock(&clp->cl_lock); in nfsd4_del_conns()
1543 spin_lock(&clp->cl_lock); in nfsd4_del_conns()
1545 spin_unlock(&clp->cl_lock); in nfsd4_del_conns()
1561 static void init_session(struct svc_rqst *rqstp, struct nfsd4_session *new, struct nfs4_client *clp in init_session() argument
1566 new->se_client = clp; in init_session()
1578 spin_lock(&clp->cl_lock); in init_session()
1579 list_add(&new->se_perclnt, &clp->cl_sessions); in init_session()
1580 spin_unlock(&clp->cl_lock); in init_session()
1591 rpc_copy_addr((struct sockaddr *)&clp->cl_cb_conn.cb_addr, sa); in init_session()
1592 clp->cl_cb_conn.cb_addrlen = svc_addr_len(sa); in init_session()
1642 struct nfs4_client *clp = ses->se_client; in unhash_session() local
1643 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_session()
1676 struct nfs4_client *clp; in alloc_client() local
1679 clp = kzalloc(sizeof(struct nfs4_client), GFP_KERNEL); in alloc_client()
1680 if (clp == NULL) in alloc_client()
1682 clp->cl_name.data = kmemdup(name.data, name.len, GFP_KERNEL); in alloc_client()
1683 if (clp->cl_name.data == NULL) in alloc_client()
1685 clp->cl_ownerstr_hashtbl = kmalloc(sizeof(struct list_head) * in alloc_client()
1687 if (!clp->cl_ownerstr_hashtbl) in alloc_client()
1690 INIT_LIST_HEAD(&clp->cl_ownerstr_hashtbl[i]); in alloc_client()
1691 clp->cl_name.len = name.len; in alloc_client()
1692 INIT_LIST_HEAD(&clp->cl_sessions); in alloc_client()
1693 idr_init(&clp->cl_stateids); in alloc_client()
1694 atomic_set(&clp->cl_refcount, 0); in alloc_client()
1695 clp->cl_cb_state = NFSD4_CB_UNKNOWN; in alloc_client()
1696 INIT_LIST_HEAD(&clp->cl_idhash); in alloc_client()
1697 INIT_LIST_HEAD(&clp->cl_openowners); in alloc_client()
1698 INIT_LIST_HEAD(&clp->cl_delegations); in alloc_client()
1699 INIT_LIST_HEAD(&clp->cl_lru); in alloc_client()
1700 INIT_LIST_HEAD(&clp->cl_revoked); in alloc_client()
1702 INIT_LIST_HEAD(&clp->cl_lo_states); in alloc_client()
1704 spin_lock_init(&clp->cl_lock); in alloc_client()
1705 rpc_init_wait_queue(&clp->cl_cb_waitq, "Backchannel slot table"); in alloc_client()
1706 return clp; in alloc_client()
1708 kfree(clp->cl_name.data); in alloc_client()
1710 kfree(clp); in alloc_client()
1715 free_client(struct nfs4_client *clp) in free_client() argument
1717 while (!list_empty(&clp->cl_sessions)) { in free_client()
1719 ses = list_entry(clp->cl_sessions.next, struct nfsd4_session, in free_client()
1725 rpc_destroy_wait_queue(&clp->cl_cb_waitq); in free_client()
1726 free_svc_cred(&clp->cl_cred); in free_client()
1727 kfree(clp->cl_ownerstr_hashtbl); in free_client()
1728 kfree(clp->cl_name.data); in free_client()
1729 idr_destroy(&clp->cl_stateids); in free_client()
1730 kfree(clp); in free_client()
1735 unhash_client_locked(struct nfs4_client *clp) in unhash_client_locked() argument
1737 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_client_locked()
1743 clp->cl_time = 0; in unhash_client_locked()
1745 if (!list_empty(&clp->cl_idhash)) { in unhash_client_locked()
1746 list_del_init(&clp->cl_idhash); in unhash_client_locked()
1747 if (test_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags)) in unhash_client_locked()
1748 rb_erase(&clp->cl_namenode, &nn->conf_name_tree); in unhash_client_locked()
1750 rb_erase(&clp->cl_namenode, &nn->unconf_name_tree); in unhash_client_locked()
1752 list_del_init(&clp->cl_lru); in unhash_client_locked()
1753 spin_lock(&clp->cl_lock); in unhash_client_locked()
1754 list_for_each_entry(ses, &clp->cl_sessions, se_perclnt) in unhash_client_locked()
1756 spin_unlock(&clp->cl_lock); in unhash_client_locked()
1760 unhash_client(struct nfs4_client *clp) in unhash_client() argument
1762 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_client()
1765 unhash_client_locked(clp); in unhash_client()
1769 static __be32 mark_client_expired_locked(struct nfs4_client *clp) in mark_client_expired_locked() argument
1771 if (atomic_read(&clp->cl_refcount)) in mark_client_expired_locked()
1773 unhash_client_locked(clp); in mark_client_expired_locked()
1778 __destroy_client(struct nfs4_client *clp) in __destroy_client() argument
1786 while (!list_empty(&clp->cl_delegations)) { in __destroy_client()
1787 dp = list_entry(clp->cl_delegations.next, struct nfs4_delegation, dl_perclnt); in __destroy_client()
1799 while (!list_empty(&clp->cl_revoked)) { in __destroy_client()
1800 dp = list_entry(clp->cl_revoked.next, struct nfs4_delegation, dl_recall_lru); in __destroy_client()
1804 while (!list_empty(&clp->cl_openowners)) { in __destroy_client()
1805 oo = list_entry(clp->cl_openowners.next, struct nfs4_openowner, oo_perclient); in __destroy_client()
1809 nfsd4_return_all_client_layouts(clp); in __destroy_client()
1810 nfsd4_shutdown_callback(clp); in __destroy_client()
1811 if (clp->cl_cb_conn.cb_xprt) in __destroy_client()
1812 svc_xprt_put(clp->cl_cb_conn.cb_xprt); in __destroy_client()
1813 free_client(clp); in __destroy_client()
1817 destroy_client(struct nfs4_client *clp) in destroy_client() argument
1819 unhash_client(clp); in destroy_client()
1820 __destroy_client(clp); in destroy_client()
1823 static void expire_client(struct nfs4_client *clp) in expire_client() argument
1825 unhash_client(clp); in expire_client()
1826 nfsd4_client_record_remove(clp); in expire_client()
1827 __destroy_client(clp); in expire_client()
1959 static void gen_confirm(struct nfs4_client *clp, struct nfsd_net *nn) in gen_confirm() argument
1969 memcpy(clp->cl_confirm.data, verf, sizeof(clp->cl_confirm.data)); in gen_confirm()
1972 static void gen_clid(struct nfs4_client *clp, struct nfsd_net *nn) in gen_clid() argument
1974 clp->cl_clientid.cl_boot = nn->boot_time; in gen_clid()
1975 clp->cl_clientid.cl_id = nn->clientid_counter++; in gen_clid()
1976 gen_confirm(clp, nn); in gen_clid()
2010 struct nfs4_client *clp; in create_client() local
2015 clp = alloc_client(name); in create_client()
2016 if (clp == NULL) in create_client()
2019 ret = copy_cred(&clp->cl_cred, &rqstp->rq_cred); in create_client()
2021 free_client(clp); in create_client()
2024 nfsd4_init_cb(&clp->cl_cb_null, clp, NULL, NFSPROC4_CLNT_CB_NULL); in create_client()
2025 clp->cl_time = get_seconds(); in create_client()
2026 clear_bit(0, &clp->cl_cb_slot_busy); in create_client()
2027 copy_verf(clp, verf); in create_client()
2028 rpc_copy_addr((struct sockaddr *) &clp->cl_addr, sa); in create_client()
2029 clp->cl_cb_session = NULL; in create_client()
2030 clp->net = net; in create_client()
2031 return clp; in create_client()
2038 struct nfs4_client *clp; in add_clp_to_name_tree() local
2041 clp = rb_entry(*new, struct nfs4_client, cl_namenode); in add_clp_to_name_tree()
2044 if (compare_blob(&clp->cl_name, &new_clp->cl_name) > 0) in add_clp_to_name_tree()
2059 struct nfs4_client *clp; in find_clp_in_name_tree() local
2062 clp = rb_entry(node, struct nfs4_client, cl_namenode); in find_clp_in_name_tree()
2063 cmp = compare_blob(&clp->cl_name, name); in find_clp_in_name_tree()
2069 return clp; in find_clp_in_name_tree()
2075 add_to_unconfirmed(struct nfs4_client *clp) in add_to_unconfirmed() argument
2078 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in add_to_unconfirmed()
2082 clear_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags); in add_to_unconfirmed()
2083 add_clp_to_name_tree(clp, &nn->unconf_name_tree); in add_to_unconfirmed()
2084 idhashval = clientid_hashval(clp->cl_clientid.cl_id); in add_to_unconfirmed()
2085 list_add(&clp->cl_idhash, &nn->unconf_id_hashtbl[idhashval]); in add_to_unconfirmed()
2086 renew_client_locked(clp); in add_to_unconfirmed()
2090 move_to_confirmed(struct nfs4_client *clp) in move_to_confirmed() argument
2092 unsigned int idhashval = clientid_hashval(clp->cl_clientid.cl_id); in move_to_confirmed()
2093 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in move_to_confirmed()
2097 dprintk("NFSD: move_to_confirm nfs4_client %p\n", clp); in move_to_confirmed()
2098 list_move(&clp->cl_idhash, &nn->conf_id_hashtbl[idhashval]); in move_to_confirmed()
2099 rb_erase(&clp->cl_namenode, &nn->unconf_name_tree); in move_to_confirmed()
2100 add_clp_to_name_tree(clp, &nn->conf_name_tree); in move_to_confirmed()
2101 set_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags); in move_to_confirmed()
2102 renew_client_locked(clp); in move_to_confirmed()
2108 struct nfs4_client *clp; in find_client_in_id_table() local
2111 list_for_each_entry(clp, &tbl[idhashval], cl_idhash) { in find_client_in_id_table()
2112 if (same_clid(&clp->cl_clientid, clid)) { in find_client_in_id_table()
2113 if ((bool)clp->cl_minorversion != sessions) in find_client_in_id_table()
2115 renew_client_locked(clp); in find_client_in_id_table()
2116 return clp; in find_client_in_id_table()
2140 static bool clp_used_exchangeid(struct nfs4_client *clp) in clp_used_exchangeid() argument
2142 return clp->cl_exchange_flags != 0; in clp_used_exchangeid()
2160 gen_callback(struct nfs4_client *clp, struct nfsd4_setclientid *se, struct svc_rqst *rqstp) in gen_callback() argument
2162 struct nfs4_cb_conn *conn = &clp->cl_cb_conn; in gen_callback()
2177 conn->cb_addrlen = rpc_uaddr2sockaddr(clp->net, se->se_callback_addr_val, in gen_callback()
2197 clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id); in gen_callback()
2306 static bool client_has_state(struct nfs4_client *clp) in client_has_state() argument
2314 return !list_empty(&clp->cl_openowners) in client_has_state()
2315 || !list_empty(&clp->cl_delegations) in client_has_state()
2316 || !list_empty(&clp->cl_sessions); in client_has_state()
2826 struct nfs4_client *clp = ses->se_client; in nfsd4_sequence_check_conn() local
2831 spin_lock(&clp->cl_lock); in nfsd4_sequence_check_conn()
2836 if (clp->cl_mach_cred) in nfsd4_sequence_check_conn()
2839 spin_unlock(&clp->cl_lock); in nfsd4_sequence_check_conn()
2846 spin_unlock(&clp->cl_lock); in nfsd4_sequence_check_conn()
2874 struct nfs4_client *clp; in nfsd4_sequence() local
2897 clp = session->se_client; in nfsd4_sequence()
2927 cstate->clp = clp; in nfsd4_sequence()
2962 cstate->clp = clp; in nfsd4_sequence()
2965 switch (clp->cl_cb_state) { in nfsd4_sequence()
2975 if (!list_empty(&clp->cl_revoked)) in nfsd4_sequence()
2999 } else if (cs->clp) in nfsd4_sequence_done()
3000 put_client_renew(cs->clp); in nfsd4_sequence_done()
3007 struct nfs4_client *clp = NULL; in nfsd4_destroy_clientid() local
3024 clp = conf; in nfsd4_destroy_clientid()
3026 clp = unconf; in nfsd4_destroy_clientid()
3031 if (!mach_creds_match(clp, rqstp)) { in nfsd4_destroy_clientid()
3032 clp = NULL; in nfsd4_destroy_clientid()
3036 unhash_client_locked(clp); in nfsd4_destroy_clientid()
3039 if (clp) in nfsd4_destroy_clientid()
3040 expire_client(clp); in nfsd4_destroy_clientid()
3316 … void *alloc_stateowner(struct kmem_cache *slab, struct xdr_netobj *owner, struct nfs4_client *clp) in alloc_stateowner() argument
3332 sop->so_client = clp; in alloc_stateowner()
3338 static void hash_openowner(struct nfs4_openowner *oo, struct nfs4_client *clp, unsigned int strhash… in hash_openowner() argument
3340 lockdep_assert_held(&clp->cl_lock); in hash_openowner()
3343 &clp->cl_ownerstr_hashtbl[strhashval]); in hash_openowner()
3344 list_add(&oo->oo_perclient, &clp->cl_openowners); in hash_openowner()
3368 struct nfs4_client *clp = cstate->clp; in alloc_init_open_stateowner() local
3371 oo = alloc_stateowner(openowner_slab, &open->op_owner, clp); in alloc_init_open_stateowner()
3383 spin_lock(&clp->cl_lock); in alloc_init_open_stateowner()
3384 ret = find_openstateowner_str_locked(strhashval, open, clp); in alloc_init_open_stateowner()
3386 hash_openowner(oo, clp, strhashval); in alloc_init_open_stateowner()
3390 spin_unlock(&clp->cl_lock); in alloc_init_open_stateowner()
3672 if (cstate->clp) { in lookup_clientid()
3673 found = cstate->clp; in lookup_clientid()
3698 cstate->clp = found; in lookup_clientid()
3707 struct nfs4_client *clp = NULL; in nfsd4_process_open1() local
3725 clp = cstate->clp; in nfsd4_process_open1()
3728 oo = find_openstateowner_str(strhashval, open, clp); in nfsd4_process_open1()
3749 open->op_stp = nfs4_alloc_open_stateid(clp); in nfsd4_process_open1()
3755 open->op_odstate = alloc_clnt_odstate(clp); in nfsd4_process_open1()
3968 static bool nfsd4_cb_channel_good(struct nfs4_client *clp) in nfsd4_cb_channel_good() argument
3970 if (clp->cl_cb_state == NFSD4_CB_UP) in nfsd4_cb_channel_good()
3977 return clp->cl_minorversion && clp->cl_cb_state == NFSD4_CB_UNKNOWN; in nfsd4_cb_channel_good()
4062 nfs4_set_delegation(struct nfs4_client *clp, struct svc_fh *fh, in nfs4_set_delegation() argument
4073 status = nfs4_get_existing_delegation(clp, fp); in nfs4_set_delegation()
4080 dp = alloc_init_deleg(clp, fh, odstate); in nfs4_set_delegation()
4144 struct nfs4_client *clp = stp->st_stid.sc_client; in nfs4_open_delegation() local
4163 if (locks_in_grace(clp->net)) in nfs4_open_delegation()
4182 dp = nfs4_set_delegation(clp, fh, stp->st_stid.sc_file, stp->st_clnt_odstate); in nfs4_open_delegation()
4350 struct nfs4_client *clp; in nfsd4_renew() local
4359 clp = cstate->clp; in nfsd4_renew()
4361 if (!list_empty(&clp->cl_delegations) in nfsd4_renew()
4362 && clp->cl_cb_state != NFSD4_CB_UP) in nfsd4_renew()
4405 struct nfs4_client *clp; in nfs4_laundromat() local
4418 clp = list_entry(pos, struct nfs4_client, cl_lru); in nfs4_laundromat()
4419 if (time_after((unsigned long)clp->cl_time, (unsigned long)cutoff)) { in nfs4_laundromat()
4420 t = clp->cl_time - cutoff; in nfs4_laundromat()
4424 if (mark_client_expired_locked(clp)) { in nfs4_laundromat()
4426 clp->cl_clientid.cl_id); in nfs4_laundromat()
4429 list_add(&clp->cl_lru, &reaplist); in nfs4_laundromat()
4433 clp = list_entry(pos, struct nfs4_client, cl_lru); in nfs4_laundromat()
4435 clp->cl_clientid.cl_id); in nfs4_laundromat()
4436 list_del_init(&clp->cl_lru); in nfs4_laundromat()
4437 expire_client(clp); in nfs4_laundromat()
4671 *s = find_stateid_by_type(cstate->clp, stateid, typemask); in nfsd4_lookup_stateid()
5040 struct nfs4_client *clp = s->st_stid.sc_client; in nfsd4_close_open_stateid() local
5045 spin_lock(&clp->cl_lock); in nfsd4_close_open_stateid()
5048 if (clp->cl_minorversion) { in nfsd4_close_open_stateid()
5051 spin_unlock(&clp->cl_lock); in nfsd4_close_open_stateid()
5054 spin_unlock(&clp->cl_lock); in nfsd4_close_open_stateid()
5057 move_to_close_lru(s, clp->net); in nfsd4_close_open_stateid()
5218 struct nfs4_client *clp) in find_lockowner_str_locked() argument
5223 lockdep_assert_held(&clp->cl_lock); in find_lockowner_str_locked()
5225 list_for_each_entry(so, &clp->cl_ownerstr_hashtbl[strhashval], in find_lockowner_str_locked()
5237 struct nfs4_client *clp) in find_lockowner_str() argument
5241 spin_lock(&clp->cl_lock); in find_lockowner_str()
5242 lo = find_lockowner_str_locked(clid, owner, clp); in find_lockowner_str()
5243 spin_unlock(&clp->cl_lock); in find_lockowner_str()
5272 alloc_init_lock_stateowner(unsigned int strhashval, struct nfs4_client *clp, in alloc_init_lock_stateowner() argument
5278 lo = alloc_stateowner(lockowner_slab, &lock->lk_new_owner, clp); in alloc_init_lock_stateowner()
5285 spin_lock(&clp->cl_lock); in alloc_init_lock_stateowner()
5286 ret = find_lockowner_str_locked(&clp->cl_clientid, in alloc_init_lock_stateowner()
5287 &lock->lk_new_owner, clp); in alloc_init_lock_stateowner()
5290 &clp->cl_ownerstr_hashtbl[strhashval]); in alloc_init_lock_stateowner()
5294 spin_unlock(&clp->cl_lock); in alloc_init_lock_stateowner()
5303 struct nfs4_client *clp = lo->lo_owner.so_client; in init_lock_stateid() local
5305 lockdep_assert_held(&clp->cl_lock); in init_lock_stateid()
5328 struct nfs4_client *clp = lo->lo_owner.so_client; in find_lock_stateid() local
5330 lockdep_assert_held(&clp->cl_lock); in find_lock_stateid()
5349 struct nfs4_client *clp = oo->oo_owner.so_client; in find_or_create_lock_stateid() local
5351 spin_lock(&clp->cl_lock); in find_or_create_lock_stateid()
5354 spin_unlock(&clp->cl_lock); in find_or_create_lock_stateid()
5355 ns = nfs4_alloc_stid(clp, stateid_slab); in find_or_create_lock_stateid()
5359 spin_lock(&clp->cl_lock); in find_or_create_lock_stateid()
5368 spin_unlock(&clp->cl_lock); in find_or_create_lock_stateid()
5688 cstate->clp); in nfsd4_lockt()
5835 struct nfs4_client *clp; in nfsd4_release_lockowner() local
5844 clp = cstate->clp; in nfsd4_release_lockowner()
5846 spin_lock(&clp->cl_lock); in nfsd4_release_lockowner()
5847 list_for_each_entry(sop, &clp->cl_ownerstr_hashtbl[hashval], in nfsd4_release_lockowner()
5858 spin_unlock(&clp->cl_lock); in nfsd4_release_lockowner()
5866 spin_unlock(&clp->cl_lock); in nfsd4_release_lockowner()
5967 if (test_bit(NFSD4_CLIENT_RECLAIM_COMPLETE, &cstate->clp->cl_flags)) in nfs4_check_open_reclaim()
5970 if (nfsd4_client_record_check(cstate->clp)) in nfs4_check_open_reclaim()
5978 put_client(struct nfs4_client *clp) in put_client() argument
5980 atomic_dec(&clp->cl_refcount); in put_client()
5986 struct nfs4_client *clp; in nfsd_find_client() local
5993 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfsd_find_client()
5994 if (memcmp(&clp->cl_addr, addr, addr_size) == 0) in nfsd_find_client()
5995 return clp; in nfsd_find_client()
6003 struct nfs4_client *clp; in nfsd_inject_print_clients() local
6013 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfsd_inject_print_clients()
6014 rpc_ntop((struct sockaddr *)&clp->cl_addr, buf, sizeof(buf)); in nfsd_inject_print_clients()
6027 struct nfs4_client *clp; in nfsd_inject_forget_client() local
6035 clp = nfsd_find_client(addr, addr_size); in nfsd_inject_forget_client()
6036 if (clp) { in nfsd_inject_forget_client()
6037 if (mark_client_expired_locked(clp) == nfs_ok) in nfsd_inject_forget_client()
6040 clp = NULL; in nfsd_inject_forget_client()
6044 if (clp) in nfsd_inject_forget_client()
6045 expire_client(clp); in nfsd_inject_forget_client()
6054 struct nfs4_client *clp, *next; in nfsd_inject_forget_clients() local
6063 list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) { in nfsd_inject_forget_clients()
6064 if (mark_client_expired_locked(clp) == nfs_ok) { in nfsd_inject_forget_clients()
6065 list_add(&clp->cl_lru, &reaplist); in nfsd_inject_forget_clients()
6072 list_for_each_entry_safe(clp, next, &reaplist, cl_lru) in nfsd_inject_forget_clients()
6073 expire_client(clp); in nfsd_inject_forget_clients()
6078 static void nfsd_print_count(struct nfs4_client *clp, unsigned int count, in nfsd_print_count() argument
6082 rpc_ntop((struct sockaddr *)&clp->cl_addr, buf, sizeof(buf)); in nfsd_print_count()
6090 struct nfs4_client *clp = lst->st_stid.sc_client; in nfsd_inject_add_lock_to_list() local
6098 atomic_inc(&clp->cl_refcount); in nfsd_inject_add_lock_to_list()
6102 static u64 nfsd_foreach_client_lock(struct nfs4_client *clp, u64 max, in nfsd_foreach_client_lock() argument
6111 spin_lock(&clp->cl_lock); in nfsd_foreach_client_lock()
6112 list_for_each_entry(oop, &clp->cl_openowners, oo_perclient) { in nfsd_foreach_client_lock()
6137 spin_unlock(&clp->cl_lock); in nfsd_foreach_client_lock()
6143 nfsd_collect_client_locks(struct nfs4_client *clp, struct list_head *collect, in nfsd_collect_client_locks() argument
6146 return nfsd_foreach_client_lock(clp, max, collect, unhash_lock_stateid); in nfsd_collect_client_locks()
6150 nfsd_print_client_locks(struct nfs4_client *clp) in nfsd_print_client_locks() argument
6152 u64 count = nfsd_foreach_client_lock(clp, 0, NULL, NULL); in nfsd_print_client_locks()
6153 nfsd_print_count(clp, count, "locked files"); in nfsd_print_client_locks()
6160 struct nfs4_client *clp; in nfsd_inject_print_locks() local
6169 list_for_each_entry(clp, &nn->client_lru, cl_lru) in nfsd_inject_print_locks()
6170 count += nfsd_print_client_locks(clp); in nfsd_inject_print_locks()
6179 struct nfs4_client *clp; in nfsd_reap_locks() local
6184 clp = stp->st_stid.sc_client; in nfsd_reap_locks()
6186 put_client(clp); in nfsd_reap_locks()
6194 struct nfs4_client *clp; in nfsd_inject_forget_client_locks() local
6203 clp = nfsd_find_client(addr, addr_size); in nfsd_inject_forget_client_locks()
6204 if (clp) in nfsd_inject_forget_client_locks()
6205 count = nfsd_collect_client_locks(clp, &reaplist, 0); in nfsd_inject_forget_client_locks()
6215 struct nfs4_client *clp; in nfsd_inject_forget_locks() local
6224 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfsd_inject_forget_locks()
6225 count += nfsd_collect_client_locks(clp, &reaplist, max - count); in nfsd_inject_forget_locks()
6235 nfsd_foreach_client_openowner(struct nfs4_client *clp, u64 max, in nfsd_foreach_client_openowner() argument
6246 spin_lock(&clp->cl_lock); in nfsd_foreach_client_openowner()
6247 list_for_each_entry_safe(oop, next, &clp->cl_openowners, oo_perclient) { in nfsd_foreach_client_openowner()
6251 atomic_inc(&clp->cl_refcount); in nfsd_foreach_client_openowner()
6266 spin_unlock(&clp->cl_lock); in nfsd_foreach_client_openowner()
6272 nfsd_print_client_openowners(struct nfs4_client *clp) in nfsd_print_client_openowners() argument
6274 u64 count = nfsd_foreach_client_openowner(clp, 0, NULL, NULL); in nfsd_print_client_openowners()
6276 nfsd_print_count(clp, count, "openowners"); in nfsd_print_client_openowners()
6281 nfsd_collect_client_openowners(struct nfs4_client *clp, in nfsd_collect_client_openowners() argument
6284 return nfsd_foreach_client_openowner(clp, max, collect, in nfsd_collect_client_openowners()
6291 struct nfs4_client *clp; in nfsd_inject_print_openowners() local
6300 list_for_each_entry(clp, &nn->client_lru, cl_lru) in nfsd_inject_print_openowners()
6301 count += nfsd_print_client_openowners(clp); in nfsd_inject_print_openowners()
6310 struct nfs4_client *clp; in nfsd_reap_openowners() local
6315 clp = oop->oo_owner.so_client; in nfsd_reap_openowners()
6317 put_client(clp); in nfsd_reap_openowners()
6326 struct nfs4_client *clp; in nfsd_inject_forget_client_openowners() local
6335 clp = nfsd_find_client(addr, addr_size); in nfsd_inject_forget_client_openowners()
6336 if (clp) in nfsd_inject_forget_client_openowners()
6337 count = nfsd_collect_client_openowners(clp, &reaplist, 0); in nfsd_inject_forget_client_openowners()
6347 struct nfs4_client *clp; in nfsd_inject_forget_openowners() local
6356 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfsd_inject_forget_openowners()
6357 count += nfsd_collect_client_openowners(clp, &reaplist, in nfsd_inject_forget_openowners()
6367 static u64 nfsd_find_all_delegations(struct nfs4_client *clp, u64 max, in nfsd_find_all_delegations() argument
6378 list_for_each_entry_safe(dp, next, &clp->cl_delegations, dl_perclnt) { in nfsd_find_all_delegations()
6389 atomic_inc(&clp->cl_refcount); in nfsd_find_all_delegations()
6409 nfsd_print_client_delegations(struct nfs4_client *clp) in nfsd_print_client_delegations() argument
6411 u64 count = nfsd_find_all_delegations(clp, 0, NULL); in nfsd_print_client_delegations()
6413 nfsd_print_count(clp, count, "delegations"); in nfsd_print_client_delegations()
6420 struct nfs4_client *clp; in nfsd_inject_print_delegations() local
6429 list_for_each_entry(clp, &nn->client_lru, cl_lru) in nfsd_inject_print_delegations()
6430 count += nfsd_print_client_delegations(clp); in nfsd_inject_print_delegations()
6439 struct nfs4_client *clp; in nfsd_forget_delegations() local
6444 clp = dp->dl_stid.sc_client; in nfsd_forget_delegations()
6446 put_client(clp); in nfsd_forget_delegations()
6455 struct nfs4_client *clp; in nfsd_inject_forget_client_delegations() local
6464 clp = nfsd_find_client(addr, addr_size); in nfsd_inject_forget_client_delegations()
6465 if (clp) in nfsd_inject_forget_client_delegations()
6466 count = nfsd_find_all_delegations(clp, 0, &reaplist); in nfsd_inject_forget_client_delegations()
6477 struct nfs4_client *clp; in nfsd_inject_forget_delegations() local
6486 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfsd_inject_forget_delegations()
6487 count += nfsd_find_all_delegations(clp, max - count, &reaplist); in nfsd_inject_forget_delegations()
6499 struct nfs4_client *clp; in nfsd_recall_delegations() local
6504 clp = dp->dl_stid.sc_client; in nfsd_recall_delegations()
6515 put_client(clp); in nfsd_recall_delegations()
6524 struct nfs4_client *clp; in nfsd_inject_recall_client_delegations() local
6533 clp = nfsd_find_client(addr, addr_size); in nfsd_inject_recall_client_delegations()
6534 if (clp) in nfsd_inject_recall_client_delegations()
6535 count = nfsd_find_all_delegations(clp, 0, &reaplist); in nfsd_inject_recall_client_delegations()
6546 struct nfs4_client *clp, *next; in nfsd_inject_recall_delegations() local
6555 list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) { in nfsd_inject_recall_delegations()
6556 count += nfsd_find_all_delegations(clp, max - count, &reaplist); in nfsd_inject_recall_delegations()
6635 struct nfs4_client *clp = NULL; in nfs4_state_destroy_net() local
6640 clp = list_entry(nn->conf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); in nfs4_state_destroy_net()
6641 destroy_client(clp); in nfs4_state_destroy_net()
6647 clp = list_entry(nn->unconf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); in nfs4_state_destroy_net()
6648 destroy_client(clp); in nfs4_state_destroy_net()