Lines Matching refs:od
173 static void ovl_cache_put(struct ovl_dir_file *od, struct dentry *dentry) in ovl_cache_put() argument
175 struct ovl_dir_cache *cache = od->cache; in ovl_cache_put()
269 struct ovl_dir_file *od = file->private_data; in ovl_dir_reset() local
270 struct ovl_dir_cache *cache = od->cache; in ovl_dir_reset()
275 ovl_cache_put(od, dentry); in ovl_dir_reset()
276 od->cache = NULL; in ovl_dir_reset()
277 od->cursor = NULL; in ovl_dir_reset()
279 WARN_ON(!od->is_real && !OVL_TYPE_MERGE(type)); in ovl_dir_reset()
280 if (od->is_real && OVL_TYPE_MERGE(type)) in ovl_dir_reset()
281 od->is_real = false; in ovl_dir_reset()
317 static void ovl_seek_cursor(struct ovl_dir_file *od, loff_t pos) in ovl_seek_cursor() argument
322 list_for_each(p, &od->cache->entries) { in ovl_seek_cursor()
328 od->cursor = p; in ovl_seek_cursor()
365 struct ovl_dir_file *od = file->private_data; in ovl_iterate() local
372 if (od->is_real) in ovl_iterate()
373 return iterate_dir(od->realfile, ctx); in ovl_iterate()
375 if (!od->cache) { in ovl_iterate()
382 od->cache = cache; in ovl_iterate()
383 ovl_seek_cursor(od, ctx->pos); in ovl_iterate()
386 while (od->cursor != &od->cache->entries) { in ovl_iterate()
387 p = list_entry(od->cursor, struct ovl_cache_entry, l_node); in ovl_iterate()
391 od->cursor = p->l_node.next; in ovl_iterate()
400 struct ovl_dir_file *od = file->private_data; in ovl_dir_llseek() local
406 if (od->is_real) { in ovl_dir_llseek()
407 res = vfs_llseek(od->realfile, offset, origin); in ovl_dir_llseek()
408 file->f_pos = od->realfile->f_pos; in ovl_dir_llseek()
426 if (od->cache) in ovl_dir_llseek()
427 ovl_seek_cursor(od, offset); in ovl_dir_llseek()
440 struct ovl_dir_file *od = file->private_data; in ovl_dir_fsync() local
442 struct file *realfile = od->realfile; in ovl_dir_fsync()
447 if (!od->is_upper && OVL_TYPE_UPPER(ovl_path_type(dentry))) { in ovl_dir_fsync()
450 realfile = lockless_dereference(od->upperfile); in ovl_dir_fsync()
458 if (!od->upperfile) { in ovl_dir_fsync()
463 od->upperfile = realfile; in ovl_dir_fsync()
468 realfile = od->upperfile; in ovl_dir_fsync()
479 struct ovl_dir_file *od = file->private_data; in ovl_dir_release() local
481 if (od->cache) { in ovl_dir_release()
483 ovl_cache_put(od, file->f_path.dentry); in ovl_dir_release()
486 fput(od->realfile); in ovl_dir_release()
487 if (od->upperfile) in ovl_dir_release()
488 fput(od->upperfile); in ovl_dir_release()
489 kfree(od); in ovl_dir_release()
498 struct ovl_dir_file *od; in ovl_dir_open() local
501 od = kzalloc(sizeof(struct ovl_dir_file), GFP_KERNEL); in ovl_dir_open()
502 if (!od) in ovl_dir_open()
508 kfree(od); in ovl_dir_open()
511 od->realfile = realfile; in ovl_dir_open()
512 od->is_real = !OVL_TYPE_MERGE(type); in ovl_dir_open()
513 od->is_upper = OVL_TYPE_UPPER(type); in ovl_dir_open()
514 file->private_data = od; in ovl_dir_open()