Lines Matching refs:nn

88 nfsd_cache_hash(__be32 xid, struct nfsd_net *nn)  in nfsd_cache_hash()  argument
90 return hash_32(be32_to_cpu(xid), nn->maskbits); in nfsd_cache_hash()
95 struct nfsd_net *nn) in nfsd_reply_cache_alloc() argument
121 struct nfsd_net *nn) in nfsd_reply_cache_free_locked() argument
124 nn->drc_mem_usage -= rp->c_replvec.iov_len; in nfsd_reply_cache_free_locked()
130 atomic_dec(&nn->num_drc_entries); in nfsd_reply_cache_free_locked()
131 nn->drc_mem_usage -= sizeof(*rp); in nfsd_reply_cache_free_locked()
138 struct nfsd_net *nn) in nfsd_reply_cache_free() argument
141 nfsd_reply_cache_free_locked(b, rp, nn); in nfsd_reply_cache_free()
157 int nfsd_reply_cache_init(struct nfsd_net *nn) in nfsd_reply_cache_init() argument
163 nn->max_drc_entries = nfsd_cache_size_limit(); in nfsd_reply_cache_init()
164 atomic_set(&nn->num_drc_entries, 0); in nfsd_reply_cache_init()
165 hashsize = nfsd_hashsize(nn->max_drc_entries); in nfsd_reply_cache_init()
166 nn->maskbits = ilog2(hashsize); in nfsd_reply_cache_init()
168 nn->nfsd_reply_cache_shrinker.scan_objects = nfsd_reply_cache_scan; in nfsd_reply_cache_init()
169 nn->nfsd_reply_cache_shrinker.count_objects = nfsd_reply_cache_count; in nfsd_reply_cache_init()
170 nn->nfsd_reply_cache_shrinker.seeks = 1; in nfsd_reply_cache_init()
171 status = register_shrinker(&nn->nfsd_reply_cache_shrinker); in nfsd_reply_cache_init()
175 nn->drc_hashtbl = kvzalloc(array_size(hashsize, in nfsd_reply_cache_init()
176 sizeof(*nn->drc_hashtbl)), GFP_KERNEL); in nfsd_reply_cache_init()
177 if (!nn->drc_hashtbl) in nfsd_reply_cache_init()
181 INIT_LIST_HEAD(&nn->drc_hashtbl[i].lru_head); in nfsd_reply_cache_init()
182 spin_lock_init(&nn->drc_hashtbl[i].cache_lock); in nfsd_reply_cache_init()
184 nn->drc_hashsize = hashsize; in nfsd_reply_cache_init()
188 unregister_shrinker(&nn->nfsd_reply_cache_shrinker); in nfsd_reply_cache_init()
194 void nfsd_reply_cache_shutdown(struct nfsd_net *nn) in nfsd_reply_cache_shutdown() argument
199 unregister_shrinker(&nn->nfsd_reply_cache_shrinker); in nfsd_reply_cache_shutdown()
201 for (i = 0; i < nn->drc_hashsize; i++) { in nfsd_reply_cache_shutdown()
202 struct list_head *head = &nn->drc_hashtbl[i].lru_head; in nfsd_reply_cache_shutdown()
205 nfsd_reply_cache_free_locked(&nn->drc_hashtbl[i], in nfsd_reply_cache_shutdown()
206 rp, nn); in nfsd_reply_cache_shutdown()
210 kvfree(nn->drc_hashtbl); in nfsd_reply_cache_shutdown()
211 nn->drc_hashtbl = NULL; in nfsd_reply_cache_shutdown()
212 nn->drc_hashsize = 0; in nfsd_reply_cache_shutdown()
228 prune_bucket(struct nfsd_drc_bucket *b, struct nfsd_net *nn) in prune_bucket() argument
240 if (atomic_read(&nn->num_drc_entries) <= nn->max_drc_entries && in prune_bucket()
243 nfsd_reply_cache_free_locked(b, rp, nn); in prune_bucket()
254 prune_cache_entries(struct nfsd_net *nn) in prune_cache_entries() argument
259 for (i = 0; i < nn->drc_hashsize; i++) { in prune_cache_entries()
260 struct nfsd_drc_bucket *b = &nn->drc_hashtbl[i]; in prune_cache_entries()
265 freed += prune_bucket(b, nn); in prune_cache_entries()
274 struct nfsd_net *nn = container_of(shrink, in nfsd_reply_cache_count() local
277 return atomic_read(&nn->num_drc_entries); in nfsd_reply_cache_count()
283 struct nfsd_net *nn = container_of(shrink, in nfsd_reply_cache_scan() local
286 return prune_cache_entries(nn); in nfsd_reply_cache_scan()
323 const struct svc_cacherep *rp, struct nfsd_net *nn) in nfsd_cache_key_cmp() argument
327 ++nn->payload_misses; in nfsd_cache_key_cmp()
328 trace_nfsd_drc_mismatch(nn, key, rp); in nfsd_cache_key_cmp()
341 struct nfsd_net *nn) in nfsd_cache_insert() argument
354 cmp = nfsd_cache_key_cmp(key, rp, nn); in nfsd_cache_insert()
368 if (entries > nn->longest_chain) { in nfsd_cache_insert()
369 nn->longest_chain = entries; in nfsd_cache_insert()
370 nn->longest_chain_cachesize = atomic_read(&nn->num_drc_entries); in nfsd_cache_insert()
371 } else if (entries == nn->longest_chain) { in nfsd_cache_insert()
373 nn->longest_chain_cachesize = min_t(unsigned int, in nfsd_cache_insert()
374 nn->longest_chain_cachesize, in nfsd_cache_insert()
375 atomic_read(&nn->num_drc_entries)); in nfsd_cache_insert()
399 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd_cache_lookup() local
403 u32 hash = nfsd_cache_hash(xid, nn); in nfsd_cache_lookup()
404 struct nfsd_drc_bucket *b = &nn->drc_hashtbl[hash]; in nfsd_cache_lookup()
420 rp = nfsd_reply_cache_alloc(rqstp, csum, nn); in nfsd_cache_lookup()
425 found = nfsd_cache_insert(b, rp, nn); in nfsd_cache_lookup()
427 nfsd_reply_cache_free_locked(NULL, rp, nn); in nfsd_cache_lookup()
436 atomic_inc(&nn->num_drc_entries); in nfsd_cache_lookup()
437 nn->drc_mem_usage += sizeof(*rp); in nfsd_cache_lookup()
440 prune_bucket(b, nn); in nfsd_cache_lookup()
480 trace_nfsd_drc_found(nn, rqstp, rtn); in nfsd_cache_lookup()
506 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd_cache_update() local
517 hash = nfsd_cache_hash(rp->c_key.k_xid, nn); in nfsd_cache_update()
518 b = &nn->drc_hashtbl[hash]; in nfsd_cache_update()
525 nfsd_reply_cache_free(b, rp, nn); in nfsd_cache_update()
540 nfsd_reply_cache_free(b, rp, nn); in nfsd_cache_update()
547 nfsd_reply_cache_free(b, rp, nn); in nfsd_cache_update()
551 nn->drc_mem_usage += bufsize; in nfsd_cache_update()
587 struct nfsd_net *nn = m->private; in nfsd_reply_cache_stats_show() local
589 seq_printf(m, "max entries: %u\n", nn->max_drc_entries); in nfsd_reply_cache_stats_show()
591 atomic_read(&nn->num_drc_entries)); in nfsd_reply_cache_stats_show()
592 seq_printf(m, "hash buckets: %u\n", 1 << nn->maskbits); in nfsd_reply_cache_stats_show()
593 seq_printf(m, "mem usage: %u\n", nn->drc_mem_usage); in nfsd_reply_cache_stats_show()
597 seq_printf(m, "payload misses: %u\n", nn->payload_misses); in nfsd_reply_cache_stats_show()
598 seq_printf(m, "longest chain len: %u\n", nn->longest_chain); in nfsd_reply_cache_stats_show()
599 seq_printf(m, "cachesize at longest: %u\n", nn->longest_chain_cachesize); in nfsd_reply_cache_stats_show()
605 struct nfsd_net *nn = net_generic(file_inode(file)->i_sb->s_fs_info, in nfsd_reply_cache_stats_open() local
608 return single_open(file, nfsd_reply_cache_stats_show, nn); in nfsd_reply_cache_stats_open()