Lines Matching refs:nn

89 		    struct nfsd_net *nn)
136 nfsd_cacherep_unlink_locked(struct nfsd_net *nn, struct nfsd_drc_bucket *b,
140 nfsd_stats_drc_mem_usage_sub(nn, rp->c_replvec.iov_len);
144 atomic_dec(&nn->num_drc_entries);
145 nfsd_stats_drc_mem_usage_sub(nn, sizeof(*rp));
151 struct nfsd_net *nn)
153 nfsd_cacherep_unlink_locked(nn, b, rp);
159 struct nfsd_net *nn)
162 nfsd_cacherep_unlink_locked(nn, b, rp);
181 * @nn: nfsd_net being initialized
185 int nfsd_net_reply_cache_init(struct nfsd_net *nn)
187 return nfsd_percpu_counters_init(nn->counter, NFSD_NET_COUNTERS_NUM);
192 * @nn: nfsd_net being freed
195 void nfsd_net_reply_cache_destroy(struct nfsd_net *nn)
197 nfsd_percpu_counters_destroy(nn->counter, NFSD_NET_COUNTERS_NUM);
200 int nfsd_reply_cache_init(struct nfsd_net *nn)
206 nn->max_drc_entries = nfsd_cache_size_limit();
207 atomic_set(&nn->num_drc_entries, 0);
208 hashsize = nfsd_hashsize(nn->max_drc_entries);
209 nn->maskbits = ilog2(hashsize);
211 nn->nfsd_reply_cache_shrinker.scan_objects = nfsd_reply_cache_scan;
212 nn->nfsd_reply_cache_shrinker.count_objects = nfsd_reply_cache_count;
213 nn->nfsd_reply_cache_shrinker.seeks = 1;
214 status = register_shrinker(&nn->nfsd_reply_cache_shrinker,
215 "nfsd-reply:%s", nn->nfsd_name);
219 nn->drc_hashtbl = kvzalloc(array_size(hashsize,
220 sizeof(*nn->drc_hashtbl)), GFP_KERNEL);
221 if (!nn->drc_hashtbl)
225 INIT_LIST_HEAD(&nn->drc_hashtbl[i].lru_head);
226 spin_lock_init(&nn->drc_hashtbl[i].cache_lock);
228 nn->drc_hashsize = hashsize;
232 unregister_shrinker(&nn->nfsd_reply_cache_shrinker);
237 void nfsd_reply_cache_shutdown(struct nfsd_net *nn)
242 unregister_shrinker(&nn->nfsd_reply_cache_shrinker);
244 for (i = 0; i < nn->drc_hashsize; i++) {
245 struct list_head *head = &nn->drc_hashtbl[i].lru_head;
248 nfsd_reply_cache_free_locked(&nn->drc_hashtbl[i],
249 rp, nn);
253 kvfree(nn->drc_hashtbl);
254 nn->drc_hashtbl = NULL;
255 nn->drc_hashsize = 0;
271 nfsd_cache_bucket_find(__be32 xid, struct nfsd_net *nn)
273 unsigned int hash = hash_32((__force u32)xid, nn->maskbits);
275 return &nn->drc_hashtbl[hash];
283 nfsd_prune_bucket_locked(struct nfsd_net *nn, struct nfsd_drc_bucket *b,
301 if (atomic_read(&nn->num_drc_entries) <= nn->max_drc_entries &&
305 nfsd_cacherep_unlink_locked(nn, b, rp);
326 struct nfsd_net *nn = container_of(shrink,
329 return atomic_read(&nn->num_drc_entries);
346 struct nfsd_net *nn = container_of(shrink,
352 for (i = 0; i < nn->drc_hashsize; i++) {
353 struct nfsd_drc_bucket *b = &nn->drc_hashtbl[i];
359 nfsd_prune_bucket_locked(nn, b, 0, &dispose);
367 trace_nfsd_drc_gc(nn, freed);
425 const struct nfsd_cacherep *rp, struct nfsd_net *nn)
429 nfsd_stats_payload_misses_inc(nn);
430 trace_nfsd_drc_mismatch(nn, key, rp);
443 struct nfsd_net *nn)
456 cmp = nfsd_cache_key_cmp(key, rp, nn);
470 if (entries > nn->longest_chain) {
471 nn->longest_chain = entries;
472 nn->longest_chain_cachesize = atomic_read(&nn->num_drc_entries);
473 } else if (entries == nn->longest_chain) {
475 nn->longest_chain_cachesize = min_t(unsigned int,
476 nn->longest_chain_cachesize,
477 atomic_read(&nn->num_drc_entries));
505 struct nfsd_net *nn;
525 nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
526 rp = nfsd_cacherep_alloc(rqstp, csum, nn);
530 b = nfsd_cache_bucket_find(rqstp->rq_xid, nn);
532 found = nfsd_cache_insert(b, rp, nn);
537 nfsd_prune_bucket_locked(nn, b, 3, &dispose);
541 trace_nfsd_drc_gc(nn, freed);
544 atomic_inc(&nn->num_drc_entries);
545 nfsd_stats_drc_mem_usage_add(nn, sizeof(*rp));
550 nfsd_reply_cache_free_locked(NULL, rp, nn);
583 trace_nfsd_drc_found(nn, rqstp, rtn);
614 struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
623 b = nfsd_cache_bucket_find(rp->c_key.k_xid, nn);
630 nfsd_reply_cache_free(b, rp, nn);
645 nfsd_reply_cache_free(b, rp, nn);
652 nfsd_reply_cache_free(b, rp, nn);
656 nfsd_stats_drc_mem_usage_add(nn, bufsize);
685 struct nfsd_net *nn = net_generic(file_inode(m->file)->i_sb->s_fs_info,
688 seq_printf(m, "max entries: %u\n", nn->max_drc_entries);
690 atomic_read(&nn->num_drc_entries));
691 seq_printf(m, "hash buckets: %u\n", 1 << nn->maskbits);
693 percpu_counter_sum_positive(&nn->counter[NFSD_NET_DRC_MEM_USAGE]));
701 percpu_counter_sum_positive(&nn->counter[NFSD_NET_PAYLOAD_MISSES]));
702 seq_printf(m, "longest chain len: %u\n", nn->longest_chain);
703 seq_printf(m, "cachesize at longest: %u\n", nn->longest_chain_cachesize);