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

link_path_walk: split "return from recursive call" path



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 32cd7468
Loading
Loading
Loading
Loading
+17 −23
Original line number Diff line number Diff line
@@ -1826,23 +1826,6 @@ Walked:
				last->name = name;
				name = s;
				goto start;

back:
				name = last->name;
				if (unlikely(err)) {
					put_link(nd, &last->link, last->cookie);
					current->link_count--;
					nd->depth--;
					last--;
					goto Err;
				} else {
					err = walk_component(nd, LOOKUP_FOLLOW);
					put_link(nd, &last->link, last->cookie);
					current->link_count--;
					nd->depth--;
					last--;
					goto Walked;
				}
			}
		}
		if (!d_can_lookup(nd->path.dentry)) {
@@ -1852,13 +1835,24 @@ back:
	}
	terminate_walk(nd);
Err:
	if (likely(!nd->depth))
	while (unlikely(nd->depth)) {
		put_link(nd, &last->link, last->cookie);
		current->link_count--;
		nd->depth--;
		last--;
	}
	return err;
	goto back;
OK:
	if (likely(!nd->depth))
	if (unlikely(nd->depth)) {
		name = last->name;
		err = walk_component(nd, LOOKUP_FOLLOW);
		put_link(nd, &last->link, last->cookie);
		current->link_count--;
		nd->depth--;
		last--;
		goto Walked;
	}
	return 0;
	goto back;
}

static int path_init(int dfd, const struct filename *name, unsigned int flags,