Lines Matching refs:od
295 static void ovl_cache_put(struct ovl_dir_file *od, struct inode *inode) in ovl_cache_put() argument
297 struct ovl_dir_cache *cache = od->cache; in ovl_cache_put()
403 struct ovl_dir_file *od = file->private_data; in ovl_dir_reset() local
404 struct ovl_dir_cache *cache = od->cache; in ovl_dir_reset()
409 ovl_cache_put(od, inode); in ovl_dir_reset()
410 od->cache = NULL; in ovl_dir_reset()
411 od->cursor = NULL; in ovl_dir_reset()
414 if (od->is_real != is_real) { in ovl_dir_reset()
418 od->is_real = false; in ovl_dir_reset()
468 static void ovl_seek_cursor(struct ovl_dir_file *od, loff_t pos) in ovl_seek_cursor() argument
473 list_for_each(p, &od->cache->entries) { in ovl_seek_cursor()
479 od->cursor = p; in ovl_seek_cursor()
780 struct ovl_dir_file *od = file->private_data; in ovl_is_impure_dir() local
789 return od->is_upper && ovl_test_flag(OVL_IMPURE, dir); in ovl_is_impure_dir()
796 struct ovl_dir_file *od = file->private_data; in ovl_iterate_real() local
830 err = iterate_dir(od->realfile, &rdt.ctx); in ovl_iterate_real()
838 struct ovl_dir_file *od = file->private_data; in ovl_iterate_merged() local
843 if (!od->cache) { in ovl_iterate_merged()
851 od->cache = cache; in ovl_iterate_merged()
852 ovl_seek_cursor(od, ctx->pos); in ovl_iterate_merged()
855 while (od->cursor != &od->cache->entries) { in ovl_iterate_merged()
856 p = list_entry(od->cursor, struct ovl_cache_entry, l_node); in ovl_iterate_merged()
869 od->cursor = p->l_node.next; in ovl_iterate_merged()
900 struct ovl_dir_file *od = file->private_data; in ovl_iterate() local
906 if (!od->is_real) in ovl_iterate()
912 return iterate_dir(od->realfile, ctx); in ovl_iterate()
919 struct ovl_dir_file *od = file->private_data; in ovl_dir_llseek() local
925 if (od->is_real) { in ovl_dir_llseek()
926 res = vfs_llseek(od->realfile, offset, origin); in ovl_dir_llseek()
927 file->f_pos = od->realfile->f_pos; in ovl_dir_llseek()
945 if (od->cache) in ovl_dir_llseek()
946 ovl_seek_cursor(od, offset); in ovl_dir_llseek()
973 struct ovl_dir_file *od = file->private_data; in ovl_dir_real_file() local
975 struct file *old, *realfile = od->realfile; in ovl_dir_real_file()
983 if (!od->is_upper) { in ovl_dir_real_file()
984 realfile = READ_ONCE(od->upperfile); in ovl_dir_real_file()
993 old = cmpxchg_release(&od->upperfile, NULL, realfile); in ovl_dir_real_file()
1026 struct ovl_dir_file *od = file->private_data; in ovl_dir_release() local
1028 if (od->cache) { in ovl_dir_release()
1030 ovl_cache_put(od, inode); in ovl_dir_release()
1033 fput(od->realfile); in ovl_dir_release()
1034 if (od->upperfile) in ovl_dir_release()
1035 fput(od->upperfile); in ovl_dir_release()
1036 kfree(od); in ovl_dir_release()
1045 struct ovl_dir_file *od; in ovl_dir_open() local
1048 od = kzalloc(sizeof(struct ovl_dir_file), GFP_KERNEL); in ovl_dir_open()
1049 if (!od) in ovl_dir_open()
1055 kfree(od); in ovl_dir_open()
1058 od->realfile = realfile; in ovl_dir_open()
1059 od->is_real = ovl_dir_is_real(inode); in ovl_dir_open()
1060 od->is_upper = OVL_TYPE_UPPER(type); in ovl_dir_open()
1061 file->private_data = od; in ovl_dir_open()