Lines Matching refs:rdd

113 static bool ovl_calc_d_ino(struct ovl_readdir_data *rdd,  in ovl_calc_d_ino()  argument
117 if (!rdd->dentry) in ovl_calc_d_ino()
121 if (ovl_xino_bits(rdd->dentry->d_sb)) in ovl_calc_d_ino()
129 if (!rdd->is_upper) in ovl_calc_d_ino()
137 ovl_test_flag(OVL_IMPURE, d_inode(rdd->dentry))) in ovl_calc_d_ino()
143 static struct ovl_cache_entry *ovl_cache_entry_new(struct ovl_readdir_data *rdd, in ovl_cache_entry_new() argument
161 if (ovl_calc_d_ino(rdd, p)) in ovl_cache_entry_new()
163 p->is_upper = rdd->is_upper; in ovl_cache_entry_new()
167 p->next_maybe_whiteout = rdd->first_maybe_whiteout; in ovl_cache_entry_new()
168 rdd->first_maybe_whiteout = p; in ovl_cache_entry_new()
173 static int ovl_cache_entry_add_rb(struct ovl_readdir_data *rdd, in ovl_cache_entry_add_rb() argument
177 struct rb_node **newp = &rdd->root->rb_node; in ovl_cache_entry_add_rb()
184 p = ovl_cache_entry_new(rdd, name, len, ino, d_type); in ovl_cache_entry_add_rb()
186 rdd->err = -ENOMEM; in ovl_cache_entry_add_rb()
190 list_add_tail(&p->l_node, rdd->list); in ovl_cache_entry_add_rb()
192 rb_insert_color(&p->node, rdd->root); in ovl_cache_entry_add_rb()
197 static int ovl_fill_lowest(struct ovl_readdir_data *rdd, in ovl_fill_lowest() argument
203 p = ovl_cache_entry_find(rdd->root, name, namelen); in ovl_fill_lowest()
205 list_move_tail(&p->l_node, &rdd->middle); in ovl_fill_lowest()
207 p = ovl_cache_entry_new(rdd, name, namelen, ino, d_type); in ovl_fill_lowest()
209 rdd->err = -ENOMEM; in ovl_fill_lowest()
211 list_add_tail(&p->l_node, &rdd->middle); in ovl_fill_lowest()
214 return rdd->err; in ovl_fill_lowest()
257 struct ovl_readdir_data *rdd = in ovl_fill_merge() local
260 rdd->count++; in ovl_fill_merge()
261 if (!rdd->is_lowest) in ovl_fill_merge()
262 return ovl_cache_entry_add_rb(rdd, name, namelen, ino, d_type); in ovl_fill_merge()
264 return ovl_fill_lowest(rdd, name, namelen, offset, ino, d_type); in ovl_fill_merge()
267 static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd) in ovl_check_whiteouts() argument
274 old_cred = ovl_override_creds(rdd->dentry->d_sb); in ovl_check_whiteouts()
278 while (rdd->first_maybe_whiteout) { in ovl_check_whiteouts()
279 p = rdd->first_maybe_whiteout; in ovl_check_whiteouts()
280 rdd->first_maybe_whiteout = p->next_maybe_whiteout; in ovl_check_whiteouts()
295 struct ovl_readdir_data *rdd) in ovl_dir_read() argument
304 rdd->first_maybe_whiteout = NULL; in ovl_dir_read()
305 rdd->ctx.pos = 0; in ovl_dir_read()
307 rdd->count = 0; in ovl_dir_read()
308 rdd->err = 0; in ovl_dir_read()
309 err = iterate_dir(realfile, &rdd->ctx); in ovl_dir_read()
311 err = rdd->err; in ovl_dir_read()
312 } while (!err && rdd->count); in ovl_dir_read()
314 if (!err && rdd->first_maybe_whiteout && rdd->dentry) in ovl_dir_read()
315 err = ovl_check_whiteouts(realpath->dentry, rdd); in ovl_dir_read()
348 struct ovl_readdir_data rdd = { in ovl_dir_read_merged() local
359 rdd.is_upper = ovl_dentry_upper(dentry) == realpath.dentry; in ovl_dir_read_merged()
362 err = ovl_dir_read(&realpath, &rdd); in ovl_dir_read_merged()
370 list_add(&rdd.middle, rdd.list); in ovl_dir_read_merged()
371 rdd.is_lowest = true; in ovl_dir_read_merged()
372 err = ovl_dir_read(&realpath, &rdd); in ovl_dir_read_merged()
373 list_del(&rdd.middle); in ovl_dir_read_merged()
536 struct ovl_readdir_data *rdd = in ovl_fill_plain() local
539 rdd->count++; in ovl_fill_plain()
540 p = ovl_cache_entry_new(rdd, name, namelen, ino, d_type); in ovl_fill_plain()
542 rdd->err = -ENOMEM; in ovl_fill_plain()
545 list_add_tail(&p->l_node, rdd->list); in ovl_fill_plain()
556 struct ovl_readdir_data rdd = { in ovl_dir_read_impure() local
566 err = ovl_dir_read(&realpath, &rdd); in ovl_dir_read_impure()
1033 struct ovl_readdir_data *rdd = in ovl_check_d_type() local
1041 rdd->d_type_supported = true; in ovl_check_d_type()
1053 struct ovl_readdir_data rdd = { in ovl_check_d_type_supported() local
1058 err = ovl_dir_read(realpath, &rdd); in ovl_check_d_type_supported()
1062 return rdd.d_type_supported; in ovl_check_d_type_supported()
1074 struct ovl_readdir_data rdd = { in ovl_workdir_cleanup_recurse() local
1095 err = ovl_dir_read(path, &rdd); in ovl_workdir_cleanup_recurse()
1162 struct ovl_readdir_data rdd = { in ovl_indexdir_cleanup() local
1170 err = ovl_dir_read(&path, &rdd); in ovl_indexdir_cleanup()