struct ovl_readdir_data {
struct dir_context ctx;
bool is_merge;
- struct rb_root *root;
+ struct rb_root root;
struct list_head *list;
- struct list_head *middle;
+ struct list_head middle;
int count;
int err;
};
const char *name, int len, u64 ino,
unsigned int d_type)
{
- struct rb_node **newp = &rdd->root->rb_node;
+ struct rb_node **newp = &rdd->root.rb_node;
struct rb_node *parent = NULL;
struct ovl_cache_entry *p;
list_add_tail(&p->l_node, rdd->list);
rb_link_node(&p->node, parent, newp);
- rb_insert_color(&p->node, rdd->root);
+ rb_insert_color(&p->node, &rdd->root);
return 0;
}
{
struct ovl_cache_entry *p;
- p = ovl_cache_entry_find(rdd->root, name, namelen);
+ p = ovl_cache_entry_find(&rdd->root, name, namelen);
if (p) {
- list_move_tail(&p->l_node, rdd->middle);
+ list_move_tail(&p->l_node, &rdd->middle);
} else {
p = ovl_cache_entry_new(name, namelen, ino, d_type);
if (p == NULL)
rdd->err = -ENOMEM;
else
- list_add_tail(&p->l_node, rdd->middle);
+ list_add_tail(&p->l_node, &rdd->middle);
}
return rdd->err;
struct list_head *list)
{
int err;
- struct rb_root root = RB_ROOT;
- struct list_head middle;
struct ovl_readdir_data rdd = {
.ctx.actor = ovl_fill_merge,
.list = list,
- .root = &root,
+ .root = RB_ROOT,
.is_merge = false,
};
* Insert lowerpath entries before upperpath ones, this allows
* offsets to be reasonably constant
*/
- list_add(&middle, rdd.list);
- rdd.middle = &middle;
+ list_add(&rdd.middle, rdd.list);
rdd.is_merge = true;
err = ovl_dir_read(lowerpath, &rdd);
- list_del(&middle);
+ list_del(&rdd.middle);
}
out:
return err;