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

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

untangling do_lookup() - eliminate a loop.



d_lookup() *will* fail after successful d_invalidate(), if we are
holding i_mutex all along.  IOW, we don't need to jump back to
l: - we know what path will be taken there and can do that (i.e.
d_alloc_and_lookup()) directly.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 37c17e1f
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -1173,7 +1173,6 @@ retry:
		BUG_ON(nd->inode != dir);

		mutex_lock(&dir->i_mutex);
l:
		dentry = d_lookup(parent, name);
		if (likely(!dentry)) {
			dentry = d_alloc_and_lookup(parent, name, nd);
@@ -1204,9 +1203,14 @@ l:
			}
			if (!d_invalidate(dentry)) {
				dput(dentry);
				dentry = NULL;
				need_reval = 1;
				goto l;
				dentry = d_alloc_and_lookup(parent, name, nd);
				if (IS_ERR(dentry)) {
					mutex_unlock(&dir->i_mutex);
					return PTR_ERR(dentry);
				}
				/* known good */
				need_reval = 0;
				status = 1;
			}
		}
		mutex_unlock(&dir->i_mutex);