Lines Matching refs:cfids

26 static struct cached_fid *find_or_create_cached_dir(struct cached_fids *cfids,  in find_or_create_cached_dir()  argument
33 list_for_each_entry(cfid, &cfids->entries, entry) { in find_or_create_cached_dir()
49 if (cfids->num_entries >= max_cached_dirs) { in find_or_create_cached_dir()
56 cfid->cfids = cfids; in find_or_create_cached_dir()
57 cfids->num_entries++; in find_or_create_cached_dir()
58 list_add(&cfid->entry, &cfids->entries); in find_or_create_cached_dir()
155 struct cached_fids *cfids; in open_cached_dir() local
167 cfids = tcon->cfids; in open_cached_dir()
169 if (cfids == NULL) in open_cached_dir()
185 spin_lock(&cfids->cfid_list_lock); in open_cached_dir()
186 cfid = find_or_create_cached_dir(cfids, path, lookup_only, tcon->max_cached_dirs); in open_cached_dir()
188 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
199 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
204 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
232 spin_lock(&cfids->cfid_list_lock); in open_cached_dir()
233 list_for_each_entry(parent_cfid, &cfids->entries, entry) { in open_cached_dir()
246 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
328 spin_lock(&cfids->cfid_list_lock); in open_cached_dir()
339 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
349 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
355 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
360 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
372 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
383 spin_lock(&cfids->cfid_list_lock); in open_cached_dir()
387 cfids->num_entries--; in open_cached_dir()
398 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
419 struct cached_fids *cfids = tcon->cfids; in open_cached_dir_by_dentry() local
421 if (cfids == NULL) in open_cached_dir_by_dentry()
427 spin_lock(&cfids->cfid_list_lock); in open_cached_dir_by_dentry()
428 list_for_each_entry(cfid, &cfids->entries, entry) { in open_cached_dir_by_dentry()
436 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir_by_dentry()
440 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir_by_dentry()
446 __releases(&cfid->cfids->cfid_list_lock) in smb2_close_cached_fid()
452 lockdep_assert_held(&cfid->cfids->cfid_list_lock); in smb2_close_cached_fid()
457 cfid->cfids->num_entries--; in smb2_close_cached_fid()
459 spin_unlock(&cfid->cfids->cfid_list_lock); in smb2_close_cached_fid()
485 spin_lock(&cfid->cfids->cfid_list_lock); in drop_cached_dir_by_name()
490 spin_unlock(&cfid->cfids->cfid_list_lock); in drop_cached_dir_by_name()
506 lockdep_assert_not_held(&cfid->cfids->cfid_list_lock); in close_cached_dir()
507 kref_put_lock(&cfid->refcount, smb2_close_cached_fid, &cfid->cfids->cfid_list_lock); in close_cached_dir()
526 lockdep_assert_held(&cfid->cfids->cfid_list_lock); in close_cached_dir_locked()
544 struct cached_fids *cfids; in close_all_cached_dirs() local
554 cfids = tcon->cfids; in close_all_cached_dirs()
555 if (cfids == NULL) in close_all_cached_dirs()
557 spin_lock(&cfids->cfid_list_lock); in close_all_cached_dirs()
558 list_for_each_entry(cfid, &cfids->entries, entry) { in close_all_cached_dirs()
567 spin_unlock(&cfids->cfid_list_lock); in close_all_cached_dirs()
577 spin_unlock(&cfids->cfid_list_lock); in close_all_cached_dirs()
598 struct cached_fids *cfids = tcon->cfids; in invalidate_all_cached_dirs() local
601 if (cfids == NULL) in invalidate_all_cached_dirs()
609 spin_lock(&cfids->cfid_list_lock); in invalidate_all_cached_dirs()
610 list_for_each_entry_safe(cfid, q, &cfids->entries, entry) { in invalidate_all_cached_dirs()
611 list_move(&cfid->entry, &cfids->dying); in invalidate_all_cached_dirs()
612 cfids->num_entries--; in invalidate_all_cached_dirs()
624 spin_unlock(&cfids->cfid_list_lock); in invalidate_all_cached_dirs()
627 mod_delayed_work(cfid_put_wq, &cfids->laundromat_work, 0); in invalidate_all_cached_dirs()
628 flush_delayed_work(&cfids->laundromat_work); in invalidate_all_cached_dirs()
663 struct cached_fids *cfids = tcon->cfids; in cached_dir_lease_break() local
666 if (cfids == NULL) in cached_dir_lease_break()
669 spin_lock(&cfids->cfid_list_lock); in cached_dir_lease_break()
670 list_for_each_entry(cfid, &cfids->entries, entry) { in cached_dir_lease_break()
683 cfids->num_entries--; in cached_dir_lease_break()
689 spin_unlock(&cfids->cfid_list_lock); in cached_dir_lease_break()
693 spin_unlock(&cfids->cfid_list_lock); in cached_dir_lease_break()
739 if (cfid->cfids) { in free_cached_dir()
742 &cfid->cfids->total_dirents_entries); in free_cached_dir()
745 &cfid->cfids->total_dirents_bytes); in free_cached_dir()
760 struct cached_fids *cfids; in cfids_laundromat_worker() local
764 cfids = container_of(work, struct cached_fids, laundromat_work.work); in cfids_laundromat_worker()
766 spin_lock(&cfids->cfid_list_lock); in cfids_laundromat_worker()
768 list_cut_before(&entry, &cfids->dying, &cfids->dying); in cfids_laundromat_worker()
770 list_for_each_entry_safe(cfid, q, &cfids->entries, entry) { in cfids_laundromat_worker()
775 cfids->num_entries--; in cfids_laundromat_worker()
786 spin_unlock(&cfids->cfid_list_lock); in cfids_laundromat_worker()
808 queue_delayed_work(cfid_put_wq, &cfids->laundromat_work, in cfids_laundromat_worker()
814 struct cached_fids *cfids; in init_cached_dirs() local
816 cfids = kzalloc_obj(*cfids); in init_cached_dirs()
817 if (!cfids) in init_cached_dirs()
819 spin_lock_init(&cfids->cfid_list_lock); in init_cached_dirs()
820 INIT_LIST_HEAD(&cfids->entries); in init_cached_dirs()
821 INIT_LIST_HEAD(&cfids->dying); in init_cached_dirs()
823 INIT_DELAYED_WORK(&cfids->laundromat_work, cfids_laundromat_worker); in init_cached_dirs()
824 queue_delayed_work(cfid_put_wq, &cfids->laundromat_work, in init_cached_dirs()
827 atomic_long_set(&cfids->total_dirents_entries, 0); in init_cached_dirs()
828 atomic64_set(&cfids->total_dirents_bytes, 0); in init_cached_dirs()
830 return cfids; in init_cached_dirs()
837 void free_cached_dirs(struct cached_fids *cfids) in free_cached_dirs() argument
842 if (cfids == NULL) in free_cached_dirs()
845 cancel_delayed_work_sync(&cfids->laundromat_work); in free_cached_dirs()
847 spin_lock(&cfids->cfid_list_lock); in free_cached_dirs()
848 list_for_each_entry_safe(cfid, q, &cfids->entries, entry) { in free_cached_dirs()
853 list_for_each_entry_safe(cfid, q, &cfids->dying, entry) { in free_cached_dirs()
858 spin_unlock(&cfids->cfid_list_lock); in free_cached_dirs()
865 kfree(cfids); in free_cached_dirs()