Lines Matching refs:cfids
20 static struct cached_fid *find_or_create_cached_dir(struct cached_fids *cfids, in find_or_create_cached_dir() argument
27 spin_lock(&cfids->cfid_list_lock); in find_or_create_cached_dir()
28 list_for_each_entry(cfid, &cfids->entries, entry) { in find_or_create_cached_dir()
36 spin_unlock(&cfids->cfid_list_lock); in find_or_create_cached_dir()
40 spin_unlock(&cfids->cfid_list_lock); in find_or_create_cached_dir()
45 spin_unlock(&cfids->cfid_list_lock); in find_or_create_cached_dir()
48 if (cfids->num_entries >= max_cached_dirs) { in find_or_create_cached_dir()
49 spin_unlock(&cfids->cfid_list_lock); in find_or_create_cached_dir()
54 spin_unlock(&cfids->cfid_list_lock); in find_or_create_cached_dir()
57 cfid->cfids = cfids; in find_or_create_cached_dir()
58 cfids->num_entries++; in find_or_create_cached_dir()
59 list_add(&cfid->entry, &cfids->entries); in find_or_create_cached_dir()
62 spin_unlock(&cfids->cfid_list_lock); in find_or_create_cached_dir()
146 struct cached_fids *cfids; in open_cached_dir() local
149 if (tcon == NULL || tcon->cfids == NULL || tcon->nohandlecache || in open_cached_dir()
155 cfids = tcon->cfids; in open_cached_dir()
167 cfid = find_or_create_cached_dir(cfids, path, lookup_only, tcon->max_cached_dirs); in open_cached_dir()
177 spin_lock(&cfids->cfid_list_lock); in open_cached_dir()
179 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
184 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
301 spin_lock(&cfids->cfid_list_lock); in open_cached_dir()
305 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
313 spin_lock(&cfids->cfid_list_lock); in open_cached_dir()
319 cfids->num_entries--; in open_cached_dir()
330 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
335 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir()
357 struct cached_fids *cfids = tcon->cfids; in open_cached_dir_by_dentry() local
359 if (cfids == NULL) in open_cached_dir_by_dentry()
362 spin_lock(&cfids->cfid_list_lock); in open_cached_dir_by_dentry()
363 list_for_each_entry(cfid, &cfids->entries, entry) { in open_cached_dir_by_dentry()
368 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir_by_dentry()
372 spin_unlock(&cfids->cfid_list_lock); in open_cached_dir_by_dentry()
382 spin_lock(&cfid->cfids->cfid_list_lock); in smb2_close_cached_fid()
386 cfid->cfids->num_entries--; in smb2_close_cached_fid()
388 spin_unlock(&cfid->cfids->cfid_list_lock); in smb2_close_cached_fid()
413 spin_lock(&cfid->cfids->cfid_list_lock); in drop_cached_dir_by_name()
418 spin_unlock(&cfid->cfids->cfid_list_lock); in drop_cached_dir_by_name()
438 struct cached_fids *cfids; in close_all_cached_dirs() local
445 cfids = tcon->cfids; in close_all_cached_dirs()
446 if (cfids == NULL) in close_all_cached_dirs()
448 list_for_each_entry(cfid, &cfids->entries, entry) { in close_all_cached_dirs()
461 struct cached_fids *cfids = tcon->cfids; in invalidate_all_cached_dirs() local
465 if (cfids == NULL) in invalidate_all_cached_dirs()
468 spin_lock(&cfids->cfid_list_lock); in invalidate_all_cached_dirs()
469 list_for_each_entry_safe(cfid, q, &cfids->entries, entry) { in invalidate_all_cached_dirs()
471 cfids->num_entries--; in invalidate_all_cached_dirs()
477 spin_unlock(&cfids->cfid_list_lock); in invalidate_all_cached_dirs()
487 spin_lock(&cfids->cfid_list_lock); in invalidate_all_cached_dirs()
489 spin_unlock(&cfids->cfid_list_lock); in invalidate_all_cached_dirs()
503 spin_lock(&cfid->cfids->cfid_list_lock); in smb2_cached_lease_break()
505 spin_unlock(&cfid->cfids->cfid_list_lock); in smb2_cached_lease_break()
511 struct cached_fids *cfids = tcon->cfids; in cached_dir_lease_break() local
514 if (cfids == NULL) in cached_dir_lease_break()
517 spin_lock(&cfids->cfid_list_lock); in cached_dir_lease_break()
518 list_for_each_entry(cfid, &cfids->entries, entry) { in cached_dir_lease_break()
530 cfids->num_entries--; in cached_dir_lease_break()
534 spin_unlock(&cfids->cfid_list_lock); in cached_dir_lease_break()
538 spin_unlock(&cfids->cfid_list_lock); in cached_dir_lease_break()
587 struct cached_fids *cfids; in cfids_laundromat_worker() local
591 cfids = container_of(work, struct cached_fids, laundromat_work.work); in cfids_laundromat_worker()
593 spin_lock(&cfids->cfid_list_lock); in cfids_laundromat_worker()
594 list_for_each_entry_safe(cfid, q, &cfids->entries, entry) { in cfids_laundromat_worker()
599 cfids->num_entries--; in cfids_laundromat_worker()
604 spin_unlock(&cfids->cfid_list_lock); in cfids_laundromat_worker()
618 spin_lock(&cfids->cfid_list_lock); in cfids_laundromat_worker()
620 spin_unlock(&cfids->cfid_list_lock); in cfids_laundromat_worker()
626 queue_delayed_work(cifsiod_wq, &cfids->laundromat_work, in cfids_laundromat_worker()
632 struct cached_fids *cfids; in init_cached_dirs() local
634 cfids = kzalloc(sizeof(*cfids), GFP_KERNEL); in init_cached_dirs()
635 if (!cfids) in init_cached_dirs()
637 spin_lock_init(&cfids->cfid_list_lock); in init_cached_dirs()
638 INIT_LIST_HEAD(&cfids->entries); in init_cached_dirs()
640 INIT_DELAYED_WORK(&cfids->laundromat_work, cfids_laundromat_worker); in init_cached_dirs()
641 queue_delayed_work(cifsiod_wq, &cfids->laundromat_work, in init_cached_dirs()
644 return cfids; in init_cached_dirs()
651 void free_cached_dirs(struct cached_fids *cfids) in free_cached_dirs() argument
656 if (cfids == NULL) in free_cached_dirs()
659 cancel_delayed_work_sync(&cfids->laundromat_work); in free_cached_dirs()
661 spin_lock(&cfids->cfid_list_lock); in free_cached_dirs()
662 list_for_each_entry_safe(cfid, q, &cfids->entries, entry) { in free_cached_dirs()
667 spin_unlock(&cfids->cfid_list_lock); in free_cached_dirs()
674 kfree(cfids); in free_cached_dirs()