Lines Matching refs:ce

104 static inline bool cache_entry_expired(const struct cache_entry *ce)  in cache_entry_expired()  argument
109 return timespec64_compare(&ts, &ce->etime) >= 0; in cache_entry_expired()
112 static inline void free_tgts(struct cache_entry *ce) in free_tgts() argument
116 list_for_each_entry_safe(t, n, &ce->tlist, list) { in free_tgts()
123 static inline void flush_cache_ent(struct cache_entry *ce) in flush_cache_ent() argument
125 hlist_del_init(&ce->hlist); in flush_cache_ent()
126 kfree(ce->path); in flush_cache_ent()
127 free_tgts(ce); in flush_cache_ent()
129 kmem_cache_free(cache_slab, ce); in flush_cache_ent()
139 struct cache_entry *ce; in flush_cache_ents() local
141 hlist_for_each_entry_safe(ce, n, l, hlist) { in flush_cache_ents()
142 if (!hlist_unhashed(&ce->hlist)) in flush_cache_ents()
143 flush_cache_ent(ce); in flush_cache_ents()
154 struct cache_entry *ce; in dfscache_proc_show() local
163 hlist_for_each_entry(ce, l, hlist) { in dfscache_proc_show()
164 if (hlist_unhashed(&ce->hlist)) in dfscache_proc_show()
170 ce->path, in dfscache_proc_show()
171 ce->srvtype == DFS_TYPE_ROOT ? "root" : "link", in dfscache_proc_show()
172 ce->ttl, ce->etime.tv_nsec, in dfscache_proc_show()
173 IS_INTERLINK_SET(ce->flags) ? "yes" : "no", in dfscache_proc_show()
174 ce->path_consumed, in dfscache_proc_show()
175 cache_entry_expired(ce) ? "yes" : "no"); in dfscache_proc_show()
177 list_for_each_entry(t, &ce->tlist, list) { in dfscache_proc_show()
180 ce->tgthint == t ? " (target hint)" : ""); in dfscache_proc_show()
225 static inline void dump_tgts(const struct cache_entry *ce) in dump_tgts() argument
230 list_for_each_entry(t, &ce->tlist, list) { in dump_tgts()
232 ce->tgthint == t ? " (target hint)" : ""); in dump_tgts()
236 static inline void dump_ce(const struct cache_entry *ce) in dump_ce() argument
239 ce->path, in dump_ce()
240 ce->srvtype == DFS_TYPE_ROOT ? "root" : "link", ce->ttl, in dump_ce()
241 ce->etime.tv_nsec, in dump_ce()
242 IS_INTERLINK_SET(ce->flags) ? "yes" : "no", in dump_ce()
243 ce->path_consumed, in dump_ce()
244 cache_entry_expired(ce) ? "yes" : "no"); in dump_ce()
245 dump_tgts(ce); in dump_ce()
333 static inline char *get_tgt_name(const struct cache_entry *ce) in get_tgt_name() argument
335 struct cache_dfs_tgt *t = ce->tgthint; in get_tgt_name()
376 struct cache_entry *ce, const char *tgthint) in copy_ref_data() argument
380 ce->ttl = refs[0].ttl; in copy_ref_data()
381 ce->etime = get_expire_time(ce->ttl); in copy_ref_data()
382 ce->srvtype = refs[0].server_type; in copy_ref_data()
383 ce->flags = refs[0].ref_flag; in copy_ref_data()
384 ce->path_consumed = refs[0].path_consumed; in copy_ref_data()
391 free_tgts(ce); in copy_ref_data()
395 list_add(&t->list, &ce->tlist); in copy_ref_data()
398 list_add_tail(&t->list, &ce->tlist); in copy_ref_data()
400 ce->numtgts++; in copy_ref_data()
403 ce->tgthint = list_first_entry_or_null(&ce->tlist, in copy_ref_data()
414 struct cache_entry *ce; in alloc_cache_entry() local
417 ce = kmem_cache_zalloc(cache_slab, GFP_KERNEL); in alloc_cache_entry()
418 if (!ce) in alloc_cache_entry()
421 ce->path = kstrndup(path, strlen(path), GFP_KERNEL); in alloc_cache_entry()
422 if (!ce->path) { in alloc_cache_entry()
423 kmem_cache_free(cache_slab, ce); in alloc_cache_entry()
426 INIT_HLIST_NODE(&ce->hlist); in alloc_cache_entry()
427 INIT_LIST_HEAD(&ce->tlist); in alloc_cache_entry()
429 rc = copy_ref_data(refs, numrefs, ce, NULL); in alloc_cache_entry()
431 kfree(ce->path); in alloc_cache_entry()
432 kmem_cache_free(cache_slab, ce); in alloc_cache_entry()
433 ce = ERR_PTR(rc); in alloc_cache_entry()
435 return ce; in alloc_cache_entry()
442 struct cache_entry *ce; in remove_oldest_entry() local
448 hlist_for_each_entry(ce, l, hlist) { in remove_oldest_entry()
449 if (hlist_unhashed(&ce->hlist)) in remove_oldest_entry()
451 if (!to_del || timespec64_compare(&ce->etime, in remove_oldest_entry()
453 to_del = ce; in remove_oldest_entry()
471 struct cache_entry *ce; in add_cache_entry() local
473 ce = alloc_cache_entry(path, refs, numrefs); in add_cache_entry()
474 if (IS_ERR(ce)) in add_cache_entry()
475 return PTR_ERR(ce); in add_cache_entry()
479 cache_ttl = ce->ttl; in add_cache_entry()
482 cache_ttl = min_t(int, cache_ttl, ce->ttl); in add_cache_entry()
488 hlist_add_head(&ce->hlist, &cache_htable[hash]); in add_cache_entry()
489 dump_ce(ce); in add_cache_entry()
497 struct cache_entry *ce; in __lookup_cache_entry() local
503 hlist_for_each_entry(ce, &cache_htable[h], hlist) { in __lookup_cache_entry()
504 if (!strcasecmp(path, ce->path)) { in __lookup_cache_entry()
506 dump_ce(ce); in __lookup_cache_entry()
512 ce = ERR_PTR(-ENOENT); in __lookup_cache_entry()
513 return ce; in __lookup_cache_entry()
526 struct cache_entry *ce = ERR_PTR(-ENOENT); in lookup_cache_entry() local
544 ce = __lookup_cache_entry(path); in lookup_cache_entry()
567 ce = __lookup_cache_entry(npath); in lookup_cache_entry()
568 if (!IS_ERR(ce)) { in lookup_cache_entry()
582 return ce; in lookup_cache_entry()
634 struct cache_entry *ce; in __update_cache_entry() local
637 ce = lookup_cache_entry(path, NULL); in __update_cache_entry()
638 if (IS_ERR(ce)) in __update_cache_entry()
639 return PTR_ERR(ce); in __update_cache_entry()
641 if (ce->tgthint) { in __update_cache_entry()
642 s = ce->tgthint->name; in __update_cache_entry()
648 free_tgts(ce); in __update_cache_entry()
649 ce->numtgts = 0; in __update_cache_entry()
651 rc = copy_ref_data(refs, numrefs, ce, th); in __update_cache_entry()
707 struct cache_entry *ce; in __dfs_cache_find() local
716 ce = lookup_cache_entry(path, &hash); in __dfs_cache_find()
724 return PTR_ERR_OR_ZERO(ce); in __dfs_cache_find()
727 if (!IS_ERR(ce)) { in __dfs_cache_find()
728 if (!cache_entry_expired(ce)) { in __dfs_cache_find()
729 dump_ce(ce); in __dfs_cache_find()
779 static int setup_referral(const char *path, struct cache_entry *ce, in setup_referral() argument
798 ref->path_consumed = ce->path_consumed; in setup_referral()
799 ref->ttl = ce->ttl; in setup_referral()
800 ref->server_type = ce->srvtype; in setup_referral()
801 ref->ref_flag = ce->flags; in setup_referral()
812 static int get_targets(struct cache_entry *ce, struct dfs_cache_tgt_list *tl) in get_targets() argument
822 list_for_each_entry(t, &ce->tlist, list) { in get_targets()
837 if (ce->tgthint == t) in get_targets()
843 tl->tl_numtgts = ce->numtgts; in get_targets()
884 struct cache_entry *ce; in dfs_cache_find() local
896 ce = lookup_cache_entry(npath, NULL); in dfs_cache_find()
897 if (IS_ERR(ce)) { in dfs_cache_find()
899 rc = PTR_ERR(ce); in dfs_cache_find()
904 rc = setup_referral(path, ce, ref, get_tgt_name(ce)); in dfs_cache_find()
908 rc = get_targets(ce, tgt_list); in dfs_cache_find()
938 struct cache_entry *ce; in dfs_cache_noreq_find() local
948 ce = lookup_cache_entry(npath, NULL); in dfs_cache_noreq_find()
949 if (IS_ERR(ce)) { in dfs_cache_noreq_find()
950 rc = PTR_ERR(ce); in dfs_cache_noreq_find()
955 rc = setup_referral(path, ce, ref, get_tgt_name(ce)); in dfs_cache_noreq_find()
959 rc = get_targets(ce, tgt_list); in dfs_cache_noreq_find()
993 struct cache_entry *ce; in dfs_cache_update_tgthint() local
1008 ce = lookup_cache_entry(npath, NULL); in dfs_cache_update_tgthint()
1009 if (IS_ERR(ce)) { in dfs_cache_update_tgthint()
1010 rc = PTR_ERR(ce); in dfs_cache_update_tgthint()
1014 t = ce->tgthint; in dfs_cache_update_tgthint()
1019 list_for_each_entry(t, &ce->tlist, list) { in dfs_cache_update_tgthint()
1021 ce->tgthint = t; in dfs_cache_update_tgthint()
1055 struct cache_entry *ce; in dfs_cache_noreq_update_tgthint() local
1069 ce = lookup_cache_entry(npath, NULL); in dfs_cache_noreq_update_tgthint()
1070 if (IS_ERR(ce)) { in dfs_cache_noreq_update_tgthint()
1071 rc = PTR_ERR(ce); in dfs_cache_noreq_update_tgthint()
1076 t = ce->tgthint; in dfs_cache_noreq_update_tgthint()
1081 list_for_each_entry(t, &ce->tlist, list) { in dfs_cache_noreq_update_tgthint()
1083 ce->tgthint = t; in dfs_cache_noreq_update_tgthint()
1113 struct cache_entry *ce; in dfs_cache_get_tgt_referral() local
1126 ce = lookup_cache_entry(npath, NULL); in dfs_cache_get_tgt_referral()
1127 if (IS_ERR(ce)) { in dfs_cache_get_tgt_referral()
1128 rc = PTR_ERR(ce); in dfs_cache_get_tgt_referral()
1134 rc = setup_referral(path, ce, ref, it->it_name); in dfs_cache_get_tgt_referral()
1475 struct cache_entry *ce; in find_root_ses() local
1488 ce = lookup_cache_entry(rpath, NULL); in find_root_ses()
1489 if (IS_ERR(ce)) { in find_root_ses()
1491 ses = ERR_CAST(ce); in find_root_ses()
1495 rc = setup_referral(path, ce, &ref, get_tgt_name(ce)); in find_root_ses()
1544 struct cache_entry *ce; in refresh_tcon() local
1559 ce = lookup_cache_entry(npath, NULL); in refresh_tcon()
1560 if (IS_ERR(ce)) { in refresh_tcon()
1561 rc = PTR_ERR(ce); in refresh_tcon()
1566 if (!cache_entry_expired(ce)) { in refresh_tcon()