Lines Matching refs:rdd

113 static bool ovl_calc_d_ino(struct ovl_readdir_data *rdd,
117 if (!rdd->dentry)
121 if (ovl_xino_bits(rdd->dentry->d_sb))
129 if (!rdd->is_upper)
137 ovl_test_flag(OVL_IMPURE, d_inode(rdd->dentry)))
143 static struct ovl_cache_entry *ovl_cache_entry_new(struct ovl_readdir_data *rdd,
161 if (ovl_calc_d_ino(rdd, p))
163 p->is_upper = rdd->is_upper;
167 p->next_maybe_whiteout = rdd->first_maybe_whiteout;
168 rdd->first_maybe_whiteout = p;
173 static int ovl_cache_entry_add_rb(struct ovl_readdir_data *rdd,
177 struct rb_node **newp = &rdd->root->rb_node;
184 p = ovl_cache_entry_new(rdd, name, len, ino, d_type);
186 rdd->err = -ENOMEM;
190 list_add_tail(&p->l_node, rdd->list);
192 rb_insert_color(&p->node, rdd->root);
197 static int ovl_fill_lowest(struct ovl_readdir_data *rdd,
203 p = ovl_cache_entry_find(rdd->root, name, namelen);
205 list_move_tail(&p->l_node, &rdd->middle);
207 p = ovl_cache_entry_new(rdd, name, namelen, ino, d_type);
209 rdd->err = -ENOMEM;
211 list_add_tail(&p->l_node, &rdd->middle);
214 return rdd->err;
257 struct ovl_readdir_data *rdd =
260 rdd->count++;
261 if (!rdd->is_lowest)
262 return ovl_cache_entry_add_rb(rdd, name, namelen, ino, d_type);
264 return ovl_fill_lowest(rdd, name, namelen, offset, ino, d_type);
267 static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd)
274 old_cred = ovl_override_creds(rdd->dentry->d_sb);
278 while (rdd->first_maybe_whiteout) {
279 p = rdd->first_maybe_whiteout;
280 rdd->first_maybe_whiteout = p->next_maybe_whiteout;
295 struct ovl_readdir_data *rdd)
304 rdd->first_maybe_whiteout = NULL;
305 rdd->ctx.pos = 0;
307 rdd->count = 0;
308 rdd->err = 0;
309 err = iterate_dir(realfile, &rdd->ctx);
311 err = rdd->err;
312 } while (!err && rdd->count);
314 if (!err && rdd->first_maybe_whiteout && rdd->dentry)
315 err = ovl_check_whiteouts(realpath->dentry, rdd);
348 struct ovl_readdir_data rdd = {
359 rdd.is_upper = ovl_dentry_upper(dentry) == realpath.dentry;
362 err = ovl_dir_read(&realpath, &rdd);
370 list_add(&rdd.middle, rdd.list);
371 rdd.is_lowest = true;
372 err = ovl_dir_read(&realpath, &rdd);
373 list_del(&rdd.middle);
534 struct ovl_readdir_data *rdd =
537 rdd->count++;
538 p = ovl_cache_entry_new(rdd, name, namelen, ino, d_type);
540 rdd->err = -ENOMEM;
543 list_add_tail(&p->l_node, rdd->list);
554 struct ovl_readdir_data rdd = {
564 err = ovl_dir_read(&realpath, &rdd);
1032 struct ovl_readdir_data *rdd =
1040 rdd->d_type_supported = true;
1052 struct ovl_readdir_data rdd = {
1057 err = ovl_dir_read(realpath, &rdd);
1061 return rdd.d_type_supported;
1073 struct ovl_readdir_data rdd = {
1094 err = ovl_dir_read(path, &rdd);
1161 struct ovl_readdir_data rdd = {
1169 err = ovl_dir_read(&path, &rdd);