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

Commit 893b7775 authored by Al Viro's avatar Al Viro
Browse files

fs/namei.c: new helper (path_cleanup())



All callers of path_init() proceed to do the identical cleanup when
they are done with nameidata.  Don't open-code it...

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 5e53084d
Loading
Loading
Loading
Loading
+13 −17
Original line number Diff line number Diff line
@@ -1943,6 +1943,16 @@ static int path_init(int dfd, const char *name, unsigned int flags,
	return -ECHILD;
}

static void path_cleanup(struct nameidata *nd)
{
	if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
		path_put(&nd->root);
		nd->root.mnt = NULL;
	}
	if (unlikely(nd->base))
		fput(nd->base);
}

static inline int lookup_last(struct nameidata *nd, struct path *path)
{
	if (nd->last_type == LAST_NORM && nd->last.name[nd->last.len])
@@ -2009,13 +2019,7 @@ static int path_lookupat(int dfd, const char *name,
	}

out:
	if (nd->base)
		fput(nd->base);

	if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
		path_put(&nd->root);
		nd->root.mnt = NULL;
	}
	path_cleanup(nd);
	return err;
}

@@ -2349,12 +2353,7 @@ path_mountpoint(int dfd, const char *name, struct path *path, unsigned int flags
		put_link(&nd, &link, cookie);
	}
out:
	if (nd.base)
		fput(nd.base);

	if (nd.root.mnt && !(nd.flags & LOOKUP_ROOT))
		path_put(&nd.root);

	path_cleanup(&nd);
	return err;
}

@@ -3252,10 +3251,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
		put_link(nd, &link, cookie);
	}
out:
	if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT))
		path_put(&nd->root);
	if (nd->base)
		fput(nd->base);
	path_cleanup(nd);
	if (!(opened & FILE_OPENED)) {
		BUG_ON(!error);
		put_filp(file);