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

Commit 4513d899 authored by Al Viro's avatar Al Viro
Browse files

switch d_add_ci() to d_splice_alias() in "found negative" case as well



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 6c673ab3
Loading
Loading
Loading
Loading
+5 −19
Original line number Diff line number Diff line
@@ -1652,26 +1652,12 @@ struct dentry *d_add_ci(struct dentry *dentry, struct inode *inode,
	 * Negative dentry: instantiate it unless the inode is a directory and
	 * already has a dentry.
	 */
	spin_lock(&inode->i_lock);
	if (!S_ISDIR(inode->i_mode) || list_empty(&inode->i_dentry)) {
		__d_instantiate(found, inode);
		spin_unlock(&inode->i_lock);
		security_d_instantiate(found, inode);
		return found;
	}

	/*
	 * In case a directory already has a (disconnected) entry grab a
	 * reference to it, move it in place and use it.
	 */
	new = list_entry(inode->i_dentry.next, struct dentry, d_alias);
	__dget(new);
	spin_unlock(&inode->i_lock);
	security_d_instantiate(found, inode);
	d_move(new, found);
	iput(inode);
	new = d_splice_alias(inode, found);
	if (new) {
		dput(found);
	return new;
		found = new;
	}
	return found;

err_out:
	iput(inode);