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

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
...@@ -1943,6 +1943,16 @@ static int path_init(int dfd, const char *name, unsigned int flags, ...@@ -1943,6 +1943,16 @@ static int path_init(int dfd, const char *name, unsigned int flags,
return -ECHILD; 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) static inline int lookup_last(struct nameidata *nd, struct path *path)
{ {
if (nd->last_type == LAST_NORM && nd->last.name[nd->last.len]) 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, ...@@ -2009,13 +2019,7 @@ static int path_lookupat(int dfd, const char *name,
} }
out: out:
if (nd->base) path_cleanup(nd);
fput(nd->base);
if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
path_put(&nd->root);
nd->root.mnt = NULL;
}
return err; return err;
} }
...@@ -2349,12 +2353,7 @@ path_mountpoint(int dfd, const char *name, struct path *path, unsigned int flags ...@@ -2349,12 +2353,7 @@ path_mountpoint(int dfd, const char *name, struct path *path, unsigned int flags
put_link(&nd, &link, cookie); put_link(&nd, &link, cookie);
} }
out: out:
if (nd.base) path_cleanup(&nd);
fput(nd.base);
if (nd.root.mnt && !(nd.flags & LOOKUP_ROOT))
path_put(&nd.root);
return err; return err;
} }
...@@ -3252,10 +3251,7 @@ static struct file *path_openat(int dfd, struct filename *pathname, ...@@ -3252,10 +3251,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
put_link(nd, &link, cookie); put_link(nd, &link, cookie);
} }
out: out:
if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) path_cleanup(nd);
path_put(&nd->root);
if (nd->base)
fput(nd->base);
if (!(opened & FILE_OPENED)) { if (!(opened & FILE_OPENED)) {
BUG_ON(!error); BUG_ON(!error);
put_filp(file); put_filp(file);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment