overlayfs: embed middle into overlay_readdir_data
[sfrench/cifs-2.6.git] / fs / overlayfs / readdir.c
index 9c9872be2c72384b763a1c23ad424a57e36d85b1..910553f37acabbc22eaa21e793784d1b1a8b5af5 100644 (file)
@@ -36,9 +36,9 @@ struct ovl_dir_cache {
 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;
 };
@@ -101,7 +101,7 @@ static int ovl_cache_entry_add_rb(struct ovl_readdir_data *rdd,
                                  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;
 
@@ -126,7 +126,7 @@ static int ovl_cache_entry_add_rb(struct ovl_readdir_data *rdd,
 
        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;
 }
@@ -137,15 +137,15 @@ static int ovl_fill_lower(struct ovl_readdir_data *rdd,
 {
        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;
@@ -277,12 +277,10 @@ static inline int ovl_dir_read_merged(struct path *upperpath,
                                      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,
        };
 
@@ -302,11 +300,10 @@ static inline int ovl_dir_read_merged(struct path *upperpath,
                 * 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;