unroll do_last: loop in do_filp_open()
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 24 Dec 2009 07:05:43 +0000 (02:05 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 5 Mar 2010 14:01:16 +0000 (09:01 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namei.c

index bff27c0..fc6bed7 100644 (file)
@@ -1845,8 +1845,6 @@ reval:
        mutex_lock(&dir->d_inode->i_mutex);
        path.dentry = lookup_hash(&nd);
        path.mnt = nd.path.mnt;
-
-do_last:
        filp = do_last(&nd, &path, open_flag, flag, acc_mode, mode,
                       pathname, dir, &is_link);
        if (is_link)
@@ -1926,7 +1924,13 @@ do_link:
        path.dentry = lookup_hash(&nd);
        path.mnt = nd.path.mnt;
        __putname(nd.last.name);
-       goto do_last;
+       filp = do_last(&nd, &path, open_flag, flag, acc_mode, mode,
+                      pathname, dir, &is_link);
+       if (is_link)
+               goto do_link;
+       if (nd.root.mnt)
+               path_put(&nd.root);
+       return filp;
 }
 
 /**