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(OVL_FS(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 bool 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 bool 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 == 0;
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(const struct path *path, 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, 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);
538 struct ovl_readdir_data *rdd =
541 rdd->count++;
542 p = ovl_cache_entry_new(rdd, name, namelen, ino, d_type);
544 rdd->err = -ENOMEM;
547 list_add_tail(&p->l_node, rdd->list);
558 struct ovl_readdir_data rdd = {
568 err = ovl_dir_read(&realpath, &rdd);
1040 struct ovl_readdir_data *rdd =
1048 rdd->d_type_supported = true;
1060 struct ovl_readdir_data rdd = {
1065 err = ovl_dir_read(realpath, &rdd);
1069 return rdd.d_type_supported;
1081 struct ovl_readdir_data rdd = {
1099 err = ovl_dir_read(path, &rdd);
1165 struct ovl_readdir_data rdd = {
1170 err = ovl_dir_read(&path, &rdd);