Lines Matching full:od
241 static void ovl_cache_put(struct ovl_dir_file *od, struct dentry *dentry) in ovl_cache_put() argument
243 struct ovl_dir_cache *cache = od->cache; in ovl_cache_put()
339 struct ovl_dir_file *od = file->private_data; in ovl_dir_reset() local
340 struct ovl_dir_cache *cache = od->cache; in ovl_dir_reset()
345 ovl_cache_put(od, dentry); in ovl_dir_reset()
346 od->cache = NULL; in ovl_dir_reset()
347 od->cursor = NULL; in ovl_dir_reset()
350 if (od->is_real != is_real) { in ovl_dir_reset()
354 od->is_real = false; in ovl_dir_reset()
394 static void ovl_seek_cursor(struct ovl_dir_file *od, loff_t pos) in ovl_seek_cursor() argument
399 list_for_each(p, &od->cache->entries) { in ovl_seek_cursor()
405 od->cursor = p; in ovl_seek_cursor()
679 struct ovl_dir_file *od = file->private_data; in ovl_is_impure_dir() local
688 return od->is_upper && ovl_test_flag(OVL_IMPURE, dir); in ovl_is_impure_dir()
695 struct ovl_dir_file *od = file->private_data; in ovl_iterate_real() local
726 err = iterate_dir(od->realfile, &rdt.ctx); in ovl_iterate_real()
735 struct ovl_dir_file *od = file->private_data; in ovl_iterate() local
745 if (od->is_real) { in ovl_iterate()
757 err = iterate_dir(od->realfile, ctx); in ovl_iterate()
762 if (!od->cache) { in ovl_iterate()
770 od->cache = cache; in ovl_iterate()
771 ovl_seek_cursor(od, ctx->pos); in ovl_iterate()
774 while (od->cursor != &od->cache->entries) { in ovl_iterate()
775 p = list_entry(od->cursor, struct ovl_cache_entry, l_node); in ovl_iterate()
785 od->cursor = p->l_node.next; in ovl_iterate()
797 struct ovl_dir_file *od = file->private_data; in ovl_dir_llseek() local
803 if (od->is_real) { in ovl_dir_llseek()
804 res = vfs_llseek(od->realfile, offset, origin); in ovl_dir_llseek()
805 file->f_pos = od->realfile->f_pos; in ovl_dir_llseek()
823 if (od->cache) in ovl_dir_llseek()
824 ovl_seek_cursor(od, offset); in ovl_dir_llseek()
850 struct ovl_dir_file *od = file->private_data; in ovl_dir_fsync() local
852 struct file *realfile = od->realfile; in ovl_dir_fsync()
861 if (!od->is_upper) { in ovl_dir_fsync()
864 realfile = READ_ONCE(od->upperfile); in ovl_dir_fsync()
872 if (!od->upperfile) { in ovl_dir_fsync()
877 smp_store_release(&od->upperfile, realfile); in ovl_dir_fsync()
882 realfile = od->upperfile; in ovl_dir_fsync()
893 struct ovl_dir_file *od = file->private_data; in ovl_dir_release() local
895 if (od->cache) { in ovl_dir_release()
897 ovl_cache_put(od, file->f_path.dentry); in ovl_dir_release()
900 fput(od->realfile); in ovl_dir_release()
901 if (od->upperfile) in ovl_dir_release()
902 fput(od->upperfile); in ovl_dir_release()
903 kfree(od); in ovl_dir_release()
912 struct ovl_dir_file *od; in ovl_dir_open() local
915 od = kzalloc(sizeof(struct ovl_dir_file), GFP_KERNEL); in ovl_dir_open()
916 if (!od) in ovl_dir_open()
922 kfree(od); in ovl_dir_open()
925 od->realfile = realfile; in ovl_dir_open()
926 od->is_real = ovl_dir_is_real(file->f_path.dentry); in ovl_dir_open()
927 od->is_upper = OVL_TYPE_UPPER(type); in ovl_dir_open()
928 file->private_data = od; in ovl_dir_open()