Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db6ec212 authored by Al Viro's avatar Al Viro
Browse files

overlayfs: embed middle into overlay_readdir_data



same story...

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 49be4fb9
Loading
Loading
Loading
Loading
+5 −7
Original line number Original line Diff line number Diff line
@@ -38,7 +38,7 @@ struct ovl_readdir_data {
	bool is_merge;
	bool is_merge;
	struct rb_root root;
	struct rb_root root;
	struct list_head *list;
	struct list_head *list;
	struct list_head *middle;
	struct list_head middle;
	int count;
	int count;
	int err;
	int err;
};
};
@@ -139,13 +139,13 @@ static int ovl_fill_lower(struct ovl_readdir_data *rdd,


	p = ovl_cache_entry_find(&rdd->root, name, namelen);
	p = ovl_cache_entry_find(&rdd->root, name, namelen);
	if (p) {
	if (p) {
		list_move_tail(&p->l_node, rdd->middle);
		list_move_tail(&p->l_node, &rdd->middle);
	} else {
	} else {
		p = ovl_cache_entry_new(name, namelen, ino, d_type);
		p = ovl_cache_entry_new(name, namelen, ino, d_type);
		if (p == NULL)
		if (p == NULL)
			rdd->err = -ENOMEM;
			rdd->err = -ENOMEM;
		else
		else
			list_add_tail(&p->l_node, rdd->middle);
			list_add_tail(&p->l_node, &rdd->middle);
	}
	}


	return rdd->err;
	return rdd->err;
@@ -277,7 +277,6 @@ static inline int ovl_dir_read_merged(struct path *upperpath,
				      struct list_head *list)
				      struct list_head *list)
{
{
	int err;
	int err;
	struct list_head middle;
	struct ovl_readdir_data rdd = {
	struct ovl_readdir_data rdd = {
		.ctx.actor = ovl_fill_merge,
		.ctx.actor = ovl_fill_merge,
		.list = list,
		.list = list,
@@ -301,11 +300,10 @@ static inline int ovl_dir_read_merged(struct path *upperpath,
		 * Insert lowerpath entries before upperpath ones, this allows
		 * Insert lowerpath entries before upperpath ones, this allows
		 * offsets to be reasonably constant
		 * offsets to be reasonably constant
		 */
		 */
		list_add(&middle, rdd.list);
		list_add(&rdd.middle, rdd.list);
		rdd.middle = &middle;
		rdd.is_merge = true;
		rdd.is_merge = true;
		err = ovl_dir_read(lowerpath, &rdd);
		err = ovl_dir_read(lowerpath, &rdd);
		list_del(&middle);
		list_del(&rdd.middle);
	}
	}
out:
out:
	return err;
	return err;