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()
595 static struct nfs4_ol_stateid * nfs4_alloc_open_stateid(struct nfs4_client *clp) in nfs4_alloc_open_stateid() argument
600 stid = nfs4_alloc_stid(clp, stateid_slab); in nfs4_alloc_open_stateid()
692 alloc_init_deleg(struct nfs4_client *clp, struct svc_fh *current_fh, in alloc_init_deleg() argument
704 dp = delegstateid(nfs4_alloc_stid(clp, deleg_slab)); in alloc_init_deleg()
734 struct nfs4_client *clp = s->sc_client; in nfs4_put_stid() local
736 might_lock(&clp->cl_lock); in nfs4_put_stid()
738 if (!atomic_dec_and_lock(&s->sc_count, &clp->cl_lock)) { in nfs4_put_stid()
742 idr_remove(&clp->cl_stateids, s->sc_stateid.si_opaque.so_id); in nfs4_put_stid()
743 spin_unlock(&clp->cl_lock); in nfs4_put_stid()
795 nfs4_get_existing_delegation(struct nfs4_client *clp, struct nfs4_file *fp) in nfs4_get_existing_delegation() argument
805 if (clp == searchclp) { in nfs4_get_existing_delegation()
829 struct nfs4_client *clp = dp->dl_stid.sc_client; in hash_delegation_locked() local
834 status = nfs4_get_existing_delegation(clp, fp); in hash_delegation_locked()
841 list_add(&dp->dl_perclnt, &clp->cl_delegations); in hash_delegation_locked()
882 struct nfs4_client *clp = dp->dl_stid.sc_client; in revoke_delegation() local
889 if (clp->cl_minorversion == 0) in revoke_delegation()
893 spin_lock(&clp->cl_lock); in revoke_delegation()
894 list_add(&dp->dl_recall_lru, &clp->cl_revoked); in revoke_delegation()
895 spin_unlock(&clp->cl_lock); in revoke_delegation()
1074 struct nfs4_client *clp = sop->so_client; in nfs4_put_stateowner() local
1076 might_lock(&clp->cl_lock); in nfs4_put_stateowner()
1078 if (!atomic_dec_and_lock(&sop->so_count, &clp->cl_lock)) in nfs4_put_stateowner()
1081 spin_unlock(&clp->cl_lock); in nfs4_put_stateowner()
1133 struct nfs4_client *clp = s->sc_client; in put_ol_stateid_locked() local
1135 lockdep_assert_held(&clp->cl_lock); in put_ol_stateid_locked()
1144 idr_remove(&clp->cl_stateids, s->sc_stateid.si_opaque.so_id); in put_ol_stateid_locked()
1173 struct nfs4_client *clp = lo->lo_owner.so_client; in unhash_lockowner_locked() local
1175 lockdep_assert_held(&clp->cl_lock); in unhash_lockowner_locked()
1205 struct nfs4_client *clp = lo->lo_owner.so_client; in release_lockowner() local
1211 spin_lock(&clp->cl_lock); in release_lockowner()
1219 spin_unlock(&clp->cl_lock); in release_lockowner()
1264 struct nfs4_client *clp = oo->oo_owner.so_client; in unhash_openowner_locked() local
1266 lockdep_assert_held(&clp->cl_lock); in unhash_openowner_locked()
1292 struct nfs4_client *clp = oo->oo_owner.so_client; in release_openowner() local
1297 spin_lock(&clp->cl_lock); in release_openowner()
1305 spin_unlock(&clp->cl_lock); in release_openowner()
1359 struct nfs4_client *clp = ses->se_client; in gen_sessionid() local
1363 sid->clientid = clp->cl_clientid; in gen_sessionid()
1478 struct nfs4_client *clp = c->cn_session->se_client; in nfsd4_conn_lost() local
1480 spin_lock(&clp->cl_lock); in nfsd4_conn_lost()
1485 nfsd4_probe_callback(clp); in nfsd4_conn_lost()
1486 spin_unlock(&clp->cl_lock); in nfsd4_conn_lost()
1511 struct nfs4_client *clp = ses->se_client; in nfsd4_hash_conn() local
1513 spin_lock(&clp->cl_lock); in nfsd4_hash_conn()
1515 spin_unlock(&clp->cl_lock); in nfsd4_hash_conn()
1549 struct nfs4_client *clp = s->se_client; in nfsd4_del_conns() local
1552 spin_lock(&clp->cl_lock); in nfsd4_del_conns()
1556 spin_unlock(&clp->cl_lock); in nfsd4_del_conns()
1561 spin_lock(&clp->cl_lock); in nfsd4_del_conns()
1563 spin_unlock(&clp->cl_lock); in nfsd4_del_conns()
1579 static void init_session(struct svc_rqst *rqstp, struct nfsd4_session *new, struct nfs4_client *clp… in init_session() argument
1584 new->se_client = clp; in init_session()
1596 spin_lock(&clp->cl_lock); in init_session()
1597 list_add(&new->se_perclnt, &clp->cl_sessions); in init_session()
1598 spin_unlock(&clp->cl_lock); in init_session()
1609 rpc_copy_addr((struct sockaddr *)&clp->cl_cb_conn.cb_addr, sa); in init_session()
1610 clp->cl_cb_conn.cb_addrlen = svc_addr_len(sa); in init_session()
1660 struct nfs4_client *clp = ses->se_client; in unhash_session() local
1661 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_session()
1694 struct nfs4_client *clp; in alloc_client() local
1697 clp = kzalloc(sizeof(struct nfs4_client), GFP_KERNEL); in alloc_client()
1698 if (clp == NULL) in alloc_client()
1700 clp->cl_name.data = kmemdup(name.data, name.len, GFP_KERNEL); in alloc_client()
1701 if (clp->cl_name.data == NULL) in alloc_client()
1703 clp->cl_ownerstr_hashtbl = kmalloc(sizeof(struct list_head) * in alloc_client()
1705 if (!clp->cl_ownerstr_hashtbl) in alloc_client()
1708 INIT_LIST_HEAD(&clp->cl_ownerstr_hashtbl[i]); in alloc_client()
1709 clp->cl_name.len = name.len; in alloc_client()
1710 INIT_LIST_HEAD(&clp->cl_sessions); in alloc_client()
1711 idr_init(&clp->cl_stateids); in alloc_client()
1712 atomic_set(&clp->cl_refcount, 0); in alloc_client()
1713 clp->cl_cb_state = NFSD4_CB_UNKNOWN; in alloc_client()
1714 INIT_LIST_HEAD(&clp->cl_idhash); in alloc_client()
1715 INIT_LIST_HEAD(&clp->cl_openowners); in alloc_client()
1716 INIT_LIST_HEAD(&clp->cl_delegations); in alloc_client()
1717 INIT_LIST_HEAD(&clp->cl_lru); in alloc_client()
1718 INIT_LIST_HEAD(&clp->cl_revoked); in alloc_client()
1720 INIT_LIST_HEAD(&clp->cl_lo_states); in alloc_client()
1722 spin_lock_init(&clp->cl_lock); in alloc_client()
1723 rpc_init_wait_queue(&clp->cl_cb_waitq, "Backchannel slot table"); in alloc_client()
1724 return clp; in alloc_client()
1726 kfree(clp->cl_name.data); in alloc_client()
1728 kfree(clp); in alloc_client()
1733 free_client(struct nfs4_client *clp) in free_client() argument
1735 while (!list_empty(&clp->cl_sessions)) { in free_client()
1737 ses = list_entry(clp->cl_sessions.next, struct nfsd4_session, in free_client()
1743 rpc_destroy_wait_queue(&clp->cl_cb_waitq); in free_client()
1744 free_svc_cred(&clp->cl_cred); in free_client()
1745 kfree(clp->cl_ownerstr_hashtbl); in free_client()
1746 kfree(clp->cl_name.data); in free_client()
1747 idr_destroy(&clp->cl_stateids); in free_client()
1748 kfree(clp); in free_client()
1753 unhash_client_locked(struct nfs4_client *clp) in unhash_client_locked() argument
1755 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_client_locked()
1761 clp->cl_time = 0; in unhash_client_locked()
1763 if (!list_empty(&clp->cl_idhash)) { in unhash_client_locked()
1764 list_del_init(&clp->cl_idhash); in unhash_client_locked()
1765 if (test_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags)) in unhash_client_locked()
1766 rb_erase(&clp->cl_namenode, &nn->conf_name_tree); in unhash_client_locked()
1768 rb_erase(&clp->cl_namenode, &nn->unconf_name_tree); in unhash_client_locked()
1770 list_del_init(&clp->cl_lru); in unhash_client_locked()
1771 spin_lock(&clp->cl_lock); in unhash_client_locked()
1772 list_for_each_entry(ses, &clp->cl_sessions, se_perclnt) in unhash_client_locked()
1774 spin_unlock(&clp->cl_lock); in unhash_client_locked()
1778 unhash_client(struct nfs4_client *clp) in unhash_client() argument
1780 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in unhash_client()
1783 unhash_client_locked(clp); in unhash_client()
1787 static __be32 mark_client_expired_locked(struct nfs4_client *clp) in mark_client_expired_locked() argument
1789 if (atomic_read(&clp->cl_refcount)) in mark_client_expired_locked()
1791 unhash_client_locked(clp); in mark_client_expired_locked()
1796 __destroy_client(struct nfs4_client *clp) in __destroy_client() argument
1804 while (!list_empty(&clp->cl_delegations)) { in __destroy_client()
1805 dp = list_entry(clp->cl_delegations.next, struct nfs4_delegation, dl_perclnt); in __destroy_client()
1817 while (!list_empty(&clp->cl_revoked)) { in __destroy_client()
1818 dp = list_entry(clp->cl_revoked.next, struct nfs4_delegation, dl_recall_lru); in __destroy_client()
1822 while (!list_empty(&clp->cl_openowners)) { in __destroy_client()
1823 oo = list_entry(clp->cl_openowners.next, struct nfs4_openowner, oo_perclient); in __destroy_client()
1827 nfsd4_return_all_client_layouts(clp); in __destroy_client()
1828 nfsd4_shutdown_callback(clp); in __destroy_client()
1829 if (clp->cl_cb_conn.cb_xprt) in __destroy_client()
1830 svc_xprt_put(clp->cl_cb_conn.cb_xprt); in __destroy_client()
1831 free_client(clp); in __destroy_client()
1835 destroy_client(struct nfs4_client *clp) in destroy_client() argument
1837 unhash_client(clp); in destroy_client()
1838 __destroy_client(clp); in destroy_client()
1841 static void expire_client(struct nfs4_client *clp) in expire_client() argument
1843 unhash_client(clp); in expire_client()
1844 nfsd4_client_record_remove(clp); in expire_client()
1845 __destroy_client(clp); in expire_client()
1977 static void gen_confirm(struct nfs4_client *clp, struct nfsd_net *nn) in gen_confirm() argument
1987 memcpy(clp->cl_confirm.data, verf, sizeof(clp->cl_confirm.data)); in gen_confirm()
1990 static void gen_clid(struct nfs4_client *clp, struct nfsd_net *nn) in gen_clid() argument
1992 clp->cl_clientid.cl_boot = nn->boot_time; in gen_clid()
1993 clp->cl_clientid.cl_id = nn->clientid_counter++; in gen_clid()
1994 gen_confirm(clp, nn); in gen_clid()
2028 struct nfs4_client *clp; in create_client() local
2033 clp = alloc_client(name); in create_client()
2034 if (clp == NULL) in create_client()
2037 ret = copy_cred(&clp->cl_cred, &rqstp->rq_cred); in create_client()
2039 free_client(clp); in create_client()
2042 nfsd4_init_cb(&clp->cl_cb_null, clp, NULL, NFSPROC4_CLNT_CB_NULL); in create_client()
2043 clp->cl_time = get_seconds(); in create_client()
2044 clear_bit(0, &clp->cl_cb_slot_busy); in create_client()
2045 copy_verf(clp, verf); in create_client()
2046 rpc_copy_addr((struct sockaddr *) &clp->cl_addr, sa); in create_client()
2047 clp->cl_cb_session = NULL; in create_client()
2048 clp->net = net; in create_client()
2049 return clp; in create_client()
2056 struct nfs4_client *clp; in add_clp_to_name_tree() local
2059 clp = rb_entry(*new, struct nfs4_client, cl_namenode); in add_clp_to_name_tree()
2062 if (compare_blob(&clp->cl_name, &new_clp->cl_name) > 0) in add_clp_to_name_tree()
2077 struct nfs4_client *clp; in find_clp_in_name_tree() local
2080 clp = rb_entry(node, struct nfs4_client, cl_namenode); in find_clp_in_name_tree()
2081 cmp = compare_blob(&clp->cl_name, name); in find_clp_in_name_tree()
2087 return clp; in find_clp_in_name_tree()
2093 add_to_unconfirmed(struct nfs4_client *clp) in add_to_unconfirmed() argument
2096 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in add_to_unconfirmed()
2100 clear_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags); in add_to_unconfirmed()
2101 add_clp_to_name_tree(clp, &nn->unconf_name_tree); in add_to_unconfirmed()
2102 idhashval = clientid_hashval(clp->cl_clientid.cl_id); in add_to_unconfirmed()
2103 list_add(&clp->cl_idhash, &nn->unconf_id_hashtbl[idhashval]); in add_to_unconfirmed()
2104 renew_client_locked(clp); in add_to_unconfirmed()
2108 move_to_confirmed(struct nfs4_client *clp) in move_to_confirmed() argument
2110 unsigned int idhashval = clientid_hashval(clp->cl_clientid.cl_id); in move_to_confirmed()
2111 struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id); in move_to_confirmed()
2115 dprintk("NFSD: move_to_confirm nfs4_client %p\n", clp); in move_to_confirmed()
2116 list_move(&clp->cl_idhash, &nn->conf_id_hashtbl[idhashval]); in move_to_confirmed()
2117 rb_erase(&clp->cl_namenode, &nn->unconf_name_tree); in move_to_confirmed()
2118 add_clp_to_name_tree(clp, &nn->conf_name_tree); in move_to_confirmed()
2119 set_bit(NFSD4_CLIENT_CONFIRMED, &clp->cl_flags); in move_to_confirmed()
2120 renew_client_locked(clp); in move_to_confirmed()
2126 struct nfs4_client *clp; in find_client_in_id_table() local
2129 list_for_each_entry(clp, &tbl[idhashval], cl_idhash) { in find_client_in_id_table()
2130 if (same_clid(&clp->cl_clientid, clid)) { in find_client_in_id_table()
2131 if ((bool)clp->cl_minorversion != sessions) in find_client_in_id_table()
2133 renew_client_locked(clp); in find_client_in_id_table()
2134 return clp; in find_client_in_id_table()
2158 static bool clp_used_exchangeid(struct nfs4_client *clp) in clp_used_exchangeid() argument
2160 return clp->cl_exchange_flags != 0; in clp_used_exchangeid()
2178 gen_callback(struct nfs4_client *clp, struct nfsd4_setclientid *se, struct svc_rqst *rqstp) in gen_callback() argument
2180 struct nfs4_cb_conn *conn = &clp->cl_cb_conn; in gen_callback()
2195 conn->cb_addrlen = rpc_uaddr2sockaddr(clp->net, se->se_callback_addr_val, in gen_callback()
2215 clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id); in gen_callback()
2324 static bool client_has_openowners(struct nfs4_client *clp) in client_has_openowners() argument
2328 list_for_each_entry(oo, &clp->cl_openowners, oo_perclient) { in client_has_openowners()
2335 static bool client_has_state(struct nfs4_client *clp) in client_has_state() argument
2337 return client_has_openowners(clp) in client_has_state()
2339 || !list_empty(&clp->cl_lo_states) in client_has_state()
2341 || !list_empty(&clp->cl_delegations) in client_has_state()
2342 || !list_empty(&clp->cl_sessions); in client_has_state()
2850 struct nfs4_client *clp = ses->se_client; in nfsd4_sequence_check_conn() local
2855 spin_lock(&clp->cl_lock); in nfsd4_sequence_check_conn()
2860 if (clp->cl_mach_cred) in nfsd4_sequence_check_conn()
2863 spin_unlock(&clp->cl_lock); in nfsd4_sequence_check_conn()
2870 spin_unlock(&clp->cl_lock); in nfsd4_sequence_check_conn()
2898 struct nfs4_client *clp; in nfsd4_sequence() local
2921 clp = session->se_client; in nfsd4_sequence()
2951 cstate->clp = clp; in nfsd4_sequence()
2986 cstate->clp = clp; in nfsd4_sequence()
2989 switch (clp->cl_cb_state) { in nfsd4_sequence()
2999 if (!list_empty(&clp->cl_revoked)) in nfsd4_sequence()
3023 } else if (cs->clp) in nfsd4_sequence_done()
3024 put_client_renew(cs->clp); in nfsd4_sequence_done()
3031 struct nfs4_client *clp = NULL; in nfsd4_destroy_clientid() local
3048 clp = conf; in nfsd4_destroy_clientid()
3050 clp = unconf; in nfsd4_destroy_clientid()
3055 if (!mach_creds_match(clp, rqstp)) { in nfsd4_destroy_clientid()
3056 clp = NULL; in nfsd4_destroy_clientid()
3060 unhash_client_locked(clp); in nfsd4_destroy_clientid()
3063 if (clp) in nfsd4_destroy_clientid()
3064 expire_client(clp); in nfsd4_destroy_clientid()
3347 … void *alloc_stateowner(struct kmem_cache *slab, struct xdr_netobj *owner, struct nfs4_client *clp) in alloc_stateowner() argument
3363 sop->so_client = clp; in alloc_stateowner()
3369 static void hash_openowner(struct nfs4_openowner *oo, struct nfs4_client *clp, unsigned int strhash… in hash_openowner() argument
3371 lockdep_assert_held(&clp->cl_lock); in hash_openowner()
3374 &clp->cl_ownerstr_hashtbl[strhashval]); in hash_openowner()
3375 list_add(&oo->oo_perclient, &clp->cl_openowners); in hash_openowner()
3420 struct nfs4_client *clp = cstate->clp; in alloc_init_open_stateowner() local
3423 oo = alloc_stateowner(openowner_slab, &open->op_owner, clp); in alloc_init_open_stateowner()
3435 spin_lock(&clp->cl_lock); in alloc_init_open_stateowner()
3436 ret = find_openstateowner_str_locked(strhashval, open, clp); in alloc_init_open_stateowner()
3438 hash_openowner(oo, clp, strhashval); in alloc_init_open_stateowner()
3443 spin_unlock(&clp->cl_lock); in alloc_init_open_stateowner()
3740 if (cstate->clp) { in lookup_clientid()
3741 found = cstate->clp; in lookup_clientid()
3766 cstate->clp = found; in lookup_clientid()
3775 struct nfs4_client *clp = NULL; in nfsd4_process_open1() local
3793 clp = cstate->clp; in nfsd4_process_open1()
3796 oo = find_openstateowner_str(strhashval, open, clp); in nfsd4_process_open1()
3817 open->op_stp = nfs4_alloc_open_stateid(clp); in nfsd4_process_open1()
3823 open->op_odstate = alloc_clnt_odstate(clp); in nfsd4_process_open1()
4008 static bool nfsd4_cb_channel_good(struct nfs4_client *clp) in nfsd4_cb_channel_good() argument
4010 if (clp->cl_cb_state == NFSD4_CB_UP) in nfsd4_cb_channel_good()
4017 return clp->cl_minorversion && clp->cl_cb_state == NFSD4_CB_UNKNOWN; in nfsd4_cb_channel_good()
4102 nfs4_set_delegation(struct nfs4_client *clp, struct svc_fh *fh, in nfs4_set_delegation() argument
4113 status = nfs4_get_existing_delegation(clp, fp); in nfs4_set_delegation()
4120 dp = alloc_init_deleg(clp, fh, odstate); in nfs4_set_delegation()
4184 struct nfs4_client *clp = stp->st_stid.sc_client; in nfs4_open_delegation() local
4204 if (locks_in_grace(clp->net)) in nfs4_open_delegation()
4223 dp = nfs4_set_delegation(clp, fh, stp->st_stid.sc_file, stp->st_clnt_odstate); in nfs4_open_delegation()
4406 struct nfs4_client *clp; in nfsd4_renew() local
4415 clp = cstate->clp; in nfsd4_renew()
4417 if (!list_empty(&clp->cl_delegations) in nfsd4_renew()
4418 && clp->cl_cb_state != NFSD4_CB_UP) in nfsd4_renew()
4461 struct nfs4_client *clp; in nfs4_laundromat() local
4474 clp = list_entry(pos, struct nfs4_client, cl_lru); in nfs4_laundromat()
4475 if (time_after((unsigned long)clp->cl_time, (unsigned long)cutoff)) { in nfs4_laundromat()
4476 t = clp->cl_time - cutoff; in nfs4_laundromat()
4480 if (mark_client_expired_locked(clp)) { in nfs4_laundromat()
4482 clp->cl_clientid.cl_id); in nfs4_laundromat()
4485 list_add(&clp->cl_lru, &reaplist); in nfs4_laundromat()
4489 clp = list_entry(pos, struct nfs4_client, cl_lru); in nfs4_laundromat()
4491 clp->cl_clientid.cl_id); in nfs4_laundromat()
4492 list_del_init(&clp->cl_lru); in nfs4_laundromat()
4493 expire_client(clp); in nfs4_laundromat()
4725 *s = find_stateid_by_type(cstate->clp, stateid, typemask); in nfsd4_lookup_stateid()
5128 struct nfs4_client *clp = s->st_stid.sc_client; in nfsd4_close_open_stateid() local
5133 spin_lock(&clp->cl_lock); in nfsd4_close_open_stateid()
5136 if (clp->cl_minorversion) { in nfsd4_close_open_stateid()
5139 spin_unlock(&clp->cl_lock); in nfsd4_close_open_stateid()
5142 spin_unlock(&clp->cl_lock); in nfsd4_close_open_stateid()
5145 move_to_close_lru(s, clp->net); in nfsd4_close_open_stateid()
5301 find_lockowner_str_locked(struct nfs4_client *clp, struct xdr_netobj *owner) in find_lockowner_str_locked() argument
5306 lockdep_assert_held(&clp->cl_lock); in find_lockowner_str_locked()
5308 list_for_each_entry(so, &clp->cl_ownerstr_hashtbl[strhashval], in find_lockowner_str_locked()
5319 find_lockowner_str(struct nfs4_client *clp, struct xdr_netobj *owner) in find_lockowner_str() argument
5323 spin_lock(&clp->cl_lock); in find_lockowner_str()
5324 lo = find_lockowner_str_locked(clp, owner); in find_lockowner_str()
5325 spin_unlock(&clp->cl_lock); in find_lockowner_str()
5354 alloc_init_lock_stateowner(unsigned int strhashval, struct nfs4_client *clp, in alloc_init_lock_stateowner() argument
5360 lo = alloc_stateowner(lockowner_slab, &lock->lk_new_owner, clp); in alloc_init_lock_stateowner()
5367 spin_lock(&clp->cl_lock); in alloc_init_lock_stateowner()
5368 ret = find_lockowner_str_locked(clp, &lock->lk_new_owner); in alloc_init_lock_stateowner()
5371 &clp->cl_ownerstr_hashtbl[strhashval]); in alloc_init_lock_stateowner()
5376 spin_unlock(&clp->cl_lock); in alloc_init_lock_stateowner()
5385 struct nfs4_client *clp = lo->lo_owner.so_client; in init_lock_stateid() local
5387 lockdep_assert_held(&clp->cl_lock); in init_lock_stateid()
5410 struct nfs4_client *clp = lo->lo_owner.so_client; in find_lock_stateid() local
5412 lockdep_assert_held(&clp->cl_lock); in find_lock_stateid()
5431 struct nfs4_client *clp = oo->oo_owner.so_client; in find_or_create_lock_stateid() local
5433 spin_lock(&clp->cl_lock); in find_or_create_lock_stateid()
5436 spin_unlock(&clp->cl_lock); in find_or_create_lock_stateid()
5437 ns = nfs4_alloc_stid(clp, stateid_slab); in find_or_create_lock_stateid()
5441 spin_lock(&clp->cl_lock); in find_or_create_lock_stateid()
5450 spin_unlock(&clp->cl_lock); in find_or_create_lock_stateid()
5767 lo = find_lockowner_str(cstate->clp, &lockt->lt_owner); in nfsd4_lockt()
5913 struct nfs4_client *clp; in nfsd4_release_lockowner() local
5922 clp = cstate->clp; in nfsd4_release_lockowner()
5924 spin_lock(&clp->cl_lock); in nfsd4_release_lockowner()
5925 list_for_each_entry(sop, &clp->cl_ownerstr_hashtbl[hashval], in nfsd4_release_lockowner()
5936 spin_unlock(&clp->cl_lock); in nfsd4_release_lockowner()
5944 spin_unlock(&clp->cl_lock); in nfsd4_release_lockowner()
6045 if (test_bit(NFSD4_CLIENT_RECLAIM_COMPLETE, &cstate->clp->cl_flags)) in nfs4_check_open_reclaim()
6048 if (nfsd4_client_record_check(cstate->clp)) in nfs4_check_open_reclaim()
6056 put_client(struct nfs4_client *clp) in put_client() argument
6058 atomic_dec(&clp->cl_refcount); in put_client()
6064 struct nfs4_client *clp; in nfsd_find_client() local
6071 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfsd_find_client()
6072 if (memcmp(&clp->cl_addr, addr, addr_size) == 0) in nfsd_find_client()
6073 return clp; in nfsd_find_client()
6081 struct nfs4_client *clp; in nfsd_inject_print_clients() local
6091 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfsd_inject_print_clients()
6092 rpc_ntop((struct sockaddr *)&clp->cl_addr, buf, sizeof(buf)); in nfsd_inject_print_clients()
6105 struct nfs4_client *clp; in nfsd_inject_forget_client() local
6113 clp = nfsd_find_client(addr, addr_size); in nfsd_inject_forget_client()
6114 if (clp) { in nfsd_inject_forget_client()
6115 if (mark_client_expired_locked(clp) == nfs_ok) in nfsd_inject_forget_client()
6118 clp = NULL; in nfsd_inject_forget_client()
6122 if (clp) in nfsd_inject_forget_client()
6123 expire_client(clp); in nfsd_inject_forget_client()
6132 struct nfs4_client *clp, *next; in nfsd_inject_forget_clients() local
6141 list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) { in nfsd_inject_forget_clients()
6142 if (mark_client_expired_locked(clp) == nfs_ok) { in nfsd_inject_forget_clients()
6143 list_add(&clp->cl_lru, &reaplist); in nfsd_inject_forget_clients()
6150 list_for_each_entry_safe(clp, next, &reaplist, cl_lru) in nfsd_inject_forget_clients()
6151 expire_client(clp); in nfsd_inject_forget_clients()
6156 static void nfsd_print_count(struct nfs4_client *clp, unsigned int count, in nfsd_print_count() argument
6160 rpc_ntop((struct sockaddr *)&clp->cl_addr, buf, sizeof(buf)); in nfsd_print_count()
6168 struct nfs4_client *clp = lst->st_stid.sc_client; in nfsd_inject_add_lock_to_list() local
6176 atomic_inc(&clp->cl_refcount); in nfsd_inject_add_lock_to_list()
6180 static u64 nfsd_foreach_client_lock(struct nfs4_client *clp, u64 max, in nfsd_foreach_client_lock() argument
6189 spin_lock(&clp->cl_lock); in nfsd_foreach_client_lock()
6190 list_for_each_entry(oop, &clp->cl_openowners, oo_perclient) { in nfsd_foreach_client_lock()
6215 spin_unlock(&clp->cl_lock); in nfsd_foreach_client_lock()
6221 nfsd_collect_client_locks(struct nfs4_client *clp, struct list_head *collect, in nfsd_collect_client_locks() argument
6224 return nfsd_foreach_client_lock(clp, max, collect, unhash_lock_stateid); in nfsd_collect_client_locks()
6228 nfsd_print_client_locks(struct nfs4_client *clp) in nfsd_print_client_locks() argument
6230 u64 count = nfsd_foreach_client_lock(clp, 0, NULL, NULL); in nfsd_print_client_locks()
6231 nfsd_print_count(clp, count, "locked files"); in nfsd_print_client_locks()
6238 struct nfs4_client *clp; in nfsd_inject_print_locks() local
6247 list_for_each_entry(clp, &nn->client_lru, cl_lru) in nfsd_inject_print_locks()
6248 count += nfsd_print_client_locks(clp); in nfsd_inject_print_locks()
6257 struct nfs4_client *clp; in nfsd_reap_locks() local
6262 clp = stp->st_stid.sc_client; in nfsd_reap_locks()
6264 put_client(clp); in nfsd_reap_locks()
6272 struct nfs4_client *clp; in nfsd_inject_forget_client_locks() local
6281 clp = nfsd_find_client(addr, addr_size); in nfsd_inject_forget_client_locks()
6282 if (clp) in nfsd_inject_forget_client_locks()
6283 count = nfsd_collect_client_locks(clp, &reaplist, 0); in nfsd_inject_forget_client_locks()
6293 struct nfs4_client *clp; in nfsd_inject_forget_locks() local
6302 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfsd_inject_forget_locks()
6303 count += nfsd_collect_client_locks(clp, &reaplist, max - count); in nfsd_inject_forget_locks()
6313 nfsd_foreach_client_openowner(struct nfs4_client *clp, u64 max, in nfsd_foreach_client_openowner() argument
6324 spin_lock(&clp->cl_lock); in nfsd_foreach_client_openowner()
6325 list_for_each_entry_safe(oop, next, &clp->cl_openowners, oo_perclient) { in nfsd_foreach_client_openowner()
6329 atomic_inc(&clp->cl_refcount); in nfsd_foreach_client_openowner()
6344 spin_unlock(&clp->cl_lock); in nfsd_foreach_client_openowner()
6350 nfsd_print_client_openowners(struct nfs4_client *clp) in nfsd_print_client_openowners() argument
6352 u64 count = nfsd_foreach_client_openowner(clp, 0, NULL, NULL); in nfsd_print_client_openowners()
6354 nfsd_print_count(clp, count, "openowners"); in nfsd_print_client_openowners()
6359 nfsd_collect_client_openowners(struct nfs4_client *clp, in nfsd_collect_client_openowners() argument
6362 return nfsd_foreach_client_openowner(clp, max, collect, in nfsd_collect_client_openowners()
6369 struct nfs4_client *clp; in nfsd_inject_print_openowners() local
6378 list_for_each_entry(clp, &nn->client_lru, cl_lru) in nfsd_inject_print_openowners()
6379 count += nfsd_print_client_openowners(clp); in nfsd_inject_print_openowners()
6388 struct nfs4_client *clp; in nfsd_reap_openowners() local
6393 clp = oop->oo_owner.so_client; in nfsd_reap_openowners()
6395 put_client(clp); in nfsd_reap_openowners()
6404 struct nfs4_client *clp; in nfsd_inject_forget_client_openowners() local
6413 clp = nfsd_find_client(addr, addr_size); in nfsd_inject_forget_client_openowners()
6414 if (clp) in nfsd_inject_forget_client_openowners()
6415 count = nfsd_collect_client_openowners(clp, &reaplist, 0); in nfsd_inject_forget_client_openowners()
6425 struct nfs4_client *clp; in nfsd_inject_forget_openowners() local
6434 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfsd_inject_forget_openowners()
6435 count += nfsd_collect_client_openowners(clp, &reaplist, in nfsd_inject_forget_openowners()
6445 static u64 nfsd_find_all_delegations(struct nfs4_client *clp, u64 max, in nfsd_find_all_delegations() argument
6456 list_for_each_entry_safe(dp, next, &clp->cl_delegations, dl_perclnt) { in nfsd_find_all_delegations()
6467 atomic_inc(&clp->cl_refcount); in nfsd_find_all_delegations()
6487 nfsd_print_client_delegations(struct nfs4_client *clp) in nfsd_print_client_delegations() argument
6489 u64 count = nfsd_find_all_delegations(clp, 0, NULL); in nfsd_print_client_delegations()
6491 nfsd_print_count(clp, count, "delegations"); in nfsd_print_client_delegations()
6498 struct nfs4_client *clp; in nfsd_inject_print_delegations() local
6507 list_for_each_entry(clp, &nn->client_lru, cl_lru) in nfsd_inject_print_delegations()
6508 count += nfsd_print_client_delegations(clp); in nfsd_inject_print_delegations()
6517 struct nfs4_client *clp; in nfsd_forget_delegations() local
6522 clp = dp->dl_stid.sc_client; in nfsd_forget_delegations()
6524 put_client(clp); in nfsd_forget_delegations()
6533 struct nfs4_client *clp; in nfsd_inject_forget_client_delegations() local
6542 clp = nfsd_find_client(addr, addr_size); in nfsd_inject_forget_client_delegations()
6543 if (clp) in nfsd_inject_forget_client_delegations()
6544 count = nfsd_find_all_delegations(clp, 0, &reaplist); in nfsd_inject_forget_client_delegations()
6555 struct nfs4_client *clp; in nfsd_inject_forget_delegations() local
6564 list_for_each_entry(clp, &nn->client_lru, cl_lru) { in nfsd_inject_forget_delegations()
6565 count += nfsd_find_all_delegations(clp, max - count, &reaplist); in nfsd_inject_forget_delegations()
6577 struct nfs4_client *clp; in nfsd_recall_delegations() local
6582 clp = dp->dl_stid.sc_client; in nfsd_recall_delegations()
6593 put_client(clp); in nfsd_recall_delegations()
6602 struct nfs4_client *clp; in nfsd_inject_recall_client_delegations() local
6611 clp = nfsd_find_client(addr, addr_size); in nfsd_inject_recall_client_delegations()
6612 if (clp) in nfsd_inject_recall_client_delegations()
6613 count = nfsd_find_all_delegations(clp, 0, &reaplist); in nfsd_inject_recall_client_delegations()
6624 struct nfs4_client *clp, *next; in nfsd_inject_recall_delegations() local
6633 list_for_each_entry_safe(clp, next, &nn->client_lru, cl_lru) { in nfsd_inject_recall_delegations()
6634 count += nfsd_find_all_delegations(clp, max - count, &reaplist); in nfsd_inject_recall_delegations()
6713 struct nfs4_client *clp = NULL; in nfs4_state_destroy_net() local
6718 clp = list_entry(nn->conf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); in nfs4_state_destroy_net()
6719 destroy_client(clp); in nfs4_state_destroy_net()
6725 clp = list_entry(nn->unconf_id_hashtbl[i].next, struct nfs4_client, cl_idhash); in nfs4_state_destroy_net()
6726 destroy_client(clp); in nfs4_state_destroy_net()