Lines Matching refs:cfids
25 static struct cached_fid *find_or_create_cached_dir(struct cached_fids *cfids, in find_or_create_cached_dir() argument
32 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()
324 spin_lock(&cfids->cfid_list_lock); in open_cached_dir()
335 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
345 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
351 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
356 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
368 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
379 spin_lock(&cfids->cfid_list_lock); in open_cached_dir()
383 cfids->num_entries--; in open_cached_dir()
394 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
415 struct cached_fids *cfids = tcon->cfids; in open_cached_dir_by_dentry() local
417 if (cfids == NULL) in open_cached_dir_by_dentry()
420 spin_lock(&cfids->cfid_list_lock); in open_cached_dir_by_dentry()
421 list_for_each_entry(cfid, &cfids->entries, entry) { in open_cached_dir_by_dentry()
426 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir_by_dentry()
430 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir_by_dentry()
441 spin_lock(&cfid->cfids->cfid_list_lock); in smb2_close_cached_fid()
445 cfid->cfids->num_entries--; in smb2_close_cached_fid()
447 spin_unlock(&cfid->cfids->cfid_list_lock); in smb2_close_cached_fid()
473 spin_lock(&cfid->cfids->cfid_list_lock); in drop_cached_dir_by_name()
478 spin_unlock(&cfid->cfids->cfid_list_lock); in drop_cached_dir_by_name()
498 struct cached_fids *cfids; in close_all_cached_dirs() local
508 cfids = tcon->cfids; in close_all_cached_dirs()
509 if (cfids == NULL) in close_all_cached_dirs()
511 spin_lock(&cfids->cfid_list_lock); in close_all_cached_dirs()
512 list_for_each_entry(cfid, &cfids->entries, entry) { in close_all_cached_dirs()
521 spin_unlock(&cfids->cfid_list_lock); in close_all_cached_dirs()
532 spin_unlock(&cfids->cfid_list_lock); in close_all_cached_dirs()
553 struct cached_fids *cfids = tcon->cfids; in invalidate_all_cached_dirs() local
556 if (cfids == NULL) in invalidate_all_cached_dirs()
564 spin_lock(&cfids->cfid_list_lock); in invalidate_all_cached_dirs()
565 list_for_each_entry_safe(cfid, q, &cfids->entries, entry) { in invalidate_all_cached_dirs()
566 list_move(&cfid->entry, &cfids->dying); in invalidate_all_cached_dirs()
567 cfids->num_entries--; in invalidate_all_cached_dirs()
582 if (!list_empty(&cfids->dying)) in invalidate_all_cached_dirs()
583 queue_work(cfid_put_wq, &cfids->invalidation_work); in invalidate_all_cached_dirs()
584 spin_unlock(&cfids->cfid_list_lock); in invalidate_all_cached_dirs()
624 struct cached_fids *cfids = tcon->cfids; in cached_dir_lease_break() local
627 if (cfids == NULL) in cached_dir_lease_break()
630 spin_lock(&cfids->cfid_list_lock); in cached_dir_lease_break()
631 list_for_each_entry(cfid, &cfids->entries, entry) { in cached_dir_lease_break()
644 cfids->num_entries--; in cached_dir_lease_break()
650 spin_unlock(&cfids->cfid_list_lock); in cached_dir_lease_break()
654 spin_unlock(&cfids->cfid_list_lock); in cached_dir_lease_break()
707 struct cached_fids *cfids = container_of(work, struct cached_fids, in cfids_invalidation_worker() local
712 spin_lock(&cfids->cfid_list_lock); in cfids_invalidation_worker()
714 list_cut_before(&entry, &cfids->dying, &cfids->dying); in cfids_invalidation_worker()
715 spin_unlock(&cfids->cfid_list_lock); in cfids_invalidation_worker()
726 struct cached_fids *cfids; in cfids_laundromat_worker() local
731 cfids = container_of(work, struct cached_fids, laundromat_work.work); in cfids_laundromat_worker()
733 spin_lock(&cfids->cfid_list_lock); in cfids_laundromat_worker()
734 list_for_each_entry_safe(cfid, q, &cfids->entries, entry) { in cfids_laundromat_worker()
739 cfids->num_entries--; in cfids_laundromat_worker()
750 spin_unlock(&cfids->cfid_list_lock); in cfids_laundromat_worker()
775 queue_delayed_work(cfid_put_wq, &cfids->laundromat_work, in cfids_laundromat_worker()
781 struct cached_fids *cfids; in init_cached_dirs() local
783 cfids = kzalloc(sizeof(*cfids), GFP_KERNEL); in init_cached_dirs()
784 if (!cfids) in init_cached_dirs()
786 spin_lock_init(&cfids->cfid_list_lock); in init_cached_dirs()
787 INIT_LIST_HEAD(&cfids->entries); in init_cached_dirs()
788 INIT_LIST_HEAD(&cfids->dying); in init_cached_dirs()
790 INIT_WORK(&cfids->invalidation_work, cfids_invalidation_worker); in init_cached_dirs()
791 INIT_DELAYED_WORK(&cfids->laundromat_work, cfids_laundromat_worker); in init_cached_dirs()
792 queue_delayed_work(cfid_put_wq, &cfids->laundromat_work, in init_cached_dirs()
795 return cfids; in init_cached_dirs()
802 void free_cached_dirs(struct cached_fids *cfids) in free_cached_dirs() argument
807 if (cfids == NULL) in free_cached_dirs()
810 cancel_delayed_work_sync(&cfids->laundromat_work); in free_cached_dirs()
811 cancel_work_sync(&cfids->invalidation_work); in free_cached_dirs()
813 spin_lock(&cfids->cfid_list_lock); in free_cached_dirs()
814 list_for_each_entry_safe(cfid, q, &cfids->entries, entry) { in free_cached_dirs()
819 list_for_each_entry_safe(cfid, q, &cfids->dying, entry) { in free_cached_dirs()
824 spin_unlock(&cfids->cfid_list_lock); in free_cached_dirs()
831 kfree(cfids); in free_cached_dirs()