unroll do_last: loop in do_filp_open()
[linux-2.6-block.git] / fs / namei.c
index bff27c08134c22ba31a2da070e71a3b1a0df6717..fc6bed7215c98620ec87b8cd6c6e6417b68b1d39 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;
 }
 
 /**