Lines Matching refs:nn

89 		    struct nfsd_net *nn)  in nfsd_cacherep_alloc()  argument
136 nfsd_cacherep_unlink_locked(struct nfsd_net *nn, struct nfsd_drc_bucket *b, in nfsd_cacherep_unlink_locked() argument
140 nfsd_stats_drc_mem_usage_sub(nn, rp->c_replvec.iov_len); in nfsd_cacherep_unlink_locked()
144 atomic_dec(&nn->num_drc_entries); in nfsd_cacherep_unlink_locked()
145 nfsd_stats_drc_mem_usage_sub(nn, sizeof(*rp)); in nfsd_cacherep_unlink_locked()
151 struct nfsd_net *nn) in nfsd_reply_cache_free_locked() argument
153 nfsd_cacherep_unlink_locked(nn, b, rp); in nfsd_reply_cache_free_locked()
159 struct nfsd_net *nn) in nfsd_reply_cache_free() argument
162 nfsd_cacherep_unlink_locked(nn, b, rp); in nfsd_reply_cache_free()
179 int nfsd_reply_cache_init(struct nfsd_net *nn) in nfsd_reply_cache_init() argument
185 nn->max_drc_entries = nfsd_cache_size_limit(); in nfsd_reply_cache_init()
186 atomic_set(&nn->num_drc_entries, 0); in nfsd_reply_cache_init()
187 hashsize = nfsd_hashsize(nn->max_drc_entries); in nfsd_reply_cache_init()
188 nn->maskbits = ilog2(hashsize); in nfsd_reply_cache_init()
190 nn->nfsd_reply_cache_shrinker.scan_objects = nfsd_reply_cache_scan; in nfsd_reply_cache_init()
191 nn->nfsd_reply_cache_shrinker.count_objects = nfsd_reply_cache_count; in nfsd_reply_cache_init()
192 nn->nfsd_reply_cache_shrinker.seeks = 1; in nfsd_reply_cache_init()
193 status = register_shrinker(&nn->nfsd_reply_cache_shrinker, in nfsd_reply_cache_init()
194 "nfsd-reply:%s", nn->nfsd_name); in nfsd_reply_cache_init()
198 nn->drc_hashtbl = kvzalloc(array_size(hashsize, in nfsd_reply_cache_init()
199 sizeof(*nn->drc_hashtbl)), GFP_KERNEL); in nfsd_reply_cache_init()
200 if (!nn->drc_hashtbl) in nfsd_reply_cache_init()
204 INIT_LIST_HEAD(&nn->drc_hashtbl[i].lru_head); in nfsd_reply_cache_init()
205 spin_lock_init(&nn->drc_hashtbl[i].cache_lock); in nfsd_reply_cache_init()
207 nn->drc_hashsize = hashsize; in nfsd_reply_cache_init()
211 unregister_shrinker(&nn->nfsd_reply_cache_shrinker); in nfsd_reply_cache_init()
216 void nfsd_reply_cache_shutdown(struct nfsd_net *nn) in nfsd_reply_cache_shutdown() argument
221 unregister_shrinker(&nn->nfsd_reply_cache_shrinker); in nfsd_reply_cache_shutdown()
223 for (i = 0; i < nn->drc_hashsize; i++) { in nfsd_reply_cache_shutdown()
224 struct list_head *head = &nn->drc_hashtbl[i].lru_head; in nfsd_reply_cache_shutdown()
227 nfsd_reply_cache_free_locked(&nn->drc_hashtbl[i], in nfsd_reply_cache_shutdown()
228 rp, nn); in nfsd_reply_cache_shutdown()
232 kvfree(nn->drc_hashtbl); in nfsd_reply_cache_shutdown()
233 nn->drc_hashtbl = NULL; in nfsd_reply_cache_shutdown()
234 nn->drc_hashsize = 0; in nfsd_reply_cache_shutdown()
250 nfsd_cache_bucket_find(__be32 xid, struct nfsd_net *nn) in nfsd_cache_bucket_find() argument
252 unsigned int hash = hash_32((__force u32)xid, nn->maskbits); in nfsd_cache_bucket_find()
254 return &nn->drc_hashtbl[hash]; in nfsd_cache_bucket_find()
262 nfsd_prune_bucket_locked(struct nfsd_net *nn, struct nfsd_drc_bucket *b, in nfsd_prune_bucket_locked() argument
280 if (atomic_read(&nn->num_drc_entries) <= nn->max_drc_entries && in nfsd_prune_bucket_locked()
284 nfsd_cacherep_unlink_locked(nn, b, rp); in nfsd_prune_bucket_locked()
305 struct nfsd_net *nn = container_of(shrink, in nfsd_reply_cache_count() local
308 return atomic_read(&nn->num_drc_entries); in nfsd_reply_cache_count()
325 struct nfsd_net *nn = container_of(shrink, in nfsd_reply_cache_scan() local
331 for (i = 0; i < nn->drc_hashsize; i++) { in nfsd_reply_cache_scan()
332 struct nfsd_drc_bucket *b = &nn->drc_hashtbl[i]; in nfsd_reply_cache_scan()
338 nfsd_prune_bucket_locked(nn, b, 0, &dispose); in nfsd_reply_cache_scan()
346 trace_nfsd_drc_gc(nn, freed); in nfsd_reply_cache_scan()
404 const struct nfsd_cacherep *rp, struct nfsd_net *nn) in nfsd_cache_key_cmp() argument
408 nfsd_stats_payload_misses_inc(nn); in nfsd_cache_key_cmp()
409 trace_nfsd_drc_mismatch(nn, key, rp); in nfsd_cache_key_cmp()
422 struct nfsd_net *nn) in nfsd_cache_insert() argument
435 cmp = nfsd_cache_key_cmp(key, rp, nn); in nfsd_cache_insert()
449 if (entries > nn->longest_chain) { in nfsd_cache_insert()
450 nn->longest_chain = entries; in nfsd_cache_insert()
451 nn->longest_chain_cachesize = atomic_read(&nn->num_drc_entries); in nfsd_cache_insert()
452 } else if (entries == nn->longest_chain) { in nfsd_cache_insert()
454 nn->longest_chain_cachesize = min_t(unsigned int, in nfsd_cache_insert()
455 nn->longest_chain_cachesize, in nfsd_cache_insert()
456 atomic_read(&nn->num_drc_entries)); in nfsd_cache_insert()
484 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd_cache_lookup() local
494 nfsd_stats_rc_nocache_inc(nn); in nfsd_cache_lookup()
504 rp = nfsd_cacherep_alloc(rqstp, csum, nn); in nfsd_cache_lookup()
508 b = nfsd_cache_bucket_find(rqstp->rq_xid, nn); in nfsd_cache_lookup()
510 found = nfsd_cache_insert(b, rp, nn); in nfsd_cache_lookup()
515 nfsd_prune_bucket_locked(nn, b, 3, &dispose); in nfsd_cache_lookup()
519 trace_nfsd_drc_gc(nn, freed); in nfsd_cache_lookup()
521 nfsd_stats_rc_misses_inc(nn); in nfsd_cache_lookup()
522 atomic_inc(&nn->num_drc_entries); in nfsd_cache_lookup()
523 nfsd_stats_drc_mem_usage_add(nn, sizeof(*rp)); in nfsd_cache_lookup()
528 nfsd_reply_cache_free_locked(NULL, rp, nn); in nfsd_cache_lookup()
529 nfsd_stats_rc_hits_inc(nn); in nfsd_cache_lookup()
561 trace_nfsd_drc_found(nn, rqstp, rtn); in nfsd_cache_lookup()
592 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); in nfsd_cache_update() local
601 b = nfsd_cache_bucket_find(rp->c_key.k_xid, nn); in nfsd_cache_update()
608 nfsd_reply_cache_free(b, rp, nn); in nfsd_cache_update()
623 nfsd_reply_cache_free(b, rp, nn); in nfsd_cache_update()
630 nfsd_reply_cache_free(b, rp, nn); in nfsd_cache_update()
634 nfsd_stats_drc_mem_usage_add(nn, bufsize); in nfsd_cache_update()
663 struct nfsd_net *nn = net_generic(file_inode(m->file)->i_sb->s_fs_info, in nfsd_reply_cache_stats_show() local
666 seq_printf(m, "max entries: %u\n", nn->max_drc_entries); in nfsd_reply_cache_stats_show()
668 atomic_read(&nn->num_drc_entries)); in nfsd_reply_cache_stats_show()
669 seq_printf(m, "hash buckets: %u\n", 1 << nn->maskbits); in nfsd_reply_cache_stats_show()
671 percpu_counter_sum_positive(&nn->counter[NFSD_STATS_DRC_MEM_USAGE])); in nfsd_reply_cache_stats_show()
673 percpu_counter_sum_positive(&nn->counter[NFSD_STATS_RC_HITS])); in nfsd_reply_cache_stats_show()
675 percpu_counter_sum_positive(&nn->counter[NFSD_STATS_RC_MISSES])); in nfsd_reply_cache_stats_show()
677 percpu_counter_sum_positive(&nn->counter[NFSD_STATS_RC_NOCACHE])); in nfsd_reply_cache_stats_show()
679 percpu_counter_sum_positive(&nn->counter[NFSD_STATS_PAYLOAD_MISSES])); in nfsd_reply_cache_stats_show()
680 seq_printf(m, "longest chain len: %u\n", nn->longest_chain); in nfsd_reply_cache_stats_show()
681 seq_printf(m, "cachesize at longest: %u\n", nn->longest_chain_cachesize); in nfsd_reply_cache_stats_show()