Lines Matching refs:rdd
83 static struct ovl_cache_entry *ovl_cache_entry_new(struct ovl_readdir_data *rdd, in ovl_cache_entry_new() argument
102 p->next_maybe_whiteout = rdd->first_maybe_whiteout; in ovl_cache_entry_new()
103 rdd->first_maybe_whiteout = p; in ovl_cache_entry_new()
108 static int ovl_cache_entry_add_rb(struct ovl_readdir_data *rdd, in ovl_cache_entry_add_rb() argument
112 struct rb_node **newp = &rdd->root.rb_node; in ovl_cache_entry_add_rb()
131 p = ovl_cache_entry_new(rdd, name, len, ino, d_type); in ovl_cache_entry_add_rb()
135 list_add_tail(&p->l_node, rdd->list); in ovl_cache_entry_add_rb()
137 rb_insert_color(&p->node, &rdd->root); in ovl_cache_entry_add_rb()
142 static int ovl_fill_lower(struct ovl_readdir_data *rdd, in ovl_fill_lower() argument
148 p = ovl_cache_entry_find(&rdd->root, name, namelen); in ovl_fill_lower()
150 list_move_tail(&p->l_node, &rdd->middle); in ovl_fill_lower()
152 p = ovl_cache_entry_new(rdd, name, namelen, ino, d_type); in ovl_fill_lower()
154 rdd->err = -ENOMEM; in ovl_fill_lower()
156 list_add_tail(&p->l_node, &rdd->middle); in ovl_fill_lower()
159 return rdd->err; in ovl_fill_lower()
192 struct ovl_readdir_data *rdd = in ovl_fill_merge() local
195 rdd->count++; in ovl_fill_merge()
196 if (!rdd->is_merge) in ovl_fill_merge()
197 return ovl_cache_entry_add_rb(rdd, name, namelen, ino, d_type); in ovl_fill_merge()
199 return ovl_fill_lower(rdd, name, namelen, offset, ino, d_type); in ovl_fill_merge()
202 static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd) in ovl_check_whiteouts() argument
222 while (rdd->first_maybe_whiteout) { in ovl_check_whiteouts()
223 p = rdd->first_maybe_whiteout; in ovl_check_whiteouts()
224 rdd->first_maybe_whiteout = p->next_maybe_whiteout; in ovl_check_whiteouts()
240 struct ovl_readdir_data *rdd) in ovl_dir_read() argument
249 rdd->first_maybe_whiteout = NULL; in ovl_dir_read()
250 rdd->ctx.pos = 0; in ovl_dir_read()
252 rdd->count = 0; in ovl_dir_read()
253 rdd->err = 0; in ovl_dir_read()
254 err = iterate_dir(realfile, &rdd->ctx); in ovl_dir_read()
256 err = rdd->err; in ovl_dir_read()
257 } while (!err && rdd->count); in ovl_dir_read()
259 if (!err && rdd->first_maybe_whiteout) in ovl_dir_read()
260 err = ovl_check_whiteouts(realpath->dentry, rdd); in ovl_dir_read()
288 struct ovl_readdir_data rdd = { in ovl_dir_read_merged() local
300 err = ovl_dir_read(&realpath, &rdd); in ovl_dir_read_merged()
308 list_add(&rdd.middle, rdd.list); in ovl_dir_read_merged()
309 rdd.is_merge = true; in ovl_dir_read_merged()
310 err = ovl_dir_read(&realpath, &rdd); in ovl_dir_read_merged()
311 list_del(&rdd.middle); in ovl_dir_read_merged()